通过本站二维码加入知识星球,获得星球官方5-10%返现折扣。
知识星球推荐 > 知识星球精选 > 互联网商业认知 > 小道消息的订阅服务 > 「如何成为顶尖程序员」自学计算机编程知识的一些建议和想法

「如何成为顶尖程序员」自学计算机编程知识的一些建议和想法

来源:小道消息的订阅服务 发布时间:2020年07月02日 浏览次数: 1,107 次

前几天有个小朋友问我,要自己学习计算机编程,有什么没有建议。肯定有,我其实一直想写一个教程,不过我并不是什么编程高手,写出来会让人笑话。但是呢,我做这一行,完全是自学,这个路径起码证明是可行的,如果现在重新学,一定会优化许多。

如果要进入这一行,我会建议先对这一行增加一点背景知识的了解,最好的图书目前是吴军的《浪潮之巅》,见解很独到。如果要根据时间线了解一下的话,可以看一下《硅谷百年史》,然后就差不多了。需要深入了解这一行,未来再回头看。

接下来这一步比较重要,就是要找一个参考系。自学,从哪里入手?上个培训班,似乎很直接,但是要花钱,自己找一本书看,又没有人带着。但这个方式都不太可取。

这一步,我的建议是参考世界上最好的学校的计算机入门课。比如斯坦福的 CS101,或是 MIT 的 6.0001,哈佛有 CS50,教材和课程都是公开可取的。

强调一下,这些课程都是公开的。从视频到教材,关键词给你放这里,如果你找不到的话,还问我哪里有,建议就别进入这一行了。

你别一看是世界顶级学校的课程,就吓哭了。其实不是,这些课程非常容易学,入门要比国内学校的课程好太多。

国内的计算机课程,基本都他妈的跟人家国外学校抄的(真不是贬低他们)。尤其是教材,精华没吸取到,倒是引入了一大堆糟粕。比如 C 语言的课程,计算机学生都知道谭浩强的 C 语言教程,我当初自学的时候,学完了觉得不对,这特么怎么跟谭浩强的那本 BASIC 教材一个味儿,直到几年后我看到 K&R 的那本 The C Programming Language 影音本,才知道谭浩强的教材跟谁学的。

同样,要学计算机网络的知识,国内计算机专业的学生,甚至研究生,不少都是学谢希仁的那本《计算机网络》,但是,你看了 Andrew S. Tanenbaum 的《计算机网络》,就知道谢写的那个玩意儿不行。学了也是白学。

这就告诉你什么呢?你如果自学,就沿着一条最好的道路,一点点学就是了。

这个过程里,千万不能看中国大学里自己编的教材,中国人自己写的教材,都别看。

再比如,现在不少学校教数据库,还是用王珊的那个教材,非常晦涩,远不如 Abraham Silberschatz 的《数据库系统概念》,但实际上这本教材也有点陈旧。但就是这样,也还是要比国内所谓「经典」要好上几个档次。

记住 Tanenbaum 这个名字,他的书基本都是经典之作。

我们前面提到了 CS101,如果有耐心学完这个课程的话,可以熟悉一下操作系统,如果你有 Mac,自带就是一个 Unix 环境。可以看一下《Unix 环境编程》,别看「高级」的那本,暂时还用不到。

熟悉基本的 Unix 环境,掌握常用命令的做法,还是非常有必要的。

这时候,你对计算机到底是个什么东西可能就比较感兴趣了,推荐 Randal E.Bryant 和 David O'Hallaron 所著的《深入理解计算机系统》,这本书太经典,以至于即使任何一个开发者,都值得认真读一遍。

这本书本身也是个资源大全,附带很多信息和线索。慢慢啃就是了。真的能认真读完的话,把附带的作业都做完,相当于读完了一个计算机本科(国内的)。

这时候,可能时间过去差不多两年了。接下来,根据你的兴趣,选择一门语言,比如 Python,再选一本合适的教材,写代码,实践,在这一行,找个工作问题不大了。

然后,有些课程还是需要补的,比如数据结构和算法。这时候,已经可以知道怎么去学了,而且带着学以致用,带着目的学。要更踏实一些。

但是,并不是计算机专业的所有课程都需要去学的。可能有一半的课程是不需要的。不信,你随便列举一个国内大学计算机专业的课程列表出来看看。

我说的其实是个野路子路径。未必对所有人都有用,或许也会有编程高手所不齿。不过没事。我自学过,如果我用这个路径去学的话,学习速度要快很多。

接下来我说一下我当年自学的路径,有哪些弯路。我学了一大段时间的汇编,鸟用没有。学了一段时间的数据结构,不知道学完了干啥。然后花在操作系统上的时间过多,看了好几本经典的操作系统教材,到这里就基本蒙了,相当于体内真气乱窜,学了不知道有啥用,不知道学没学明白,特别绝望,然后,很凑巧,接触了 Linux ,遇上了 Steven 写的那几卷 TCP/IP 经典著作,刚巧,那一套书引入了中国。看完这些,我对 Unix 和 计算机网络的兴趣就很大了。就投入了更多时间,而且悲哀的发现,我没有可能写代码了。

那年头,懂 Unix 的不多,但是写代码,我没有环境,要有足够多的实践才行,没钱去机房,太贵。一小时好几块钱,每个月伙食费有一半扔在上面还不够。但是操作系统和计算机网络,看书,就可以搞懂。这个路径到了后来,几乎就不可逆了。找到的第一份工作是系统工程师(SA),搞实施。

好在我那时候,就知道,进入这一行,并不只是写代码。还有很多工作,不需要开发。

那会儿专业歧视比现在严重多了。机缘巧合,面试官看我会 Unix,随便问了我一些问题,都难不住我,总算得到了唯一的一次机会。

但现在任何一个学生说想学计算机没条件,简直是不可能的事情。你手里的手机就是一台计算机,性能比我当年的小型机性能都好。再说没条件,就过意不去了。

选择什么开发语言,一般课程都是以 C 语言为例,现在国外不少大学,用 Python 的也多了起来。Python 总体来看,要更好一点,优雅,容易上手。C 更贴近操作系统。其它语言,入门的时候暂时不用考虑。

国内大学的教师,自己会什么教什么,不接触新事物,误人子弟的比较多。我看还有的学校会在高年级开 C++ 的课程,更无必要。总之,我对国内的计算机专业,还是有不少看法的,不过我是外行,又不懂写代码(嘿嘿嘿),所以,意见不重要。

一般而言,自学,应该先掌握一个大体上的知识概览。然后是技能框架,剩下的细节(实践),一点点的自己去填补。如果一开始追求实践,不把整体的基础夯实,那么,很难走向下一个层级。

希望对你有用(等我有时间的话,我会再补充一些内容)。

提到的书,我做了一个豆列:

https://www.douban.com/doulist/115936679/

每本书在豆瓣搜一下,看底下的评价和相关的图书。基本上就一点点发散开来,慢慢的就有了粗略的概要。

返回星球主页:小道消息的订阅服务