嗯,这是一个比较大的软件,想做的事情有一大堆,但今天就定个小目标,实现连续读取某一个磁道连续16个扇区的功能。他用右脑想象了一下实际的效果,又迅速用左脑思考了一下实现途径。估摸着今晚完成是没有问题的。
他换进了一张Lisa 2.5(6502汇编编译器)的软盘,启动,并载入早前写的其他代码。他又找了一个合适的点,开始插入新代码。几乎是一气呵成。编译,调几个参数,测下效果,直到他满意地开始备份今天的工作,关机,美美地入睡。
几周后,一个带有人机交互、全屏字符界面的磁盘修复程序完成了。他专门为它做了一个带自启动的盘,贴上写保护,跑到市少年宫,在同好的朋友间传递。“Hi, 随便拷贝和传播哦,这是个Postware,喜欢的话寄张明信片给我。地址在程序里有。”
这是上世纪80年代。国外的大型机系统已经发展到了青壮期了,某所在一层一层切割大型主机的电路板试图研制。IBM PC也已经发布了,而中国还停留在起步山寨Apple II的阶段。没有网络,更没有开源软件,连资料都需要从港台买。那些放在指导员书架上的宝书还不是人人能借的。手里的资源仅是系统固化的ROM (有点类似于今天的BIOS )和10K左右简陋的DOS。很多Apple II的“大型”软件都是单打独斗完成的。
如今很难想象,刨去DOS和“高分辨图像”(280x 192)的存储区域,留给程序和数据的仅有那么10几K 空间,需要自己实现Code Swap才能做一些较复杂的功能。如此困难,却依然无法阻挡程序员的热情。每个人都会用自己独特的方式来完成看似不可能的工作,所谓百花齐放,百家争鸣。一切都是那么美好。
如今,软件工程变得越来越复杂,也越来越脆弱。我们有大量的需求变更、延迟交付、部署失败、线上问题。产品要的东西越积越多,望不到头;研发被任务压得喘不过气。到底问题在哪里?
但是我这篇文章并不试图去具体解决这些问题。我们有很多的书可以看,有很多方法可以去实践。瀑布 v.s. 敏捷?传统 v.s. DevOps?只是生搬硬套,其实解决不了问题,你只能看到一个“先进”的躯壳在运作,灵魂还是那个灵魂。我们需要从观念上根本转变过来,那就是要把一个项目团队打造成“一个人”。