在2015年7月份进行的一项名为“从个人特质、个人倾向和个人偏好的角度重新描述年轻时的自己”的调查中,有超过2200名程序员和开发者踊跃参与到其中,发起人说,主要是想了解这些人在年轻的时候,是什么因素引导他们最终选择了计算机科学专业。这项由Code School委托发起的活动最后得出的结论是:这些程序员和开发者平均在16岁的时候就已经对计算机产生了浓厚的兴趣了。除此之外,还有一些别的发现:
随后,InfoQ网站也做了一个类似的调查:您是如何开始编码的?这个调查主要是通过社会化媒体渠道在读者中进行推广,包含三个问题:什么时候开始编码的?你的第一台电脑是什么?你喜欢编码吗?最后根据120多名参与者的反馈得出了一些结论:
InfoQ的读者中有很多都是经验丰富的软件架构师、研发团队领导或自由职业者。我们通过邮件采访的形式和他们进行了沟通,并将他们的在早期是如何开始编码的故事呈现给大家。
Ben Evans,jClarity联合创始人
在我8岁生日的时候,父母给我买的生日礼物就是ZX Spectrum(上世纪80年代一款标志性的计算机)。我父亲在上世纪60年代编写了IBM S/360系统的程序。也正是在我8岁的那一年,为了生活的更好,举家搬到了Cornwall(英国康沃尔郡),父亲成了一名电视工程师。他认为,由英国广播公司、Commodore和Spectrum这三家公司发起的“家庭电脑”潮流是一个非常重要的风向标,有可能引领接下来的科技走向,所以他和我妈妈凑钱给我买一台电脑。我用这台电脑学会了Spectrum BASIC和Z80 assembler,此外还订阅了一个包含程序清单的电脑杂志。很荣欣,Spectrum在转移到PC端之前的几代版本我都使用过,只是后来由于钱的问题退而求其次买了286英镑的没有显卡的电脑,搭配上相当便宜的Hercules监控适配器,用起来还是相当不错的,也是一段很好的回忆。
在大学里学习了PASCAL高级程序设计语言和一些基础的C语言,足够去写一些简单的“Light Tracer”/Snake克隆。但是后来我对PASCAL有些沮丧,而且我不想以这种技术来开始我的职业生涯,所以,我最后选择了学习数学。
在大学里,我侵入了连接大学和JANET之间的基层接入网络,所以我可以轻而易举的连接到早期基于telnet的聊天服务,这重新点燃了我对C语言的兴趣,尤其是当时第一次听到Perl编程语言。我说服我的导师在一个UNIX帐户上签字,并且有一个可以打到家里的拨入号码,也就是在第一学期结束时,我发现我父亲的新工作是用远程方式来减少文书工作的,每天工作结束时都要在Windows 3.1版本的笔记本上下载字段调用。
后来我学会了Dijkstra算法并掌握了足够的图形理论知识,在班级里面保持领先水平。学期末,Dijkstra问我是否愿意到另一个班级听一种新的编程语言——Java。
首次品尝Java之后,研究生办公室问我为什么不选择更高薪水的编程工作,而到学校里任教。后来经过思考,我决定到公司里做一些跟Perl和JavaScript相关的网站工作。实际上,在那个时候我也开始与一些朋友搞在线音乐杂志的事情。在当时(1997-1998)这也是一件很新奇的东西,所以很多唱片公司乐意送我们黑胶唱片和音乐会门票。从运作杂志和运行网站程序当中获得了很多乐趣,尤其是在这其中,我的乐趣给我带来了经济收益。
Charles Humble,InfoQ首席编辑
记得我9岁那年的一个暑假,我借一个朋友的ZX Spectrum开始编程,想想自己那个时候真是好奇心很重啊。于是在我10岁圣诞节的时候,父母给我买了一台Commodore 64。虽然我当时特别想要一只小狗,但拿到这么先进的玩物后,还是很兴奋!不管怎样,这是我学的主要机器。
于是我开始学习Commodore Basic,但刚开始的时候想用Basic语言在这个Commodore上写一个Elite克隆和一个高分辨率支持的克隆简直是太慢了,可以说是出奇的慢啊!所以我放弃了编写assembler,坦率的说,Commodore Basic汇编程序在移动编码组件上很稳定,基本上没什么大的跳跃。我的Elite克隆是最后废掉了,但它有一个很奇怪的声音轨道。Commodore 64也有一个惊人的音效芯片,通过设计,振荡器的输出信号甚至从未停止过。这算得上是一个设计缺陷。
在学校学习的时候有一个BBC的模型,我经常在上面编写字节代码。后来有一个基于RISC系统的Acorn Archimedes计算机也为我的编程提供了很多便利,(RISC是Acorn Computers为Archimedes和RISC计算机开发的操作系统,由于存储在ROM中所以启动只需几秒钟)。紧随其后,在学校里就能够接触到Windows、C和C++语言了,而我的第一份编码工作就是为一家出版公司在Excel和Access里编写VBA。Java在银行里可谓会最好的归宿。
Abraham Marín Pérez,Java程序员、敏捷开发拥趸者
我8岁的时候,父亲在办公室当会计,有的时候星期六早上也去工作,所以我有机会跟他一起去办公室用电脑。当时的电脑还用5”1/4软盘,其中有一些游戏。我当时最喜欢的程序是AccuType,学习触摸式打字(touch-type),这意味着我在9岁之前就可以不看键盘打字了。
后来我的表弟有了一台Amstrad计算机,其实就是一块扁平的键盘,需要用一个看上去很古怪的软盘跟电视连接起来用。这里面有一个可以学习BASIC程序的书,只有9岁的我们就按照这本给专业程序员制定的书自学编程。我们只能一边看书一边拾取代码的随机样本,并复制下来看看都是什么功能:有时会画一个圆,有时会打印一系列数字……直到有一天我复制了一段在屏幕上绘制矩形的代码,然后写下书中的另一段代码,一个长方形出现了,这让我到,两个代码段基本相同,唯一的区别就是数字变化了。接着开始写三分之一代码块,只把数字改变,就能出现不同的形状。虽然那个时候根本不知道里面的深奥秘密,但是我心里清楚,不管要什么形状,都必须准确的告诉计算机。
最终我有了属于自己的电脑,一个100MHz 顶配的generic i486,400MB硬盘和4MB内存。那个时候就在开始在学校学习BASIC编程,这是我当时最大的乐趣,我还记得写出来的第一块代码(或更确切的说是脚本)是一个批量脚本:我当时把一些游戏存储在硬盘上,然后我老爸说游戏太占内存,要删除。于是我自己写脚本将这些游戏压缩、解压缩、运行。只记得这是在MS-DOS上完成的,现在想起来还是很有成就感的。
另外一件感觉很有意义的但是很简单的事情就是,帮我老爸的电脑设置个人权限。因为当时的电脑就像是一台电视或VCR,只能打开、使用,所有程序都是基于MS-DOS,为了不让别的同事随意使用它,我就帮我老爸写了一个简单的程序,用BASIC编了一个密码,这样就只能给有密码的人使用。
奇怪的是,虽然我的第一份工作是跟Flash和ActionScript相关的编程工作,但我对这些工作内容没什么感觉。我不喜欢编程的那种感觉,更喜欢画一些框框,把代码片段嵌入进去。随后的工作是跟一个“将COBOL翻译成Java语言”相关的代码库,我称它为Javol。也正是这份工作的需要,我不得不逼迫自己学习一些COBOL知识,这样才能正确理解运作原理。之后我到了一家银行工作,并施展了我的各种编程能力:将Excel表格与数据库相连;VBA和手写的XML解析器连接;用C#将VBA代码嵌入Word文档等等。这份工作我一直做到现在。
Ralph Winzinger,Senacor Technologies首席架构师
其实我小的时候也是一个乡村里土包子,我在12岁第一次看到电脑的时候,电脑已经可以放到桌子上了,一个朋友拿来一个相当经典的Commodore C64。刚开始的时候只是为了打游戏,不久就开始自己写游戏了,虽然不知道怎么编写智能的软件程序,但是我们尝试写硬编码的文字冒险。
后来搬家弄丢了我的Commdoore C64,却收获了一台老旧的ZX81 Spectrum——一个带有塑料膜键盘的微型电脑。于是我照着维基百科上的讲解做出了一个乌龟图形和别的东西。
在我15岁的时候,我终于有了我自己电脑——一台带有1571个软盘驱动器的Commodore C128。之后我就花了很对时间开始创建一个可以管理音频磁带的软件,这是我创建的第一个大型系统。
在上大学期间,我一边学习Java语言一边打理我的日常业务。和大多数学生一样,靠编程赚钱。而在当时,我主要是为掌上电脑编写程序,这也是我跟移动世界联系的收个入口。从那以后我就迷上了WAP手机,尤其是在我把移动方案应用在家乡公共交通规划中的时候。
事实上,无论开发者从什么年龄段开始从事编程,也不管开始学习编程之前是做什么工作的,只要他们敲下第一行代码,就证明这个人是很有激情的,至少他们愿意花大量的时间时间学习语法,锻炼编码技能,并为这个世界创造优秀的软件。
文中所讲的主人公全都是国外的牛人,这里我觉得也可以简单的讲讲中国国内一些比较牛的程序员们的编程史。如果您觉得自己的编程史很励志,可以在下面的评论处留言哦!
Abel Avram, 自从2008年起,就参与过多起由InfoQ组织的活动,热爱撰写关于移动、HTML、.NET、云计算、EA和其他类型的新闻报道。她也是《 Domain-Driven Design Quickly 》联合作者。
查看英文原文: How Did You Start Coding?
感谢张龙对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 (已满),InfoQ读者交流群(#2) )。