Erlang 之父 Joe Armstrong 于2013年1月24日在 Erlang 邮件列表里发了文章。详细解说了他自己从开始学习编码到发明 Erlang 的整个历史。并且,对如何学习编程;如何成为大牛等一系列热门问题提出了自己的看法。当然,文中槽点无数(包括坚定不移的黑我大PHP)。这也是我觉得有必要翻译出来的原因之一。整体上,虽然是和 Erlang 相关的话题。但是读过之后,会突然领会到 Golang Team 一直以来坚持的一些东西的更深层次的含义。以下是译文。

http://www.admin10000.com/document/1399.html

Erlang 之父 Joe Armstrong 于2013年1月24日发表在 Erlang 邮件列表里发了文章。详细解说了他自己从开始学习编码到发明 Erlang 的整个历史。并且,对如何学习编程;如何成为大牛等一系列热门问题提出了自己的看法。当然,文中槽点无数(包括坚定不移的黑我大PHP)。这也是我觉得有必要翻译出来的原因之一。整体上,虽然是和 Erlang 相关的话题。但是读过之后,会突然领会到 Golang Team 一直以来坚持的一些东西的更深层次的含义。以下是译文。

  回到过去……

  当我开始学习编程的时候(1967年),我可以在 FORTRAN 和(传说中的)Algol 之间选择,不过没有任何人了解 Algol,所以我选择了 FORTRAN。

  编程的一个周期是三个星期

  第一周     在纸上的表格里编写代码,然后送到计算机中心将其转换为打孔卡
第二周     复查打孔卡,如果没问题就放到设备上执行
第三周     得到结果

  编译器遇到第一个语法错误的时候会终止运行,这会将你带回第一周——因此,如果在你的程序中有十个错误,它会需要花费 30 周的时间让它运行起来。

  这种氛围是非常好的——教会大家不要犯错,并且首先思考。

  大约在1970 我在大学的时候,这个周期已经减少到了 4 个小时,并且你可以自己给卡片打孔——仍然是 FORTRAN。

  在1974 我可以访问一台计算机了——霍尼韦尔 DDP 516,有着 32KB 之大的内存。因此 474 FORTRAN 编译器可以在少于一周的时间里编译上百行代码。(大概如此……)

  事情总在发展,我去了 CERN 并且使用可以在一皮秒编译十万行 FORTRAN 代码的 CRAY1(大概比我现在用的手机慢无数倍)。

  还是 FORTRAN。

  在1974(大约)我玩了 DEC10 ——现在我可以编写 FORTRAN、Basic、汇编,并且有了按时间轮换的分时(哇~~)。如果我当时在美国的话,我可能就是比尔盖茨了,可惜那是在爱丁堡。

  在1976 我得到了一份在 NORD10 上用 FORTRAN/汇编编程的工作,而按时间轮换变得非常快。

  大约在1980,我仍然在用 FORTRAN 编程。我不记得那个设备的名字了,所有的文件保存在一个目录中,没有全屏编辑器,没有版本控制系统。我为其大约编写了 15 万行的 FORTRAN 代码。

  1985,我加入了爱立信,神奇的 VAX11/750,需要学习新的语言。再见啦,FORTRAN。

  我学习了(在不同的熟练程度下)Lisp、Prolog、awk、bash、smalltalk、TCL,并且成为了 Prolog 专家(哈哈哈哈~那个小美人……)。

  同时我也对那些随手就能玩的语言进行了尝试(ML、forth 等等)。

  然后(1986)我进入了我的 Erlang 时代(我其实没办法学 Erlang,因为它不存在,所以我发明了它)。它其实是 Prolog + Smalltalk 再配合点错误处理、并发和分布式的产物。

  然后我学习了 C(学得很差)。但是 Mike Williams 说我的 C 是垃圾,并且看起来像 FORTRAN,因此他回收了我的 C……(为啥要用 malloc 和 free,还有指针什么的……)

  我看到 C++ 的出世并且看了本书,或者说至少尝试去读了本书。在我的钢琴后面的墙上有个坑,就是那本书砸出来的。对 C 进行改进应当让事情变得简单,而不是更复杂,我这样想到。

  时间飞逝。

  我尝试了 Java(没什么深刻的印象,比 C++ 好点,但是如此罗嗦。在编写 FORTRAN 的时候,你不得不为一个很小的事情编写上百行代码,我甚至为此打肿了手。Java 也差不多,如此罗嗦)。(后来)我还尝试了 Python(还行)、Ruby(还行)、Lua(不错)、Javascript(我喜欢)。

  实际上学习所有这些语言花费了我相当长的时间,并且它们不是同时进行的。我和 FORTRAN 有 15 年的美好时光,对于用好它来说足够长了。Prolong 10年, Erlang 20 年,等等。

  我也花了很长时间来消化新的主意。那些关于编程的主意或者其他人的好主意,出现得很慢,差不多二十年一个。在过去的二十年里,编程并没有多大的改进。那个时候它就是一坨,现在还是一坨。

  IDE 和版本控制系统让事情变得更糟,现在你有了所有版本的一坨,以及那一坨本身,而 IDE 意味着你看不到那一坨了。

  世界上最好的 IDE 是你的大脑,它比这些咔啦咔啦的东西好无数倍。

  教育为此做了什么?

  假设你刚刚起步。

  你可以在二十余种语言中进行选择(它们每个都有一个或多个好理由),这花费了我 40 年来学习,你必须在 2-3 年里明白这些,看起来不太可能。

  初学者应当学习什么语言,学校应当教什么语言?

  现在我们遇到了一个选择的悖论,由于有太多选项而无法选择。

  以前说“为了问题而选择语言”,当你已经了解了二十余种语言(在不同的熟练程度下)这么说很容易。但是,如果你只了解两种语言 Java 和 C,那么这就没什么帮助。

  许多实际问题的解决方案在 CLP 语言中只需要几行代码,而在 C 中需要几千行。

  我建议学习的是什么?

C
Prolog
Erlang(我偏心)
Smalltalk
Javascript
Hakell / ML /OCaml
LISP/Scheme/Clojure

  (每个语言)花几年的时间应该是够了。

  注意这里没有捷径,如果你想要捷径去买本《十分钟学会 PHP》,然后用接下来的二十年在 Google 上搜索“我该如何计算字符串长度”。

  将所有东西组织在一起仍然是极度糟糕到令人发狂的地步。组织到一起最好的办法还是 UNIX 的管道

find ... | grep | uniq | sort | ...
这其中最基础的原理是组件应当通过某个统一的媒介语言中,良好定义的协议来进行分离。

  通过消息传递来组织是个途径。这是 OO 编程的基础,但是大多数编程语言做得很差。

  如果世界上所有的应用都通过 socket + LISP S 表达式作为接口(通信),并且将协议描述用格式化的标准编写,那么重用的时候就会(更)容易。

  当前,对于语言有种不良的关注和推进,而忽视用什么协议来如何组织。应该讲授协议,而不是语言。

  并且应当讲授算法。

  祝福大家

  /Joe

  (所有日期都是大概时间)

  英文原文:Joe Armstrong

  相关文档:19位编程大师集锦

Erlang之父Joe Armstrong近期回顾的一些旧事相关推荐

  1. 程序员的损失!Erlang 之父 Joe Armstrong 离世

    (给技术最前线加星标,每天看技术热点) 原创整理:技术最前线(id:TopITNews) 对于 Erlang 技术社区来说,这是一个难过的周末. 据 Francesco 的推特消息,Erlang 之父 ...

  2. Erlang之父Joe Armstrong去世,他留给程序员两点忠告

    "周末一直在公司加班,正准备关电脑下班时,看到CSDN公众号(csdnnews)推送了Armstrong去世的消息,微博上刘江老师也提及了他11年前引进出版<Erlang程序设计> ...

  3. Erlang 之父 Joe Armstrong 逝世,享年 68 岁

    4月20日,Erlang 语言设计者 Joe Armstrong 去世,享年 68 岁. Photo by Brian Troutwine Erlang Solutions 创始人 Francesco ...

  4. Erlang之父Joe Armstrong去世

    允中 发自 凹非寺 量子位 出品 | 公众号 QbitAI 4月20日,Erlang语言的设计者Joe Armstrong去世,享年68岁. Erlang Solutions.Erlang Facto ...

  5. Erlang之父Joe Armstrong确认将参加中国软件开发者大会

    2019独角兽企业重金招聘Python工程师标准>>> 2016年11月18日-20日,由CSDN重磅打造的年终技术盛会,SDCC 2016中国软件开发者大会将在北京举行,大会面向国 ...

  6. Erlang之父Joe Armstrong确认出席SDCC 2016中国软件开发者大会,并发表主题演讲

    2016年11月18日-20日,由CSDN重磅打造的年终技术盛会,SDCC 2016中国软件开发者大会将在北京举行,大会面向国内外的中高端技术人员,聚焦最前沿技术及一线的实践经验,从而助力企业的技术升 ...

  7. 程序调试与啤酒——Erlang之父Joe Armstrong访谈

    文 / Peter Seibel  译 / 米全喜 以啤酒收取程序调试报酬 Seibel:你是如何开始学习编程的?是从什么时候开始的? Armstrong:是从中学时开始的.我出生于1950年,上中学 ...

  8. Erlang之父给程序员的两点忠告 | 缅怀

    整理 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 北京时间 4月20日,据Erlang Solutions.Erlang Factories的创始人Francesco Cesarini的 ...

  9. Erlang 之父去世,他留给程序员两点忠告

    整理 | 伍杏玲     出品 | CSDN(ID:CSDNnews) 北京时间 4月20日,据Erlang Solutions.Erlang Factories的创始人Francesco Cesar ...

最新文章

  1. 【复盘】如何培养小朋友的编程能力?
  2. 使用函数求两个整数的最大公约数和最小公倍数
  3. 《LeetCode力扣练习》第141题 环形链表 Java
  4. Apollo配置发布原理
  5. Redis 管道(Pipelining)
  6. python中的itertools_在python中使用itertools操作csv数据
  7. python schedule多线程_Python定时任务sched模块用法示例
  8. arm linux sms,基于arm处理器的手机短消息加密系统 encryption system for sms based on arm.pdf...
  9. 变身mac达人,这几招技巧您有必要了解~
  10. 开源巨献:Google最热门60款开源项目
  11. php的process_field,使用Boost :: Process运行php命令
  12. 真心推荐8个高质量Java学习网站,一起从入门到精通java语言,大厂java面试真题分享,建议码住!
  13. 最详细教学--实现win10 多用户同时远程登录内网机--win10+frp+rdpwrap+阿里云服务器
  14. import torch -- AttributeError: module ‘typing‘ has no attribute ‘_SpecialForm‘
  15. 疯狂的程序员_戴蓓会客厅第13期|疯狂的程序员 三维家蔡志森的野心
  16. 请问一下Android Studio如何配置JAVACV 0.8Javacv+2.4.9Opencv 万分感谢
  17. 开发微信小程序所需要的http服务器搭建
  18. 【java】新建项目
  19. 【Android】DeepLink跳转简介
  20. GitHub: ProxyPool 爬虫代理IP池

热门文章

  1. 软件工程经济学复习笔记
  2. 计算流体力学的基本方法简介(有限差分法、有限元法、有限体积法)
  3. 转:作为一个HR,说说应届生及一两年往届生的注意情况。
  4. javascript代码大全
  5. 把Foxmail里的邮件导入到Office Outlook里
  6. Linux不完全手册(一)(转)
  7. Java 三大器之监听器Listener
  8. UVM-TLM机制解读
  9. 计算机调剂还是找工作,儿子是C9学生,考研只能调剂,究竟是调剂好还是找工作好?...
  10. Mediawiki环境搭建