程序员在职业生涯中如何规划自己?
创建自己的总体计划
我们应该创建一个总体计划,最大限度地发扬长避短,然后把这个总体计划应用于自己必须解决的每个问题中。
在多年的教学生涯中,我看到过很多能力不同的学生。我不能简单地说有些程序员比其他程序员更有能力,虽然事实可能确实如此。即使是在相同能力水平的程序员之间,也存在很大的区别。我经常不可思议地看到以前学习得很挣扎的学生很快精通了某种特定的技巧,或者在其他领域天赋卓然的学生在一个新领域却暴露出明显的弱点。就像不存在两个完全相同的指纹一样,没有两个大脑是完全相同的,对于一个人来说非常容易的一堂课对于另一个人来说可能非常困难。
假设读者是一位美式足球教练,正在制订下一场比赛的进攻计划。由于伤病的原因,无法确定两名四分卫谁能够首发登场。这两名四分卫都具有高度的职业素养,但是和所有人一样,他们也有各自的优点和缺点。为一位四分卫所制订的完美比赛计划套用于另一位四分卫身上却可能带来糟糕的结果。
在创建总体计划时,教练需要根据队中的四分卫进行排兵布阵。为了实现最大的获胜机率,需要制订一个计划,既要认识到自己的优势,也要明白自己的弱点。
扬长避短
在制订自己的总体计划时,关键的步骤是认识到自己的优势和弱点。这并不困难,但它需要花费精力并且需要一个公平的自我评估。为了从错误中获益,不仅需要在程序中所出现的地方修正它们,还必须对它们进行关注,至少是在大脑里,最好是记录在文档中。通过这种方式,可以发现在其他情况下可能错失的行为模式。
下面将描述两种不同类型的弱点:编码弱点和设计弱点。编码弱点是指在实际编写代码时可能反复犯错的领域。例如,许多程序员在编写循环的时候,经常会出现迭代次数多1次或少1次的情况。这个错误称为栅栏柱错误,它取材于一个古老的难题,就是建造一条总长50m的栅栏并且每根栅柱之间相隔10英尺,一共需要几根柱子?大多数人的第一反应是5,但是如果仔细考虑,答案应该是6,如图8.1所示。
大多数编码弱点出现在由于程序员编写代码过于迅速或者缺乏充分准备而导致语义错误的情况下。反之,设计弱点在问题的解决或设计阶段经常出现。例如,我们可能不知道该怎么入手或者不知道怎么把以前所编写的子程序集成到一个完整的解决方案中。
像程序员一样思考(修订版)