你应该在大学学到的10个方面的知识

本文是翻译,版权归原作者所有


原文地址(source):http://jj09.net/10-things-learn-university/

我去年毕业了,想总结一下我的收获。在StackOverflow Podcast #36,Eric Sink说道:

优秀学生在课堂上学习计算机科学,然后自己编程。

我记得大学朋友在讨论他们第一份工作时的情景了,他们有90%的人会说类似的话:“这1个月的实习比我在大学3年学得都要多”。我不谈论我的工作了。刚开始我认为,他们很可能找了一个比我好得多的工作或实习岗位。我用了3年时间才理解了这种现象……这不是现象。他们认为,他们学了很多,因为他们能够使用框架搞定一些工作,框架在背后做了一些魔法(比如创建简单的、带有数据库的CRUD web应用程序,所有东西都是自动化的)。然而,在框架和硬件之间还有大量的技术。我注意到,很多开发人员不关心这一点。而且,没有它们你照样能够搞定工作。就像出租车司机不需要了解这个城市,只要他有GPS。我认为了解基础是有好处的。

有一些课程,能够帮你学到技术,在你找到工作后,你将不会感到烦恼了。同时,它们值得去学习,帮助你理解计算机工作原理,在我看来,将对你未来的工作有帮助。

下面是你应该在大学学习的10种技术/课程(大学是用来学习的最佳时机):

  1. 计算机架构:了解计算机工作原理,它们怎样表示数据(补码【注1】、IEEE二进制浮点数算术标准【注2】)。有两本不错的书:《计算机体系结构量化研究方法》和《计算系统的要素》。

  2. 编译器:计算机结构的某种补充。它连接着软件和硬件。编译器的经典书籍有《编译原理》(又叫“龙书”)

  3. 算法和复杂度(O标记):这是个有难度和有挑战的主题。需要大量时间,但是未来会得到回报。算法和计算复杂度的圣经是Cormen的书:《算法导论

  4. 自动控制(DFA、NFA、图灵机【注3】等):“要认识到,语言里的字符串是表达任何问题的一种正式途径”。做为凌驾于所有软件和硬件建立之上的一种科学,这是计算机科学的首要法则。

  5. 汇编语言:帮助理解并行应用程序,以及出现在其中的bug。比如,由指令重新排序所引起的。

  6. 系统程序设计:对于云计算和虚拟机,这仍然是有用的主题,能够让你理解软件是如何与硬件交互的。

  7. 嵌入式设备:物联网是未来,它也是有趣的(参看Jon Gallant的博文,他加入了微软的物联网团队)。

  8. 人工智能(AI):每一年,设备都更加智能(包括你的手机医疗设备Google汽车)。根据比尔盖茨的预测,AI将在未来10年爆发。大学是学习AI基础的绝佳场所。

  9. 计算机网络:学习网络是不错的,数据是怎样在导线(包)中流动的,什么是DNS、CDN,我们在快速和可靠的数据交换中面临什么样的挑战和限制。推荐书目:A. Tanenbaum写的《计算机网络》。

  10. 计算机安全:每个人都想成为黑客。首先,你需要了解基础,还要警惕到,这个主题每年都在变化着(sha1正在被sha2取代,因为它不再“足够安全”了)。因为它变化如此之快,还没有更新及时的通用图书。然而,《Unix與Internet安全防護─網路篇》仍然非常有价值。为了及时跟进安全问题,我强烈推荐你关注Troy Hunt的博客(在我看来:它是互联网上最好的博客之一)。

有人会说:“图灵机?我会用到它吗?……很可能不会。”。但是,重申我在讨论计算机科学,而不是编程。没有这些知识,你照样可以生活,并作出让人惊奇的东西。就像刚才提到的出租车司机,它能够把顾客从地点A载到地点B。但是……当GPS没电了或出错了,他能够做什么呢?如果两个街道有着同样的名字,该怎么办呢?或许GPS能够标示出来,也可能没有。还有,好的出租车司机知道哪条路更快,在某些时段他将遇到堵车,这是GPS做不到的。

我们经常不会感激在大学里学到的知识,但是它在日常工作中一直默默地帮着我们,就像游泳和跑步对参赛拳击手的帮助一样

如今什么是酷的,那就是你能够在线免费学习计算机科学

总之,你是想学习计算机科学,还是只学习如何编程,这完全取决于你。我认为最好两者都了解一下。你的观点呢?你将从我的前10项增加或移除某些项吗?

译文:你应该在大学学到的10个方面的知识 》| 腊八粥