以下都是根据个人经验胡说的。
为啥一定要强调个人经验?因为个人经验是有限的,并且往往是错的。。。所以需要大家自己辨别。
SICP,CSAPP,算法导论,都是要买的,英文最好,买完之后一定要放好,因为以后可以用来垫显示器。
如果对 SICP 感兴趣,可以找 Berkeley 的 CS61A 来学。CS61A 是大学低年级的课程,讲了 SICP 主要的部分。
SICP 好不好?非常好,但毕竟知识计算机领域中的一小部分。
如果对 CSAPP 感兴趣,可以找一下 CMU 的课程。对算法导论感兴趣的话,可以找美国前十学校的算法课程。
算法导论这种,好虽好,但更适合做参考资料,而不适合自学。
美国的公开课,最主要的是课后作业和 project,其次是上课的讲义和视频。最后才是这些书和一些资料。而不是反过来。
算法的话,推荐 算法引论,课程入门推荐 CS61B。
数据库、分布式相关的推荐:设计数据密集型应用。
软件工程或者想学 Rails 推荐:Engineering Long-Lasting Software : An Agile Approach Using SaaS and Cloud Computing, Alpha Edition,不过更推荐这本书的课程,Berkeley 的 CS169。这门课,讲清楚了软件工程。我是 https://courses.edx.org/ 上学的。Berkeley 这门课,现在似乎已经不用 Rails 了。
网络相关,推荐 High Performance Browser Networking,或者找一门课程。
操作系统,推荐 MIT6.828,非常推荐,就是太难了。布式系统,推荐 MIT 6.824,没书,讲各种论文。MIT 这两门课都非常开阔视野。老师水品非常高。
有一年是 RTM 讲的,他就是搞了蠕虫病毒那位。嗯,他是在 MIT 放的毒,后来又去 MIT 当教授了。
语言方面的话,觉得学完 CS61A 就够了。用到啥,就学啥语言。
一定要学一门语言,学 Erlang。推荐看 A history of Erlang,这个讲 Erlang 讲的非常清楚。再推荐的话,就推荐 Designing for Scalability with Erlang/OTP : Implementing Robust, Fault-Tolerant Systems。
不过 Erlang 没什么公司用,Go 和 Java 更实在些,Erlang 就是个人喜好。
以上的推荐,大体都是自己看过或者学过(课程都是在网上找的)。并且学过的感触是,这东西真好。或者学过之后,刷新了自己的认知。有一句话是说,如果回过头,看之前的自己,不是像看傻逼一样,那就说明没有进步。
个人经验是,学一个东西,要先入门,入门,之后剩下的东西可以自学了。所以我不会去啃 算法引论,但如果我想搞清楚某个算法的细节,我才会去翻算法导论中相关的部分。
还有一个方法,就是看计算机排前十的学校,大学都教啥,然后跟着学。
最后再次声明,以上都是根据我有限的经验随便说说,还请大家自己甄别