java并发编程:lock

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

在自己的一类

尽管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]特别公平的是,我将自己描述为一个狂热的程序员。 如果不复制并粘贴他人的代码,我将无法编写有用的应用程序。 在好日子里,我明白了。

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

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

java并发编程:lock

java并发编程:lock_编程的第五个十年:J代表Java相关推荐

  1. 微信支撑10亿用户背后核心技术:亿级流量Java并发与网络编程实战

    大家可能不知道,支撑微信10亿用户之后,最基础也是最核心的技术是什么?那就是网络编程. 越是大型互联网通讯项目,越是对网络编程的落地要求越高.落地,意味着对实战的要求更高. 所以,一些朋友更喜欢用类似 ...

  2. 全书重点总结 |《Java并发编程的艺术》| 持续更新

    写在前面 重点章节: 第二章:Java并发机制的底层实现原理 第四章:Java并发编程基础 第五章:Java中的锁 第六章:Java并发容器和框架(ConcurrentHashMap 高频考点) 第八 ...

  3. java并发编程第一课 线程的创建、停止和状态变更

    开篇词: 由点及面,搭建你的 Java 并发知识网 你好,欢迎学习<Java 并发编程核心 78 讲>,我是讲师星星,一线互联网公司资深研发工程师,参与过集团内多个重点项目的设计与开发. ...

  4. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理

    第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...

  5. 判断三角形java代码_java基础编程题之异常处理

    以下是刚开始学习java的基础编程题,每天持续更新java每个知识点的题目,持续练习,不断提高java基本功,培养编程能力.今天的练习的十八题是java的异常处理的使用. 1.检测年龄不能为负数和大于 ...

  6. java 传绝对路径无效_【Java并发005】原理层面:volatile关键字全解析

    一.前言 在Java 5之前,volatile是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果. 在Java 5之后,volatile关键字才得以重获生机. volatile关键字虽 ...

  7. java并发调用_Java并发教程–可调用,将来

    java并发调用 从Java的第一个发行版开始,Java的美丽之处之一就是我们可以轻松编写多线程程序并将异步处理引入我们的设计中. Thread类和Runnable接口与Java的内存管理模型结合在一 ...

  8. java 并发 同步信号_Java并发教程–信号量

    java 并发 同步信号 这是我们将要进行的Java并发系列的第一部分. 具体来说,我们将深入研究Java 1.5及更高版本中内置的并发工具. 我们假设您对同步和易失性关键字有基本的了解. 第一篇文章 ...

  9. Java并发教程–信号量

    这是我们将要进行的Java并发系列的第一部分. 具体来说,我们将深入探讨Java 1.5及更高版本中内置的并发工具. 我们假设您对同步和易失性关键字有基本的了解. 第一篇文章将介绍信号量-特别是对信号 ...

最新文章

  1. BZOJ3526[Poi2014]Card——线段树合并
  2. Node服务一键离线部署
  3. 了不起的华人女数学家们
  4. linux vps 可视化监控,CentOS 7安装Grafana 4及结合Zabbix3.2实现可视化监控图形
  5. xPath(他山之石)
  6. bootstrap-table初始数据,页面一直显示“正在努力加载数据中,请稍后“
  7. java cmd 乱码_java在cmd运行时出现乱码解决方法
  8. vue中实现分片大文件上传
  9. DXGI抓屏优化扩展:鼠标功能+数据获取+多显示器捕获(屏幕共享源码)
  10. fences卸载_【设置方法】win10系统卸载fences的学习
  11. 深度系统安装移动硬盘启动_教你用优启通U盘PE启动安装系统教程
  12. 消防Linux软件图形显示系统,消防控制室图形显示装置
  13. 分享一些java学习网站网址
  14. 穷爸爸富爸爸里面说的“现金流游戏”靠谱吗?
  15. Vim使用全指南 (环境配置,插件推荐,美化) (C++,Python,MarkDown,R...)
  16. 软件测试环境的搭建及详解
  17. 广告图片自动轮播控件
  18. linux的su参数,linux su命令参数及用法详解
  19. KNN+Dense SIFT+手势识别
  20. k8s的kubelet报错PLEG is not healthy: pleg was last seen active 3m41.603110188s ago

热门文章

  1. 用c语言实现字母排列组合,C语言字母排列组合的实现.doc
  2. Oracle SQL_TRACE使用小结
  3. 力扣1006笨阶乘问题
  4. The Fool HDU - 6555
  5. Sql语句操作数据库(修改表,修改数据库)
  6. [转载]Emit学习之旅(1):Emit概览
  7. Harbor安装(待补充)
  8. 关于MySQL认证的东东
  9. 经典sql基本语句大全
  10. 合工大计算机与信息学院保研,合肥工业大学计算机与信息学院(专业学位)计算机技术保研夏令营...