首先实名反对高赞推荐的书。这种推荐有三个问题。
第一:只要是计算机专业的人都知道。人工智能不是计算机专业,而是商学院的多元统计分析和自动控制专业的控制逼近算法。基本上属于会计专业和自动控制专业。我不反对人工智能相关领域的书籍,但是请注明该书不属于计算机专业。
第二:有些二傻子公众号不会真的以为看完龙书就懂编译原理啦!!遇到编译原理就推荐龙书的基本上要么就是网络抄袭。要么就是人云亦云。
第三:不知道有些二傻子公众号知不知道,自动机的东西其实只有在编译原理里面一开始的时候会被用到。其实用处不大。除了装B没有任何用处。什么我学习了以后,发现自己对于计算机的理解更深刻了。行了吧。那就是幻像。别自欺欺人了。
我介绍几本书籍。计算机专业就是三门课。下面推荐的所有书都有一个特点就是:直接上源代码。让你看看一个能用的操作系统,编译器,协议栈是怎么做的。源码面前,没有秘密。
建议先看计算机网络。推荐《TCP/IP详解卷2》。之后进阶《Linux网络编程》。。因为其实计算机网络非常简单。就是给数据加数据头和数据尾。俗称穿鞋戴帽。这里面最核心的就是TCP协议。你知道什么叫补码就能看懂。不懂的看看《 组成原理》就行了。
同时,你需要学习C语言。毕竟这个是所有课程中源代码的实际实现语言。
接着推荐学习编译原理。推荐《两周自制脚本语言》。之后进阶《游戏脚本高级编程》。这个其实非常有用。尽管很多人都不太重视这个技术分支。这个的代码量也不是太大。花半年就能学个差不多。
同时,你需要学习各种算法。很多代码中都会遇到。我推荐的是《算法精解: C语言描述》。这本书给每一个算法写了一个例子,你照着敲一遍。所有算法就都会了。
操作系统。推荐毛德操的《Linux源代码情景分析》。之后进阶《深入Linux内核架构》。这个看完一遍不少于三年。我只完成了一部分。
最后,说说《数据库》,这个东西其实和计算机的主干课程关系不大,这个东西主要是一套逻辑。根据所谓的数学证明,这套数据获取方法是完备的。但是这个结论其实没有任何卵用。毕竟我们用就好了。
如果看上面的东西有困难,需要补充数据结构和算法,推荐STL源码剖析。
之后有时间的话,看点自动机的东西。不看也行。就齐活了。
其他计算机系统结构里面偏软件的东西,其实计算机网络里面都有涉及。自动机的东西其实编译原理也用到了。
最后请允许我用一句计算机名言结尾:
Talk is cheap,show me the code。
这个问题里隐含了一个假设,那就是学计算机要先读书。这个假设是错的。很多学科都要从读书学起。但计算机不同,读书是最后一步。
学习游泳,如果如果老师不让你先下水,反而用语言向你描述胳膊腿该怎样动,你应该会非常抓狂。编程是强实践学科,通过读书来自学计算机与此没什么区别。
学游泳,应该先掌握基本动作,先能游起来。然后教练一点点优化你的动作,让你越来越快。教练不会一股脑的把全部要点都罗列给你。而那些计算机的大厚书也同理。它们让起步阶段承载太多不必要的难度。
这个问题下推荐的书我基本都读过或翻过。不读书看起来政治错误,但不是空穴来风。开始的时候你很容易纠结哪本书能带给我需要的知识。不是这样的,自学的过程你最缺乏的不是找不到信息源,而是坚持不下去。觉得读完这本书我就是大神,这是个幻觉,只是个寄托。
好,这个普遍的误区我已经纠正了。后面说说该怎么自学。
要先实践。实践过程中你会有很多成就感,这给你动力进一步探索。探索过程中你会遇到瓶颈,当StackOverflow无法满足你,这时候再去查阅书籍。
为了你的实践,你可以跟一些网课,那里有设计好的练习作为你实践的内容。什么实践好呢?那种有反馈,有清晰的答案和要求的实践最有效。如果没有清晰的目标和答案,你就没有一个参考去纠正自己,最后只训练了打字速度。在实践的过程中,攻略、总结、W3School这种内容更易读,更容易上手。我自己上过https://www.lynda.com的网课,觉得很精良。近年似乎也有优秀的中文网课出现。
如果没有想法,我这里给个例子。你不妨试着写一个扫雷游戏。下面的代码是我几年前写的,里面还有自学时看的视频课链接。通过重复这个练习,你就能体会到那种逐步知道事情该怎么做的过程,这将大大超过读书所得。
我们再回到读书。有两种情况还是需要读书的。第一种是学理论。计算机虽然找工作大多是编程,但理论也是必备的。比如算法与数据结构、计算机组成原理、编译原理、操作系统,这些不太能通过实践学到,就是需要读书和上课。但书里面普遍细节过多,超过了必备的部分,即使科班出身也记不住大部分细节。必备的部分主要在大学课程的PPT里。第二种是前面提到的入门之后的深入拔高阶段。这时候搜索引擎的内容已经无法满足要求。它们能快速解决问题但并不深入。比如,StackOverFlow会让你查查是不是某个参数用错了,而书里可能会讲某个语法的全部用法和注意事项。这时候读书才能继续提高。工作后,选定了技术路线,就应该开始读书,但初学阶段不太需要。
现在有些国内的作者也会出一些比较易读的书,比如xxx从入门到精通一类。这类书也蛮适合入门,一定程度和网络教程很类似。而计算机经典书籍就不同了。你想想技术更迭如此迅速,那些书之所以成为经典,就一定是非常抽象和全面的。也因此必然与日常所需有较大的跨度。