程序员常有,优秀程序员不常有

jopen 10年前

原文  http://www.techug.com/good-programmer-lack

成为优秀的程序员是极其困难的,并且这个过程不可能一蹴而就。

我们不可能期待去种一些树,然后一夜间收获有着2000年树龄的红杉树,无论其需求有多大。

人格特点

一个人首先得是自学者来学习编程。仅仅是超过你能写出可用的小程序这个基本水平,你也需要很多年在实践中学习一切必要的技能。从没有人仅通过上 课和读书就成为了一个卓越的程序员。这通常需要无数小时的编程实践。并且和普遍流行的观点相反,计算机专业不是教你编程的,而是传授理论的。

作为程序员,你必须得有几乎无尽的毅力来不断继续尝试调错、修复和开发。坚持做到这些的人是需要具备特殊本领的,尤其是当你看起来没有取得任何进步的时候。这是非常需要具备的一项人格特点,而没有这种层次的毅力,足以使大多数没有毅力的人远离程序员这一职业。

  • 你需要精通数学和善于解决问题。编程是解决各种各样的问题的。
  • 你需要有出色的短时记忆(和长时记忆)能力,这样你才能在大脑中像变戏法一样同时处理它们,而且你还要记得一个月前你写了什么。
  • 你需要对事物间如何相互关联的以及如何设计优良的架构有着深刻的了解。如果我在这个地方改动了一点,在其他地方可能会产生什么样的破坏呢?
  • 你需要对细节进行高度关注。“接近”这一词在编程中并不适用。在哪儿忘了一个分号?程序无法通过编译!错拼了一个函数名?你的程序可能在做和你期望中完全不同的事。

不具备以上这些特点,足以淘汰多数人。

Subject Matter 学科特点

  • 你需要对数据结构和类的概念有很深入的理解,并且知道何时以及如何使用它们。
  • 你需要熟知一些已经开发出来的函数库,这样才不至于去重复造轮子。
  • 你需要知道大量的基础(和高级)的算法,同样才不会去重复造轮子。
  • 通常你需要知道工作中的硬件的极限,这样你才可以做类似于恰当管理内存并且避免耗尽内存的事情,又或者合理利用内存来消除处理器内浪费的数据传输耗时从而加快处理过程。

到这里你可以写程序了。好极了!但是你知道什么是包的结构,TCP/IP、HTML、CSS、用户接口设计,或者数据库吗?程序不是孤立地运行的。

有大量的知识你需要知道,而且它们还在不断变化!除非是你的主要关注领域,否则你不可能真正精通它。你不可能是一个“周末程序员*”。

*译者注:意为程序员在周末也需要学习。

工作/生活环境

你需要有大块不被打断的时间,这样你才不至于在编程(和学习编程)时注意力分散。很多人的工作(和家庭)环境很难提供这一点。电话又响了?好的,你又得花15分钟来重拾你的思路了。

你经常不得不在忙忙碌碌中对一些权衡利弊做出决定。当然,你可以写个程序来处理每件事情,但是一个人又会有多久才将“0”作为输入呢*?除此之外,我们跟不上计划,更重要的是立马使得程序启动并且正确运行。

*译者注:这个问题旨在说明为每件事写程序意义不大,因为事情重复出现的概率很小。

基于这些,你认为是下一种热门的编程语言也会过时并且5年之后没人会用它。现在你正在使用下一门很酷的语言,而它很有可能5年之后并不会被用到。你不得不时常关注这些事。

还有管理层面的考虑

程序员经常被当做工厂工人一样对待。没有编程才能(而且很少有商业头脑)的人经常去负责一些项目。他们认为程序员就是机器中的零件。而真相是: 程序员是工匠,要从项目中得到最好的结果,最明智的做法就是去问精通编程的人事情该如何去做!对于每个最终超出预算和落后于进度的项目,往往是逼迫程序员 去花大量没有补偿而且不被欣赏的时间去发布一款设计和测试都很槽糕的产品。

优秀的程序员意识到他们不会比蹩脚的程序员得到更多报酬,因为管理上看不出区别,在此之上还要做出额外工作来弥补低劣程序员的不足。而且优秀程序员会说出事情并且试着去优化,这经常会令想要摆脱他们的经理生畏(这种常见的就业趋势在其他文章中也被讨论到)。

够了,这些就容易明白为什么很多人对程序员这个职业感到厌倦,尤其是有大量的其他机会时。而一些甚至是一般般的程序员,只要他们擅长和人交往,就有足够的本事在其他各种各样的工作中取得成功。程序员这个行业可以很容易换行,而转进来却不同。

优秀程序员貌似不太可能随随便便去找工作

找程序员容易,找优秀程序员不容易。蹩脚的程序员可能一直在找工作。而优秀的程序员,如果公司意识到他们是优秀的,就该做所有能做的去留着他 们,所以他们可能找工作的情况就少多了。而且一旦他们出来找工作,他们就会很挑剔他们想要工作的地方,而这点也可以解释为何一些公司声称“没有什么好程序 员了-我们能招到的都是蹩足的。”

记得有个地方说过,一个优秀的程序员的价值是一般程序员的好几倍(见《 一些鲜为人知的编程真相 》),而蹩足的程序员实际上还有副作用。对于一般的和蹩足的程序员来说要成为优秀程序员真的很难(就算不是不可能)——而且对于一般的初创企业来说,作为本该专注于快速开发推出产品的他们显然不值得这份投资。