Reading 1: Static Checking > The Goal of 6.005
原文地址:https://courses.edx.org/courses/course-v1:MITx+6.005.1x+3T2016/courseware/Readings_Videos/01-Static-Checking/
6.005的目标
我们这门课的主要目标是学习如何在生产软件时做到:
- 远离bug.正确性(目前正确的行为)和防护性(未来正确的行为).
- 易懂.必须和未来需要懂或者改(修复bug或者添加特性)这个程序的程序员交流.这个程序员可能是几个月后的你.你会惊讶于你忘记了多少如果你没有将其写下来,以及会多么感谢你自己如果你用了好的设计.
- 准备改变.软件经常改变.一些设计使得它容易改变,另一些要求你抛弃原先的代码重写很多代码.
软件还有其他重要的属性(比如表现,可用性,安全),而且这些特性可能要和这三个特性做出取舍.但是这三个是我们在6.005课程中最关心的三个,也是软件开发者在制作软件的日常实践中一般优先关心的.很值得考虑学习这门课教的每一个语言特性,每一个编程实践,每一个设计模式,并理解他们和这三大目标的关系.
为什么这门课使用JAVA?
为什么这门课使用Java而不是Python或者Javascript?
安全性是第一个理由.Java有静态检查(基本是类型检查,但是也有其他类的静态检查,类似你的代码返回值要是你方法声明的了返回值).我们在这门课上是学习软件工程,远离bug是做法的关键原则.Java转盘的安全性达到了11,这使得它是一门好的语言用于学习好的软件工程实践.当然用类似Python的动态语言也能写出安全的代码,但是用一门安全的静态语言会让你更理解需要做些什么.
普遍性是另一个原因.Java在研究,教育和产业中被广泛使用.Java在许多平台上运行,不仅仅是Windows/Mac/Linux.Java可以用于网络编程,无论是服务端还是客户端.而且安卓原生语言用的就是Java.尽管有其他语言更适合教编程(想到了Scheme和ML),很遗憾这些语言在现实生活中并没有被广泛使用.你简历中Java内容会被认作有商业价值的的技巧.但是别误解我们了:你将学习到的现实技巧并不是只适用于Java,而是可以用于你编程用的任何语言.这门课最重要的内容是在语言时尚中存活出来:安全性,简洁性,抽象性和工程直觉.
在任何情况下,一个好的程序员必须是使用多门语言的人.编程语言是工具,你必须用正确的工具去完成工作.如果你是一名在工作的程序员,你在未来肯定必须拾起另一门语言,因此现在开始学习第二门语言吧.
作为它普遍性的结果,Java有着大量的追随者和有用的库(有丰富的自带库和网上的其他库)和非常赞的免费开发工具(比如Eclipse这样的IDE,编辑器,编译器,测试框架,分析工具,代码覆盖工具,风格检查工具).甚至Python在生态系统的丰富性上也不如Java.
也有一些很遗憾使用了Java的理由.Java很难用语言描述,这使得例子写得更长了和更难读懂了.Java很大,在这么多年积累了太多特性.Java有内在不一致性(比如final关键词在不同的环境中意味着不同的意思,而且static关键词和静态检查没有任何关系).Java背负了一些老的语言如C/C++的沉重包袱(基本类型和switch声明是好的例子).Java没有类似Python的解析器让你可以使用一小段代码来学习.
但是总的来说,Java是目前来说用于教如何写远离bug,易懂,准备改变代码理想的选择.这也是我们的目标.