程序员的编程能力应该如何进阶?
看了这篇文章保证你能找到从入门到精通的路。作为干了多年程序员、架构、PM、到 CTO 的人,相信有足够的经验给你参考。
我们先谈一下一个优秀的程序员应该具备那些品质与能力吧,只有这样才有目标嘛。要不然就像是一个无所事从方向的车在乱开,尽管你可能有足够的目的,但是总达不到终点。
一个优秀的程序员的状态
- 对于计算机系统有非常清晰的认知(CPU、MEM、OS、DISK/IO、Network),这个认知会影响到他对计算机负载的认知,对网络负载的认知,对于程序及 DB 的负载的认知。也就是他能清晰的知道怎么平衡一个系统中的每个部分。
- 对于算法有清晰的认知,可以十分理性的平衡人与硬件的投入。有自己非常强的过人之处,所谓的金字塔结构的知识。
- 对于技术,有自己相对独立的认知,可以知道自己与业界的发展方向。不会不断的追逐什么 C 到 C++,C++到 Java,Java 到 Scala,相反,他会非常清晰的知道 什么是主流与什么是自己需要。
- 坚持学习,如果一个优秀的程序员放弃了学习,那就是他开始离开这个技术界的开始。
所以我觉得王国维的做学问的三境界是最最能体现的。
所以我们用了下面几个阶段表述一下。
技术入门打牢基础
在我的评价体系里,有很大一部分程序员可能会在这个境界下游离,因为编程这事对他们来讲只是个技术活或者说糊口的工作,没有足够强的意愿去认真专研它。去认真的想如果理解这个复杂的 CS 技术与科学体系。
还是继续谈这个体系的认知吧。如果说望尽天涯路。天涯路不尽,你能看到的技术也是无穷尽的。在整个 CS 技术体系里,最直接的表现就是多与杂。
编程语言上:Python、Java、C#、JavaScript、Ruby、Go、Swift、Kotlin、JavaScript、Object-C、C++、Lua 等等
在分类上:前后端、微服务、CI/CD、面向对象、面向过程、面向切片、Test Driven、Design Driven、
在设计方法上:瀑布、V字型、螺旋迭代、敏捷
这些在本质上都是在说 CS 整个领域的知识的广与杂,你想在任何一个方向深入下去可能都需要你花足够的精力。所以要想望尽天涯路,你需要的第一件事是建立起你对 CS 整个体系的技术认知。
https://www.csinsf.org/what-is-cs.html
如果你想有一个直观的印象,那就试着去扩展这张图。你相信任何一个方向都可以生成出足够的分支,构成一个新的图。
如此下去,你会看到一条无尽的路的。比如一门极偏的 AI 哲学,也可以是下面这样的。
https://gogeometry.com/software/ai/artificial-intelligence-mind-map-philosophy.html
这样的状态,你要怎么走下去?
总结一下就是,开拓视野,同时坚定的打好基础、同时确认自己的未来方向。也就是千万条路要走,但是可以选一条走下去。同时要锻炼好自己的基础,保证自己能走完。
所以我建议在这一个阶段要学好下面这些东西。
- 多读几遍《代码大全》、《程序员的 Readme》
- 计算机基础知识:也就是 《深入理解计算机系统》这本书的内容,你要有一个不错的理解。
- 掌握一门编程语言:建议 Python 与 Java,同时必须熟悉 C 语言或者 C++。因为C/C++能让你知道 怎么使用 计算机的基础的信息:CPU、内存、文件、函数、指令。而 Python 或者 Java 已经是现在应用语言的典型代表了。你用它们,能够了解大量的应用案例,还有大量的应用库与算法,更重要的是用它们都可以快速的解决问题,完成你自己的任务目标。
- 不要放弃算法:《算法导论》可能是很多人推荐或者不推荐的,但是你学会它,就相当于你掌握了一门算法的通天之路的基础,我想这个结论是对的。
- 熟悉一个数据库,推荐 Postgresql,读本书《Postgresql 权威指南》
- 熟悉 TCP/IP 及 HTTP 相关的网络知识《计算机网络 自顶向下的方法》
- 大概懂得 HTML、JavaScript、CSS 三者的关系还有 Ajax 是怎么回事。
- 知道些 Android 与 IOS 的开发。
- 部署个人工智能应用
如果是这样的基础条件下,你可以认真的考虑自己对什么感兴趣,自己的未来要做什么了。也就是你要找好自己的未来的路。同时要相信,自己有了上面的基础,任何一个方向都足以走到足够的远。
如果你有个本科的 CS相关的知识,那差不多就是第一境界。而如果你是转到这个方向来的,那我建议你看一下 CS 的重点知识,有一个非常好的了解,才有助于你在这方面更好的发展与提高。
技术上自己的路
这一条路可能是你要坚持走下去的,至少要走到足够的远,才能达到的。也可能正是应了,衣带渐宽终不悔,为伊消得人憔悴!因为你深入每一个体系,都会发现现在的技术太复杂了。要有自己的核心目标,同时还要兼顾体系里技术的广度。举个例子:JavaSDK 的核心 API 可能是 200 多个类,但是 JDK 本身的 API 涉及到的类可能已经近万个了吧。下面是一个很久前的统计表,但是还是能看出这个规模扩张的速度的。
不幸的是这一条路我走了很多条,还是谈一下我的学习路径吧。
上学学了 C 语言、看了汇编,然后呢学了 Java。
工作就很幸运,第一个项目是做代码静态与动态检查工具,类似于编译器。
然后做通信的Gateway
再然后做 Web 的项目
开始创业又做人工智能相关的项目
所以,基本上是非常好的做了CS 的基础研究与学习,然后了解了各种网络相关的内容、加密的算法,又对 Web 的发展有了一个不错的了解。正好在潮头,开始做人工智能相关的项目。
你看,不过好在一直都在坚持学习,每天都在看书,写代码,阅读论文。
坚持下去,感觉自己是做到了在 CS 领域的衣带渐宽,终不悔。但是呢,身材确实是一直在宽。严格来讲我走的这条路并不是自己完全喜欢的,不过很幸运的就是自己走了一个感觉还不讨厌的路。现在做人工智能可能是我自己选的最终方向。
所以,如果一开始就选择这条路走下去,我觉得是最好的,也是最舒服的,最容易坚持下来的路。
期望你选择走一条路的时候,能够坚持下去。
我想可以有这么几个方向:
- 人工智能
- 后端开发
- 前端开发
- 数据库 DBA 与数据库研发
- IOS 开发与未来的空间计算的应用
- Android 开发
- 游戏开发/引擎与应用
无论走那一条路,我想你都要坚持读书、坚持做项目,只有不断的给自己提升,才能。这里可能需要阅读大量的设计类的书籍,同时要考虑阅读一些哲学。
推荐一下吧。
《人人都是架构师》、《人月神话》、《HeadFirst 设计模式》、《编译原理》、《Designing Data-Intensive Applications》、《大问题 简明哲学导论》、《人类简史》
其实是每个人的认知都是有偏见的。
金字塔尖
这个境界可能到了就是到了,因为在这个世界,能够坚持走到一定境界的人并不多,找人参考是没有意义的。
只有你真的有一刻在工作或者研究中体会到了,“ 众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”。你就知道它是。
这是一个没有太多技术路线的东西,但是我想在人工智能开始能够辅助或者在某些方面可以 辅导开发了,你是不是不需要那么多 技术的列表,不需要那么多技术的 ABC,你需要的是一个大的方向 的思考与坚持 ?
另外,如果你会一点儿编程,我建议你努力学习与应用人工智能。时代变革了,学习什么的,最重要的就是学 AI。工作什么的,最重要的就是用 AI。 而学习 AI,最好的方式应该是视频学习。你要不要试一下
未来可能没有什么技术进阶指南了,只有一句话:AI,帮我完成一个任务:xxxxxxxxxx
来源