这个问题里隐含了一个假设,那就是学计算机要先读书。这个假设是错的。很多学科都要从读书学起。但计算机不同,读书是最后一步

    学习游泳,如果如果老师不让你先下水,反而用语言向你描述胳膊腿该怎样动,你应该会非常抓狂。编程是强实践学科,通过读书来自学计算机与此没什么区别。

    学游泳,应该先掌握基本动作,先能游起来。然后教练一点点优化你的动作,让你越来越快。教练不会一股脑的把全部要点都罗列给你。而那些计算机的大厚书也同理。它们让起步阶段承载太多不必要的难度

    这个问题下推荐的书我基本都读过或翻过。不读书看起来政治错误,但不是空穴来风。开始的时候你很容易纠结哪本书能带给我需要的知识。不是这样的,自学的过程你最缺乏的不是找不到信息源,而是坚持不下去。觉得读完这本书我就是大神,这是个幻觉,只是个寄托

    好,这个普遍的误区我已经纠正了。后面说说该怎么自学。

    要先实践。实践过程中你会有很多成就感,这给你动力进一步探索。探索过程中你会遇到瓶颈,当 StackOverflow 无法满足你,这时候再去查阅书籍。

    为了你的实践,你可以跟一些网课,那里有设计好的练习作为你实践的内容。什么实践好呢?那种有反馈,有清晰的答案和要求的实践最有效。如果没有清晰的目标和答案,你就没有一个参考去纠正自己,最后只训练了打字速度。在实践的过程中,攻略、总结、W3School 这种内容更易读,更容易上手。我自己上过 lynda 的网课,觉得很精良。近年似乎也有优秀的中文网课出现。

    如果没有想法,我这里给个例子。你不妨试着写一个扫雷游戏。下面的代码是我几年前写的,里面还有自学时看的视频课链接。通过重复这个练习,你就能体会到那种逐步知道事情该怎么做的过程,这将大大超过读书所得。

    我们再回到读书。有两种情况还是需要读书的。第一种是学理论。计算机虽然找工作大多是编程,但理论也是必备的。比如算法与数据结构、计算机组成原理、编译原理、操作系统,这些不太能通过实践学到,就是需要读书和上课。但书里面普遍细节过多,超过了必备的部分,即使科班出身也记不住大部分细节必备的部分主要在大学课程的 PPT 里。第二种是前面提到的入门之后的深入拔高阶段。这时候搜索引擎的内容已经无法满足要求。它们能快速解决问题但并不深入。比如,StackOverFlow 会让你查查是不是某个参数用错了,而书里可能会讲某个语法的全部用法和注意事项。这时候读书才能继续提高。工作后,选定了技术路线,就应该开始读书,但初学阶段不太需要。

    现在有些国内的作者也会出一些比较易读的书,比如 xxx 从入门到精通一类。这类书也蛮适合入门,一定程度和网络教程很类似。而计算机经典书籍就不同了。你想想技术更迭如此迅速,那些书之所以成为经典,就一定是非常抽象和全面的。也因此必然与日常所需有较大的跨度。