勿在浮沙筑高台
姓名:李乾羽
班级:集成171
签约公司:腾讯
大家好,我叫小乾,是一名大四学生,在今年的秋招中收获了来自京东云后台开发、腾讯微信后台开发、快手音视频服务端开发offer,在这样一个非常的时期收获这些offer也是非常满意,现在的自己也是非常感谢那个无数个夜晚在电脑前熬夜学习的自己。
有时候自己在网上看到一些同学在问,我很喜欢计算机但是不知道如何入门,看到他们的话,想起了当时作为一个非科班的学生,我入门计算机时候的心酸,所以想总结一下自己从大一到大三学习的经历分享给大家,希望可以对大家有所帮助。
其实和大多数西北地区的同学一样,我在高中也没有接触过计算机编程,甚至我大一计算机基础这门校选课还不及格,所以那些跟我一样没有在高中或者更早接触过计算机的同学千万不要放弃,这都没关系的,你们现在可能比别人差点,但谁知道未来会发生什么呢?这也是我当时大二去蹭课,宋老师对我说的,你看到有些同学人家会写那个括号匹配的编程题,那可能是他高中甚至初中就接触过编程,你不会很正常,没关系,“让我们从单步调试开始吧”。这些话说真的我会记一辈子,很幸运在最开始的时候遇到了一位很好的老师。
说回正题,其实我的第一本编程书应该是C语言之父(丹尼斯·里奇)的那本《C程序设计语言》,其实大部分时间我们用的是西电的那本C语言和谭浩强老师的那本书,虽然谭老师的这本书很多人为之诟病,但确实是我的启蒙书,对于这本书我是真的很感激的,虽然当时看了知乎很多人诟病之后我也开始嘲讽这本书,但现在想起来确实是这本书让我敲出了第一个真正意义的程序,毕竟每个人的第一个程序都是Hello,World!哈哈哈。然后我接触到了《c primer plus》,知乎上对这本书评价非常高,我当时也是如获至宝,一口气买了三本书,除了这一本还有《c与指针》,《c专家编程》。
这本书确实是一本很好的书,作为初学者如果可以用这本书入门,是非常好的,因为这本书介绍了C语言的基础知识之后还对数据结构有了一定的介绍,承上启下,对于大一知识的巩固,对于大二知识的预习都是非常好的。大一暑假留校,我对着这本书一行一行敲,幻想着敲完这本书我就会打通任督二脉,成为编程高手,怀着对计算机的热爱在学校里面从早到晚的敲着这本书,其实我现在想告诉学弟学妹们的是,我这种方式其实效率很低,现在想想最好的方式应该是理解了之后自己不看书去敲一遍,然后做一下对应练习。然后把课后学习题做一下,这里我真的很推荐这本《c primer plus》,非常好的入门书,还有C语言之父(丹尼斯·里奇)的那本《C程序设计语言》,如果学有余力可以看看《c与指针》,《c专家编程》,然后可以写一个学生管理系统锻炼一下。
接下来就是进入到了数据结构和算法分析的部分,我推荐大家先看清华大学邓俊辉老师的课,对于我这种非科班的来说,数据结构确实有点难,我当时一边蹭学校宋老师的课,一边看着邓俊辉老师的课,其实我觉得对于入门的人来说看书很快,对于我们这种零基础的人来说看视频其实更好,这一点建议大家酌情考虑,不要盲目的去看《算法导论》这种书,这种是很好的书,但可能不太适合一些同学,邓俊辉老师的课蛮好的,如果你要看书我推荐《大话数据结构》,学完这些课程之后,我的建议是开始刷leetcode,我觉得可以练习一些经典的题使用Linux,也可以买个会员,刷一些大厂的高频题,好点的刷题方法其实是第一遍3-5分钟没思路赶紧看题解然后多做几次,以量取胜,然后注重质,大家不要觉得这样有点急功近利,对于那些打acm的同学来说其实也是大量的刷题锻炼培养了自己的算法思维,我的部分同学打acm经常刷codeforce,如果你有这方面的需要也可以刷这个。
另外我建议大家在学习数据结构和算法看一些Linux的同时学习C++或者Java ,为以后的刷题打基础,因为你不可能用“C” 造轮子,而一些数据结构甚至算法比如容器和排序,这时候肯定得用stl或者Java的库,如果这两不想学习的话,可以学python或者go。我个人推荐go,因为go现在很多公司都在要求使用这个,因为我是c++的,这个方向有几本书很好推荐给大家,《c++ primer》,《c++语言程序设计》,《effective c++》,如果你不想看书,侯捷先生的课也很好,“c++ 侯捷”关键词就可以搜到很多,博览网的,进阶方向可以研究一下stl源码。有本书很好,《stl源码分析》,大家可以看看。
然后就到了大二下或者大三,大家需要开始进行操作系统和计算机网络的学习了,因为你前面有了Linux的操作基础,现在就可以理论结合实践了,纸上得来终觉浅,绝知此事要躬行。
网络理论部分推荐图解系列(图解tcp/ip,图解http)还有公众号“小林coding”的图解网络系列,进阶有“tcp/ip详解卷一”,操作系统方面推荐一本好书《深入理解计算机系统》,CMU的入门书,b站有CMU的课,机器翻译,还不错可以听,还有清华大学的操作系统课,陈渝向勇老师的,课程实验是带你做一个操作系统内核,还有一本《程序员的自我修养》也推荐大家看。有了理论基础之后,大家就要开始实践了,也就是系统编程和网络编程,这两个方面很多人入门就看《Linux系统编程》和《网络编程》这两本书,我承认这两本是绝对的经典是必看的,但可能不太适合一些入门同学,我觉得可以先看一本《tcp/ip网络编程》,然后看一下《高性能服务器编程》,这本书后面作者给的项目可以做一下,用基础的系统api写的,然后可以看看陈硕的那本关于muduo的书,然后看看源码,b站也有一个剖析源码的课,可以看看,接着学习数据库的知识,然后可以做一个项目来巩固自己的学习,这个也可以作为你的校招项目,c++确实不像Java一样有很多项目可以写,大家可以写一个http服务器模仿nginx,或者把高性能服务器编程那本书的项目深入写一下,或者自己实现muduo。
以上基本上就是我的学习路线了,也是我走了很多弯路之后,重新回顾自己的大学学习,总结的一些我觉得还可以的路线,希望可以给大家帮助,大家加油。