-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何成为优秀开发人员(系列) #257
Comments
如何成为优秀开发人员[1]:关于兴趣上一篇帖子已经给出了"优秀开发人员"的定义,那么现在我来说说成为优秀开发人员的头一个重要因素:兴趣。 有兴趣的开发人员和没兴趣的开发人员,差别怎么就这么大捏?这主要是因为有兴趣的人,比较有动力去学习新东西、碰到新鲜玩意喜欢去刨根问底、碰到有开发过程的困难(比如一些难调试的 bug)也显得比较有耐心、......久而久之,两种人的差别就渐渐地体现出来鸟。 用如下简单的问题就能够判断出你是否确实喜欢软件开发:
对上面这个问题,你会选择哪个工作岗位?如果你毫不犹豫(其实稍微犹豫一下也没太大关系)地选择 B,那么恭喜你,你确实对软件开发非常热衷。我建议你把"如何成为优秀的开发人员"这个系列的帖子都看完,对你会有帮助。 看到这里,可能有读者要问了:如果我原先对软件开发兴趣不大,有什么方法能让我变得对软件开发非常热衷? 关于兴趣的话题就聊到这里,下一个话题咱们来聊聊"自学能力"。 |
如何成为优秀开发人员[2]:关于自学能力文章目录 ★ 自学的重要性 通过本系列上一篇帖子,你应该已经搞清楚自己是否【确实】有兴趣从事软件开发工作。现在我们来聊一下开发人员的自学能力(终于开始介绍实质性的东东了)。 ★ 自学的重要性 为啥我把"自学能力"排到"兴趣"之后捏?因为大伙儿都明白,IT 这行知识的更新速度巨快。有很多新玩意儿在你读书的时候还没有发明出来呢?退一步讲,即使某个新技术在你上学的时候已经发明出来,你的计算机老师也未必会教你(或许他/她自己也不懂)。再退一步讲,即使你上学时的计算机老师比较牛,会把当时新出来的某个技术教给你,但是你将来工作中需要用到的新技术未必就当年老师教给你那个...... ★ 自学的主动性我把国内的开发人员按照自学的主动性不同,分为如下几类(你顺便想想自己属于哪一类): ◇ 抗拒自学者这类人不愿意自学(部分人是由于懒惰、另一些是由于抵触新事物)。当工作中要用到某项新技术而需要自学时,他/她就找若干理由推诿。我估计这类人占的比例不多,万一你正好属于这种人,那还是趁早改行,别在这个行业浪费青春了(因此也别再继续看这个帖子了)。 ◇ 被动自学者这类人平时没事不会想到去自学新东西。只有当上司逼着他去学某某技术,他才勉为其难地去学。我建议这类人也不用继续看这个系列的帖子了,找个凉快的地方呆着去吧。 ◇ 需求驱动型自学者这类人自学的动机和方向是基于需求驱动。比如因为工作中要用到 XX 框架、XX 库、XX 软件,然后就利用业余时间找资料去看。如果你属于这类人,就得考虑考虑向第 4 类人转型。 ◇ 计划型自学者这类人自学的动机和方向是基于自己的规划。【定期】看看自己的知识结构有什么缺陷、将来自己想朝什么方向发展、最近哪个新东西将来会用得上 ......然后给自己定一个学习计划。 ★ 自学的常用招数现在,咱们来聊聊和自学有关的几个【常用】招数。 ◇ 搜索引擎由于使用搜索引擎是互联网时代的必备基本功,搜索引擎的重要性我就不多废话了(千万别跟我说你还不懂得用搜索引擎啊)。 ◇ 百科类网站此处所说的"百科类"例如:中文维基百科、百度百科 ... ◇ 订阅"BBS、Mailing List、Blog"这 3 种东东的特点是具有一定的交互性,而且大都支持软件订阅。通过订阅一些专业的、针对某个领域的"BBS、Mailing List、Blog",你可以了解该领域的实时动态、了解该领域的热点话题、了解该领域的发展方向。你自己如果碰到疑难杂症,还可以在上面找人问(运气好的话还能交几个朋友)。 ◇ 看书(包括电子书和纸版书)当你要系统性地掌握某个比较复杂的技术时,首选方法是:找一本针对性的好书。由于每一个具体的领域,都有 N 本书可供选择,这时候如何取舍就非常重要。如果你选的书比较差,不但看起来吃力,甚至会把你带到沟里。这时候你就得利用搜索引擎或者专门的网站(例如豆瓣、亚马逊)来识别好书与坏书。关于如何鉴别一本书的好坏,我在帖子《如何选择 IT 技术书籍》里有深入讨论,这里就不再啰嗦了。 上述 4 个招数,如能熟练运用,从此自学无忧矣! 下一个话题,准备聊一下"设定个人发展目标和计划"。 |
如何成为优秀开发人员[3]:设定个人发展目标和计划文章目录 ★ 个人发展目标 大部分人从来没有【明确】地设定自己的发展目标,每天都是得过且过。等到几年过去了,才发现自己这些年啥也没学会,还是老样子,然后就感叹时光飞逝、岁月如梭。 ★ 个人发展目标先说说什么是【个人发展目标】。顾名思义,就是和你个人的职业发展有关的目标,包括知识、技能、工作岗位等都可以被设定为个人发展目标。(由于本博客主要关注 IT 方面,因此我会以个人的技术发展为例来说明,但是这些方法也适用于其他方面,例如个人财务目标) ★ 个人发展目标的三种类型我一般会把个人发展目标分为"长、中、短"三种类型,以此来对应不同的时间阶段。不管是哪种类型的目标,都要做到如下: ◇ 短期目标先说说短期目标。短期目标的时间跨度大约在几个星期到一个季度之间。短期目标要定得比较具体,便于自己评估目标是否达成。 ◇ 中期目标然后说说中期目标。中期目标的时间跨度大约在几个季度到 1-2 年。中期目标比短期目标更抽象,且必须是短期目标的有机结合。 ◇ 长期目标最后谈谈长期目标。长期目标同样也必须和中级目标沾边,它的层次当然更高,时间跨度大约在 5 年以上。 ★ 个人发展计划 当你把 3 种目标都设定好之后,就形成了【个人发展计划】。既然是计划,你就得在每一个阶段结束时自己总结一下,评估一下该目标的完成情况好不好,有什么收获、有什么经验教训。必要的话还需对尚未开始的后续目标进行一下调整。定期回顾还有一个好处,就是能获得一种满足感,从而有利于你坚持完整个计划。 下一个话题,打算聊一下"做正确的事"。 |
如何成为优秀开发人员[4]:做正确的事文章目录 ★ 一些不好的习惯 一般来说,优秀的开发人员往往具有较高的效率。俺这里提到的【效率】包括两方面:"做正确的事"和"正确地做事"。并且"做正确的事"比"正确地做事"更加重要。 ★ 一些不好的习惯咱们先来看一些反面教材。据相关研究机构统计,大部分人(80%以上)具有如下【不好】的工作习惯:
★ 如何克服?◇ 评估权重你仔细回想一下,自己是否有上述的坏毛病?(我相信大多数人都有)如果你有其中的几项的话,你平时会很容易被琐事纠缠,白白浪费不少时间,每天忙完了都不清楚忙些啥。那怎么改变这种局面捏?听我细细道来。 ◇ 严格按照权重执行然后,每天醒来,你都要把当天准备做的事情根据权重排好优先级,然后【严格】按照优先级顺序执行。 聊完了"做正确的事",下一个话题说一说"正确地做事"。 |
如何成为优秀开发人员[5]:正确地做事(概述)从上一个帖子"做正确的事"写完到现在已经过去 2 周了,有网友已经等不及,在评论中催我了。在此向等待本系列的网友致歉。 |
如何成为优秀开发人员[6]:正确地做事(善用工具)文章目录 ★编辑器 俗话说"工欲善其事,必先利其器",今天我们来说说和开发工具有关的话题。由于开发过程中会用到的工具多种多样,根据"二八原理",我只挑选和开发最密切相关的少数几种工具来聊一聊。 ★编辑器编辑器显然是用的最频繁的工具了(尤其是对于经常写代码的人),但是很大一部分人不善于使用编辑器。因此我先来说一下对编辑器使用的一些体会。顺便提一下,如果你连盲打都没过关,请先去学打字,再回来看这个帖子。 ◇字体对于写代码而言,字体的选择是非常重要的(看起来舒服的字体起码能保护眼睛)。首先必须选择一种【等宽】的字体(比如 FixedSys、Courier New);其次该字体必须能够【清楚地区分】如下几种容易混淆的字符,避免阅读代码的时候看错:
◇颜色 你使用的编辑器必须支持【自定义】的词法高亮(词法着色)。 ◇快捷键 熟练地使用快捷键能大大提高编辑的效率。因为你的手不需要离开键盘去操纵鼠标。而且当编辑的文本比较大时,有些编辑命令即使用鼠标操作也挺费劲(比如全选、移动到文件尾),不如快捷键方便。 ◇其它功能还有一些比较琐碎的功能,比如:代码自动缩进、自动补全、动态提示等等。最后,如果你需要经常在不同的操作系统上进行工作,那你的编辑器还必须得支持跨平台才行。 ★源代码管理工具(版本管理软件) 为了打字方便,以下简称"RCS"(Revision Control System)。 ◇不正确的提交频度 有很多新手不习惯使用 RCS,很少进行代码的提交。有些人甚至到项目快结束时还没有提交过一行代码。结果导致整个 RCS 形同虚设。 ◇提交时不写注释 很多人提交代码时不写注释,将来再想到版本历史里面找代码就犹如大海捞针般困难。 ◇不做代码基线(Baseline)、不做代码分支(Branch) 在正规的开发团队,每当有一个版本发布(Release)并交付给用户使用时,都需要在 RCS 中制作一个基线,以便于进行相应的 bug 跟踪和补丁制作。因此,诸如【做基线】之类的事情,属于整个团队的集体行为,需要由 Team Leader 牵头来搞。 ★用于调试/测试的运行辅助工具 运行辅助工具对于开发效率的影响也很大。一般来说,你自己的开发机器上要有尽可能仿真(和用户的环境相似)的运行环境,并且运行辅助工具能够有效地发现运行时的一些不正常的信息。这样有利于让 bug 在交付给用户之前【尽早暴露】出来。 限于篇幅,今天就只说这些。其它我未提及的工具,大伙儿自己可以举一反三。下一个话题,打算说说"善用自动化"。 |
如何成为优秀开发人员[7]:正确地做事(善用自动化)文章目录 ★"自动化"的重要性 上一个帖子聊了"善用工具"的话题,讲的都是如何有效利用工具来提高效率,今天说一下如何利用"自动化"来提高效率。 ★"自动化"的重要性 隐约记得 Perl 语言的创始人Larry Wall 曾经评价过程序员的三大美德,分别是:【懒惰、急躁、傲慢】。(刚才找到原文在这里)在这三大美德中,"懒惰"赫然排在第一,可见其重要(另外,马云似乎也说过类似的名言)。 ★实现"自动化"的例子◇Blog 订阅 如果你经常看俺的 Blog,但是没有使用 Feed(RSS) 订阅工具,那你就要当心了。你属于不善于利用自动化的人。 ◇调试程序 估计看俺 Blog 的同学,大部分都有过调试程序的经验。当程序行为不正常时,经常需要设置断点,然后单步跟踪代码,以便找出程序出错的源头。其实这个过程也有大量的重复劳动。 ◇自动化测试 说完了程序员的例子,再来说一下测试人员(其实我在"每日构建:流程"已经稍微提到了测试的自动化)。俺发现很多公司的测试人员,重复劳动特别严重。他们不断地重复做一些软件功能的验证操作;发现bug后通知程序员改;程序员改完,再次进行验证操作......如此循环往复。N年之后,这些测试人员的个人能力没啥提高,年龄倒大了不少。 ★人肉自动化 上面说的自动化都是技术层面的(都是靠软件实现)。为了给大伙儿扩展一下思路(免得思维定势),最后来说一下非技术的例子。 |
如何成为优秀开发人员[0]:怎样算是优秀的?
文章目录
★ 引子
★ 何为优秀?
★ 本系列的目录
★ 引子
有感于国内软件开发人员的素质普遍低下,招聘程序员往往面试了 N 个人都看不到一个顺眼的(当然这里面有很大原因是教育体制的问题)。因此考虑写一个系列,聊一下"如何成为优秀的开发人员"这个话题。
★ 何为优秀?
要想成为一个优秀的开发人员,先得搞清楚什么样的开发人员才能称得上是优秀的?要给"优秀开发人员"下一个准确的定义有一点点困难,于是我用举例来说明。
经我多年观察,对于大部分的软件开发团队都有这样的一个现象,那就是团队中的少数(一般来说,小于总人数的 20%)开发人员具有更快的开发效率、更好的程序设计、更好的代码质量、更善于 debug、更能够解决技术难题......(总之就是让 team leader 事事省心)。而且这一小撮开发人员的贡献总和可能与另外那一大撮人(大于总人数的 80%)的贡献总和不相上下(甚至可能超过)。那么,这一小撮开发人员,就是我所谓的优秀开发人员。(跑题一下,实际上这就是二八原理的一种生动体现,请看二八原理系列的帖子)
说到这里,列位看官应该明白我所指的"优秀开发人员"是什么样的了吧?(如果个别读者还是不明白,那只能说明你智商偏低,本系列帖子不适合你)
如果你觉得自己目前还不属于这一小撮之列,但是希望自己日后成为他们中的一员,你该怎么做呢?我的建议就是:仔细阅读后续的"如何成为优秀的开发人员"系列文章。我会在里面逐一介绍相关的东东,或许有助于你能力的成长。
反之,如果你自认为已经完全符合我所说的优秀开发人员,那么恭喜你,你可以直接略过该系列文章,去看点别的什么东西吧 :-)
本系列不会涉及到具体的编程语言技巧、不会涉及到具体的开发工具、不会涉及到具体的软件框架、不会涉及到任何当下时髦的概念(比如什么 OOP、FP、Pattern、SOA、REST、RIA......)。至于我具体会聊些啥,大伙看了以后就知道了。
最后补充声明一下:这里所说的优秀开发人员和开发大牛(洋文叫做 Guru)不是一回事,看完这个系列文章或许有助于你成为优秀开发人员,但并不能帮助你成为开发大牛。
★ 本系列的目录
为了方便阅读,把本系列帖子的目录整理如下:
1. 关于兴趣
2. 关于自学能力
3. 设定个人发展目标
4. 做正确的事
5. 正确地做事(概述)
6. 正确地做事(善用工具)
7. 正确地做事(善用自动化)
8. (未完待续)
The text was updated successfully, but these errors were encountered: