百科问答小站 logo
百科问答小站 font logo



大一计算机专业学生如何在寒假充电? 第1页

  

user avatar   bian-cheng-zhi-bei 网友的相关建议: 
      

985CS科班,来回答下这个问题吧,我大学寒暑假的时候也会有这样的问题,想提前学点东西。

题主有这个想法,先点个赞 !

不过根据我的经验,不要给自己安排太多,寒假最好的就是写一些有趣的代码。

把对编程、计算机的兴趣培养起来,能做好这点,寒假就是血赚,千万不要给自己定下提前学习数据结构、操作系统这些计划,如果完不成反而会有懊恼的兴趣。

我读书时期每次放假前都给自己安排得满满当当,最后连作业都要开学前几天才补。。。。

所以在这就不推荐各种课程了,这个寒假做好两件事:

把C语言全面的再学习一遍,不要局限于课后习题。

第二就是能写一些小游戏、小工具,比如五指棋,贪吃蛇啥的。

系统学习C语言可以参考我的这个回答:

其它计算机学习路线可以参考历史回答:

如何学习操作系统:

网课:

四大基础课网课:

最该学习的课程前五位:


C++

一年时间学好C++:

系统学习C++:


计算机基础

CS那几门课在计算机知识体系有怎样的地位:


好了,接下来分享下我自己的编程学习之路吧,大一大二的同学可以参考一下。

我大一第一门编程语言就是学的C语言,怎么说呢,老师讲的,书上写的我都能看懂,但是一让我写一个大的程序,我就摸不到头脑,不知从何下手,学了半学期,也只能写写课后习题,算算水仙花数什么的。

而且当时对计算机缺乏系统认识,即便我知道指针就是变量地址,也很难理解它到底有啥用。甚至分不太清数组和指针的区别,以至于会出现对函数局部变量取地址返回这样现在看来很低级的错误。

大一上考完C语言后,我便在心里默默念想,这辈子再也不写C了,只是没想到的是,后来这成了我最爱的一门语言。

大一下开始学习数据结构与算法、数字逻辑这些计算机核心课了,此外,还学了一门当时我看来非常牛逼的语言—Java。

为啥说我当时觉得它牛逼呢?因为刚经历过C语言的摧残,发现Java丰富的类库,各种方便的工具类。再也没有指针了,变成了对象引用。

Java我学得很认真,当时还看过马士兵的Java Se教程。

自己也用Java写了不少好玩的东西,比如联机五子棋、HTTP服务器等等。这让我第一次感受到编程这么有趣,俗话说兴趣是最好的老师。

在学java的时候喜欢在网上搜资料,但总觉得各种博客上的知识过于零散,为了学好Java,我在知乎搜索各种书单,先后看了《Java编程思想》《Java核心技术卷》《Java并发编程》好几本书(不是全看哈,大部分主干章节

大一暑假在家自学了安卓,并写了几个app玩,但发现自己不太喜欢客户端,于是大二开学就开始学 Java 后台开发,从 Servlet 到 SSH SpringBoot,基本上都过了一遍,后来越来越觉得这条路就是在学各种框架,总觉得不太对劲。

在这里也分享一本帮助我拿到BAT 等一线大厂 offer 的算法笔记,是一位阿里大神写的,对于算法薄弱或者需要提高的同学都十分受用,算法一定是计算机学习的重中之重:

编程指北:Github 疯传!史上最强!BAT 大佬「LeetCode刷题手册」电子书开放下载了!

同时,大一暑假有大四学长学姐在学校广场摆摊卖书,我也买了些,其中有一本就是被称为计算机神书的CSAPP。

大二在上一些无聊的课时,我总把这本书带着,每节课可能会翻个几页,那时候看到汇编、内存管理、存储器层次我是真的云里雾里,因为还没学操作系统,C语言也学得很差。所以断断续续的看了几章,说不上学到了什么,但让我对这种枯燥的基础知识第一次产生了兴趣,有一种想彻底搞懂它们的想法。

为了看懂这本书,又去看了王爽那本《汇编语言》,重学了C语言,由于已经学了汇编,指针对我再也不是问题了,同时看完了《c和指针》、《C专家编程》、《C陷阱与缺陷》,C语言使用得也愈加的熟练。

大二上那段时间,学院里突然刮起全员学机器学习的风气,虽然不至于全部,但是真的是很多人都在学,于是我也不例外的加入了,先后看了点吴恩达的视频和西瓜书。跟着写了手写数字识别这种入门必做的项目,但是后来总觉得对机器学习、深度学习提不起兴趣,原因之一就是我觉得无法完全掌握每一步,了解每一步背后的原理。这让我学得不安心。于是ML的学习之路也止于大二。

大二是学习内容最丰富的时间,当时室友用 Python 写了抢课脚本,感觉很好玩。然后又跑去学Python,学爬虫。写了一堆爬虫,什么爬豆瓣电影、抢课脚本,玩了一段时间也没太大兴趣了。

时间来到了大二下,按照课程安排,开始上操作系统了。于是我又在知乎搜索“操作系统怎么学”,顺着一堆回答,我发现原来还能跟着别人写一个 mini OS,这对我吸引力太大了。于是我买了一本《操作系统真象还原》,这本书真的非常仔细,把写 OS 需要用到的前置理论知识、汇编、内联汇编全都给你讲清了。我一路跟着书写,写到了汇编开机打印出我的名字,再到后来进入C语言写内核各个模块,写到内存管理我就中断了,没有继续写下去,这也算个遗憾吧。

当时真的对这个入迷了,为了写Min os我还去看了Linux0.11的部分代码。把我的QQ签名改成了 jmp 0x7c00

(这句汇编就是将跳转到0x7c00这里,BIOS开始引导操作系统。

于是就这样,我越来越喜欢偏底层一点的东西,所以决定走 Linux C/C++ 路线,然而现在看来确实太年轻了,Linux C/C++ 在鹅厂好多也是用来写业务滴。。。

大二下在知乎、牛客网搜索学习路线,我大概清楚了需要看些什么书。于是开始了非常标准的 Linux C/C++学习之路。

前前后后看了《C++ Primer》、《APUE》、《UNP》、《深度探索C++对象模型》、《STL源码剖析》、《C++设计与演化》、《Linux内核设计与实现》、《Linux内核完全注释》、《effecitve C++》 、《effective modern C++》、《程序员自我修养》、《Linux高性能服务端编程》、《Linux多线程服务端编程》(知乎陈硕大佬写的)......,顺便还看了点muduo源码,自己模仿着基于epoll写一个reactor模型的web服务器,跟着知乎Milo大佬写Json库,总之,这段时期是写了一些小”轮子“的。

学习计算机一定不要想着速成,要下苦功夫,去啃那些经典书和源码,然后自己动手写,我大学整理了一套计算机必读的经典书籍,对于CS学习的同学帮助非常大,且十分系统,这部分我是会不断把它完善的,当成自己的小电子书库,不多,但贵在精。


我整理的这些书大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统

编程指北:计算机必读的书单(含下载方式)

看的书越多,其实你越能找到自己的方向,大三上我就给自己学习定位:

深入C++语言(多线程)+ 存储(学习redis、leveldb)+ 网络编程(学习muduo,各种网络编程模型)+ 学习分布式(mit 6.824、ddia、google三大论文等)

基本上是沿着上面几个方向去展开学习的,有的看书,有的论文,也有的看博客看源码。总之,知识面在大三不断扩充,自己开始关注C10K、C100K这样的后台服务器开发高性能、高并发的解决方法。

值得一提的是,大三上我们学院有门System Programing的课,教材就是使用的CSAPP,因此我之前大二草草看完的书,得以再次翻开,这一次我把附带的是个实验也挨着挨着做了,收获良多,有位运算各种奇技淫巧,有Bomb lab刺激的打怪通关、也知道了buffer overflow attack.... 还有实现基本的内存管理等等。

印象最深的便是做bomb lab,一个个 phase 的通过真的很让人兴奋,我几乎是连着把这几个phase过掉的,当然头发也没少掉。

当时还写了个记录:

再到后来,我拿到了微信实习offer,然后顺利转正。

在我大三下拿到实习offer后,我开始做一些国外计算机课程lab,一方面有钱拿,而且还不低,靠这个我在大三下就实现了经济独立,另一方面这些lab很有意思,对提高基础和编程能力很有帮助。

现在我开了一个公众号「编程指北」分享编程学习方法、技术相关的一些东西,感兴趣的同学可以去关注下~

在这里列举一些我做过的觉得有意思的lab:

第一个是文件系统

这个玩意挺有意思的,就是要让你自己去设计一个文件系统,比如文件、数据块、目录等等,而且你要提供创建、读写、删除、随机读、随机写等等接口,然后通过 Linux 的 VFS(虚拟文件系统) 机制挂载到 Linux 内核中,然后就可以用系统调用 open、read、write 这些来在你的文件系统上进行读写。VFS 是Linux一个机制,它规定了 IO 接口,然后你去实现这些接口,你就可以挂载在上面。通过这个东西我深入的学习和了解了文件系统,报酬也是非常值的。




第二个是SVC

就是版本管理系统,类似 SVN 和 GIT的,但是相对 GIT 做了很多简化,核心的就是创建分支、分支合并、回滚、commit 这些,通过这个我又去详细了解了 GIT 的实现原理,并且自己写了一个简单版本的 GIT,受益匪浅,也赚到了几千大洋。



第三个是操作系统的锁实现

这个就是让你基于硬件的原子指令 xchg、cmpxchg 这些实现一个锁,这个需要内联汇编、汇编等知识,简直是硬核!!!做完这个也解开了我对锁实现的一些疑惑。



还有个是 Web Proxy

这个就更有意思了,要求用 C++ 写一个代理服务器,类似 Nginx 的代理功能,当然,相比 Nginx 弱鸡很多,

但是麻雀虽小,五张俱全,而且老外最有意思的是要求代理服务器对一些图片和 HTML 恶作剧,就是代理服务器随机的在原始服务器,返回的响应里 插入一些图片和文字,因为那天是愚人节。。。 不得不说老外还是很有趣的。



还有模拟实现 TCP 可靠传输的

这个就更硬核了,人家老外老师就是给力,直接做了一个网站,这个网站你可以通过 TCP 连接上去,然后你需要运行几个节点,互相发消息,他们之间的消息都会经过老师的网站,所以通过网站上是可以控制丢包率的,也能控制节点的拓扑结构,要求就是让你基于这种不可靠的信道,做出可靠数据传输!这简直就是翻版 TCP 嘛,超时重传、ACK、滑动窗口啥的都给我上!就是像下面图中一样,圆圈就表示你可达的范围,不同节点形成各种网络拓扑,可以调节网络 丢包率 Loss chance。

当然也有很多写算法的,数据结构实现的,图搜索的,也有做机器学习、深度学习的,反正各个方向都有。对这些Lab感兴趣的可以去我公重号「编程指北」后台回「lab」,我会不断更新汇总做过的一些lab和课程网站链接。

如果对这些lab感兴趣的,自己也想做的话,可以看看我的这篇文章

大学靠技术经济独立的方法,全部分享给你

做这些 lab 真的实实在在的提高了我的编程实践能力,也算是检验了前期看那么多书还是有效果滴。(顺便还让我大学期间就月入上万。。。

所以写了这么多,再点次题吧,我认为自己编程能力突飞猛进就是在看完一本本大黑书、做完一个个lab、写下一行行代码之后。

附上大学期间买的一些书,毕业的时候大部分都卖了,因为实在不便携带:

这是带去图书馆自习室的书(常占位置)

这是毕业整理的书:


买这些书花了我不少钱,大家都知道计算机这些书一本就是五六十、七八十起步。大学四年光买书就花了几千块。不过我一直认为这也是我花的最值的一笔投资。

下面就是我自己整理的电子书,绝不是在网上那种打包下载的,而是自己需要学到某个方向的时候去网上挨个找的,最后汇总而成。这部分我是会不断把它完善的,当成自己的小电子书库,不多,但贵在精

我把大学时候这些电子书库、简历模板、博客汇总、谷歌大佬的刷题笔记都打包放在这了,点击下方可以直达。

书单推荐,少即是多(含下载方式)

最后真心想说一句,滴水穿石非一日之功,学习计算机还是需要沉下心来好好啃书、看源码、写“轮子”(注意不是在大学疯狂去写web应用做crud)。逐渐构建起属于自己的计算机知识体系,然后选择一个专业方向不断专研。

当然了,多刷题也可以提高编程能力,所以在这里也推荐一份我看过的谷歌大佬开源的刷题笔记:


大家觉得有帮助的话,也可以帮我点个赞,笔芯~ 记得关注我哟 @编程指北


------update---

————分割线——

很多小伙伴在评论区问学习路线, 我找来了Linux C++ 后台开发方向的,强烈建议看看这个回答,一定对你有帮助!

评论区还有小伙伴想要我的书单,这里也给出我以前写过的一篇文章,大家感兴趣可以去收藏下:

另外,推荐一篇我写的关于指针的文章,绝对深入浅出~

在这顺便推荐一个 Github 开源仓库,基本包含了常见的 CS 编程学习书籍,可以 star 一下,需要的时候直接去上面找书:

觉得有帮助的话,帮我 @编程指北 点个赞哟~




  

相关话题

  计算机是如何在物理层面实现“递归”的? 
  如何看待2022年秋招Java后端开发岗一片红海? 
  计算机语言可以以变量名作为类型判断么? 
  为什么现在的优盘基本上都没有写保护了? 
  如何滴水不漏的学完C语言? 
  大学计算机专业有非编程的吗? 
  如何想学点编译原理,又不想直接看龙虎之类的书籍,太多理论,干燥? 
  大一学生,刚开始学习编程,但感觉自己并没有天赋怎么办? 
  现在越来越多大学生转cs,那计算机专业会不会供大于求? 
  我大一用 30 多行代码写出了 36 以内的进制转换,属于什么水平? 

前一个讨论
国内985去英国爱丁堡大学读硕士亏不亏?
下一个讨论
在我国,公民和居民什么区别,为什么身份证背面印的是“居民身份证”,而不是“公民身份证”?





© 2024-05-05 - tinynew.org. All Rights Reserved.
© 2024-05-05 - tinynew.org. 保留所有权利