理解专业程序员 学习笔记 之一
前言
所谓"prefessional", 是指在特定的活动领域里, 具备了不起的技艺或经验.
专业人士——无论是医生, 运动员, 还是程序员——进行自我考察, 不是为了惩罚自己, 而是为了获得自我提升.
第一章 对专业人士来说, 有哪些重要问题
1.1 成为一个程序员要花多久时间
现在的世界常常有这样一个误解: 任何人, 只要经过短期而速成的培训, 就能成为一个专业程序员.
造成这种误解主要有两个原因:
- 一是在软件行业内部, 处在管理层的经理本身不写程序, 或者说不屑于写程序, 这导致人们以为程序员, 就跟侍者或保洁员一样, 是一份门槛低而且不体面的工作.
- 二是教育和培训体系也在向人们灌输这样的想法: "编程并没有什么复杂的, 只要练习几个星期, 哪怕是门外汉也能成为编程专家!"
但实际上, 要造就一个专业的程序员, 是要付出艰苦的努力的. (专业的)程序员, 跟医生或运动员一样, 是稀有的专业人士, 因为他们必须经过长期不懈的历练, 才能成长为一名合格的从业人员. 所以, 要回答"成为一个程序员要花多久时间", 应该说答案是: "五年不嫌少, 十年不嫌多." 软件从业者要在这个行业中长时间地摸爬滚打, 并且特别注意不断提升自己的能力和技艺, 才能成长为一名真正的专业人士.
1.2 残障人士能成为成功的程序员吗
要成为一个成功的程序员, 最最关键的决定因素是什么? 回答是: 内在动力. 成功在于精神, 当一个程序员决定向整个世界证明她/他会是一个优秀而专业的程序员时, 她/他的努力就不仅能弥补各种先天和后天的不足, 甚至还会大大超出, 令她/他成为一名真正的专业程序员.
管理层要雇佣到专业程序员, 最最关键的考察点是甄别出
- 她/他是否具有成为专业程序员的内驱力
在这个考察点之后, 才谈得上去考察以下一些不那么紧要的因素:
- 智力水平
- 教育背景
- 工作经历
- 健康状况
- 性别, 人种, 籍贯, 宗教信仰
- 长相
- ...
1.3 专业程序员有哪些范式
专业程序员, 归根到底应该是为其他人解决问题的人——无论问题有多"麻烦". 只有坦然接受了这一点, 程序员才不会逃避那些"麻烦的"问题, 而是敢于直面"麻烦", 并开动脑筋解决问题.
1.4 一个专业人员能从这个职位中感到快乐吗
程序员这个职位其实不止挣钱和升职那么简单. 程序员开发出的软件要影响世界上的很多人, 因此一个专业的程序员必须具有"公共责任"意识, 也就是说, 必须具有她/他自己的价值取向, 不论这种价值取向对别人来说是正确的还是错误的.
如果程序员认同她/他所在企业的价值取向, 那么程序员就能从这份职业中感受到快乐. 如果无法认同, 那么"离职并寻找一家被认同的新企业"就是最佳选择.
程序员可以扪心自问如下的问题, 来判断当前为之工作的企业究竟是否值得为之工作:
- 这家企业的目标与我的个人信条是否一致?
- 我在企业中的职责清晰吗? 我是否能够认同它?
- 管理层是否能为我的专业发展提供足够的时间和资源? 这种时间和资源的提供, 究竟是偶尔如此, 还是一种明确的、长期的承诺?
- 管理层是不是故意促使我和同事们进行竞争, 并以此对我进行评估? 还是鼓励我与同事相互协作, 帮助他人完全发挥自己的潜能, 并且也鼓励别人也这样对待我?
- 我理解别人交给我做的差使吗? 我理解别人为什么让我做这样的事情吗? 企业是否鼓励员工理解自己的任务?
- 我和其他人的工作是否都能够公开让同级评审? 我是否希望参与评审别人和被人评审?
- 我对这家企业、这个项目投入的程度, 能否达到人们的期望?
1.4 没耐心的心理分析师: 一个寓言
当你发现自己总在专业工作中为一些小问题恼火, 也许这是因为你本身就不喜欢或不适合这份专业工作. 找到自己喜欢的和适合的行当, 爱一行, 干一行!
第二章 专业程序员是怎样达到专业性的
2.1 不能把程序员的教育完全托付给计算机: 他们太珍贵了
程序员的培训课程应该有两位老师: 一位是计算机, 它的作用是在赏入门阶段教授编程语法和如何创建程序, 另一位则是培训课程的真人教师, 她/他负责教授如何探索问题的解决方案、算法、设计、程序结构、编程技巧和代码风格. 而真人教师的授业方式, 应该是一种审议式、讨论式的教学, 让学员在大家面前拿出各自的解决方案, 这样使全体学员都有机会见识到与自己所不同的解决方案, 通过交流和彼此参照, 全体学员都能快速而深刻地学习.
可是当前的情况却是: 培训课程的真人教师形同虚设, 她/他并不讲授她/他应该讲授的那部分知识, 而只是把本应由计算机讲授的那部分知识再重复讲授一遍. 这样做的危害不仅在于浪费了学员的时间和金钱, 更在于学员在这样的培训课程中并没有得到思维上的训练, 而只是舍本逐末式地关注于特定语言和编译器的语法和拼写, 因此按这种方式培训出来的学员被灌输进了一种错误的观念: "正确的程序不需要慎密的思考和周全的设计, 只要编译能通过, 哪怕程序代码是东拼西凑堆砌起来的, 也没任何问题."
2.2 训练随机应变的能力
业余编程爱好者与专业程序员的一个关键区别是: 专业程序员能够随机应变. 专业程序员不会囿于自己熟悉的编程语言和编程范式, 而是能灵活地在多种语言和范式之间切换, 选择最适合于特定问题和特定场景的工具和策略.
要实现由业余编程爱好者向专业程序员的转变, 需要我们有意识地训练自己随机应变的能力, 尤其是敢于尝试新的编程语言和新的编程范式, 这样才能拓宽思路, 使头脑变得灵活.
第三章 为什么程序员如此做事
3.1 个人化学和健康身体
成功和幸福的真正秘诀, 只需寥寥数语就能说清楚——健康. 一个人要是足够健康, 不用其他办法, 健康本身就"制造"幸福. 反之也成立: 身体要是不健康, 其他"成功秘诀"都不会管用.
很多程序员, 都养成了为工作牺牲身体的习惯. 他们过于敬业, 以至于损害了健康——而健康才是"个人魅力"的实质.
软件业的经理们应该采取一些办法, 在团队内部培养起一种要求员工重视健康的良性的氛围. 经理们可以采纳如下的建议, 为员工们做出榜样:
- 在大多数时候按时上下班, 不加班.
- 拿出时间好好吃饭, 不要弄出一个不吃/匆忙吃饭的坏榜样.
- 永远不奖励那些在额外时间工作、忽略吃饭的人; 相反, 奖励那些井然有序, 在正常工作时间好好完成正常工作的人.
"为工作而工作", "为了别人看着表现好而工作", 我们很容易落入这样的俗套中. 但如果你时时提醒自己身体才是头号工作装备, 你就能打破这些俗套. 如果身体垮了, 即使神兵天降也没法让它运转如新.
3.2 为了应变, 程序员需要什么
关于"变化", 有如下的两条重要定律:
第一惯性定律 | 环境变化, 迫使人们改变. 唯有此时人们才会改变. |
第二惯性定律 | 如果被迫变化时, 人们总是挣扎着保住对他们最重要的东西, 牺牲不那么重要的东西. |
基于这样的定律, 我们看到: 想控制变化进程的人, 不要和系统保护自身的努力正面较劲, 而应该把这种"不愿变化"的决心向预想的变化方向上"引导", 让系统自己去为保护它认为最有价值的东西而奋斗, 这样就能成功地控制变化进程.
下面我们把第一惯性定律和第二惯性定律投射于软件业, 看看它们对程序员意味着什么.
第一惯性定律 | 软件业的环境发生着变化, 迫使程序员必须提高编程生产率. 这些环境的变化包括: (1) 计算机硬件的速度和容量不断提高. (2) 新的编程范式和编程语言不断涌现. (3) 新的软件管理思想和流程不断出现. |
第二惯性定律 | 程序员被迫提高其编程生产率, 但他们也试图保留下对他们最珍贵的东西, 即:
|
所以, 一个聪明的软件团队经理, 如果想要激励程序员采用新方法, 从而获得更高的工作效率, 那么就应该把这种尝试向着增强程序员的归属感、被尊重感和自我实现感的方向上引导, 这样, 手下的程序员就会积级主动地去推动新方法的使用.
软件团队经理还应该明白另一个重要的原则, 我们称其为"福特公式":
福特公式 | 如果你想让人们改变他们正在做的, 那么你就应该确保他们所作所为的结果都会反馈给他们自己. |
福特公式应用于软件业, 就是:
福特公式 | 如果把人们的工作结果反馈给他们, 他们就能知道哪些是好的, 哪些是坏的, 这样他们就能确保在变化中增加好的, 减少坏的. |
因此, 软件团队经理应该做到的就是下面两点:
(1) 确保把程序员的工作结果反馈给他们本人.
(2) 确保这样的反馈信息是真实可信的.
如果软件团队经理做到了这两点, 那么她/他就是一个优秀的团队经理. 任何达到以上两个目的的工作手段和方法, 都是值得鼓励和提倡的. 而在这些工作手段和方法中, "程序员之间的同级技术评审"就是一个最常用和最有效的方法. 通过同级技术评审, 程序员的工作成果和技术可以被反馈给全体程序员, 同时技术知识也得以汇集, 这胜过了任何单个人的贡献. 这种反馈信息是由同级程序员给出的, 因此是切中要害、令人信服的. 值得注意的是, 在同级技术评审中, 团队经理并不直接给出反馈信息, 她/他只是负责去安排这样的反馈, 并使之正规化、可靠化.
3.3 狎弄规则
程序员喜欢在规则明确的环境下工作. 如果程序员发现工作环境中根本就没有规则, 或者规则能够被随意改变, 程序员就会对此产生敌意, 并退出游戏.
但是, "规则明确"并不代表规则不能发生变化. 规则是可以随着认识的深入而改变的, 只要这种改变是经过深思熟虑的, 并且改变后的规则确实得到贯彻.
所以, 软件经理的一项重要职责, 是保证建立起规则明确的并众所周知的工作环境, 这样手下的程序员就会高高兴兴地照章行事.
3.4 我要的只是一点儿尊重而已
如果你在软件为中干得不错, 你很可能将拥有较高的职位和较好的收入. 这时, 你内心的自大感也许会抬头. 记住: 别把他人对你的尊重当成理所应当, 也别认为自己高人一等. 无论到达怎样的高度, 都要刻提醒自己只不过是平凡众生中的一员. 你表现得盛气凌人不可一世, 那么你很可能就已经出现在别人心里的"黑名单"上了.
3.4 蝴蝶和毛茛: 一个寓言
让一心求产量的人理解那些一心求质量的人, 近乎不可能——反之亦然.