到底是什么决定了程序员的编程水平

让我们先从知乎著名程序员萧井陌的这个回答开始:

入门之后的新手,喜欢谈算法,这是什么什么问题,用什么什么解。
比如异或交换变量,不用四则运算实现加减法,这个问题本质是位运算,那个应该是 blahblah…… 幼稚。
做了几年后(有的甚至做了很多年都这样),执着于谈技术,你做了什么项目多?你会什么技术?
比如要约人去 GitHub 写 tokenizer、数据库什么的
比如我在这个回答中的大部分问题,可以说是愚蠢之极。如何面试 iOS 工程师? - 萧井陌的回答
技术都是可以、甚至可以轻松学会的,并不是什么问题
一个人的思想、性格、对世界的认知、对问题的看法、决策的取舍,这些才是对程序员来说最有意义的。

所以到底怎样算是编程水平高呢?
我能裸写快速排序,你不能裸写快速排序,我的编程水平比你高吗?
如果你能写出一个编译器,我写不出来,你的编程水平比我高吗?

所以这个问题首先要追溯到一个更基本的问题上:什么是“编程水平”

为了避免混乱和争议,我们需要从最基础的概念开始构思论述。
就像几何学里一个理论体系总要有几条公里一样,这里我也要定义公理:

一个程序员的编程水平定义为他解决问题的能力

那么什么决定了一个程序员解决问题的能力呢?

这个就有很多了,首先是程序员掌握的编程技能,让我们以编写Golang高并发服务器程序为例,一个最胜任的程序员肯定是非常熟练Golang语言和服务器开发的程序员。但如果一个程序员不懂Golang而熟悉服务器开发,他的学习能力很强,3天看完了Golang上手干活一样做的很好,那么他的编程水平也可以说不错。再假设一个极端情况,一个Windows C#桌面应用程序员,他为了开发高并发服务器,用几天情况看完了Golang,又花了一周看完了服务器编程,上手干活一样做的很好,那他编程水平也是很不错的。(他十之八九是个天才)

所以解决问题的能力至少取决于两点:首先是他习得的技能,其次是他的学习能力。

以上两点是毫无争议的。公司招聘程序员也会多多少少遵循这个标准(如果你不会xxx...那你学习能力很强也可以。)但这不是我写这篇文章的理由。因为事情还没有这么简单。

让我们再看几个例子:

  1. 有一个程序员他很聪明,学习能力很强,但他为人浮躁,学什么东西都是浅尝辄止,导致他无论写什么程序,做什么方面的开发,做到最后,困难的问题他解决不掉。他从事编程工作好多年了,做过好多方向,但每个都不精通。那么他的编程水平,按照上面的定义,是不太高的。
  2. 有一个程序员他很聪明,学习能力很强,但他对编程不感兴趣,没有主动学习的欲望,导致他看到困难的问题就头疼,他没办法解决困难的问题,于是他的编程水平也不太好。
  3. 有一个程序员他很聪明,学习能力很强,编程技能也很好,但是他自己的个人项目做得很好,对待工作却很不用心,遇到困难问题就推给别人。他在工作中没办法解决困难的问题,那么按照上面的定义,也可以把他定义为“编程水平不行”。(这个就有点意思了)
  4. 有个程序员很聪明,学习能力很强,但性格太古怪,导致他的同事都无法和他合作,于是他也无法解决太困难的问题,因为太困难的问题都需要协作解决。于是他的编程水平,也是不行的!(???)
  5. 有一个程序员他不是很聪明,编程技能也还凑合,但是他十分擅长检索信息,每次遇到问题都能从网上找到解决方案,凭借这个本事他能解决各种奇怪的困难的问题,于是他的编程水平其实算还不错的。
    ......

我们可以看到,以上1、2、3、4、5中决定程序员编程水平的,分别是意志力、兴趣、工作态度、协作能力、检索信息的能力。而这和编程技能掌握程度、学习能力是毫无关系的。如果说一个程序员的编程技能是“硬”实力,以上能力,更偏向于“软”实力。这些能力,在实际工作中,也是不可忽视的一环。一个最典型的例子就是我们大名鼎鼎的王垠同学。他虽然十分聪明(考上康奈尔,进入Google工作),但目前为止还没有看到他有什么特别出色的作品或者工作。按照上述定义,他的编程水平也不行,而这个原因是多方面的,比如他对工作不用心,他无法和别人合作等等。还有四大魔道编程天王的胡正(个人网站)也是同理。

所以程序员编程水平不仅仅和编程有关,也是和他的个人素质有关的。包括他的性格,认知,对世界的看法等等。而不仅仅是学习能力和编程技能的掌握程度。

最后的结论是:程序员的编程水平,取决于他的个人素质。

好奇怪的结论啊,但看上去却十分合理。

EOF.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ** 编程技能层次**编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。 0段—非程序员 初学编程者...
    Bobby0322阅读 5,993评论 2 30
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 13,841评论 6 244
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,409评论 25 709
  • 周六,离开拥挤的郑州,到中牟和原来的朋友聚会。从西安回到郑州有1年了,习惯了原来的慢生活,始终无法喜欢郑州的噪杂。...
    S饭特稀阅读 1,310评论 0 1
  • 1引子 2016年的元旦,我带着先生和儿子回到了湖北省天门市拖市镇横河村老家,又见到了久违的拖市二中,看到它还在,...
    胡梅阅读 5,075评论 0 3

友情链接更多精彩内容