发现组织内有不少写了十年代码的工程师,作为一个写了5年代码的码农,想知道写十年的代码是一种什么样的体验?
马剑,软件工程师
写代码20多年的工程师, 可以回答吗?
0: 小学时期
设备:红白游戏机 Laser-310
语言:BASIC语言
## 在红白机上写BASIC ##
我最早的编程是在红白游戏机上, 我可不是写FC游戏,我没那么老:) 。 那是小学的时候买了一台红白游戏机,机电部46所研制的, 可以配一个键盘,就可以当电脑用了。
不记得了那时花了多少时间在这个玩具上, 主要是用BASIC写各种小程序。那时这个东西没有磁盘驱动器, 需要用录音机把程序录下来, (没错,就是磁带录音机)。 下次开机就可以用磁带Load回来:)
从网上帖子(【私人博物馆】游戏机篇-01:当年的黑科技国产红白机)找到到了这个游戏机和键盘的照片:
游戏机配的键盘(我当时那个是黑色的):
用来连接录音机的接口:
能记得当时写的程序有:
通讯录, 输入姓名缩写, 查找电话号码。 把老爸的通讯录全部输入进去了。
随机产生音符,起名为胡编之歌
用ascii字符打印动画, 比用_ - ^ 等字符打印出快速移动的虫子等等。。。。
当时我的辅导书就是从图书馆借来的谭浩强的《Basic语言结构化编程》。借来的图:
## Laser-310 ##
还要提的是小学学校里有计算机课,用的是Laser-310. (知乎上有问答说这个:LASER310 是什么设备? - 科技)
计算机课上了几次课之后就停课了,不过我还是经常找老师要钥匙去玩。 Laser-310上主要就是Basic语言, 其他同学都不喜欢玩, 都围着旁边的那台中华学习机,因为可以打游戏(挖金子)。
1:中学时期
设备:PC/AT、286
语言:DBASE3FoxBASE+
## 帮老爸fix bug ##
中学时期, 经常去老爸单位玩电脑, 那时操作系统都是DOS, 办公软件是WPS、CCED (可以理解为DOS上的国产EXCEL),这些不是写代码暂且不提。
那时的数据库软件主要是DBASE3,后来升级到FoxBASE+. 都是交互式的数据库管理软件, 和后来的微软的ACCESS类似, 它不只是数据库,还包含了交互界面的设计,报表的展示等功能。
写代码的过程主要还是学习、继续用FoxBASE+完善我的通讯录程序(为什么想不出做别的好玩的。。。)。 值得一提的是, 老爸单位打印报表程序出了bug了,打印打错了, 是我帮着修好的。
2:大学时期
设备:奔腾处理器 PC
语言:C语言/C++语言/HTML/XML/VRML
## 一个绘图程序带来的惨案 ##
97年上了大学宿舍6个人合买了一台电脑,CPU:奔腾 mmx 166Mhz, 内存:16M, 硬盘:2.1G。当时6个人一起去攒电脑,花了7000。 打车运回来的时候,和司机师傅说,“师傅慢些开, 我们买了电脑,别颠坏了" ... 囧
6个人平均分配上机时间, 一人一天。 写了一个简单的VisualBasic程序,每天弹出来应该由谁来上机。
大学上来学的是C语言,用Turbo C:
一天,我刚刚用C写了很酷一个图形程序,兴冲冲的跑回宿舍,和同学说, "来, 我给你演示一下我的程序", 说着把3.5寸盘插入电脑, 运行~~。 同学们都挤过来看,然后,就没然后了, 屏幕黑掉了, 机器无法起动了。 拿到维修处被告知显卡烧了(到现在我还不明白为啥我的程序会烧掉显卡)。带来的后果很严重的。 维修电脑花了一个星期, 为此我要偿还因我而影响的其他同学的上机时间。 之后的一个月,我都没能用宿舍的电脑 :(
## BBS用户跟踪系统 ##
从大二开始,结识了 GNU/Linux, 开始使用 GCC 编译C代码, 开始用VI写代码。 没想到17年后,我依然在使用这些伟大的工具。
依然记得***次打开VI, 完全不知道怎么退出。 只能用 CTRL+Z 退到后台,然后再 kill 掉。
那时候学校里开始流行BBS, 宿舍还没有通网络, 上BBS需要到图书馆机房。那时候上BBS使用TELNET协议的,现在的新水木也还是支持TELNET协议的,界面看起来是这样的:
上BBS可以发文章, 阅读文章,最重要的是可以找人灌水聊天 :P. 我猜各位应该没用过BBS的聊天室功能, 也不知道//bearhug, //puke 是什么意思。
#p#
那时候很喜欢和一个同校的网友mm聊天, 不过因为上机时间不同, 总是碰不到她上BBS. 我就用C写了一个robot程序,登陆bbs, 每分钟查询一下她的在线状态。 如果她上线了,就把她的IP地址发到我的摩托罗拉BP机上。 当然她下线了,也要发个消息到BB机,免得我跑到图书馆她已经离开了。
a) 为什么要发IP地址?这样的话,我能看出来她从哪里上网,图书馆还是计算中心, 这样我就可以偶遇她了:P
b) 为什么要发到BP机,不用手机短信吗? 那时候没有手机 :( 不只是我没有, 大家都没有。有模拟信号的大哥大,买不起啊。 BP机是最方便的通信工具了。盗一个图:
c) 为什么用C写, 不用其它脚本语言? 首先那时候C语言我最熟,其次Python还没有流行呢,Python 2.0 是2000年才发布的。 Perl语言那时还是比较流行的, 可惜那时没花时间好好学。
d) 程序跑在哪个机器上? 宿舍的机器不能上网的, 肯定不行。 答案是数学学院的一个老师,特别好,组织了一个Linux俱乐部, 我们有一台共享的Linux主机,可以telnet上去写程序。
e) 程序怎么发到BB机上呢? 这个问题问得好, 当时各地的电话局(那时还不叫联通移动)会在自己的网站上提供给BB机发信息的功能, 我只是找到一些好用的发了一些HTTP请求而已。
故事还没有完, 我写了那个跟踪程序其实不只是跟踪一个人呢, 其实站上的所有人都跟踪了,数据都保存下来了。 我当时想别只我自己一个人用啊, 就写了一个网页服务, 所有人都可以查看任何人的上BBS的时间,可以看到柱状图表,总结网友的上BBS的规律。
BBS站长看到我这个服务挺受欢迎的, 就联系我说, 你别用robot爬去bbs的数据了,直接把功能加到BBS系统里吧。 我很开心, 找了个晚上,去了计算中心BBS站长的办公室, 当着他的面把程序改好了。 转天早上,发现大事不好了, 所有登录过BBS用户的ID都变成大写字母了, 都是因为我的程序的BUG - 为了比较字符串, 我把一个全局的用户ID变量改为了大写字母。 还好站长机智,及时的找到了备份恢复了数据。
* 2015年9月6日凌晨更新 *
感谢各位朋友的支持, 我会坚持写下去。回答几个朋友的问题吧:
有没有秃顶? 我的头发渐少了,但是还不秃顶。基因问题吧, 我有几个同学已经秃顶了,感觉比我老10岁。。。
现在在做啥? 我加入了一家创业公司,做Android相关。现在还在写代码, 写Java、C/C++、Python, 之前没有前端工程师的时候,也写了PHP/Javascript/CSS.
网友mm后来怎么样了? 发现大家都挺喜欢八卦的嘛。 后来和mm相处很好啊,也会经常见面聊天,一起去肯德基吃冰激凌,很开心的一段时光。是很好的朋友, ***并没有走到一起。
从小编程家里有人引吗? 并没有, 爸妈都是工人没有计算机基础。纯粹是因为我喜欢打电子游戏,进而想了解电子游戏的原理。 那时候并没有很多可以玩的东西,可以编程的游戏机让我鼓捣了整个暑假。
是数学系的吗? 恩,本科是数学系的,研究生读了计算机。
## “不喜欢” ##
看来大家都挺喜欢聊八卦的, 我再多写一些。 不过我会注意围绕原问题“写代码的体验”。
回来说大一的事儿, 刚刚上大学, 我开始追高中时暗恋的一个女生,打电话、送礼物不提了。打印排版了喜欢的网络小说《***次的亲密接触》给她, 学习Photoshop, PS了照片做成卡片寄给她, 这些也不提了,和写代码没关系。
大一暑假的时候, 我把宿舍的电脑搬回了家,用VB写了个小程序。 邀请女生来家里玩, 让她试一下写的程序。一开始是一些酷炫的动画, 然后是一些智力选择题, ***一道题是“顺便问下, 我喜欢你, 你喜欢我吗?” 下面两个按钮, “喜欢”, “不喜欢”。 女生看到这里, 停了一下,然后去点“不喜欢”, 鼠标刚刚挪过去, 那个按钮就跑开了, 她试了几次都追不上。 这时我在想, “放弃吧, 点另外一个按钮吧”。 没想到她说,“我不想选了,我要走了”。
这件事情教育我, “做软件的时候, 不要强迫用户接受你的设计”。
## 刷榜 ##
从大二开始,一些门户网站开始多了起来, 网上用户也多了起来。 有一个门户网站推出了在线交友网站,就是一个非常粗糙的facebook吧, 可以上传照片, 写简介。每个用户的profile页面都有一个访问计数器。 首页默认按照访问计数器排名。
那时的网站很基础的, 没有CAPTCHA的, 刷榜很简单的。 我写了一个C程序, 把自己刷成了***名, 我又给自己传了张布拉德皮特的照片, 引来了很多女网友的搭讪。 我舍友看到了,问我你怎么搞的,帮我也刷下。结果排行榜前几名都是我们宿舍的。我不会告诉你们的, 我真的见了一个女网友,她是外语学院的,她告诉我她们外院男生太少了。
## 做中国的HOTMAIL ##
在我大三的时候, 正值dot com创业火爆。 有一对海归夫妇回国来创业,据说他们是学校老师的子女。 他们通过关系找到了学院的老师,求推荐一些学生帮忙。 老师就推荐了我们Linux俱乐部的4个小伙伴。
(值得一提的是, 老板之前在美国一家公司打工, 有另外两个同事和他一样回国创业, 其中一个是艺龙,另一个是亿唐。)
***次见到老板和老板娘, 他们和我们讲,“我们要做中国的Hotmail!” 听完我们振奋了,决定加入。 四个人根据BBS ID的首字母,还自取名为BRAD小组。
CTO是从美国回来的, 我当时很崇拜他(现在也很崇拜)。 他是清华没读完就去美国读书了, 在美国时搭建了http://bbs.mit.edu。他设计了整个Webmail系统的架构。
说到架构,可以提一下,不感兴趣的可以跳过这一段。FreeBSD系统,前端用C写FastCGI + Apache, 后端用C写RPC server, 存储用文件系统。 选择FreeBSD因为当时Linux的性能还不太强, 选择C开发,因为性能好, 省服务器就是省钱。 用C开发Web Mail, 现在看来是不是难以相信? 在当时的硬件性能可不比现在, 价格还高的很。
所以当时就面对一个很难的问题:C语言很容易内存搞错而崩溃, 而且FastCGI会要求服务进程一直保持运行, 这对代码的可靠性和稳定性要求都很高,因为一旦出错, 整个服务就会挂掉。
他当时向我们极力推荐Emacs,我现在少数的Emacs知识就是他教的。 可惜我看到他输入Emacs命令时鸡爪状的手,决定还是坚持vim阵营。
还有一个我印象最深的,这个和写代码无关。 他特别喜欢在大家吃饭的时候讲恶心笑话,以至于一段时间内,我都学坏了, 到处讲恶心笑话。 感兴趣的话,可以百度下“咬不断 笑话”,就知道他讲的多恶心了。
还在上课的时候, 我们就每天中午下课后,在团委活动室集合,叫上西南村的外卖,一定要点一份“锅塌里脊”, 一边吃饭,一边讨论开发的细节, 下午没有课的话,就一下午都在写代码。因为写代码, 我逃了几次政治课,很不幸被点名了, 成为了我大学期间唯一一门挂了的课。
放寒假的时候,4个小伙伴都没有回家,就10点多起来,直接打车到公司, 写代码写到晚上12点。打车回学校睡觉。
至今我可以徒手敲telnet命令到smtp服务器或者pop3服务器,发送和接收邮件, 邮件协议记得太深了。
我还记的我当时藏了一个彩蛋在代码中,邮件中搜索某些特殊字符,就会出现员工名单。后来被新来的一个哥们给移除了。
就这样,4个大三的学生加上一个大四的师兄, 半年内服务上线, 4台服务器支持用户30w。
回想起来,那时的我们虽然还是学生,算是实习生, 但做的事情完全和现在创业做的是一样的,甚至更加纯粹, 觉得在做有趣的事情就够了, 钱多钱少的没关系,更没有想过什么股票期权。
这个公司后来怎么样了? 2000年的时候,互联网泡沫破碎了。这家公司很快转型, 做企业和校园邮件服务。我最近惊奇的发现,这家公司还存在呢。
<待续>
白乔,资深感性码农,中科院博士
70后老人,来自皖南山区纯的农村娃,大学之后才有的编程经历
受前面一个兄弟的启发,截点图说说自己的这段历程,后面有时间再补充文字:)
1995年***次接触到计算机编程,机械制造专业当然是ForTran了~~~依稀还记得***次上课前天晚上对床对着一张键盘图狂练指法的样子。。。
讲解FORTRAN的是一个香气袭人的美女老师,但FORTRAN这门课程确实恶心了我。。。如果要问那个时候的体验恐怕也就是“枯燥”“心存恐惧”了吧?想想那些“缺省”“回车”“控制台”,能不望而生畏才怪呢!
editor.exe是那时候最帅的编辑器了(此前一直用的一个http://ed.com程序):
1996年花钱参加了一个C语言培训,从此发现了一个崭新的世界!C语言太帅了啊!关键是,C语言还可以检测到press any key,还可以settextcolor,甚至还可以initgraph哦~~~
我对交互型的东西比较感兴趣,一开始模仿各种书籍上的代码,尝试着实现文本编辑器的一些功能(菜单、编辑、存取、光标),再后来直接跪拜在图形编程,熟悉了鼠标编程、中文编程、定时器编程。
能体会到在DOS的窗口里出现鼠标箭头光标的欣喜么??
能体会到在DOS的窗口里出现大中华的汉字的欣喜么??
能体会到在DOS的窗口里拖曳十字架画图的欣喜么(没错!模仿的AutoCAD,因为我是机械专业嘛)??
那个时候,我已经是系计算机编程大赛的一名积极分子,有一次获准用系办公室的一台386(用来打印的)调试程序,当天晚上我直接拉上同学Y,一起编程弄了个通宵。。。
1997年接触到面向对象编程,当时给自己定了一个任务,就是把原来实现的那一堆GUI组件,封装成自己的Window、Text、Menu。。。也因此熟悉了OOP和Boraland C++:
1998年毕业设计用到了foxpro,然后外调我的c程序:
#p#
1999年,开始用上了vc5.0,后来一直用vc以及mfc很多年:
2000 开始接触web编程,除了vbscript和flash,我发现了asp以及interdev:
2001年参加工作,开始接触到java和jsp,那个时候没有成形的MVC框架,所以很多类似框架的东东都是自己撸:
刚参加工作的那几年确实很开心,没事就逛逛水木BBS、一塌糊涂、CSDN。
2005年左右,发现java也有ide了,当然也免不了要弄spring,jQuery这些东西:
2014年搞spark转道scala:
我想申明的是,我是一个感性的程序员,因此总是难免有点念旧,经常想起DOS时代的:
杀毒我们用KV:
更多的是这个:
依稀记得UCDOS:
老求的WPS(我不会告诉你我知道***密码是^QIUBOJUN)
当然还有:
嗨!看帖的那位,说你呢!见到上古时期就着粗像素看H照片的前辈,咋能不点赞呢?!
This Ispan,God be with u...
晚上自己写完代码,看着躺在床上的老婆孩子。
心想:写着吧,要不干啥去,除了堆几个代码,还有啥手艺?房贷还完再说吧
Milo Yip,游戏程序员、《游戏引擎架构》译者
不知道全职工作前的算不算,这样算我首十年大约在1986年(小三)至1995年(高二)。
前两年大概是学习一些最基本的电脑知识、BBC Micro 的 Basic。
之后两年是自学Apple II,包括 Applesoft Basic 和 6502 汇编。然后一年使用 PC 的 DOS、GWBASIC。
然后第5年开始自学 C 语言、x86 汇编及计算机图形学,写过简单的三维建模软件。
第7年开始参与商业游戏开发,学习游戏引擎和工具的开发,开始学习C++。
第9-10年做主程主策开发游戏,也开始读一些计算机图形学的大学教科书。
估计那10年大约每年可以看10-20本简单的计算机书籍,早期去图书馆较多,后期不少零用钱都是存来买书的。
我儿子(今年小二)还未开始这种经历,但游戏玩得比我以前多很多呢,唉。
----
吃完饭补一下,题目问体验。
小时候算是比较异类吧,学术成积不算是太好,但也过得去。在这种环境下可以说是比较自由一点,可以多花一些时间学习自己喜欢的事情。
做这些事情有时候也会和家人、老师有些冲突。特别是高中下课后去公司做到十一点才回家,和家人吵过好几次。
学校方面,会代表学校参加一些编程的比赛,不是OI那种,而是要做教育相关的软件。最初做三维建模软件也是参加比赛的作品。因为这些经历,学校也算是比较开放,比赛前几个星期甚至经常上课睡觉,下课后写代码调试,有时候在学校的电脑室留到很晚,试过几次要翻过学校的大门才能回家。回家后再继续。小时候已经历过类似程序员加班的日子,反而全职工作时就少了。
编程这回事还真的和其他学科很不一样,喜欢的话自学可以进展很快,高中的电脑科题目是可以秒杀的。那时我们高中有电脑科,是共开考试的科目,所以学习上也省了一门课,可以简单拿到一个A。
由于会编程,曾几何时被家长介绍做一些很无聊的东西,例如帮一些公司写 dBase 程序(不是用 SQL 的数据库),也用 Director 做过教学软件。可能更无聊的是替别人打字和排版(虽然后来被训练到对排版有一定要求)。还好那十年还没有互联网,不然大概会浪费很多时间在做网页(后来在大学就开公司做过……)。
说到互联网,在没有互联网的日子,主要是靠书籍。另一个学习途径是在 BBS (用modem打本地电话连接到别人家的BBS),可以找到一些零碎的文档及源代码。记得当年有看过 John Carmack 很早期的文档。小时候,就是容易吸收各种知识。不过那时候还真是浪费了一些时间,学习一些现在看来没什么用的东西,例如 DOS 的各种内存技术(XMS/EMS)、TSR 编程之类。
那十年的编程生涯算是很快乐的日子。少年轻狂,想写什么就写什么。现在相比就会较保守谨慎,可能是学过了太多规条,太多现实限制(例如跨平台跨编译器),太多自己的要求(例如性能之类),也怕写出一些低级错误。
待续
开源哥,闭关修炼戒知乎
10 岁:单片机汇编
12 岁:VB
15 岁:C / C++
18 岁:Lisp
20 岁:Type Theory (哪里不对)
忘了说体验了。。。体验就是脖子疼。。。活生生疼的睡不着QwQ