> 文章列表 > 顶级程序员的成长之路2

顶级程序员的成长之路2

顶级程序员的成长之路2

如果把程序员编程水平的修炼比作游戏中的“打怪升级之旅”,那么程序员的水平就会随着不停的“打怪”而不断升级。程序员的水平有哪些等级呢?哈哈,如果人为地将程序员的水平划分为不同的等级,这是非常难的事情,也容易引起争议。不妨用程序员的不同境界来描述,那就更容易让人理解和接受一些。如图 4‑29所示,程序员的成长过程好比一层一层往上不断爬楼的过程,欲穷千里目,更上一层楼,需要坚持不懈地攀登。在之前的文章《顶级程序员的成长之路1》中,描述了顶级程序员境界的第1~5层。接下来,让我们看看如何攀登上顶级程序员境界的第6~10层。本文的内容主要借鉴了周伟明先生的专栏文章《程序员的十层楼》[86]。注意本文讨论的程序员并非指专门写代码的人员,理解为信息技术领域的人员更为合适。

 429 顶级程序员的成长之路

在之前的文章《顶级程序员的成长之路1》中讲到的新手、大侠、牛人、大牛、专家这5个层的程序员的共同点是能对已有的编程技巧或算法运用自如。这好比练功夫时,把人家的招式和内功心法都能够学会并且能够使出来。显然,仅仅做到这些是不够的,否则编程领域就不能产生新的东西、不能够快速发展了。接下来的第6层就涉及到创新的问题。

6. 第6层 学者

由专家层再上一层,就来到了学者层。这一级别的程序员,除了能够掌握已有的东西外,更重要的是能够对已有的东西进行优化或者再创造。这一级别的程序员,必须能够做出一些创造或者创新,为编程领域产生新的内容,推动编程领域向前发展。

学者级别的程序员,需要实现从无到有的创造,不仅仅要求做到活学活用,还要求有所突破。显然,能够达到这一要求的程序员是不多的。这一层的程序员能够做到有所突破、有所创新,但要成为一代宗师,开宗立派,功力还不够,还必须更上一层楼。

7. 第7层 大师 

现在来到第7层,能够爬到这一层的程序员人数不多。这一层的程序员有一个响亮的称呼:大师。什么样的人才能称得上是大师呢?如果你能够创造出像C++或Java一样的语言,或者你发明了 UML (Unified Modeling Language,统一建模语言)等,你就爬到了第7层,晋升为大师了。

要想成为大师就必须在编程的某个领域做出突出的贡献。怎么样才能够变成程序员中的大师呢?善于发现问题是关键,必须找到一个全新的、意义重大的、核心的关键问题,然后去解决它;更为重要的是,在解决问题过程中必须有原创性的、突破性的重大贡献,主要的思路和方法必须是原创的,而不是在别人已有的思路基础上进行优化或改进。

能够成为大师,必定会在编程界青史留名,受人敬仰,这也是很多程序员的毕生追求!

8. 第8层 科学家

在大师之上更上一层楼,来到第8层,处在这一层的程序员被称为科学家。这一层的程序员能发明和创造新的编程思想。他们的光辉思想将会引领未来编程技术的发展道路,为大师们指明前进的方向。

哪些程序员才能够称为科学家呢?例如,提出了程序设计的三种基本结构(顺序、选择、循环)的Edsger W. Dijkstra,数据结构与算法这门学科的重要开创者Donald E. Knuth,在伪随机数生成、密码学与通信复杂度等地方作出重要贡献的姚期智等。

9. 第9层 大科学家 

比科学家跟高一层的是第9层,处在这一层的程序员被称为大科学家。这一层的程序员往往具有深厚的理论功底以及多学科交叉发展的背景,在多个学科都能够做出卓越的贡献。

能够被称为程序员中的大科学家的人,在世界上为数不多。那么,什么样的人才能够被称为大科学家呢?比如在数理逻辑、密码学、人工智能等地方做出卓越贡献的艾伦·麦席森·图灵(Alan Mathison Turing),被誉为“现代计算机之父”、“博弈论之父”的约翰·冯·诺依曼(John von Neumann)等。

处在第9层的人已经少得可怜了,那么处在最高层第10层的程序员都会是些什么人呢?

10. 第10层 大哲

终于来到了最高的第10层。处在第10层的程序员可以被称为大哲。从第一层打怪升级到第10层,每一层PK的方式都不一样。那么在第10层,这些顶级的程序员之间PK的是什么呢?是写代码的技巧吗?是如何写操作系统吗?是如何写编译器吗?是如何提出一个新算法吗?显然,这些都不是!PK的是如何看待世界的方式,如何理解所要解决问题的本质。如何从一系列具体的问题抽象出其本质,上升到世界观或者是哲学的层面,这才是顶级程序员之间的能力差异的关键所在。这一说法理解起来似乎有点困难。举个例子,面向对象编程体现的就是程序员如何看待这个世界的方式。面向过程的编程方式是根据解决问题的流程一步一步来编写程序,关心的是每一步到底该做什么。而面向对象编程关心的则不是要解决的具体问题本身,而是考虑待解决的问题到底涉及到了哪些具体的对象,然后抽象出这些对象的共同属性和功能,并将所有对象的集合抽象成类来表示,将对象的属性用类中的变量来表示,将对象的功能用类中的函数或方法来表示。这样通过编写类来解决待解决的问题,这其中用到的一个关键技巧就是抽象,而抽象正是哲学的核心思维方式之一。

处在第10层的大哲们,关注的不再是某个具体问题或是某个学科,更多的是这个世界运行的规律或本质。因此,能够到达第10层的人很少。例如,熵是衡量世界上事物的混乱程度或有序性的概念,事物越混乱或无序,则熵越大;反之,则越小。而克劳德·艾尔伍德·香农(Claude Elwood Shannon)将熵的概念巧妙地用到了信息论中,得到了信息论中最核心的概念之一:信息熵。熵还可以用到经济学、热力学等许多领域,只要是需要衡量事物的混乱程度或有序性的领域都可以使用熵。甚至,可以用熵来衡量整个宇宙的混乱程度。熵更像是一种哲学概念,它是一种通用的思想。克劳德·艾尔伍德·香农的信息熵思想广泛地影响了信息科学、通信科学、控制科学等各个领域,他配得上大哲称号,理应处在最高的第10层。

接下来的文章将重点讨论人工智能的专业领域知识体系构建,如果想了解学习计算机视觉的方法,敬请关注本公众号的下一篇文章《如何学习计算机视觉?》。

关于人工智能中编程能力和技能训练的更多介绍,可以购买《人工智能怎么学》进一步阅读。

 图书购买方式

京东:https://item.jd.com/13395339.html

当当:http://product.dangdang.com/29469230.html

天猫:https://detail.tmall.com/item_o.htm?id=687374654836

为了让图书惠及更多的读者,为更多想学习人工智能的人提供帮助,经过向出版社申请,对图书《人工智能怎么学》的部分内容进行改编和连载。图书《人工智能怎么学》的全部内容包含了初级入门、中阶提高以及高级进阶三个级别的内容。连载的内容主要是初级入门级别,适合想对人工智能进行快速和高效入门的读者,对于已有一定的人工智能学习基础,希望进一步进阶或提高的读者,则需要购买图书《人工智能怎么学》,学习中阶提高以及高级进阶的内容。此外,对于学习人工智能感兴趣的读者,也可以加入知识星球《人工智能怎么学》,知识星球是一个构建学习社群的平台,通过加入《人工智能怎么学》的社群,你将获得更多的学习资料和课程信息。

与作者互动和了解更多信息

想跟作者一起学习人工智能和互动,你可以加入如下社群:

知识星球:https://t.zsxq.com/0aLkVg0os

QQ群:600587177

想了解更多关于人工智能学习及实践的内容,请关注如下媒体:

官方网站:https://bigdatamininglab.github.io

官方微信公众号:人工智能怎么学(可扫描下方二维码或者微信搜索“人工智能怎么学”添加关注)

CSDN:https://blog.csdn.net/audyxiao001

参考文献

  1. Robert C. Martin. 代码整洁之道(第2版)[M]. 韩磊, . 北京: 中国工信出版集团, 人民邮电出版社, 2020.
  2. Herb Sutter, Andrei Alexandrescu. C++编程规范:101条规则、准则与最佳实践[M]. 刘基诚, . 北京: 人民邮电出版社, 2016.
  3. 杨冠宝. 阿里巴巴Java开发手册[M]. 北京: 电子工业出版社, 2020.
  4. James Gosling et al. The Java Language SpecificationJava SE 8 Edition [M]. Upper Saddle River: Addison-Wesley, 2014.
  5. 老九君. C++的发展简史[EB/OL]. https://www.cnblogs.com/ljxt/p/11636342.html, 2019-10-08.
  6. 翁惠玉. C++程序设计:思想与方法(第2版)[M]. 北京: 人民邮电出版社, 2012.
  7. 谭浩强. C++程序设计(第3版)[M]. 北京: 清华大学出版社, 2015.
  8. Siddhartha Rao. Sams Teach Yourself C++ in One Hour a Day (Eighth Edition) [M]. Boston: Pearson, 2017.
  9. Bjarne Stroustrup. ProgrammingPrinciples and Practice Using C++ (Second Edition) [M]. Crawfordsville: Pearson, 2014.
  10. Bjarne Stroustrup. C++语言设计和演化[M]. 裘宗燕, . 北京: 人民邮电出版社, 2020.
  11. Stephen Prata. C++ Primer Plus(中文第6版)[M]. 张海龙 , . 北京: 人民邮电出版社, 2020.
  12. Stanley B. Lippman, Josée Lajoie, Barbara E. Moo. C++ Primer(中文第5版)[M]. 王刚 , . 北京: 电子工业出版社, 2013.
  13. Stanley B. Lippman. Essential C++(中文版)[M]. 侯捷, . 北京: 电子工业出版社, 2013.
  14. 侯捷. STL源码解析 [M]. 武汉: 华中科技大学出版社, 2015.
  15. Ivor Horton. C++标准模板库编程实战 [M]. 郭小虎 , . 北京: 清华大学出版社, 2017.
  16. Brian W. Kernighan, Rob Pike. 程序设计实践 [M]. 裘宗燕, . 北京: 机械工业出版社, 2003.
  17. Bruce Eckel. C++编程思想(两卷合订本)[M]. 刘宗田 , . 北京: 机械工业出版社, 2011.
  18. Scott Meyers. Effective C++:改善程序与设计的55个具体做法(第3版)[M]. 侯捷, . 北京: 电子工业出版社, 2011.
  19. Scott Meyers. More Effective C++35个改善编程与设计的有效方法 [M]. 侯捷, . 北京: 电子工业出版社, 2020.
  20. Scott Meyers. Effective STL50条有效使用STL的经验 [M]. 潘爱民 , . 北京: 电子工业出版社, 2013.
  21. 陆文周. Qt 5开发及实例(第4版)[M]. 北京: 电子工业出版社, 2019.
  22. 王维波. Qt 5.9 C++开发指南 [M]. 北京: 人民邮电出版社, 2018.
  23. 冯振, 郭延宁, 吕跃勇. OpenCV 4快速入门 [M]. 北京: 电子工业出版社, 2020.
  24. ghscarecrow. Java的发展历程[EB/OL]. https://blog.csdn.net/ghscarecrow/article/details/82318636, 2018-09-02.
  25. JMCui. Java的发展历程[EB/OL]. https://www.cnblogs.com/jmcui/p/11796303.html, 2019-11-07.
  26. 明日科技. Java从入门到精通(第5版)[M]. 北京: 清华大学出版社, 2019.
  27. Kathy Sierra, Bert Bates. Head First Java (Second Edition) [M]. Sebastopol: O’Reilly, 2005.
  28. Bruce Eckel. Java编程思想(第4版)[M]. 陈昊鹏, . 北京: 机械工业出版社, 2007.
  29. Cay S. Horstmann. Java核心技术 I:基础知识(第11版)[M]. 林琪 , . 北京: 机械工业出版社, 2019.
  30. Cay S. Horstmann. Java核心技术卷:高级特性(第11版)[M]. 陈昊鹏, . 北京: 机械工业出版社, 2020.
  31. Joshua Bloch. Effective Java(中文第3版)[M]. 俞黎敏, . 北京: 机械工业出版社, 2019.
  32. 周志明. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)[M]. 北京: 机械工业出版社, 2019.
  33. Brian Goetz. Java并发编程实战 [M]. 童云兰 . 北京: 机械工业出版社, 2012.
  34. Kamalmeet Singh. Java设计模式及实践 [M]. 张小坤 , . 北京: 机械工业出版社, 2013.
  35. 明日科技. Java Web从入门到精通(第3版)[M]. 北京: 清华大学出版社, 2019.
  36. 未来科技. HTML5+CSS3+JavaScript从入门到精通[M]. 北京: 中国水利水电出版社, 2017.
  37. Elisabeth Robson, Eric Freeman. Head First HTMLCSS(第2版)[M]. 徐阳 , . 北京: 中国电力出版社, 2013.
  38. Adam Freeman. HTML5权威指南 [M]. 谢廷晟 , . 北京: 人民邮电出版社, 2014.
  39. Eric A. Meyer, Estelle Weyl . CSS权威指南(第4版)[M]. 安道, . 北京: 中国电力出版社, 2019.
  40. David Flanagan. JavaScript权威指南(第7版)[M]. 李松峰, . 北京: 机械工业出版社, 2021.
  41. 许令波. 深入分析Java Web技术内幕(修订版)[M]. 北京: 电子工业出版社, 2014.
  42. Nicholas S. Williams. Java Web高级编程 [M]. 王肖峰, . 北京: 清华大学出版社, 2015.
  43. 孙卫琴. TomcatJava Web开发技术详解(第3版)[M]. 北京: 电子工业出版社, 2019.
  44. 郭霖. 第一行代码Android(第3版)[M]. 北京: 人民邮电出版社, 2020.
  45. 欧阳燊. Android Studio开发实战:从零基础到App上线(第2版)[M]. 北京: 清华大学出版社, 2018.
  46. Dmitry Jemerov, Svetlana Isakova. Kotlin实战 [M]. 覃宇 , . 北京: 电子工业出版社, 2017.
  47. Kristin Marsicano, Brian Gardner, Bill Phillips, Chris Stewart. Android编程权威指南(第4版)[M]. 王明发, . 北京: 中国工信出版集团, 人民邮电出版社, 2021.
  48. 刘望舒. Android进阶之光(第2版)[M]. 北京: 电子工业出版社, 2021.
  49. 邓凡平. 深入理解Android: Java虚拟机ART [M]. 北京: 机械工业出版社, 2019.
  50. 任玉刚. Android开发艺术探索[M]. 北京: 电子工业出版社, 2015.
  51. 林学森. 深入理解Android内核设计思想(上、下册)(第2版)[M]. 北京: 人民邮电出版社, 2017.
  52. 何红辉, 关爱民. Android 源码设计模式解析与实战(第2版)[M]. 北京: 人民邮电出版社, 2017.
  53. Christian Keur, Aaron Hillegass. iOS编程(第6版)[M]. 王风全, . 武汉: 华中科技大学出版社, 2019.
  54. 张益珲. Swift 4从零到精通iOS开发[M]. 北京: 清华大学出版社, 2019.
  55. Aaron Hillegass, Mikey Ward. Objective-C编程(第2版)[M]. 王蕾 , . 武汉: 华中科技大学出版社, 2015.
  56. Matthew Mathias, John Gallagher. Swift编程权威指南(第2版)[M]. 陈晓亮, . 北京: 人民邮电出版社, 2017.
  57. Kazuki Sakamoto, Tomohiko Furumoto. Objective-C高级编程:iOSOS X多线程和内存管理[M]. 黎华, . 北京: 人民邮电出版社, 2013.
  58. Erica Sadun. iOS Auto Layout开发秘籍(第2版)[M]. 孟立标, . 北京: 清华大学出版社, 2015.
  59. 珲少. iOS性能优化实战[M]. 北京: 电子工业出版社, 2019.
  60. 罗巍. iOS应用逆向与安全之道[M]. 北京: 机械工业出版社, 2020.
  61. Gaurav Vaish. 高性能iOS应用开发[M]. 梁士兴 , . 北京: 人民邮电出版社, 2017.
  62. 刘浩. MATLAB R2020a完全自学一本通 [M]. 北京: 电子工业出版社, 2020.
  63. 天工在线. MATLAB 2020从入门到精通 [M]. 北京: 中国水利水电出版社, 2020.
  64. 苗志宏, 马金强. MATLAB面向对象程序设计[M]. 北京: 电子工业出版社, 2014.
  65. 徐潇, 李远 . MATLAB面向对象编程——从入门到设计模式(第2版)[M]. 北京: 北京航空航天大学出版社, 2017.
  66. 王文峰 . MATLAB计算机视觉与机器认知[M]. 北京: 北京航空航天大学, 2017.
  67. 杨淑莹, 郑清春. 模式识别与智能计算——MATLAB技术实现(第4版)[M]. 北京: 电子工业版社, 2019.
  68. Eric Matthes. Python编程:从入门到实践(第2版)[M]. 袁国忠, . 北京: 人民邮电出版社, 2020.
  69. Magnus Lie Hetland. Python基础教程(第3版)[M]. 袁国忠, . 北京: 人民邮电出版社, 2018.
  70. Luciano Ramalho. 流畅的Python [M]. 安道 , . 北京: 人民邮电出版社, 2017.
  71. Brett Slatkin. Effective Python:编写高质量Python代码的90个有效方法(第2版)[M]. 爱飞翔, . 北京: 机械工业出版社, 2021.
  72. Jan Erik Solem. Python计算机视觉编程[M]. 朱文涛 , . 北京: 人民邮电出版社, 2014.
  73. Andreas C. Müller. Python机器学习基础教程[M]. 张亮, . 北京: 人民邮电出版社, 2018.
  74. 魏坤. Julia语言程序设计[M]. 北京: 机械工业出版社, 2018.
  75. 郝林. Julia编程基础(第2版)[M]. 北京: 人民邮电出版社, 2020.
  76. Ben Lauwens, Allen B. Downey. Think Julia [M]. Sebastopol: O’Reilly, 2019.
  77. Jalem Raj Rohit. Julia Cookbook [M]. Birmingham: Packt Publishing, 2018.
  78. Zacharias Voulgaris. Julia数据科学应用 [M]. 陈光欣, . 北京: 人民邮电出版社, 2018.
  79. 朱红庆. Julia机器学习核心编程:人人可用的高性能科学计算[M]. 北京: 电子工业出版社, 2019.
  80. Norman Matloff. R语言编程艺术[M]. 陈堰平, . 北京: 机械工业出版社, 2013.
  81. Andy Nicholls, Richard Pugh, Aimee Gott. R语言入门经典[M]. 姜佑 , . 北京: 人民邮电出版社, 2018.
  82. Robert I. Kabacoff. R语言实战(第2版)[M]. 王小宁 , . 北京: 人民邮电出版社, 2016.
  83. Hadley Wickham. 高级R语言编程指南[M]. 潘文捷 , . 北京: 机械工业出版社, 2020.
  84. Brett Lantz. 机器学习与R语言(第2版)[M]. 李洪成 , . 北京: 机械工业出版社, 2017.
  85. 程乾, 刘永, 高博. R语言数据分析与可视化从入门到精通[M]. 北京: 北京大学出版社, 2020.
  86. 周伟明.程序员的十层楼(一、二、三)[J]. 程序员, 2009(6):134-136; 2009(7):118-120; 2009(8):134-136.

注:本文版权归作者个人所有,如需转载请联系作者,未经授权不得转载。

火车头插件