如何确定大学的目标？
华科毕业，研究生期间主要用cpp，基本靠自学拿到阿里巴巴校招offer。 关于大学期间的学习规划和路径来分享一点自己的经验，仅供参考。 在开始之前，建议你先看一下我之前写的关于计算机专业大一新生的建议，已经获得7300+赞和收藏，是知乎的热门内容： 打牢基础！打牢基础！重要的事情说三遍！ 基础非常重要，不管你以后从事什么方向，应用开发也好，大数据开发也要，客户端工程师也好，要想吃得开必须依赖这些基础课程：操作系统、组成原理、计算机网络、数据结构、算法、数据库。 为什么一定要打牢基础？？？ 几乎各个大厂面试前2轮面试都会重点关注基础，如果基础不扎实，那么就很难进入后面的面试。 打牢基础后，可以开始选择自己后面的发展方向了。 另外在大学一定要利用好空闲时间，可以说大学是人生中最后一段拥有大段自己的时间的日子了。 要多实践，锻炼编程能力。不管是参加ACM比赛也好，做项目也好，都不错。 这个阶段需要深入学习一些专业知识，如算法，基础算法、图像识别算法、NLP等等。大数据方面比如现在火热的流式计算。 第二部分说到要多实战，那么大学大概有哪几种实战类型呢？ 一是各种比赛，有含金量的比赛大概有ACM、天池、kaggle、阿里中间件性能挑战赛等等，这里不全部列出来。 之前总结过有含金量的IT证书，可以参考： 另外是做项目，跟着老师做项目是首选。因为有人带着，可以跟着老师和学长学到很多东西。 如果没有这样的机会，自己参与github开源社区也是非常不错的，社区有对应的邮件组和群聊，有非常热心的小伙伴。 也有很多小伙伴问我：到底需不需要报培训班？毕竟培训班的学费都是好几万，值不值？ 我个人的建议是：其实现在网上的学习资料非常多，你要想学的话，根本不缺课程，花几万块钱报个培训班其实也就是买个视频课。如果个人学习能力还不错，完全可以自学，即便是报培训班，也是你自己看视频自学。 学习资料是肯定不缺的，缺的是什么呢？？？ 体系化的学习路线和跟踪答疑，网上课程多的是，但是哪个课程比较好？应该先学什么？再学什么？哪些是重点？遇到问题没人解答才是痛点。这也是为什么越来越多的粉丝让我带着他学习，学长学姐的经验真的可以帮助少走弯路。 如果有需要详细的学习计划和1V1辅导的小伙伴也可以联系我，业余时间带带大家，精力有限，每月只收1个徒弟。 上面是基础的方法论，很多人可能会问：具体要大学的每个学期，应该如何安排学习呢？（需要无脑的计划表~） 如果你的目标是通过校招拿到大厂offer，那么大学四年可以这样规划： 大一（上）：学好计算机导论。 大一（下）：开始学习一门入门语言（大多数高校设置的都是C语言） 大二（上）：很多学校会安排学习一门面向对象设计语言（C++或java），另外开始学习数据结构。数据结构非常重要，不管后面参加ACM竞赛还是找工作还是实际编程都会用到这些基础知识。这个时候已经可以开始关注学校ACM竞赛的一些信息了，可以参与一些培训课程，会贯穿到整个大二大三。 大二（下）：专业课程主要是算法设计和计算机组成原理。 大三：大三开始没有了数学哪些基础课程，大多数都是专业课，并且有更多的时间来进行实践。这个时候可以开始参与一些项目（不管是实验室老师的项目也好还是自己去github上找开源项目都OK），也可以出去实习，尽早接触互联网的工作环境，有更深的体感。 大四：课程不多，时间相对更加自由和宽裕。需要保研和考研的可以准备起来了。这段时间可以实习也可以选择自己有兴趣的方向进行深入学习。 这里只列举了核心课程。 推荐视频课程+书籍结合的方式，千万不要抱着大块头的书从头啃到尾。 看视频课程会比纯看书更生动，更容易理解。 另外这里强烈推荐网上的经典公开课，这些公开课久经考验，有深度，评价非常高。并附有详细的lecture和代码案例。 可能一开始会觉得比较难，尤其是国外大学课程，英文讲解，而且通常比国内学校讲的有深度，但是只要坚持，收获还是非常不一样的。 为什么推荐国外顶尖大学的公开课？ 下面是standford大学CS346数据库系统实现课程的内容，需要每个人实现一个数据库系统，考核分数也是project占大头。 基础课程推荐的视频课程和书籍有： （1）MIT6.268 MIT6.828 是一门公认的硬核课程，一直以来都有很高的知名度，也广受好评，是理论与实践相结合的经典。 建议是在上过学校的OS课，或者阅读过操作系统导论类再来学习这门课。最好在开始之前熟悉C和汇编，也对计算机组成有一定了解。 然后只要你跟着项目一步一步走，做完 6 个实验，就能实现一个简单的操作系统内核。 lab是这门课的重点： （2）国内哈工大的操作系统实验课 https://github.com/hoverwinter/HIT-OSLab 推荐standford课程cs144结合书籍《计算机网络：自顶向下方法》。 课程链接：https://www.scs.stanford.edu/10au-cs144/ https://cs144.github.io/ 书籍推荐： 这位知乎大佬 @胡津铭 有一个专栏讲如何自己实现一个TCP，强烈推荐： 如果想找一本简单的入门书籍，推荐《图解TCP/IP》： 实战的话推荐《Wireshark网络分析就这么简单》，可以亲手尝试抓包分析数据报文的信息。 （1）standford CS145/CS245/CS346逐步递进的学习。 课程链接： CS145：Introduction to Databases Course Information https://cs145-fa20.github.io/ http://infolab.stanford.edu/~junyang/cs145/info.html CS245：Principles of Data-Intensive Systems https://web.stanford.edu/class/cs245/ CS346：Database System Implementation https://web.stanford.edu/class/cs346/2015/ （2）伯克利的数据库导论 https://www2.eecs.berkeley.edu/Courses/CS186/ （3）CMU的数据库系统 数据库系统设计域实现，涵盖数据模型、存储模型、查询语言、存储架构、事务处理、恢复、并发架构等等，并结合开源和商业数据库给出案例讲解。 https://15445.courses.cs.cmu.edu/fall2020/ （4）书籍推荐《数据库系统概念》 （1）MIT 6.006 Introduction to Algorithms MIT 6.006 是经典的数据结构和算法入门课程，涉及到排序、哈希、图论、动态规划。 Lecture非常翔实，伪代码可读性强，在辅以专门的practice，用py实现的。 课程链接： https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/ （2）书籍推荐《算法》 内容全，源码示例多。 比如普林斯顿大学教材使用的就是这本书，然后有配套的教程网站，上面有很多文档和demo： https://algs4.cs.princeton.edu/lectures/ 视频： https://www.youtube.com/watch?v=1QZDe28peZk&list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX 建议通过可视化的方式学习算法和数据结构，能很容易看出其基本原理、各种操作是怎么实现的。 数据结构和算法可视化学习网站这里强烈推荐： （1）visualgo https://visualgo.net/zh 涵盖了主流的数据结构，可视化展示，支持对其进行各种操作，以及提供了很多示例。 如二叉树，我们对其插入一个节点71，会自动进行匹配，将节点插入到正确的地方： （2）Data Structure Visualizations https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 同样是涵盖了主流数据结构和算法，提供动态演示功能。 国外大学是怎么学习计算机组成原理的- https://www.zhihu.com/question/38838088 http://www.cs.cmu.edu/~213/ http://web.stanford.edu/class/cs107/ 关于公开课，更多的可以参考这个github项目，维护了众多推荐的公开课程资源：（star 14K） https://github.com/ForrestKnight/open-source-cs/blob/master/README.md 老外OSSU组织总结的自学计算机学习路径，star 92K： https://github.com/ossu/compute 最后再来唠叨2句： 有些书籍最好不要买，比如21天精通XXX，完全就是割韭菜的。 学习计算机一定不要想着速成，没有什么捷径和超能力。要下苦功夫去啃那些经典书和源码，然后自己动手写，所有技术大佬都是一行行代码敲，一本本书啃出来的。 我在大学期间，为了把专业学好，看了大量经典的专业书籍，整理了这份计算机必读的高分经典书籍： 这份书单对于CS学习的同学帮助非常大且十分系统，这些书籍的电子版已经整理好了。 需要的直接戳这里领：计算机必看经典书籍（附pdf下载），请注意查收~ 以终为始，目标导向，提前确定自己的目标岗位。 比如说你的目标是毕业后找到一份互联网大厂Java后端的工作，你就去看大厂的招聘要求，看自己需要学什么，给自己规划路径。 按照现在的市场来讲，Java是现在工业上运用比较多的语言，也是最好找工作的语言之一。其次是C++、Python等。就目前的形式来看，iOS和安卓等移动端开发是比较不好找工作的，但如果你确实很感兴趣，成为了这方面的大佬，那么前景也还是不错的。 列举下目前主流语言的应用场景楼主可以参考下，方便做选择： 关于如何拿到校招大厂offer的技能学习，我之前发布过一篇回答，可以进去学习： 关于Java从入门到进阶的学习路线， 可以直接看我下面这个文章： 再推荐一个总结得非常优秀的后端技能roadmap，查漏补缺： 除了Java后端岗位，Python在最近几年也特别火，特别是大数据方向。 而且Python相对C++/Java等语言来讲是一门门槛稍低的语言，应用也非常广泛，如数据处理、网络编程、机器学习、游戏开发等场景，因此也广受欢迎。 下面再分享一下Python从入门到进阶的学习方法。 零基础Python入门非常简单，给大家推荐一门课程吧。百词斩旗下夜曲编程出品的Python课程，非常适合零基础的新人学习。 课程是从纯小白的角度出发，把所有的基本概念用生动的图文进行描述，课程互动性强，对学习环境要求低，手机/电脑/iPad都可以学习，省去了小白安装环境的复杂步骤。 课程学习时间也不长，基本每天抽个15分钟就能完成。如果是阅读和学习能力强的差不多8分钟就能完成一节课的学习。我觉得这种学习形式会比视频高效很多，视频必须得从头到尾看完。​ 而且整个Python课程设置很清晰，循序渐进，很适合小白入门。夜曲编程最近也推出了6元的体验课程，感兴趣的话可以先体验一下~ Python的学习进阶如何安排呢？ 其实学完第一部分基础以后，就可以开始动手写代码，写实际的项目了，在实战中成长更快。 Python的应用很广，方向很多，在基础打扎实后可以挑选自己感兴趣的方向进行深入学习。 比如夜曲编程的Python进阶部分，分为编程应用和数据分析两大模块，不同模块又分为几个方向，你可以选择自己感兴趣的模块进行实战训练。 Talk is cheap, show me the code；对于计算机专业来讲，实践是非常非常重要的。 那么有哪些实战的方式呢？ （1）参加比赛 有含金量的比赛大概有如下几个： （2）实习 实习是非常好的实践方式，一方面可以提前了解和感受互联网公司的环境、氛围，另一方面向各路大牛学习，获取一手的经验，还可以参与实际的项目。 （3）github开源项目 如果没有实习，也可以通过参与实验室项目或者github上的开源项目。github上开源社区有完善的文档、协作机制，可以和很多人一起交流，开阔视野。 推荐的值得参与的github开源项目： https://github.com/macrozheng/mall https://github.com/qiurunze123/ （4）刷题 主要是锻炼数据结构和算法能力、提高思维能力，推荐用LeetCode或牛客。 leetcode题解： https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%E7%9B%AE%E5%BD%95.md https://github.com/azl397985856/leetcode https://leetcode-solution-leetcode-pp.gitbook.io （5）顶尖公开课的project 通常都非常有深度，有一步一步实现一个麻雀虽小五脏俱全能run起来的系统，如数据库或操作系统，或者一个tcp协议栈。 （1）自学能力的培养。 现在已经是互联网时代了，我们能从网络上很方便的获取大量、免费的资料，如公开课、电子书、github上的开源代码。我们需要有从大量信息中筛选有价值信息的能力，人的精力是有限的，我们不可能面面俱到，学习一定要学经典资料。二是提升自己的自学能力，掌握学习新知识的方法论。 （2）养成写博客的习惯。 写博客对我们好处很多： 作为一名合格的计算机专业学生，我们应该培养哪些优秀的习惯，我专门写了一个回答。 为什么？因为我觉得太重要了，我到现在都非常后悔自己当初没有好好利用大学四年的时间精进自己，所以这个回答，答应我，一定要看！！！ 再补充一个大家最近问的很多的，关于计算机专业电脑选购的问题。 按照不同的预算给大家推荐了几款电脑，闭着眼睛买就行： 如果觉得我的回答不错，可以给个点赞。