编程的第五个十年:J代表Java

一段非常个人的编程历史中的第五章第一部分

编程的第五个十年:J代表Java

在自己的一类

尽管Microsoft并不认同Oracle对Java的所有雄心壮志,但我们同意它对于软件开发人员而言是非常有价值的工具。
〜比尔·盖茨

Sun Microsystems制定了宏伟的计划。 他们想从工作站的据点转移到个人计算机。 这将使他们最近开发的SPARC处理器的市场(和利润)增长一百倍。 他们与由软件企业家Mitch Kapor创立的公司ON Technology共同创建了Microsoft Windows的替代产品。 尽管该合资企业并未成功,但通过一系列相关事件,Sun最终拥有了用C编写的SmallTalk“克隆”。

Sun继承的SmallTalk克隆包括虚拟机 ,IDE和语法。 它最初是用C ++启动的,但最终是使用Objective-C交付的。 那是Java的基础。

在上一篇介绍Smalltalk的文章中,我没有提到它是使用虚拟机或VM运行的。 虚拟机背后的想法是,与其使用编译器将源代码转换为特定处理器的操作码,不如将其编译为仅作为纸上设计存在的虚拟CPU的通用操作码。 SmallTalk是第一种专门依赖于VM的编程语言。

VM是一个仿真器:它通过将其虚拟操作码转换为其运行的物理CPU的实际操作码来仿真该虚拟CPU。 您可以编写任意数量的虚拟机,它们可以在IBM CPU上运行,可以在Sun SPARC上运行,可以在Intel芯片上运行,可以在手机的ARM芯片上运行。 将程序转换为VM的通用操作码后,它将在所有这些平台上运行。

Sun的营销人员对此做出了很大的贡献,但是Java并不是第一种无需重写即可在许多平台上运行的语言。 在Java之前很久就有ANSI C和USCD Pascal和SmallTalk。 现在,我们有了JavaScript,HTML和其他十二种语言,它们可以非常有效地在任何平台上运行一个源代码。 真的不是那么特别。

闲聊中的橡树壮大

1990年,Sun开发人员之一的帕特里克·诺顿(Patrick Naughton)厌倦了他的团队中“无方向的,热情洋溢的人”,他对首席执行官斯科特·麦克尼利(Scott McNealy)表示,他打算离开NeXT加入乔布斯。 简而言之(长话短说),麦克尼利(McNealy)向诺顿(Naughton)提出了他无法拒绝的提议:大幅加薪,一些存货,并有机会挑选一个小团队并从头开始发明一个项目。 诺顿聘请了他的导师詹姆斯·高斯林(James Gosling),还聘请了为Sun做业务开发的交易员迈克·谢里丹(Mike Sheridan)。

他们将其命名为“绿色项目”并建立了臭鼬工厂¹,并决定制造消费类设备。 具体来说,是一种他们试图出售给有线电视公司的交互式电视设备。 戈斯林决定在SmallTalk克隆的基础上继续发展,他以办公室窗外长出的一棵树的名字改名为Oak。 他添加了与Objective-C附带的类库相似的类库,并对其进行了高度优化以提高性能(消费电子产品没有太多的CPU或内存)。 他们为此工作了四年,未能取得商业成功。 随后,Sun做出了当时令人惊讶的举动:他们在Internet上免费发布了SmallTalk克隆供任何人使用。 并称之为Java。

关于Java作为一种编程语言,没有什么特别的。 我知道不乏Java奉献者随时准备为Java为什么真正伟大而争论不休! 但这确实不是那么好。 没那么糟糕,但也没有那么好。 但是,它确实具有几个非常特殊的优势,从而使其在市场上无处不在。

它是专为*机构(例如有线电视公司)控制的电视机顶盒而设计的,它擅长两件事:在很小的内存空间中操作,以及将程序作为对象通过网络发送。

这就是网络浏览器公司Netscape决定正式采用它并在浏览器中包含Java虚拟机的原因。 这实际上是一个很好的决定。 它使浏览器成为与服务器上较大的应用程序通信的小型应用程序的传递机制。 这是使基于Web的应用程序成为可能的原因,因为如果没有它,HTML的第一个版本将无法支持足够丰富的用户界面,以允许Web应用程序与桌面应用程序成功竞争。

Java还包括一个广泛且有用的类库。 正如Objective-C包含的类库使它成为更广泛的程序员使用的更具生产力的语言一样,Java的类库也做同样的事情,并且比C ++更易于使用。

总之,它是轻量级的(起初),解决了一个实际问题(丰富的Web UI),具有良好的库,并得到了一家非常稳定的大型公司的支持,该公司将永远存在(或者在当时似乎是这样)。 与SmallTalk不同,任何人都可以免费使用它。

随着基于Web的应用程序成为规范,大型组织的IT部门对Java的采用呈指数增长。 我曾经在一个网络论坛上读过的人曾经说过(毫无判断)Java是新的COBOL,“因为它已经成为企业应用程序的事实上的新标准”。 我喜欢这种比较。

由于它的受欢迎程度,已经在改善Java的原始缺陷(主要是技术方面的东西,太无聊而无法理解)方面投入了很多精力。 从结果的角度来看,Java做得非常好。 但是,我仍然不喜欢它。 称我为小资,但就像COBOL一样,对于我来说太冗长了。 (对我而言)阅读Java就像是去参加社交活动并被那个家伙迷住了。 一个持续不断地自我介绍的单词,用十美元的单词表示,而五十美分的单词就可以了。

这是Java中的“ Hello World”:

public class Main {
public static void main(String[] args) {
System.out.println(“Hello, World!”);
}
}

它在Python中。 我喜欢Python。

print(“Hello World”)

在我非常个人的看法,Java的占有传统3GLs地方(如之间的灰色地带梅尔 ,你不需要知道,因为别人已经完成了大部分的工作适合你),你一定要了解如何计算机工程,以及第四代语言。 Java比各种C语言更重要,是一种普通的程序员可以在其中使用杂物癖编程来启动和运行似乎一开始就可以运行的程序的语言,但这些程序包含定时炸弹,这些定时炸弹是由随意和无知的复制和粘贴所创建的代码。

货物崇拜

*对此说:

货物崇拜编程是一种计算机编程样式,其特征在于仪式性地包含没有实际目的的代码或程序结构。 货*编程通常是程序员不了解他们试图解决的错误或表面上的解决方案的征兆。...货*程序员一词可能适用于非熟练或新手计算机程序员(或一个不熟悉手头问题的计算机程序员)复制了一些从一个地方到另一个地方的程序代码,很少或根本不了解它的工作方式或在新位置是否需要它”。

它增加了:

“货运*一词,作为习语,最初是指第二次世界大战后在南太平洋生长的土著宗教。 这些团体的做法集中在建造精美的飞机和军事起落跑道的模型上,以期召唤在战争中带来奇妙货物的神似飞机。 该术语在计算机程序设计中的使用可能源自理查德·费曼(Richard Feynman)对某些实践的描述,即“货物崇拜科学”。

太多的Java程序员(例如LISP koan的新手)并不真正理解他们正在使用的库,或者他们在Internet上找到的代码或从其他项目中复制的代码,看起来似乎可以完成这项工作。

公平地说,对于使用任何SmallTalk派生工具工作的程序员来说都是一样的,这些派生工具附带了广泛的类库,并且拥有大量的公共领域软件。 除了Haskell以外,几乎是1990年以后引入的所有流行语言。

与接近金属的编程相比,大多数现代语言都可以使没有才华的程序员进行懒惰编程。

“我认为Java是21世纪的COBOL。 它有点重量级,冗长,每个人都喜欢讨厌它……尽管不是每个人都承认这一点。 但是经理有点喜欢它,因为看起来您已经完成了很多工作。 如果100行Java代码完成一项任务,那么看起来您已经写了100行,即使使用另一种语言,也可能只需要5行。”
〜PERL语言的创建者Larry Wall
https://www.youtube.com/watch?v=LR8fQiskYII

<-该系列的上一篇文章

[1]臭鼬工厂(也称为臭鼬工厂)是一小组以非常规方式从事项目的人。 该小组的目的是在最小的管理约束下快速开发某些东西。 http://searchcio.techtarget.com/definition/skunkworks

[2]为了公平起见,我将自己描述为一个*的程序员。 如果不复制并粘贴他人的代码,我将无法编写有用的应用程序。 在好日子里,我明白了。

本文是我即将出版的《混沌工厂》一书的节选,该书解释了为什么大多数公司和*无法编写“有效”的软件,以及如何对其进行修复。

From: https://hackernoon.com/the-fifth-decade-of-programming-j-is-for-java-5694bf59c5ae