老派程序员——徒手实现伟大成就

摘要:本文介绍了三位非常著名的程序员:Ken Thompson,Joe Armstrong 和 Jamie Zawinski,他们是如何发明一门新语言,他们开发软件时会像我们一样使用当今流行的开发工具吗?

当读Peter Seibel的精彩著作《编程人生:15位软件先驱访谈录(Coders at Work)》的时候,我发现一些老派的程序员(我是这样尊敬的称呼他们的)是非常的有趣,比如Ken Thompson,Joe Armstrong 和 Jamie Zawinski,他们开发软件时几乎不用任何现代的工具和技术技巧。

ken_thompson

Ken thompson

Ken Thompson是B语言(C语言的前身)的设计者,也是Go语言的设计者(与Rob Pike合作)。在贝尔实验室工作的时候,他和Dennis Ritchie一起开发实现了C语言和最初的Unix操作系统。一次在新泽西的晚饭上,当他在餐具垫上设计出来UTF-8字符编码方法后,他通宵工作,在贝尔实验室的Plan 9操作系统里实现了对UTF-8的全面支持。就编程风格而言,他只通过printf语句来调试,几乎没有单元测试,他开发软件是先设计数据结构,然后从局部开始实现,中间利用临时的测试接口,最终到达整体完成,

Jamie_Zawinski

Jamie Zawinski

Jamie Zawinski在麻省理工的人工智能实验室使用Lisp工作,之后他领导开发了Lucid Emacs,也是用的Lisp语言,这个软件就是后来被人们熟悉的XEmacs。此后他加入了Netscape项目,开发Unix版的Netscape浏览器的前端部分,之后他又领导了Netscape Mail的开发(两个项目都是用的C语言)。他也是只喜欢用print语句来调试代码。他的开发过程有时是先整体后局部,有时是先局部后整体,顺其自然,在必要的时候进行重构。开发时他几乎不做单元测试,他认为单元测试会耽误时间——他认为第一次就应该把代码编对,他反复这样强调。在他的观念里,这是个优先级问题,“你是愿意去开发出一个没问题的软件,还是愿意下星期就把它完成,选择一个,你们不能兼得。”

joe_armstrong

Joe_armstrong

Joe Armstrong开发了Erlang编程语言,他还为爱立信开发开源的Open Telecom Platform(OTP)框架。开发软件时,他喜欢在写代码前写尽可能完备的文档,特别是对有难度的项目,比如有关实时网络协议的。对于有难度的问题他喜欢先用原型解决,对于调试,他只是有print语句。他是一个面向对象编程的批评者,他喜欢像Haskell这样的函数式编程语言。他从未使用过IDE,他喜欢使用的是Emacs和命令行(不需要用鼠标)这样的开发工具。

所以,什么样的工具和技术技巧是你成为一个伟大程序员的所必须的?是这些TDD、BDD、Scrum、敏捷开发、设计模式、极限编程等现代技术吗?这些只是花瓶?还是为了用来实现更大的目标?或者这只是说明了有天赋的程序员不管使用什么工具都能走上自己成为伟大程序员的道路?

我个人的观点是,做一定程度的TDD、保证合适数量的单元测试,这些都是作用巨大的。因此这些现代技术才被看作是能够让我们工作更加容易、更有效率的科技进步——尤其是对那些非天才级别的程序员。

译文来自:aqee

英文原文链接:Old school developers - achieving a lot with little


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网大厂项目研发流程

文章目录阶段一:阶段二:阶段三:阶段四:阶段五:开发人员:测试人员:设计师:阶段六:阶段七:总结:本文章学习自:https://www.bilibili.com…

centos常见错误 Failed to set locale, defaulting to C

错误描述: 当在centos中使用yum命令时,输出错误: [rootlocalhost yum.repos.d]# yum list |grep prceFailed to set locale, defaulting to C 用locale检测,出现如下提示: rootlocalhost yum.repos.d]# localelocale: …

图片上传知识点梳理

在日常项目开发中,图片上传是一个十分常见的场景。而现在的各种UI框架都提供了自己的上传组件,网上第三方的上传组件也多如牛毛。可能你早已习惯了直接使用这些现成的组件,然而对于其具体的实现,却并未深入解析。本文将通过简单的…

解决 java.lang.IllegalArgumentException: Repository interface must not be null on initialization!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 报错:Caused by: java.lang.IllegalArgumentException: Repository interface must not be null on initialization! Cause…

【狂神说】JVM

文章目录1.JVM的位置2.JVM的体系结构3.类加载器4.双亲委派机制(重要)5.沙箱安全机制(了解)6.native(核心)7.PC寄存器(了解)8.方法区9.栈10.三种JVM11.堆(Heap)12.新生区、老年区13.永…

我们真的需要统一的编程规范?

摘要:仁者见仁智者见智,编码风格的不同,对项目也会有不同的影响,统一的编码规范有益于项目的维护。俗话说,没有规矩不成方圆,在2004年,UNIX创始人之一的Ken Arnold就发表了一篇很幽默文章&#…

百度云重磅发布ABC 3.0 尹世明如何诠释百度云的“新”打法

雷锋网9月4日消息,2018百度云智峰会正式召开,百度总裁张亚勤发表题为《新技术驱动,全面进入Cloud2.0》的演讲并表示,经历了PCClient/Server到MobileCloud 1.0,再到如今的AICloud 2.0过程,新技术推动云计算产…

EcmaScript对象克隆之谜

先谈谈深拷贝 如何在js中获得一个克隆对象,可以说是喜闻乐见的话题了。相信大家都了解引用类型与基本类型,也都知道有种叫做深拷贝的东西,传说深拷贝可以获得一个克隆对象!那么像我这样的萌新自然就去学习了一波,我们能…

开发人员眼中最好的代码编辑器是谁?

摘要:对开发人员来讲,开发工具就好比战场上的“兵器”,不同领域的开发人员他们所使用的“兵器”也不完全相同,本文从友好性、功能性、扩展等多方面总结了最受开发人员欢迎的“兵器”。你最爱的那个在这里吗? 如果我们把…

关于RESTful一些注意事项,接口开发规范

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 最近在研究restful,公司开发要使用,所以自己就去网上找了好些资料,并整理了一套公司开发的接口规范。…

【老杜】MySQL—day01

文章目录day01课堂笔记1、数据库概述及数据准备1.1、什么是数据库1.2、什么是数据库管理系统1.3、SQL概述1.4、安装MySQL数据库管理系统。1.4、MySQL数据库的完美卸载!1.5、MySQL的服务1.6、用命令来启动和关闭mysql服务1.7、登录mysql数据库2、MySQL常用命令&#…

【转载】DRuid 大数据分析之查询

转载自http://yangyangmyself.iteye.com/blog/23217591、Druid 查询概述上一节完成数据导入后,接下来讲讲Druid如何查询及统计分析导入的数据。Druid的查询是使用REST风格的HTTP请求查询服务节点(Broker、Historical、Realtime),这…

记录 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 报错如题: Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentException: Pa…

[转]简单的动态修改RDLC报表页边距和列宽的方法

本文转自:http://star704983.blog.163.com/blog/static/136661264201161604413204/ 1.修改页边距 XmlDocument XMLDoc new XmlDocument();XMLDoc.Load(System.Windows.Forms.Application.StartupPath "\Report_try-2.rdlc");XmlNamespaceManager xmn n…

函数式编程语言天生就慢吗?

摘要:近期,函数式编程得到了越来越多的关注,Lisp不仅重获青春还涌现出了一批新函数式编程语言。因此开发者们对函数式编程语言的运行快慢各抒己见,展开激烈讨论。本文将和大家一起讨论,函数式编程语言真的就慢吗&#…

【老杜】MySQL—day02

文章目录day02课堂笔记1、把查询结果去除重复记录【distinct】10、连接查询10.1、什么是连接查询?10.2、连接查询的分类?10.3、当两张表进行连接查询时,没有任何条件的限制会发生什么现象?10.4、怎么避免笛卡尔积现象?…

vue根据数组对象中某个唯一标识去重

由于在vue中,会自动在数组和对象中加入_obser__观察者模式的一些属性,所以直接用数组的filter去重(下面这种),indexOf不能准确识别 var arr [1, 2, 2, 3, 4, 5, 5, 6, 7, 7]; var arr2 arr.filter(function(x, index…

Springsecurity之AuthenticationProvider

2019独角兽企业重金招聘Python工程师标准>>> 注意:AuthenticationProvider与Authentication紧密联系,关于Authentication,看我的这篇博客。 先上一张图,如下图1 图1 AuthenticationProvider的类图 AuthenticationProvi…

Postman使用入门

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Postman测试管理的单位是测试集(Collections),测试集内可以创建文件夹(Folder)和具体的请求(Requests…