程序员书库(ID:OpenSourceTop) 编译

链接:-books/programming-computer-science-ana-bell/

电脑是如何工作的?什么是精心编写的代码?如何编写算法?在本文中,麻省理工学院电气工程和计算机科学系的讲师Ana Bell将和大家分享有关方面的最佳书籍。

编程是每个人都应该具备的技能,一旦你能以计算的方式解决问题,它就能让计算机自动化地帮你完成很多任务,而且编程很容易上手,无论你学何种语言,都可以在网上找到大量的学习资源

每个人都应该有计算思维的能力

但是我们真正想要学习的技巧是逻辑,或者说是学会计算的方式思考,如果你想要在数学和英语这两个领域出类拔萃,你需要一种不同的思维方式。计算机科学正好处在中间位置,你确实需要一种逻辑思维方式,同时也需要一点创造力,所以,每个人都应该有计算思维的能力

首先,要推荐的第一本书是:

1、《编码》

选择这本书是因为它告诉你电脑是如何工作的,很多时候,许多人认为显示器就是电脑,我不知道这种误解有多普遍,但它确实存在。这本书从最基础的知识开始,然后逐步提升难度,它让你用你的想象力去构建一台计算机,它很容易阅读,不是教科书式的,你完全可以躺在沙发上阅读它,它向你揭开了计算机的神秘面纱,不涉及任何理论,而是介绍了计算机的各个组成部分以及它们是如何组合在一起的。

如果你不想学习编程,只是想了解计算机是什么以及它背后的历史故事,这也是一本很好的书,因为自Petzold写这本书以来,我们如何构建计算机的细节并没有改变。

关于编程语言入门推荐

第一本书,我们谈到了硬件,如果你真的想学习编程,还需要学习编程语言,如今越来越多的人想要学习编程,而像C / C++和Java这样的语言的语法不容易理解。而Python之所以有趣易学的一大原因在于它就像是把英语粗略地翻译成代码一样,如果你大声读Python代码,你就能知道这段代码发生了什么,而且在Python中,你也不必像在C/ C++或Java中那样声明变量的类型;这使得它更容易访问。

还有另一个原因是数据科学的推动,使Python更加热门,因为它接近接近Matlab或R等语言。所以Python是最容易上手学习的,如果你不打算在计算机科学和编程领域工作,那选择Python就足够了。Java是我推荐的另一门编程语言,然后才是C++

而学习编程,你甚至不需要用到书籍,网上的资源已经够多了。在网上搜索内容要容易得多,也快得多。当你有一个问题时,很可能已经很多人人在StackOverflow这样的站点上提问并回答了它。这是书籍无法与之竞争。但是,你能从编程书中得到的是编程思想背后的思考过程。因此,我试图把重点放在介绍这些内容的书籍上,而不是特定于某一门语言的书籍,这些书籍介绍了了那些无论你是何种编程背景,都应该应该了解的编程思想

2、《代码整洁之道》

本书将向你展示如何编写将来自己或其他人都可阅读的代码,Martin以一种非常平易近人的叙述方式,我喜欢的是它直接切入主题,一开始就讨论代码。它从最基础的知识开始,也就是如何在代码中的对象如何命名,在编程过程中,你不可避免的要和对象打交道,要想代码可读,对象的命名是非常重要,而这一点却经常被忽略

这本书的基调有点对话式的,你不需要编写代码,哪怕你不懂编程都能看的懂,每一章都是从一个小场景开始的,通常是两个人之间的对话开始,为这一章要讨论的内容设定了场景。

这种可读代码的想法是一种传统的建议,就像是老师给学生的建议。但是可读性,通常被认为是编程中最无聊的部分之一。你如何让你的学生相信干净的代码是有价值的变得很关键,至少我还没能说服我的学生,有时甚至连我自己都做不到,所以我推荐的书中有两本书是侧重于代码的可读性方面

《代码大全》

这是一本很长的书,有点类似《代码整洁之道》,但它更深入,《代码整洁之道》以Java语言为例,这本书则是以多种不同的编程语言为例,强调它所要教授的概念并非是特定于任何一种编程语言,它不教你代码,它教你软件构建:注释、类、调试、重构……

如果说《代码整洁之道》是为自己编写代码的个人提供了最佳实践,那《代码大全》就是专门为企业编写软件的人编写的,它甚至在书中列了一个小小的清单,你可以通过这个清单检查你的代码是否可读和可调式,虽然这是一本很老的书,我记得我的爸爸也读过这本书,但到了今天这本书仍然很有意义

《算法》

这本书通过Java介绍了一些非常基本的算法,这是我在普林斯顿大学研究生院合作过的两位作者写的。有两本主要的关于大学算法的书,这只是其中一本。它们都展示了你需要知道的算法,这一个用了一种更容易吸收的方法。书中介绍的每个算法都是用Java实现的,所以如果您想运行它,可以复制代码并自己执行。我喜欢它的实用性。它不会让你在数学术语和证明上焦头烂额。

这本书就不建议你躺在沙发上读了,你可能需要更加积极主动一点,但就算法书籍而言,这本书还是很容易理解的,如果你要去参加编程面试,它也会对你有所帮助的,面试官通常要么要求你写一些算法,要么写一段代码,而事先阅读这本书是非常有用的

《类型和程序设计语言》

最后这本书相当高级,它是关于编程语言设计的,我们周围的物理世界——物体、自然界的食物等等,我们已经想出了用数学来帮助我们以一种系统和逻辑的方式帮我们描述正在发生的事情,计算机科学也是一样的,计算机内部发生了什么。围绕计算的思想,你可以构建类型系统。类型系统是本书提出的数学方法,它们帮助我们描述计算机或者程序中发生了什么,发生了什么操作。它帮助我们推断程序在做什么,并且能够帮助程序员在编写代码时避免错误。

这不是一本写给初学者的书,但如果你对编程语言背后的理论感兴趣,这是一本好书。在第一本书中,您了解了硬件,在下一本书中,您了解了良好的代码,然后是算法。现在你可以学习编程语言本身,如何编写一种语言,以及它们如何实现它们的功能。

你确实需要对数学有很强的理解,但不是人们认为的传统数学

人们经常说要学习计算机科学,你就必须擅长数学,确实如此,但不是人们认为的那种传统数学,当人们想到数学时,他们想到的是运算,加法,计算。你需要的数学理解更多的是在逻辑方面,思考二元选择——一些“正确”或“错误”的东西。这种逻辑思维方式,即计算机的思维方式,这种方式也可以称之为程序员思维。

总而言之,选择一种编程语言,坚持下去,尽可能的多学习,是什么语言无关紧要,即使你是从Scratch这样的视觉语言开始,也很好,因为证明你开始思考计算机科学,以及学习计算机思考的逻辑方式,这已经在计算机科学专业取得成功迈出了关键性的一大步

关于Ana Bell

麻省理工学院EECS系讲师,2007年毕业于加拿大不列颠哥伦比亚大学。2009年获得了普林斯顿大学计算机科学硕士学位,并于2013年获得了普林斯顿大学的计算机科学博士学位。出版的书籍有《Get Programming: Learn to code with Python》

注:原文为访谈式,译文有改动

●输入m获取到文章目录