01 每个计算机专业的同学都要掌握的知识
每个计算机专业的同学都要掌握的知识
What every computer science major should know
https://matt.might.net/articles/what-cs-majors-should-know/
https://matt.might.net/articles/what-cs-majors-should-know/
计算机专业的课程繁多并且学科发展迅速,而且随着时代的变化,直接套用现有的计算机专业课程列表,则有可能忽略一些将来可能变得重要的知识点。
对此 Matthew Might 在文章中概括为以下四点:
要获得一份好工作,学生需要知道什么?
为了一辈子都有工作做,学生需要知道什么?
学生需要知道什么,才能进入研究生阶段?
学生需要知道什么,才能对社会有益?
首先,对于我们每个人来说,作品集(Portfolio)会比简历(Resume)更有参考意义。所以,在自己的简历中应该放上自己的一些项目经历,或是一些开源软件的贡献,或是你完成的软件的网址等。
最好有一个自己的个人网址,上面有一些你做的事、自己的技能、经历,以及你的一些文章和思考会比简历更好。
其次,计算机专业工作者也要学会与人交流的技巧,包括如何写演示文稿,以及面对质疑时如何与人辩论的能力。
最后就各个方面展开计算机专业人士所需要的硬技能:工程类数学、Unix哲学和实践、系统管理、程序设计语言、离散数学、数据结构与算法、计算机体系结构、操作系统、网络、安全、密码学、软件测试、用户体验、可视化、并行计算、软件工程、形式化方法、图形学、机器人、人工智能、机器学习、数据库等等。
详读本文可以了解计算机专业知识的全貌。
这篇文章的第三部分是一个知识资源向导库,给出了各个技能的方向和关键知识点,可以跟随着这篇文章里的相关链接学到很多东西。
02 基于Github的编程语言 和代码质量研究报告
这是一项有趣的研究,作者从GitHub上分析了728个项目,6300万行代码,近3万个提交人,150万次commits,17种编程语言,他们想找到编程语言对软件质量的影响,其中每个语言最著名的三个开源项目如下图:
每种编程语言排名前三的项目
他们还对编程语言做了一个分类,找到不同类型的编程语言的bug问题。下图是各个编程语言的bug情况。正数说明高于平均水平,是负数则是低于平均水平。
结论是,从查看bug fix的commits的次数情况来看,C,C++,Objective-C,PHP和Python中有很多很多的commits都是和bug fix相关的而Clojure,Haskell,Ruby.Scala在bug fix的commits的数上明显要少很多。
其次,函数式编程语言的bug明显比大多数其它语言要好很多。有隐式类型转换的语言明显产生的bug数要比强类型的语言要少很多。函数式的静态类型的语言要比函数式的动态类型语言的程序出bug的可能性要小很多。
03 大家都应当读一读的书
《深入理解操作系统》:
从程序员的视角,看计算机系统
本书适用于那些想要写出更快、更可靠程序的程序员。通过掌握程序是如何映射到系统上,以及程序是如何执行的,我们能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。
此外还推荐给大家以下四本书:
《程序员修练之道》
指路明灯,更多的是软实力的辅导
《设计模式》
面向对象设计的经典书籍
《算法导论》
本科生教材
《代码整洁之道》
细节之处的效率,完美和简单