编程压路机不等人

所有我做过或今天用过的东西当中,唯一和我的第一份工作相同的就属写代码了。其它一切一直在变啊变啊变。如果你不坚持学习,不坚持阅读,不坚持提高技能,最终身后险恶的压路机就会将你永远轧平。你的职业生涯随之就结束了。

当我刚参加工作时,我不知道将来会是什么样。在1981年事情好像没有出现大变化的迹象。人们仍然在大型机上写批处理程序,有一些小型电脑终端,个人电脑还没有玩具多。很少家庭配备电脑,大公司之外没有email,甚至email很少使用。当然没有因特网或网络。仅有少量的编程语言,大多数语言是在50年代创造的。

杂志很少提到编程,几乎没有展览会的动静。甚至我的那些拿到了计算机科学学位的朋友也没有真正接触过开发工作。人们可以没有经验或学历就获取一份编程工作,我就是这样子。你可以自学,或者在工作中学。

我在第一天很少意识到所有这些背后有一头巨大的、刚刚崛起的怪兽。

前两年我大部分用Fortran和一些其他语言。我坚持使用Basic和其他各种语言,甚至在家里玩Pascal。我看了能找到的任何资料,因为它很有意思。

当我接触微型计算机时,生活突然加快了。当我初次尝试在Apple上写代码时,IBM PC出现了,我开始用Pascal写。有人找我评估一套“可携带”的Unix box,配备给将来客户查看F-16参数。这是我首次接触C,我订购了一个用于工作的C编译器。没有人听到过。同时我短暂用过Lisa但是不了解Object Pascal【注1】。我见过 Mac commercial,但我们它好像不适合在工作中使用。

我辞职后开始创业,准备开发一款Mac(Trapeze)下的电子表格程序,我们决定用C,即使Apple貌似仍然钟情Pascal。后来证明这是正确的选择,因为C统治了很长时间(仍然运行在Linux)。

与此同时我阅读了《Byte》杂志关于Smalltalk的文章,我马上意识到Object属于未来,我需要理解它。

现在我真正开始懂得在编程上,变化的步伐不会再慢了。甚至在没有因特网或email的80年代晚期,新事物出现的速度已经非常明显了。

在卖掉了公司之后,我们建立了一个Mac编程顾问公司Deltagraph,我为C开发对象扩展。那时候至少没有能用的C++,我需要效益,因此我开发了一些漂亮的扩展允许我只用一个内部输出生成器来构建多路输出驱动。

最终在90年代早期C++出现了,我已经理解了如何从面向对象角度设计。当然我有时候仍然使用C。

那段时间我看了一些称作web的资料,尝试了一点基于浏览器的文本,为此非常着迷,认为它会引领潮流。到后来的90年代中期,我在Bay Area工作了一年,经历了Netscape的首次面世。即使这样,我仍然不能看到巨大变化即将到来。

回家之后,我记得看了一种叫做Java的新语言,鼓捣了一会儿。如今web已经开始了,但是它仍然简单,我不确定它会引领潮流,但是现在我知道要了解。当一个巨大变化在世界上出现时,你或许不知道它的领先地方,但是你必须接触它。

...

为什么编程是困难的

许多年前我认为编程比较容易,随着时间的流逝,我意识到编程并不容易。这是因为我对编程是什么和程序员应该做什么有了缓慢的认知改变。

起初我认为编程仅仅是告诉电脑做什么,这部分编程工作相对容易。经过20多年的实践,我估计这部分编程工作是相当容易的。

[caption id=”attachment_267” align=”alignnone” width=”551”]编程的定义 编程的定义[/caption]

定义1:程序是把输入转换成输出的东东。

程序员就是写程序的人,编程就是写程序的工作。

让我们根据我对程序的定义增加一些约束。

定义2:程序是根据以下约束,把输入转换成输出的东东:

学会拥抱需求变化

简介

本文讨论了旧式学校软件工程原则如何使我失败,以及我如何学会了拥抱变化。我分享它,是希望它能够帮助其他人更好地理解敏捷软件开发的一个核心原则:计划之外的需求响应。

敏捷的困惑

敏捷软件开发原则最初提出是在13年前。不幸的是直到今天,关于 它是什么 和 它如何应用 仍然有很多困惑。我多将此归因于一个事实:它变成了流行行话,”敏捷“成为了”好“的同义词,普遍存在的两天scrum培训削弱了敏捷软件开发宗旨的真实意图。

我认为你不得不真正理解瀑布软件开发的痛苦和失败,这样才能理解到底是什么驱动了那些17位软件开发大师聚集起来沟通 为什么他们的行业被扰乱了 以及 他们如何使之回到正轨。

走出校门的程序员新手

在1996年我是一个年轻的、刚刚毕业的有理想的软件开发新手。我急于把在学校学到的、新形成的对软件工程原则的理解 应用到工作中去。

那时候我在一个神经系统科学实验室工作,为一名研究人员及其同事开发数据获取和分析软件。我当时下决心要给他们打造一款他们想象不到的最好的软件。