杀鸡用牛刀——Java 作为第一门编程语言
最近,我和邻居家的一个学生聊了聊他最初的编程经历。他在学校开始学习 Java,但很快就发现那简直糟糕透顶。
我们中的许多人都是用 BASIC 或 Pascal 之类的语言学会编程的。那时没有面向对象,没有复杂的文件输入输出,也几乎没有 modularization(模块化)……但那很棒。在 BASIC 中,你只要写下
PRINT "HELLO WORLD"就完成了。这实际上就是一个能运行的程序,解决了一个基本且反复出现的问题:在屏幕上输出一些文本。
如果你想在 Java 中做同样的事,就得写:
public class Main {
public static void main (String[] args) {
System.out.println("Hello, world!");
}
}你看,要完成一件能想到的最简单的任务,必须掌握多少编程知识?向一个编程新手描述这个程序,听起来可能会是这样:
创建一个 Main 类,其中包含一个返回 void、接收单个字符串数组参数的 main 方法,并使用 PrintStream 类的 out 对象的
println方法,将你的文本作为唯一参数传入。
——请千万别忘了括号。这样一来,你最初几小时的编程学习肯定会非常有趣。
好吧。那么有什么替代方案呢?我承认,由于缺乏成熟的图形 standard library(标准库)(Java 也没有)以及较弱的 scalability(可扩展性),现在没人愿意再写 BASIC 了。语言必须简洁明了。它应该足够快,能够处理数值任务,但又不能像死板的 C 类括号语言那样冗长(抱歉了,C++ 的各位)。它应该有平缓的学习曲线,并能提供即时反馈(compiled languages(编译型语言) 往往在这方面表现很差)。它应该鼓励编写整洁的代码,并让最佳实践得到回报。能做到这一切的一门语言就是 Python。
而且 Python 还有更多优点:数百个几乎能帮你处理一切的库、与常见 IDE 的良好集成(Eclipse 中的 PyDev、IDLE……),以及精确而优雅的 syntax(语法)。
下面是上面的程序用 Python 写出来的版本:
print("Hello World")在这个阶段,你不需要了解面向对象、scopes(作用域) 或 function arguments(函数参数)。不需要处理那些杂务,也不用记账。没错,它是一门 interpreted language(解释型语言),但这对初学者来说并不是什么无法接受的问题。
如果你还没有被说服,那么对于有经验的程序员来说,在 Java 中打印和格式化文本输出相对容易,但真正令人头疼的部分从文件输入开始:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class fileIO {
public static void main(String[] args) {
String filename = "test.txt", line;
try {
BufferedReader myFile =
new BufferedReader(new FileReader(filename));
while ( ( line = myFile.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}我听见你在说:“老兄,文件输入输出本来就挺复杂的,事情就是这样。”这话没错……内部实现确实如此。但初学者应该得到一个简单易用的接口。Python 展示了应该怎么做:
file = open("test.txt")
text = file.read()
print(text);这些代码与人们对整个过程的直观理解完全一致:“计算机打开一个文件,读取它,然后把内容打印出来。”就连五岁的孩子也能理解。没人会一上来就解释:“在你读取文件之前,需要先有一个作用于 FileReader 的 BufferedReader……”即使这正是它在内部的工作方式。你首先要解释的是整体图景:教会计算机做有用事情的基本原理。否则,你会开始让初学者感到沮丧,并让他们误以为自己不够聪明,不适合编程。编程是一件有趣的事,而入门是最关键的一步。所以,不要用一层层不必要的抽象破坏这段体验。
链接
- 对本文的回应(将近十年后):为什么 Kotlin 可能比 Java 和 Python 更适合作为第一门编程语言
随机一篇博客