zoukankan      html  css  js  c++  java
  • 系统程序员成长计划序

    写作背景

    在经历过几个大型的,失败的项目之后,我终于明白没有什么比高素质的程序员更能决定项目的成功了,无论什么过程,什么编程语言和开发工具,离开了高 素质的程序员,什么都是白费力气。毫无疑问,人是软件开发中最重要的因素,但不是每个人都重要,不是什么样的人都重要,只有那些高素质的程序员和那些对项 目有突出贡献的人才是重要的。

    不过高素质的程序员并不多见,所以从我开始带人之际,就在思考团队成员培养的问题。我做过很多尝试,从小组内学习到整个部门一起上大课,最后又回到 对个人单独的辅导;从通过codreview做现场教育到制定过一个宏伟的培训计划,最后又回到一个朴素的培训过程。其中遇到了很多问题,开始是培训不够 系统,效果不甚理想,后来又因为计划过于”宏伟”而无法实施,直到最后行成一个朴素的,切实可行的培训方案,中间经过了好几年时间,直到去年,整个计划才 趋于完善。我把这个培训计划称为系统程序员成长计划,这就是我在这个系列中要写的。

    培训内容不是来源于某本书,毕业八年来,我坚持不断的看书,家中放了7大储物箱,有300多本不同类型的书籍,其中囊括了大部分经典的IT图书。当 然也不是全部内容都来源书本,这几年我在开源软件吸取了大量的营养,一些思想和经验在broncho项目中也有充分的发挥,可以说是理论,经验和实践的结 合。但我不尝试阐述什么高深的道理,相反我是针对应届毕业生和业余爱好者写的,目的是要让初学者进阶为一个专业的程序员。

    为什么叫 系统程序员成长计划?程序员的范围太广了, 虽然软件开发有很多相似之处,但是隔行如隔山,比如对于目前炙手可热的WEB开发,我完全是外行。想什么都讲一点,结果是什么都没有讲清楚,所以我得把培 训计划限定在我熟悉的范围之内。先定义一下系统程序员:从事操作系统内核、DBMS、GUI系统,基础函数库,应用程序框架,编译器和虚拟机等基础软件开 发的程序员。这些培训同样适用于桌面软件和智能手机软件开发,我想对其它软件开发也会有一些启发作用。

    草莓酱定律与果酱定律。第一次在咨询的奥秘中看到草莓酱定律时,我觉得非常有意思。当然这个系列也无法脱离草莓酱定律的魔法,利用这个系列中的内 容,我手把手的教了十多个同事,收到了良好的效果。当有数百个读者读这些文章时,我不敢期望有同样的效果。不过在果酱定律的鼓励下,我相信这个系列中至少 有部分内容的价值不会因为读者群的增大而消失,所以最终决定写出来。

    中心思想

    软件开发的困难在哪里?对于这个问题,不同的人有不同的答案,同一个人在不同职业阶段也会有不同的答案。作为一个系统程序员来说,我认为软件开发有两大难点:

    一是控制软件的复杂度。软件的复杂度越来越高,而人类的智力基本保持不变,如何以有限的智力去控制无限膨胀的复杂度?我经历过几个大型项目,也分析 过不少现有的开源软件,我得出一个结论:没有单个难题和技术细节是我们无法搞定的,而所有这些问题出现在一个项目中时,其呈指数增长的复杂度往往让我们束 手无策。

    二是隔离变化。用户需求在变化,应用环境在变化,新技术不断涌现,所有这些都要求软件开发能够射中移动的目标。即使是开发基础平台软件,在超过几年 时间的开发周期之后,需求的变化也是相当惊人的。需求变化并不可怕,关键在于变化对系统的影响,如果牵一发而动全身,一点小小的变化可能对系统造成致命的 影响。

    为了解决这两个问题,方法学家们几十年来不断努力,他们发明或改进软件的开发过程和设计方法。系统程序员面对的基础软件通常都是大型的复杂的软件,其通用性也要求能容纳更多变化,解决这两个问题也是系统程序员成长计划的主要目标。

    文章特色

    以引导读者思考为主。培训可以制造合格的程序员,却无法造就一流的高手。培训是一个被动的过程,我们都知道在大学里听课的效果,我不希望本系列文章 的成为单纯的培训教材,相反我们要变被动为主动,最大限度的提高学习的效果。大多数情况下,我先提出问题让读者去思考,让读者自己尝试去解决,能不能解决 这个问题不重要,重要的是在思考中提升自己。如果读者在一定时间无法找到解决问题的方法,后面会有专业程序员的参考做法(或许不是最优的)。

    以简单的例子讲述复杂的设计方法。我曾经制定一个宏伟的培训计划,结果失败了,原因是我忘记了我在走路之前也艰难的爬行过。这次我吸取了教训,用简 单的示例讲述复杂的设计方法,而且不对读者的背景太多假设。里面不会出现复杂的数据结构和算法,也不会引入大型软件来唬人。即有足够的挑战,不会让读者感 到乏味;又一切尽在掌握之中,不会因为挫折而打击积极性。

    技术能力与工作态度并重。古人说德才兼备者才是君子。同样,做一流的程序员,也要德才兼修才行。当我手把手的教别人的时候,我不但希望他能学会我讲 的知识点,更希望他能学习我的工作态度和作为程序员的道德素养。当然有些东西只可意会不可言传,未必能用文字表达出来,不管怎样这是我的初衷之一。

    读者群

    这个系列完全是针对初学者写的,初学者包括在校学生、应届毕业生和其他业余爱好者。我面试过很多应届毕业生,他们大多数都不具备编程能力,唯一的优 势就是对基本理论有一知半解的了解。本系列文章就是为他们量身定制的,经历十几个人的实践,取得令人满意的效果,大多数人在开始一行代码都写不出,到培训 结束时一般都能独立开发/维护一些几千行的小模块。本系列文章并不是金钥匙,最终学习的效果与个人的悟性和努力密切相关,但不管怎样,只要读完这些文章, 你都会有不小收获的。

    如何使用

    温伯格说过,医生的药方包括药物和服药的方法,两者缺一不可。同样的教材,不同的学习方法,效果也有很大差别。对于本系列文章的服用方法,我的建议 是,对于文中提出的问题,先自己想办法去解决,可以查资料,至少经过两三个小时的思考之后,再继续阅读,最后再按学到的方法独立写一遍,学习编程一定要多 写多练,否则效果会大打折扣。

    Enjoy it!
    (欢迎批评,鼓励和建议)

  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167607.html
Copyright © 2011-2022 走看看