程序员从入门到精通

之前写了篇 《程序员、技术主管和架构师》,有读者留言说:“希望能写写前期阶段程序员的发展经历。” 收到这个问题后确实引发了我的一些回忆和思考,回想如果让我再重走一遍过来的路,在哪些方面还需要去改善呢?

另一篇文章 《程序员的成长阶梯和级别定义》 描述了程序员的成长发展阶段,这篇回答了 What,但并没有提及如何去做才能更好更快的发展成长,所以本篇借用了一个大家耳熟能详的名称模式,从一个稍微高一层的抽象维度来回答 How 的问题。

定位

还记得当初为什么选择程序员这个职业么?如今程序员所在的行业处于发展上升期,薪酬待遇整体高于传统行业,所以各类程序员培训机构如雨后春笋,流水线般的为各类只差程序员的公司批量供应,这样的批量生产似乎有点把程序员当成了工厂的工人。

而程序员的工作实际更贴近于工匠,既有创造性的工艺性工作,也有模式化的工程性工作。想清楚自己成为程序员的初衷是什么?只是为了进入一个相对高薪的行业,得到一份工资高于平均水准的工作?这样终究是走不了太远的。

很多入门程序员都是刚从学校毕业的,曾记得在吴多益(@nwind)的一篇工程师成长分享的材料上,如是说:

从小到大的教育,我们习惯性被安排:“课后作业是 X1、X2,后天必须交”,“本学期的必修课有 XX、YY,必选的选修课有 ZZ、WW”
十几年来你都是这样度过的,但现在你已经不在学校了,你要安排你的未来。

刚入职场的程序员依然保持这个习惯,等着主管安排,工作就是完成主管安排的任务吗?好吧,这只是工作的一部分。如果你每天的工作就只是完成被安排好的任务,那么你自己的成长就会非常的慢,因为主管安排任务并没有那么多的精力来考虑任务是否适合个人的成长发展。这些任务是组织发展的需要,而不一定适合个人的发展,但组织是付了薪酬来让你完成任务的,所以这是工作的必需部分。

自己才是职业生涯的管理者,想清楚自己的发展路径:远期的理想是什么?近期的规划是什么?而今日的任务和功课又是什么?今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想?

今日除了任务为什么还有功课?功课是学校里的概念,职场里没有。所以离开学校进入职场的功课都是自己给自己安排的。任务来自主管的安排,功课来自自己的安排。很多时候我们只去完成任务却从未给自己安排功课,而等着被安排和主动安排,在未来将产生巨大的差别。

一开始我们可能只有模糊的远期理想,也没那么清晰的近期规划,但一定要有足够清晰明确的今日任务和功课,即使在你的主管因为各种原因没给你安排的情况