在你自学计算机的路上，哪些书籍对你的帮助最大?
我学的是万金油机械专业，毕业自学C++转型工业方面软件，对于转型自学编程中的坑深有体会。自学编程最大的拦路虎一是不知道选择什么资料，二是不知道学到什么程度可以找到工作。这两个问题应该是困惑自学编程小伙伴儿的头号杀手。自学编程第一步不管选择什么资料，最核心的就是要coding，不断培养coding能力，不断积累成就感才是激励你继续坚持的原始动力。不管刚开始你觉得编程多高大上，开始coding之后很快都会觉得coding非常烧脑枯燥无聊。 我转型的过程中思路非常简单，根本没有时间去看操作系统、计算机网络、编译原理这些基础资料，我的做法简单粗暴就是不停地coding，没有project怎么coding，刚开始就是对着c++ primer plus上的code敲到开发环境中debug，代码正常运行出结果的时候，成就感油然而生，自学编程就类似翻越一座有一座山丘，等你真的爬到半山腰的时候，你会发现一切付出非常值得，还好没有放弃。很多小伙伴儿学习编程就仅仅想着学编程语言和刷题，就想着能力够了找工作就没问题，我自学C++转型找工作的经历体会到简历和面试经验同样重要。实际的开发都是团队合作，团队越大沟通内耗非常严重，很多情况就是白天讨论需求晚上加班写代码，面试的时候有些问题不是考察技术实力而是沟通表达能力。想学编程转型软件的小伙伴儿抓紧时间了解一下面试技巧吧，学习编程的同时了解面试也能帮助你抓住学习的重点，很多情况都是面试造核弹工作拧螺丝。 第一步就是跟着书coding学习语法，学习vector、map、set等STL的用法，第二步也就是对于转型找工作至关重要的一步，刷算法题，我在牛客和LeetCode刷题500多道。学习编程就是需要极高的专注度，当你专注于coding的时候，压力没有了动力足了，我第一次刷题遇到二叉树非常害怕自己做不出来，然后就去google查二叉树的前序遍历、中序遍历和后序遍历，根据这些原理推导出如何根据二叉树的前序遍历、中序遍历和后序遍历重构二叉树，当你学习一个新的数据结构或者一个算法真的从零开始查资料去了解然后coding出来debug通过时，可以收获巨大的成就感。 学习编程不需要非常多的书，一本c++编程语言的书+一本数据结构与算法的书完全可以入门，后续接触到Linux系统等问题的时候用gdb、valgrind等各种工具调试code的时候再去理解编译原理和操作系统就可以了。 买一堆书学编程不怕吗？一堆书给你带来的是力量呢还是恐惧呢？ 《Data Structures And Algorithm Analysis in c++ 》这本书学习数据结构与算法非常棒，截取其中的一小节可以看一下作者是如何带着数据结构小白写出List容器的。好的编程资料就是这样给你源代码可以copy下来，自己debug学习。对于非计算机专业的小伙伴儿，直接上手编程写代码才是学习软件最快的方法，像这种有源码的教材直接抄code就可以了，软件应该是倒着学习，先会编程解决问题再去深入学习操作系统、编译原理等比较深的知识。 上来就是看一堆深奥晦涩的书极大地打击学习编程的信心，我就是机械专业毕业自学C++转型的，上来就刷题先培养出来学习编程的兴趣和成就感比学什么编程语言看什么书都重要。  好的编程书籍既把原理给你讲清楚还是带着你写代码，把code敲到开发环境里debug出来一点点分析原理学起来不是很快吗？ C++的学习就从C++ primer plus开始就可以了，我本科机械专业学过C语言，找工作的时候看C++ primer plus还有刷算法题最后找到C++软件工程师的工作，转型编程并不难，第一步就是规划好学习路线然后给自己设定一个时间节点，比如3个月实现转型。 《Data Structures And Algorithm Analysis in c++ 》这本书是有中文版的《数据结构、算法与应用：C++语言描述》，英语好的可以看英文版，想快速提升数据结构与算法能力的小伙伴儿看这本书是比较靠谱的。 想快速的了解算法可以看漫画版本的书。 数据结构与算法能力想进阶提升的，就看编程珠玑。 学习编程目标就是为了找工作，软件工程师面试必考数据结构与算法，数据结构与算法能力的提升主要是靠刷题，下面的剑指offer和程序员面试指南两本书上面的算法题我几乎刷完了。 下面就是《Data Structures And Algorithm Analysis in c++ 》/《数据结构、算法与应用：C++语言描述》这本书讲list原理和实现的部分。  Google检索一下发现基于C/C++开发的游戏引擎超过100个，这是非常让人震撼的事情，可以看出C++在对算法有极致追求的场合是多么的强势，当之无愧的霸主。C++不仅在游戏引擎方面有广泛的应用，在数据库管理软件、操作系统、数学计算库、三维建模软件等等对性能要求高的地方都有C++的身影。 C++在很多大型软件系统中也有广泛的应用，比如Google的Chromium浏览器、文件管理系统、大数据处理用的MapReduce等等。 下面简单看一下深信服、小马智行、拼多多等大企业的C++算法面试题，感受一下需要学到什么程度。算法面试中用到的C++语言特性基本没有，主要就是考察面试者的基本功。编程语言和项目经验可以通过入职培训快速实现，但数据结构与算法能力是不能速成的，唯有勤学苦练大量的coding才能提升能力，找工作的过程中我刷了500多道算法题，最后如愿找到自己感兴趣的C++开发工作。