程序员写代码是干什么的(写十年的代码是一种什么样的体验)

写代码20多年的工程师, 可以回答吗?

0: 小学时期

设备:红白游戏机 Laser-310

语言:BASIC语言

## 在红白机上写BASIC ##

我最早的编程是在红白游戏机上, 我可不是写FC游戏,我没那么老:) 。 那是小学的时候买了一台红白游戏机,机电部46所研制的, 可以配一个键盘,就可以当电脑用了。

不记得了那时花了多少时间在这个玩具上, 主要是用BASIC写各种小程序。那时这个东西没有磁盘驱动器, 需要用录音机把程序录下来, (没错,就是磁带录音机)。 下次开机就可以用磁带Load回来:)

从网上帖子(【私人博物馆】游戏机篇-01:当年的黑科技国产红白机)找到到了这个游戏机和键盘的照片:

游戏机配的键盘(我当时那个是黑色的):

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(1)

用来连接录音机的接口:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(2)

能记得当时写的程序有:

通讯录, 输入姓名缩写, 查找电话号码。 把老爸的通讯录全部输入进去了。

随机产生音符,起名为胡编之歌

用ascii字符打印动画, 比用_ - ^ 等字符打印出快速移动的虫子等等。。。。

当时我的辅导书就是从图书馆借来的谭浩强的《BasiC语言结构化编程》。借来的图:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(3)

## Laser-310 ##

还要提的是小学学校里有计算机课,用的是Laser-310. (知乎上有问答说这个:LASER310 是什么设备? - 科技)

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(4)

计算机课上了几次课之后就停课了,不过我还是经常找老师要钥匙去玩。 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:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(5)

一天,我刚刚用C写了很酷一个图形程序,兴冲冲的跑回宿舍,和同学说, "来, 我给你演示一下我的程序", 说着把3.5寸盘插入电脑, 运行~~。 同学们都挤过来看,然后,就没然后了, 屏幕黑掉了, 机器无法起动了。 拿到维修处被告知显卡烧了(到现在我还不明白为啥我的程序会烧掉显卡)。带来的后果很严重的。 维修电脑花了一个星期, 为此我要偿还因我而影响的其他同学的上机时间。 之后的一个月,我都没能用宿舍的电脑 :(

## BBS用户跟踪系统 ##

从大二开始,结识了 GNU/Linux, 开始使用 GCC 编译C代码, 开始用VI写代码。 没想到17年后,我依然在使用这些伟大的工具。

依然记得第一次打开VI, 完全不知道怎么退出。 只能用 CTRL Z 退到后台,然后再 kill 掉。

那时候学校里开始流行BBS, 宿舍还没有通网络, 上BBS需要到图书馆机房。那时候上BBS使用TELNET协议的,现在的新水木也还是支持TELNET协议的,界面看起来是这样的:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(6)

上BBS可以发文章, 阅读文章,最重要的是可以找人灌水聊天 :P. 我猜各位应该没用过BBS的聊天室功能, 也不知道//bearhug, //puke 是什么意思。

那时候很喜欢和一个同校的网友mm聊天, 不过因为上机时间不同, 总是碰不到她上BBS. 我就用C写了一个robot程序,登陆bbs, 每分钟查询一下她的在线状态。 如果她上线了,就把她的IP地址发到我的摩托罗拉BP机上。 当然她下线了,也要发个消息到BB机,免得我跑到图书馆她已经离开了。

a) 为什么要发IP地址?这样的话,我能看出来她从哪里上网,图书馆还是计算中心, 这样我就可以偶遇她了:P

b) 为什么要发到BP机,不用手机短信吗? 那时候没有手机 :( 不只是我没有, 大家都没有。有模拟信号的大哥大,买不起啊。 BP机是最方便的通信工具了。盗一个图:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(7)

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是从美国回来的, 我当时很崇拜他(现在也很崇拜)。 他是清华没读完就去美国读书了, 在美国时搭建了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年的时候,互联网泡沫破碎了。这家公司很快转型, 做企业和校园邮件服务。我最近惊奇的发现,这家公司还存在呢。

* 2015年9月11日晚更新 *

## 黑客和假钞的故事 ##

大四第二学期, 那时刚刚考完研,一个和我很熟的老师找到我,让我帮他做个东西。

先说说这个老师, 这个老师在我心中就是那种真正的黑客, 记得大一刚刚买来Modem,几个人都搞不定拨号上网, 我们找来这个老师帮我们看看, 只见他在键盘上运指如飞,啪啪啪啪几下, Windows超级终端中快速闪过一些文字之后, 他已经已经连上了学校BBS,看了下十大热门, 检查了几封邮件,回复其中一封,最后退出了,并断开了连接。和我们说道, “你们的猫没有问题”。 这一切大概花了1分钟, 其间没碰过一下鼠标。 其实当时我并没有 看明白他在干什么, 这只是事后我有了经验之后才理解到的。 那时这个老师长长的头发,不修边幅的样子, 就更符合心目中黑客的形象。

后来我们上了他讲的课, 讲的是数学软件Mathematica, 他讲的并不好,很多同学表示听不明白。 但我能看出来,他懂得很多, 只是不能讲出来,或者不屑讲出来。 有一次他给大家留上机作业题, 我当时用了一个很特别的思路,很快做出那道题,给他留下了印象。

时间回到大四第二学期, 我去他在校外的一个办公室找到他, 他换了个人似的, 穿着西服皮鞋, 头发也柔顺飘柔起来。 老师和我寒暄了几句之后,就从抽屉中拿出两叠百元大钞, 我眼睛一亮。

结果老师对我说:

“这钱不是给你花的, 是测试用的。我要请你做的是伪钞识别算法设计。 这个算法会用到自动售货机中的。 这里还有一个传感器,可以扫描钞票得到两个信号:一个是光信号, 一个是磁信号。你要通过这两组数字信号判断这个钞票是真钞还是假钞。”

“左边这一叠是真钞,你拿去花了也无妨。 右边这一叠可千万不能花掉或者丢掉!这个是多少钱都买不来的假钞, 公安局已经登记过了,一定要还回来。”

这个问题非常有趣, 我很容易找到了班上的另外一个数学大牛帮忙。 后面的两个星期里,我们把学到的各种算法都用上了,什么神经网络、随机过程、遗传算法。

可惜后来我因为个人的原因要去北京,没法继续研究了, 留下我的同学孤军奋战。 他在两个月后给出了一个相对不错的解决方案。 不过不清楚最后有没有应用到自动售货机上。

## TCP/IP ##

讲过笑话吧, 大学快毕业前,开始找工作了。 一个同学去面试,人家问他, “TCP/IP知道吗?”。 这个同学答道:“TC用过, PIP没用过”。

<待续>

回答者:白乔,资深感性码农,中科院博士

【已更新写作的经历】【多图预警】【20年码农】

70后老人,来自皖南山区纯的农村娃,大学之后才有的编程经历

受前面一个兄弟的启发,截点图说说自己的这段历程,后面有时间再补充文字:)

<<<已接受大学同学的建议,加上了写作的经历>>>

1995年第一次接触到计算机编程,机械制造专业当然是FORTRAN了~~~依稀还记得第一次上课前天晚上对床对着一张键盘图狂练指法的样子。。。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(8)

讲解FORTRAN的是一个香气袭人的美女老师(晚上男生宿舍的话题常常是她),但FORTRAN这门课程确实恶心了我。。。如果要问那个时候的体验恐怕也就是“枯燥”“心存恐惧”了吧?想想“缺省”“回车”“控制台”这些陌生的术语,能不望而生畏才怪呢!那个时候每次上机之前,都会先在作业本上写好代码,然后带着5寸软盘或者3寸软盘上机房。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(9)

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(10)

现在这种软盘早已绝迹了,上次还见知乎上有人问Windows里的盘符为什么从C:而不是从A:开始,这提问的人肯定是80后了。。。

上机房的时候必须先停下来穿鞋套,机房里最初是一些286机器,后来有了一些386,

每每想起机房,都是白色的灯光、白色的桌面、软软的键盘,以及那堆机器特有的气味。。。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(11)

对了,editor.exe是那时候最帅的编辑器了(此前一直用的一个ed程序):

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(12)

后来,我开始迷上了QBASIC,它可以画图,这是我感兴趣的原因。另一个不经意的时间,画法几何老师办了一期AutoCAD与C语言辅导班,抱着对C语言的神往,我报名了,并从此不可收拾的喜欢上了C。兴趣是最大的老师,我要是一头骡子,前面挂着胡萝卜,就算背负着再重的货物,我也愿意一往无前。C语言真的是太棒了,可以检测到press any key,还可以settextcolor,甚至还可以initgraph哦~~~

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(13)

我对交互型的东西比较感兴趣,一开始模仿各种书籍上的代码,尝试着实现文本编辑器的一些功能(菜单、编辑、存取、光标),再后来直接跪拜在图形编程,熟悉了鼠标编程、中文编程、定时器编程。

能体会到在DOS的窗口里出现鼠标箭头光标的欣喜么??

能体会到在DOS的窗口里出现大中华的汉字的欣喜么??

能体会到在DOS的窗口里拖曳十字架画图的欣喜么(没错!模仿的AutoCAD,因为我是机械专业嘛)??

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(14)

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(15)

那个时候,我已经是系计算机编程大赛的一名积极分子,有一次获准用系办公室的一台386(用来打印的)调试程序,当天晚上我直接拉上同学Y,一起编程弄了个通宵。。。

1997年接触到面向对象编程,当时给自己定了一个任务,就是把原来实现的那一堆GUI组件,封装成自己的Window、Text、Menu。。。也因此熟悉了OOP和Borland C :

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(16)

1997年那个暑假应该是我连续上机时间最长的时候,这都归功于Y同学买了一台486的电脑,当时Y同学和C同学一起在学校外面租了个房子(我没出去住哦!!我只是因为和Y关系很铁,所以经常去用他的电脑)。

然后大家轮流用电脑,Y用电脑看片,接下来我编程,然后是C同学用电脑玩游戏。注意这个顺序“Y同学——我——C同学”,由于C同学经常排在我后面,所以从不热爱学习的他后来都熟悉了Borland C 的修改状态的标志(好像是个类似于*的符号),一旦那个标志消失了,他就觉得我已经保存了,可以轮到他玩游戏了。。。

值得一提的是,我写的那一坨GUI代码,后来委托开电脑房的Y同学给我打印出来了,留着自己欣赏。Y同学当时特意给那一坨加了一页封面,打上了一行标题:FakeWindows!

至于被模仿的对象,那自然是DOS下的Windows 3.1了:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(17)

1998年学习了微机原理,写了一些汇编,现在都忘光了~~~

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(18)

然后毕业设计用到了foxpro,然后外调我的C程序:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(19)

1999年,已经上了研究生,开始用上了vc5.0,后来一直用vc以及mfc很多年:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(20)

2000 开始接触web编程,开始是写html,后来关注一些动态的技术,除了vbscript和flash,后来我发现了asp以及interdev。为了快速掌握asp,我为自己又定了一个任务,为大学班级做了一个同学录,甚至还做了一个聊天室。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(21)

那时候有很多免费的服务器空间,但是也不稳定,好好的没准哪天就不提供服务了。后来我直接将同学通讯录放在大学母校的服务器上,一直放了好多年~~~

2001年参加工作,开始接触到java和jsp,那个时候没有成形的MVC框架,所以很多类似框架的东东都是自己撸:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(22)

那个时候javascript控件很少,一般自己撸个树形控件,就很开心了,然后各个项目里都抢着用,满足感倍增!

刚参加工作的那几年确实很开心,没事就逛逛水木BBS、一塌糊涂、CSDN。在水木上也找到一些好码友和mm ^_^

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(23)

期间帮好友们做过同乡会网站、蛋糕网站、电子元器件网站、采编发网站,ASP/JSP哪个顺手用哪个!

2002年女朋友毕业了,我正式结束了一个人撸代码的时代,每个周末年轻的我们总是流窜在各大购物商场和小商品市场。。。GF负责挑东西买东西,我负责提包陪逛,那个时候的我,我常常说是“行尸走肉”,因为我脑子里经常在想着那堆代码、那些网页、新的idea。。。等晚上一回到我们的那个温馨小家,我马上继续将白天脑子里面的东西序列化成代码。。。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(24)

2005年左右,发现java也有IDE了!!!

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(25)

2005-2010中间的5年,以做项目为主。基本是Java Web包打天下,自己撸过MVC、DBCP、ORM以及RPC框架,但都不怎么深入,让小伙伴们顺利用上、少投诉就OK了。后来知道了Spring、jQuery、apache等开源项目,就基本上把那堆轮子扔掉了。。。

2014年搞spark转道scala:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(26)

我想申明的是,我是一个感性的程序员,因此总是难免有点念旧,经常想起DOS时代的:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(27)

杀毒我们用KV:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(28)

更多的是这个:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(29)

依稀记得UCDOS:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(30)

老求的WPS(我不会告诉你我知道万能密码是^QIUBOJUN)

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(31)

当然还有《仙剑》:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(32)

C&C:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(33)

同志们,我想告诉你们,最初我是在电视机上接着操纵杆玩的,你们信么?真的是哦~~~~

以及98年左右的OICQ:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(34)

嗨!看帖的那位,说你呢!见到上古时期就着粗像素看H照片的前辈,咋能不点赞呢?!

Y同学受邀看到我前面写的,说我就知道讲故事,没提这十几年来是个什么体验。那好吧,我表达一下近二十年编程经历之后的体验,各位看官记得鼓掌(点赞):

其一呢,现在总感觉某种编程语言没那么重要了,把功能实现了更重要;编程也没那么重要了,事情做成了更重要。很多小白总是吵着哪门语言好,这个确实很奶义务~~~要改!拿起YACC、Antlr,咱自己发明一门语言好不好?再不济,咱们写个XML编码的语言好不好?总之,感觉兴奋多了,一切就那么回事了~~

第二呢,觉得编程本身确确实实给我带来了很大的乐趣(反之,如果你觉得编程很无聊,建议就别干这行了)。我总结了一下,编程为什么会给我带来快乐呢?一在于其创造性,编个程序就像构建一个虚拟世界,有点小孩子搭积木的意思,和写作一样,好玩;二在于回报及时,有个新想法,编个程序就看到结果了,能哄妹子,还能赚钱,这点有点像嗑瓜子,嗑了就吃到了(没人全部嗑完了再一起吃吧?),很开心,所以会停不下来。。。

第三呢,觉得自己其实挺笨的。原来觉得自己很聪明,班级里编程我玩得最好,后来发现其实都是自己熬夜刻苦练出经验值来的,和天赋无关。。。坐着那练码,打印出来看着码(自我欣赏),陪老婆逛街还是脑子里练着码,到头来写码也不够快,年纪大了,记性不如从前了,连import都靠IDE自动补齐了,往往越简单的功能写得越慢,当然了,写大程序,可能才有点优势;

第四,写码之外的世界更精彩。回顾十几年的生活,自己常以工作为重心,而现在回过头来发现收获最大的、最稳定的却是家庭,是老婆孩子;其次的收获是朋友,来自于一堆不写码的人。

朋友们估计也注意到了,我在上面不止一次提到Y同学,每个人一生中都有几个最好的朋友,我大学阶段的挚友是Y同学。在我很多的作品(软件、稿件、图书)中,我都提到了他。他是一个比尔盖茨式的人物,之所以这么说,是因为他酷爱电脑,并且中途辍学,一时传为佳话。不同的是结局,比尔发财了,他没有。当时在班上,我是追求上进的优等生,他是常常缺课挂考的混混,但我们常常在一起讨论理想,包括我不懂的无线电,包括他不懂的C语言,以及比尔和艾伦。大二的时候,来自苏北农村的他花了1万元钱买了台486,这台电脑先后陪伴了我的QBASIC、C和C ,当然也包括西木头的《C & C》和大宇的《仙剑》。杨同学是个爱咬文嚼字的人,也是个多情的人。我们那时候很少想到如何去追女生,但是对《仙剑》的爱情演绎能够评论得头头是道。98年毕业的时候,杨同学一次去南京,给我带回来一本老外写的3D游戏设计,其中讲解了一些3D原理以及编程要点,可惜我并没有深入的看下去。

这里也给年轻人提个醒,要做热爱生活的人,该找妹子找妹子,该喝酒的喝酒,该耍流氓耍流氓,不要一直泡在实验室。那样会得痔疮的!!!

第五条,深深感到计算机科班出身还是很重要的!我不是科班出身的,按专业来说我应该现在是个八级钳工什么的,但我十几年前选择了计算机!编程看起来很容易入门,很容易得到满足,但是很多基础知识前面没学,后面迟早得补上。随着编程的深入,就需要了解到硬盘IO比内存慢的道理,就需要了解SQL解析和执行的流程,就需要了解外部排序的原理,就需要了解分布式协调的理论。你开始越想躲避的,那些知识点就会像怪兽一样越长越大,某一天冷不丁挡在你前面,好吧,咬紧牙关把它干掉再继续吧!

先写这么多吧!后面再补~~~快十点了,脑子开始犯困了。。。

大学同学看到我的帖子,说你怎么忘了写当时写稿子的事?

是啊,我怎么能忘记了写稿子的事?

再重申一遍了,我是感性的程序员,因此我喜欢舞文弄墨,写了二十年的码,也差不多写了二十多年的文字,以下也带着各位看官回忆回忆^_^(赞呢?)

上个世纪末,写作的出处主要就是《电脑爱好者》了。第一篇是关于DOS中断的东东,发表于97年,网上居然还能找到PDF:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(35)

后来连载多期的是98年的《汉字的处理技术》,那会大家正在闹毕业,大家有的钱都花光了,就我很富裕,一期稿费800元,4期拿到了3200元,然后经常拉着几个要好的哥们搓馆子,还借出去了1000元钱。。。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(36)

后来一发不可收拾,将掌握的鼠标处理技术转换成了人民币(1998年):

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(37)

98年下半年,我开始了研究生阶段,那时候就有了写C 教程的想法,由于那时候普遍都是C语言,因此我的连载系列命名为《轻轻松松C to C 》,注意还是往《电脑爱好者》投的稿(1999年):

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(38)

我也不知道,《电脑爱好者》为何总是将我的文章放在“步步高”这个栏目?是因为我写的东西很有点步步高的意思?呵呵。。。不过,对于学生时代的我,稿费还算是比较地道的!

研究生毕业之后,正式进入工作,《电脑爱好者》的Z先生和我成为了QQ好友,后来我又写了几篇稿子,大抵是关于VC GUI方面的。再后来由于和水木清华BBS的几个网友一起办了vcer网站,我就直接把那些文章又发表成网上教程,在网上流传了一段时间。上次我在百度里搜索,发现还有一些网页尸体留存在那里的:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(39)

恩,再靠后,就是和小编接上头了,开始写书。自己的编程水平其实也不高,但按捺不住要表达自己思想的冲动。最后写的东西里面,除了一些代码,经验杂谈的也很多。。。

2007年写了《标准C 开发入门与编程实践》,大抵是觉得网上用VC6.0的程序员太多了,他们整天拿着一些过时的语法折腾来折腾去,对boost、STL却毫不知情,实在是被老教材害得够惨。。。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(40)

翻开蜥蜴的封面,里面还是能找到我感性的文字的:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(41)

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(42)

2009年结合VC,写了本《把脉VC 》,初衷也很简单,就是觉得一堆VC程序员看了一本又一本的编程秘籍,却依然不懂怎么开始一个项目。。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(43)

在这本书里,感性的我索性先给出了一张VC编程地图:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(44)

以上两本书的发行量很小,因此早就没有库存了,也因此证明我发这篇帖子更多的是情怀驱动(感性码农嘛)而非推销驱动!请那些自认为自己的书写得很好的、髙谭浩强一个世纪的牛人(这样的人,据我所知,知乎上还是有的)保持风度,不喜勿喷!

最后show一下20年程序员的书架的一角:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(45)

当然,现在更多的书架被育儿经占领了~~~~

最后比较遗憾的是,Java Web从2001年一直做到现在,却一直没能写出一本有意思的书来,也许和自己的脑子也不够灵光了有关吧~~~~下一本是啥题材的?大数据方面的?我不知道。

同学。。。点赞☝

回答者:Tim Chen

从1990年算起,到现在已经有25年了吧。现在不太写代码了,也就看看别人的代码或者写个console application做点实验验证。

其实我相信在那个年代,学编程和玩游戏是紧密联系的,刚接触编程语言的时候的想法就是为了写游戏啊。小学时基本没接触,到了中学预备班遇到一个同学是我的启蒙师傅,他在少年宫计算机兴趣小组的,传说中的邓摸头(画外音:计算机要从娃娃抓起)就是和他们一起的。我开始学电脑就是跟着他混的,后来自己也去了少科站计算机课外班。

最早就是Apple II上学BASIC。每次去少科站的上机时间很有限,所以我们都是事先在练习簿上写好代码,到上机的时候迅速输入而后抓紧时间调试的。我记得我写的第一个比较完整的游戏就是一个梭哈游戏,在练习簿上写了大概4-5页纸吧。纯文本的,你下个注,然后你的电脑每人发5张牌,比较大小。估计是那时候看的赌神类电影受的影响。我还能记得当时的两个难点,一个是怎么洗牌(后来用的是随机交换两张牌n次),另一个是怎么比较大小,后来是先排序然后比较死板地判断牌型(炸弹,3带2,等等)。

那时候的经典游戏就是crossfire了,居然能在wiki上找到。

Crossfire (1981 video game)

就是下图这货,IJKL控制移动,ESDF控制往哪个方向射击,非常考验左右脑配合。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(46)

后来我又做了个开车躲避障碍的游戏,算是一个“大作”了,也就是有几条车道,用键盘控制左右切换车道,来躲避前方障碍,还可以吃东西。

当时我师傅写了个街霸游戏,就是模仿街机里的街头霸王,只不过是用几个色块表示一个人,可以发波动拳,升龙拳,和旋风腿,非常好玩。要知道这都是BASIC写出来的啊。

后来开始接触DOS和C语言了,然后自己家里搞了台XT-286,装个Turbo C就可以自由编程了。那时候资料实在太少了,所以会写个TSR就算很牛的了,我还记得时钟中断是每秒18.2次,然后设两个计数器,第一个每18次就知道过了1秒,第二个记满5次就要补偿1秒。如果你能搞定XMS/EMS那就是属于特别厉害了。

那时候游戏都很经典,比如这个,三国演义1,智冠的:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(47)

这个轩辕剑1,这个县太爷其实是个老虎精变的:

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(48)

当时我们也想做个大游戏,都企划好了,模仿那是得街机游戏快打名将,主角是机械战警,人设都画好了,招式什么的都想好了。然后我还写了图形库,比如用来TextOut的函数库,那时候在图形模式下是要自己读字库文件然后自己画出你要输出的字符的。

后来我也忘了为什么没有做下去。

那时候还学了dBase,那个东西还是挺好用的,算是Access这种类型的祖先了吧。学那个的主要原因还是时常要给我爸朋友公司做点数据库相关的程序,比如做个员工工资管理系统啊,进销存系统啊,之类的,用dBase是最简单的了。后来慢慢换成FoxBASE,FoxPro。

大概94年左右吧买了modem,开始接触BBS,C-Fidonet。不是Internet,是打电话到别人家里去的那种BBS。估计这里知道的人比较少了。这个是蓝波快信了(截图来自月光博客CFIDO BBS回忆录)。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(49)

然后有了Internet接入服务,就开始学做网页了,那时基本都是手写html的,不过这也算不上编程了。那时候网站编程基本是cgi模式,做个一个计数器就是用cgi方式。我那时在geocities上做了第一个个人主页。

那时候比较热门的网站有pchome,站长叫Hayes,modem的品牌名。我算是第一批给pchome供稿的人群了。我记得那时就是自己用htm做好网页,包括用到的图片文件,打个包发给Hayes,然后他再放到网站上去。后来听说pchome卖了挺多钱啊,也没给我分点稿费。。。

比较有意思的一个插曲,有天有个Ubisoft的人突然给我发了个email,说看到我在pchome上的东西要找我聊聊,然后我和几个小伙伴就去Ubisoft的办公室了。我们还是高中生,见到了那里的电脑技术立刻就晕了,这个差距好大啊。聊的内容主要是听听我们对游戏的想法啊什么的,当时挺羡慕那里的工作的,觉得这就是理想啊,可惜年纪太小了,高考还没考呢。

后来到了大学里,网站技术越来越成熟了。我们那时候成立个工作室,趁着那时候火热,到处接活干。各种技术都用过了,一开始用得比较多的是asp,不是asp哦,就是手工拼html输出的asp,然后配合ADO和access数据库,算是一种很经济的开发手段了。后来也用过jsp和servlet,php,mysql。那时候基本算全栈了,不光是coding,连macromedia三件套也是熟练运用了。

网站做好了一般是放在电信的虚拟主机服务上,一台主机有多个网站挂在上面。当时大家的安全意识真的很差,用的NT4的服务器,基本不打补丁,好多漏洞。比如那个用Unicode的..\就可以访问到根目录然后就可以调cmd了,还有像SQL注入也是90%命中,因为基本都是在asp里面拼sql语句。我记得有个的网站和我们的挂在同一台服务器上,然后我居然能看到他的源文件,里面有数据库连接串啊。。。

那时候也找一些软件公司替他们做外包项目,基本上什么都做,网站啊软件啊都有,还有做flash的。印象比较深的一家叫火速,给他们做得比较多。刚开始合作的时候那家公司没几个人,CTO是个女生,技术上的事就和她谈的。后来听说他们越做越大了,有上千人规模,也挺不容易的。

桌面开发入门的是VB,真的太好用了。后来转到MFC,貌似纯WIN32开发被我跳过了。

毕业工作后基本上就是忙工作上的事了,业余时间不多。有一段时间比较迷p2p下载,就是电驴电骡那个时代。我算是国内第一批接触电骡eMule的,那是个开源项目,用MFC写的。当时看到没人去做简体中文的本地化,就去申请做了简体中文翻译,也就是写个中文的resource文件,电骡启动的时候会载入相应语言的resource文件,也就实现本地化了。后来的各种电骡版本基本上都继承了我最初的翻译,我的翻译有个特征码的,有一个选项叫Beep on error,被我一时脑残翻成“出错时嘟嘟叫”,后来若干年后我随便下了个电骡发现还是这句。。。

程序员写代码是干什么的(写十年的代码是一种什么样的体验)(50)

之后给eMule开发小组提了不少bug和小段代码,对eMule的代码算是比较了解的了。那时候国内的p2p下载都是基于不少论坛的,我主要在一个叫牛过的论坛,后来分裂了一个叫牛过一个叫汉风。我们一群人做的事就是先到某个ftp下载一个片子,然后放到自己的emule里面共享出来,当然我们的id里面都是有名号的:[CHN][Hanstyle]名字,这样的。

再后来我做了个eMule的mod,提供给论坛用户使用。有什么作用呢?第一会给带特殊标签的用户名更高的优先权。什么意思呢?eMule里面你的上传队列是有限额的,比如同时给10个人提供上传,然后其他人就会在你这里排队。排队的时候每个人就会有个ranking值,随着排队的时间ranking值会变高,这样决定下一个机会给谁。当然会有其他的因素决定ranking,比如是不是好友啊,是不是passive connection啊,然后我那个mod里面就加了另外的因素,比如如果你的id里面带[CHN]就乘个系数,哇咔咔。论坛当时分裂的另一边也做了相似的mod,差不多的策略。

所以你就别奇怪之后电骡里面的人名怎么很多都带[CHN]了,后来的VeryCD版本还自动给你加[CHN]这个tag,我们就是始作俑者啊。现在想想也挺幼稚的,并不公平。

后来mod里面又加了个挺强力的功能,因为论坛想要统计每个成员的下载和上传量做考核用。这个怎么实现呢?上传量这个数据本来就是emule客户端自己统计然后记录在ini文件里面的,很容易就可以篡改。后来想了个很傻的办法,把上传量,你的id之类的数据,加上一个盐,hash一下再保存在ini中,然后定期给一个web服务器post这些信息,服务器那边会用同样的算法hash一下看看是否被篡改。其实这东西很容易破,因为用到的盐和算法都在客户端代码里面,逆向工程就可破了。不过当时用用效果还算不错的。现在想想这不就是PT吗?

然后更新了几个版本我就玩消失了。太累了。后来我又出现的时候已经叫中国驴了,作者acat就是当时隔壁论坛那个mod开发者,和他联系上后又和他合作写了一段时间代码,再后来感觉无爱了就又消失了。

【更新】

说了这么多玩的,再说说工作上的编程吧。我进微软后先做的是技术支持,所以也算不上是程序员吧,主要的时间花在windows的调试(蓝屏啊系统锁死啊之类的),因此大多数时候我是在看代码而不是写代码。几年的时间我也数不清看了多少行windows代码了,可以说是阅码无数,心中有码了。编程主要是做点小工具用来帮助调试,或者是模拟客户环境来试图重现问题。一般就是写个console application调用些win32 api就可以了。有时候会改下windows某个组件的代码,加点调试信息,自己编译一个版本出来,让客户替换上,这样可以在下次发生问题的时候获得更多的信息。也有时候找到个bug,自己先做个fix给客户试一下,如果有效再走正式流程出hotfix。

后来到了产品组,做的职位是测试开发工程师,从Windows Server 2008到R2,再到SQL 2008 R2, 2012等等,写了好多测试程序。有时候是有现成的测试框架你只需要写测试用例里的代码,有时候就是从框架的测试用例都是自己写。比较有意思的就是不时地想些新方法来测试。比如有一次用Model-based testing,先写一个模型出来描述测试对象,比如要测一个对话框,用一个模型(类)来描述这个对话框的状态以及各种动作(点击按钮),然后模型里面自己计算出各种状态正确的改变方式,同时用相同次序去操作测试对象,然后比对两者结果是否一致。模型建立完善之后,就可以用随机数生成各种各样的测试步骤了,会找到一些你根本想不到要去找的bug。

发现bug后进行调试也是一个必备的技能,因为之前有大量调试经验所以这还是很顺手的,经常是开个bug,自己把bug的原因找到,然后把fix代码做个changelist打包到bug里面,然后dev只要check in就行了。

开发技术上,看到的主要是由C native向C#的变迁过程,使用的越来越多,产品代码和测试代码都是这样。现在做Azure云服务基本都是C#了。

再后来带了团队,然后测试和开发也合并了,工作重心就转到工程管理上了,想的更多的是做什么,怎么做是正确的,而不是自己去做这件事。有时候一个正确的决定,可以躲过好多坑了。现在带个小队伍,主要做内部工程系统的研发,比如做一个持续开发部署平台,或者做个生产环境的监控报警平台,或者做个云测试平台。做的东西不固定,目标就是提高内部工程开发的效率。做这个最有意思的一点就是没有产品经理啊,自己就是产品经理,自己得决定做什么,什么先做什么后做。

现在代码已经很少写了,最多就是看看code review,有时候心血来潮也会打开windbg调下bug。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页