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

摘要:本文介绍了三位非常著名的程序员: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…

解决 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过程,新技术推动云计算产…

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

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

【老杜】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…

Springsecurity之AuthenticationProvider

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

Postman使用入门

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

编程需要知道多少数学知识?

摘要:许多人认为在开始学习编程之前必须对数学很在行或者数学分数很高。但一个人为了编程的话,需要学习多少数学呢? 实际上不需要很多 。这篇文章中我会深入探讨编程中所需要的数学知识。 下面是我在reddit的子论坛 r/learnprogramming 看到的…

vue弹窗插件实战

vue做移动端经常碰到弹窗的需求, 这里写一个功能简单的vue弹窗 popup.vue <template><div class"popup-wrapper" v-show"visible" click"hide"><div class"popup-text">{{text}}</div></div> </temp…

【狂神说】Redis笔记

文章目录1、Nosql概述1.1 为什么要用Nosql1.2 什么是NoSQL1.3 阿里巴巴演进分析2、NoSQL的四大分类3、Redis入门3.1 概述3.2 Windows安装3.3 Linux安装3.4 测试性能3.5 基础的知识4、五大数据类型4.1 Redis-Key4.2 String&#xff08;字符串&#xff09;4.3 List&#xff08;列…

Postman用法说明

见&#xff1a;http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介-Http请求模拟工具 在我们平时开发中&#xff0c;特别是需要与接口打交道时&#xff0c;无论是写接口还是用接口&#xff0c;拿到接口后肯定都得提前测试一下&#xff0c;这样的话就…

Linux核心总结

文章目录1.首先了解一下linux的目录结构2.linux的基本命令之使用命令开关机3.linux的基本命令之目录管理1.ls—列出目录命令2.cd—切换目录命令3.pwd—查看当前所在目录命令4.mkdir—创建文件夹命令5.rmdir—删除文件夹命令6.cp—复制文件命令7.rm—传说中的删库跑路命令8.mv—…

Java多线程系列---“JUC锁”01之 框架

本章&#xff0c;我们介绍锁的架构&#xff1b;后面的章节将会对它们逐个进行分析介绍。目录如下&#xff1a; 01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock06. Java多线程系列--“JUC锁”03之 Condition条件07. Java多线程系…

IDEA配置jdk (SDK)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 提前安装jdk&#xff0c;配置环境变量 一、配置jdk 1、依次点开File -->Project Structure&#xff0c;点击左侧标签页&#xff0c…

Spring Data JPA入门

见&#xff1a;http://sishuok.com/forum/blogPost/list/7000.html Spring Data是什么 Spring Data是一个用于简化数据库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持map-reduce框架和云计算数据服务。 Spring Data…

【git】----- clone 及上传文件

在GitHub上创建一个项目首先点击新存储库进入创建的步骤创建完成后跳转到下一个页面复制路径然后在自己的新建的文件夹里面&#xff08;例如:git&#xff09;右键&#xff0c;点击Git Bash Here进入命令行输入 git clone 输入刚刚拷贝的路径&#xff08;https://github.com/nam…