2021结束了,这里来写一下自己的年终总结
以前我是从没有写过这方面的东西的,一般都是向新的一年的展望。但是这一年比较不同,算是比较特殊的一年吧。
这一年我找到了自己的大方向,同时由于各种契机学到了非常多的东西。这一年对我的转变不仅仅是知识上的累积,同时也是认知上的一次转变。按照我最近看的一本书来说,这是我的第一次跃迁,认知跃迁。
而这些改变,主要是由读书引起的,所以这里我就先说一下我这一年读到的书。当然了,一些我认为不是那么质量高的书就不会在这里提及了。
年初的时候,我在做深度学习方面相关的学习。
《深度学习笔记》
给我了一个深度学习方面的一个大概的overview,走马观花似的带我过了一边深度学习的基础的知识点,让我对这方面的学习有了一个大体的认识。
《深度学习框架PyTorch:入门与实践》
个人感觉是pytorch一个比较不错的入门书,跟着书上的例子都走了一遍,后面就有自己可以阅读或者编写深度学习代码的基础能力了。
然后深度学习方面的学习与项目结束了以后,我自认为不太适合这个方向,所以转而去寻找新的方向
《深入理解计算机系统》
这本书可以说是相当神奇了,如果没有这本书我可能现在还是一个在计算机科学门前的一个傻子。这本书虽然蕴含了相当多的知识,但是他带给我的更多的是打开了计算机科学的大门,让我领略的计算机科学的神奇与魅力。多的不说,光是看豆瓣的评分也可以看出这本书的含金量。如果计算机系的学生没看过这本书,我甚至觉得他白上了计算机系的课程。
《ANSI Common Lisp》
我认为是common lisp的入门书,推荐给希望学习common lisp的同学。每一章的篇幅都不大,推荐一边看一边自己打开emacs跟着写一写代码,做一下书后面的练习题。
《C陷阱与缺陷》
貌似是很多人都推荐的一本书,我比较推荐有经验的C程序员浏览一下,书的内容不多,用不了多久就可以看完。简要的扫一下差不多就够了,也可能是我当时没有理解到位,我感觉这本书给我的提升并不大。
《UNIX环境编程》
著名的APUE的前传,十分推荐。开始介绍了UNIX环境下的一些工具,比如awk,sed,shell,同时也涉及到了一些基本概念,比如inode等。后面的章节,尤其是通过yacc和lex带你构建hoc的过程非常精彩。推荐对编译有兴趣,但是对本科课程失望或者没有上过本科编译课的同学看,看完你也可以构建自己的脚本语言。
《深入探索C++对象模型》
C++程序员必看,虽然书里面有不少奇怪的错误,但是不妨碍我们理解C++内部运行的一些细节。比如虚函数,虚继承等实现的细节。当我们了解了内部运行的原理,有了对C++对象模型的理解,我们才能更好的利用C++写出高效的代码。
《程序员的自我修养》
可以说是CSAPP第七章的一个补充,如果CSAPP第七章看的比较迷糊的同学建议去看一下。而且由于篇幅受限,CSAPP第七章中很多的assertion没有一定的基础都是很难理解的,这本书可以给你一个更清晰全面的解释。优秀的system programmer必看。
《数据库系统概念》
和CMU15445一起看的书。书中的内容较为全面,对于一个刚入门数据库的本科生是一个不错的读物。这本书偏向理论,所以在学习数据库的过程中需要伴随一些代码的练习才能达到更好的效果。
《计算机组成与设计:软件硬件接口》
组成原理入门书,推荐看RISCV版的。内容比较清晰,而且整本书的篇幅也不算很大。尤其是CPU和Memory那块要好好看一下。仍然是建议有代码的练习,这里推荐CS61C和这本书辅助看。
《计算机体系结构:量化研究方法》
对上一本书的一个更加深入的解释,同时介绍了很多高级的技术与算法,比如用于乱序执行的scoreboard,缓存一致性协议等。后面还设计到了memory consistency这个比较关键的话题。可以说是通往高级的system programmer的必经之路。
《计算机体系结构基础》
看上面两本书后,这本书可以说是一个用来填缝的书,可以帮我们弥补一些知识上的欠缺。但是总体的主干我们通过上面的书已经抓住了,这里就是一个细节的阐述。
《智能计算系统》
对于目前大火的AI的底层系统的讲解。从软件到硬件都有涉及,推荐对tensorflow或者pytorch这样深度学习框架有兴趣的同学看一下。
《用Python实现深度学习框架》
看完上面的书,希望自己实现一个深度学习框架的同学可以看一下。总体来说将的非常不错,跟着书中的内容可以对一个简单深度学习框架有一个比较清楚的认识,然后就可以自己写一个了。我自己也写了一个PyToy,优化了部分算子的实现,并修改了反向传播的过程,以及用了CUDA加速。有兴趣的同学可以去github上搜一下。
《现代操作系统:原理与实现》
理论部分讲的相当不错,是一个学习操作系统的很棒的书。但是我认为内容有点难,如果是完全零基础还是推荐大家去看OSTEP。里面涉及了不少前沿的技术,推荐大家对操作系统有一个整体的了解以后在去看。
《xv6: a simple, Unix-like teaching operating system》
xv6的配套书,学习mit的操作系统必看。结合这本书和xv6的源码能对操作系统有一个更加具体的了解,让我们抓住操作系统的主干。
然后是一些非技术书籍以及我没有完全读完的技术书
《C programming laguange》
K&R那本,不用多说,在xv6中你甚至可以看到这本书里的代码
《fundmental of computer graphics》
虎书,配合games101一起看
《DDIA》
目前正在看,就前几章看就可以看出这是本相当nb的书,讲的是近期的各种技术,比如我们现在熟知的NoSQL,MapReduce等。
《操作系统概念》
我看了前几章,总体还是不错的,但是更加推荐xv6和现代操作系统一起看
《unix传奇》
讲述了unix的发展历史,饭后茶余时刻看看
《七年就是一辈子》
这本书并没有教会我多少,因为书中的主要观点都与我基本是一致的。这本书对我来说更大的意义是让我知道我不是一个人在这样思考,同时也肯定了我的思维方式。
类似的书还有很多,有的时候我看书并不是学习新的观点,而是验证我自己的观点。比如《打破思维里的墙》,《把时间当作朋友》等
闲书
《银河帝国》
我个人很喜欢这种类型的科幻,配合群星一起食用最佳
书的部分大概就说到这里,然后就是我今年的第二个契机。我有幸参加了GSOC2021,并在ScummVM社区进行了5个月的开发。可以说这5个月我学到的东西不光光是知识层面的,更多的是实践,与社区成员的相互沟通,合作。我也成功修复了一个游戏引擎,并发布了几款岁数比我还大的游戏。这是第一次我体会到我在做一些真的东西,而不仅仅是玩具。让我更加深刻的体会到了coding的乐趣。虽然我之后一直没有时间回到社区继续开发,但是我仍然一直认为那里就是我在cyberspace的家,因为我是在那里见识到这一切的。我的mentor教会了我很多东西,也一定程度上改变了我的思维模式,让我的学习能力有了一个质的飞跃。
第三个奇迹就是我开始学习国外的公开课了,以前一直是收藏夹吃灰,现在终于是走了下去。学习的很关键的一部就是要开始做,当开始做了以后我们才会发现很多东西并不难,之前只是自己吓自己罢了。学习过程中勇敢的面对失败,虚心请教,仔细的思考。可以说学习的时候我学到的不仅仅是知识,也有学习的方法,不断探索自己的学习方法,提高自己的行动力,这才是我们在大学真正要学的东西。正所谓学习如何学习。
这里也简单列举一下我比较推荐的公开课
CMU15-213
CSAPP配套课,有配套的lab一定要做一下。书本身很关键,lab的作用就是通过实践让我们理解每一个具体的细节,从而加深我们对知识,以及知识里面的东西的理解。
GAMES101
计算机图形学入门课,对CG有兴趣的同学一定要看
CMU15-445
数据库入门课,配套的project是完善一个小型的数据库。Andy Pavlo教授是我非常钦佩的对象,希望自己也能像他一样为这个方向带来生机。
CMU15-418
并行计算入门课,有一定的难度,讲的内容也是相当modern。配套的project可以让我们对现代的高性能计算方面有一定的了解
MIT6.S081
操作系统入门课,两位教授深刻的诠释了什么叫学知识抓主干的思想。学完有种自己写一个kernel的冲动
CS61C
组成原理入门课,里面会涉及RISCV的内容,可以用作xv6的前置课程
写到这里基本上今年做的事也差不多了,其实看一下也没有多少东西,主要还是自己认识到这些事情比较晚。但是我现在有充足的信心,给我一定的时间我就可以达到很高的高度,所以今年给我的转变更多的是认知上的,让我对未来的道路充满了信心以及动力。
就这样,明年加油。
文章评论