• 程序员该如何提升自己的编程认知水平?
  • 发布于 2个月前
  • 247 热度
    0 评论
  • 冰魄
  • 0 粉丝 39 篇博客
  •   
前言
作为干了多年程序员、架构、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、Object-C、C++、Lua 等等。
分类:前后端、微服务、CI/CD、 面向对象、面向过程、面向切片、Test Driven、Design Driven。
设计方法:瀑布、V 字型、螺旋迭代、敏捷。

这些在本质上都是在说 CS 整个领域的知识的广泛与复杂,你想在任何一个方向深入下去可能都需要你花足够的精力。所以要想望尽天涯路,你需要的第一件事是建立起你对 CS 整个体系的技术认知。

如果你想有一个直观的印象,那就试着去扩展这张图。你相信任何一个方向都可以生成出足够的分支,构成一个新的图。如此下去,你会看到一条无尽的路的。比如一门极偏的 AI 哲学,也可以是下面这样的。

这样的状态,你要怎么走下去?
总结一下就是开拓视野,坚定打好基础,同时确认自己的未来方向。也就是千万条路要走,但是可以选一条走下去。同时要锻炼好自己的基础,保证自己能走完。

所以我建议在这一个阶段要学好下面这些东西。
1.多读几遍《代码大全》,《程序员的Readme》。
2.计算机基础知识:也就是《深入理解计算机系统》这本书的内容,你要有一个不错的理解。
3.掌握一门编程语言:建议 Python 与 Java, 同时必须熟悉 C 语言或者 C++。因为 C/C++ 能让你知道怎么使用计算机的基础的信息:CPU、内存、文件、函数、指令。

而 Python 或者 Java 已经是现在应用语言的典型代表了。你用它们,能够了解大量的应用案例,还有大量的应用库与算法,更重要的是用它们都可以快速的解决问题,完成你自己的任务目标。

4.不要放弃算法:《算法导论》可能是很多人推荐或者不推荐的,但是你学会它,就相当于你掌握了一门算法的通天之路的基础,我想这个结论是对的。
5.熟悉一个数据库,推荐 PostgreSQL,读本书《PostgreSQL权威指南》。
6.熟悉 TCP/IP , HTTP 相关的网络知识《计算机网络自顶向下的方法》。
7.大概懂得 HTML、 CSS 、JavaScript 三者的关系还有 Ajax 是怎么回事。
8.知道些 Android 与 IOS 的开发。
9.部署个人工智能应用。

如果是这样的基础条件下,你可以认真的考虑自己对什么感兴趣,自己的未来要做什么了。也就是你要找好自己的未来的路。同时要相信,自己有了上面的基础,任何一个方向都足以走到足够的远。如果你有个本科的 CS 相关的知识,那差不多就是第一境界。而如果你是转到这个方向来的,那我建议你看一下 CS 的重点知识,有一个非常好的了解,才有助于你在这方面更好的发展与提高。

技术上自己的路
这一条路可能是你要坚持走下去的,至少要走到足够的远,才能达到的。也可能正是应了,衣带渐宽终不悔,为伊消得人憔悴!因为你深入每一个体系,都会发现现在的技术太复杂了。要有自己的核心目标,同时还要兼顾体系里技术的广度。举个例子:JavaSDK 的核心 API 可能是 200 多个类,但是 JDK 本身的 API 涉及到的类可能已经近万个了吧。

下面是一个很久前的统计表,但是还是能看出这个规模扩张的速度的。

不幸的是这一条路我走了很多条,还是谈一下我的学习路径吧。
上学学了 C 语言、看了汇编,然后呢学了 Java。工作就很幸运,第一个项目是做代码静态与动态检查工具,类似于编译器。然后做通信的 Gateway,再然后做 Web 的项目。开始创业又做人工智能相关的项目。所以,基本上是非常好的做了 CS 的基础研究与学习,然后了解了各种网络相关的内容、加密的算法,又对 Web 的发展有了一个不错的了解。正好在潮头,开始做人工智能相关的项目。

你看,不过好在一直都在坚持学习,每天都在看书,写代码,阅读论文。坚持下去,感觉自己是做到了在 CS 领域的衣带渐宽,终不悔。但是呢,身材确实是一直在宽。严格来讲我走的这条路并不是自己完全喜欢的,不过很幸运的就是自己走了一个感觉还不讨厌的路。现在做人工智能可能是我自己选的最终方向。

所以,如果一开始就选择这条路走下去,我觉得是最好的,也是最舒服的,最容易坚持下来的路。期望你选择走一条路的时候,能够坚持下去。我想可以有这么几个方向:
1.人工智能;
2.后端开发;
3.前端开发;
4.数据库 DBA 与数据库研发;
5.IOS 开发与未来的空间计算的应用;
6.Android 开发;
7.游戏开发/引擎与应用。

无论走哪一条路,我想你都要坚持读书、坚持做项目,只有不断的给自己提升,才能让你走的更远更宽敞。这里可能需要阅读大量的设计类的书籍,同时要考虑阅读一些哲学。

推荐一下吧。
1.《人人都是架构师》;
2.《人月神话》;
3.《HeadFirst设计模式》;
4.《编译原理》;
5.《Designing Data-Intensive Applications)》;
6.《大问题简明哲学导论》;
7.《人类简史》。

其实是每个人的认知都是有偏见的。

金字塔尖
这个境界可能到了就是到了,因为在这个世界,能够坚持走到一定境界的人并不多,找人参考是没有意义的。只有你真的有一刻在工作或者研究中体会到了,“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处”。你就知道它是。这是一个没有太多技术路线的东西,但是我想在人工智能开始能够辅助或者在某些方面可以辅导开发了,你是不是不需要那么多技术的列表,不需要那么多技术的 ABC,你需要的是一个大的方向的思考与坚持?

另外,如果你会一点儿编程,我建议你努力学习与应用人工智能。时代变革了,学习什么的,最重要的就是学 Al。工作什么的,最重要的就是用 Al。

而学习 Al,最好的方式应该是视频学习,类似知学堂推出的《程序员的Al大模型进阶之旅》,其实就是一份非常有意思的 AI 大模型的介绍性入门课程,简单看看,你可能马上就对大模型了解了,而不是要大量阅读。这也是个非常有效的学习方法
用户评论