完成任务不是目标

有的工作环境下,自己能做到的只能是‘完成任务’。而不是考虑代码质量,在这样的环境下是不会进步的,完成任务是目标,不管重构也好,重写好罢,都要缕清楚代码的逻辑,业务逻辑是什么,不要上来就一顿乱改,最后界面上表现的好像很正确,但后面的逻辑一团乱。。。

天下武功唯快不破,天下代码唯乱不解。

只是能用是不够的。

不管程序也好,架构也罢,只是能用的状态是不够的,可能由于时间的原因,程序处于能用的状态就上线了,但是在接下来的时间,需要持续不断的改进,改进响应时间,改进一切可以改进的地方。

没有最好,只有更好。

分享:余晟:程序员的“横向发展”

在我小的时候,家长经常对胖孩子打趣说:哟,身体长得挺快,可惜就是横向发展了。看来在很多人的潜意识里,纵向发展是向上的,值得夸奖,横向发展则不是那么光彩的事情。但是我的工作经历和思考,却让我对“横向发展”有了新的认识。

程序员的发展,长期以来都是大家关心的问题。通常程序员的发展有两大方向,深度和广度。深度发展,就是精深自己的本事,研习新潮尖端的技术乃至学会“屠龙之术”,以绝招打遍天下;广度发展,就是拓宽自己的技能种类,比如学会更多的语言,以完成更多种类的任务。除去这两大方向,其它能选的发展方向似乎就只有“改行”了。

今天我要说的当然不是改行,而是除去深度发展、广度发展之外的第三维度,因为似乎一直也没有正式的命名,所以我干脆借用“横向发展”的说法好了。

什么是横向发展呢?举例子来说,我们写个程序,深度发展关注的是让它速度更快、资源消耗更少,广度发展关注的是让它更合适与其它模块交互,甚至用更合适的语言编写这个程序。横向发展,则是让这个程序成为真正能用的程序,而不是实验室里的玩具。换句话说,“横向发展”是让程序更加“工业化”而不是“技术化”的发展。

我刚开始工作的时候,有一天提前完成了任务,喜滋滋地去向项目经理汇报。不料他看了代码之后,却把我劈头盖脸说了一顿:你以为你还是学生呢,给老师写个程序算出正确结果就完?你看你处理网络连接的部分,对服务器返回的异常信息,包括网络传输的各种意外都没有处理,谁向你保证服务器总是返回正确信息的?谁告诉你网络传输不会意外的?万一网络断了,你的程序就一直死循环吗?……

我必须承认他说的有道理,但也一时无可奈何。虽然在学校的时候写过不少程序,但老师都只看大致结构和结果,从没有问过“网络断线了怎么办”,也没有哪本教材专门讲过这方面的知识,所以自己一直也没想过。但是没想过归没想过,项目经理说的毕竟有道理,确实只有学生才会写出在理想环境下运行的程序。于是我开始有意识地学习和思考各种异常情况的处理,觉得讲究挺多,思路也因此拓宽了不少。不久,还因为这方面的工作得到了项目经理的表扬,也深刻感觉到“横向发展”确实解放了自己。

后来换了份工作,我本来以为自己之前的经验可以被人赏识,却发现自己完全想错了。新工作对程序的要求更高、应用场景更严苛,只思考在程序内部怎么处理异常是不够的,还需要确保程序的持续运行,其运行状态持续可以记录、监控、分析,出现问题必须能在第一时间判断症结(而不是启动IDE去debug)……为了做到这一切,既需要专门开发程序去监控自己的程序,又需要让原有程序能够被方便的监控,还不能泄露不必要的信息,所以在设计时又有更高的要求——当然,这些知识仍然是书上没有的。我写到最后才发现,虽然核心的功能并没有变复杂,但为了保证核心功能的稳定运行,程序本身的复杂度却上升了很多。这种要求,颇有几分类似小朋友的“横向发展”——但是小胖墩的重心终归要稳一些嘛,所以我把对程序员的这种要求称为“程序员的横向发展”。

或许是从工作开始就有机会重视“横向发展”的缘故,所以我长期以来并不认为这是严重的问题。后来的见识却刷新了我的认识:曾经有朋友告诉我,国内互联网行业某新兴领域排名三甲的公司,竟然连自己的服务器上跑的哪个版本的程序都不知道,开始我还当是笑话,后来才知道事实当真如此。小朋友的“横向发展”不讨人喜欢,许多程序员也忽视甚至讨厌“横向发展”,觉得这是在给自己找麻烦,他们认为,把核心功能写完,代码提交,往服务器上一扔,自己的工作到此为止了。至于其它方面,那就是系统管理员要处理的了。

如果你认真回忆,一定见过许多这样的程序:完全不处理意外情况,各种异常一股脑交给操作系统去处理,我甚至见过默不作声把所有异常都吃掉,假装没事继续运行的系统。也见过很多这样的程序:自动发送邮件的程序,不知道自己每天发了多少封邮件,消耗了多少流量,等到用户收不到邮件才知道出了问题;备份数据库的程序,不会记录每次备份的开始时间、结束时间、备份文件大小,直到硬盘满了才发现已经很久不能正常备份了;抓取数据的程序,不知道抓取的成功率、速度、消耗的流量,非要业务部门说数据很久没更新了才知道抓取失效了…… 其实这些功能通常都不复杂,但完成它们的程序,不管什么平台,什么语言,就是做不到稳定。每次出了问题都不能预先知道,又因为没有详细的记录,又要消耗无数的人力物力去解决。在一些稍微复杂的系统里,不少程序员每天的工作内容就是这样的重复劳动,随之而来的是无休无止的抱怨,说工作毫无意义,没有机会学新东西…… 更糟糕的是,不少这样的程序员业余时间还在积极学习,希望在把语言工具掌握得更熟练,学会更多的语言和工具,却不知道问题的症结在于自己缺乏“横向发展”的意识。

我仔细回忆自己小时候,家长和老师会在一种情况下提倡“横向发展”,那就是要求身板像“豆芽菜”一样的同学多锻炼,成长结实一点。同样的道理,如果程序员觉得自己写出的程序像“豆芽菜”一样没有底气、不能放心,与其继续钻研新语言、新技术,倒不如抽出精力去“横向发展”一把。

梦想和机会

时常在想。我还有没有可能再去大学中深造一下计算机。。。 。可怜了那些数据结构,算法导论,计算机组成原理,离散数学。。。。。。大学就是墙里墙外。

忆’黑客’

看了道哥的关于《中国黑客传说》的文章开头有这么一段:

启蒙时代

A君从小学6年级开始学习Pascal编程,而和他同龄的大多数孩子在那时还只会看卡通和打电玩。

到了2001年时,中美黑客大战爆发了。受中美黑客大战的影响,A开始对黑客技术产生了浓烈的兴趣,那一年他还不到15岁。

中美黑客大战是中国互联网历史上里程碑的一次事件,影响了整整一代人。很多现在的优秀黑客和安全专家,都是从那时起投身进入这个领域的。如果没有中美黑客大战,也许像A这样的人就不会脱颖而出成为一名黑客,而是会默默的在大学毕业后成为一名软件工程师。中国从来不缺乏优秀的人才,缺乏的是培养人才的土壤和契机。幸运的是,黑客大多出自草根之中,靠自学而成长。

在中美黑客大战后,一个偶然的机会,还在读初中的A发现他的英语老师正在浏览一个黑客网站,其实他当时是来问一个英语问题的。当时A就像发现了一片新大陆一样,缠着英语老师想要学黑客技术。

记得那是2000年,家里购买了第一台电脑,2001年通上网,由于当时正值上初中,没有太多的时间来玩电脑。只有暑假寒假才能泡在网上,认识‘黑客’这个词,是从‘华夏黑客联盟’这个网站看到的,受当时‘中美撞机’事件影响。网上像我一样的小菜。都拿着工具对日本的官网发动ddos攻击。我妈问我在干嘛。我说堵日本人的端口。我妈说听不懂。我说就是塞住网站的端口不让别人访问。。。。一句话就懂了。至今我妈还记得我当时的这种攻击方式。哈哈大笑。

随后几年接触了《黑客X档案》《黑客防线》等杂志。由于没有编程基础只会拿着光盘上的工具瞎玩。。当时很火的是$IPC攻击。我很幸运也很成功的弄到几台机器。但没有免杀的木马。浏览浏览电脑上的东西就玩丢了。。第一次入侵。拿着杂志。一步一步来。

到了高中的时候。更没有时间来摆那这些东西了。但还是会每月买一期《黑客X档案》偷偷的藏在桌子底下来看。。当时一本好像是9.9。学生很穷的。即便这点钱都需要跟同桌合资买。。

高中的日子忙的要命。有一年的暑假。一直泡在网上,学习了灰鸽子木马免杀的技术。以及QQ阿拉大盗的免杀。成功的骗过了瑞星,卡巴等。万事俱备。就剩入侵一个网站了。当时不知道在网上学习了一个什么cms的漏洞。百度上一顿乱扫。。。成功的搞定了几个网站。挂马。然后我的肉鸡一个一个的就来了。。最多的时候就300多只。然后就开始了我的种马行动。。现在我的邮箱的还扔着几千封QQ阿拉大盗盗来的QQ号。。一个暑假最后的战果是搞定三个7位号。。。保住两个。丢了一个。其中一个没有密保。我帮他申请了一个。哈哈哈哈哈哈哈。。8位号N多。。想想也是快10年前的历史。

上了大学之后只干过一件在我看来是一个正常的行为的‘黑行为’。我们学校必须在校内才能登上教务系统。校外不能登陆。这样就不能查询这个学期的期末成绩了。挂不挂科天天纠结着。然后我就开始给学校义务安全漏洞扫描。扫描到一个root权限的mysql网站。‘就业信息网’。架上代理。直接进内网查成绩。所以大家在放假的时候都特别想念我。。因为我可以帮他们查到成绩。。哈哈哈哈哈。

大学的其它时候没有再’涉黑’。一个是犯法。另一个是没有时间玩了。

现在在做程序员。五年,十年之后呢?说不好我又要回归小黑界了。。

刺刀还在,理想已经滑落