Archive for 6 6 月, 2008
实习感言
已经实习了一个星期了,最大的感触还是上课和搞科研的自由度大一些。工作的压力还是比较大。
目前还没有开始做正式的项目,但是到这个小公司的实习却给了我很多启发。有管理方面的,有技术方面的。管理方面的我可能还需要观察一段时间才能看出一些名目,不过这一个星期的开发学习,让我对于这个公司技术方面的感想还是逐渐清晰起来。
这个公司的产品大多数是和报纸出版有关,也就是排版和印刷相关。此公司虽然人数不多,不过客户群体还是很大,目前最近的客户是基于旧金山的全美最大的华人日报《星岛日报》。如此小规模的公司,成立于1975年,已经在淘汰率极高的软件行业摸爬滚打了30多年,不能不说是一个小小的奇迹。
第一天去公司把我吓一跳。公司的开发语言是公司自己开发的语言,编译器是公司自己开发的,调试器是公司自己开发的,数据库是公司自己开发的,网络服务器是集成Apache并且经过改写的。公司10个左右的产品均是又自己的开发语言所编写。这种情况已经持续了将近20年。然而,公司本身的技术人员,特别是开发人员并不多,核心的开发人员也就3-5个人!
吓一跳之后就是痛苦的持续到现在的开发经历。公司的语言是类Pascal语言,我在1997年到2002年有过几年Pascal的开发经历,然而没有集成环境的开发,仅仅依靠编译器,开发进度非常之慢。命令行的调试器对于大型程序来说根本就太过于原始。最后,仅仅是Emacs的语法高亮都成为了唯一能够帮助的奢侈品。整个工作的感觉就像是上个世纪70-80年代。因为没有语法提示和高级开发工具(如Visual Studio、Netbeans和Eclipse)的成员提示功能,根本就不清楚语言库内提供了什么功能。经常为了一个简单的函数要去查询浩如烟海的文档。注意,那些文档的编写都非常差,基没有例子,就仅仅写了一下函数的功能,更何况所有的开发手册有4-5卷本,两三个牛津字典那么厚。没有索引和指导在这样的文档里面找一个函数的使用,简直就是大海捞针。
网络开发环境和一般的Web开发环境,比如PHP、ASP.net、JSP都非常不一样,有一点类似模板外加控制代码的意味。然而整体的流程确实在后台的服务器组件中完成的。这一切都是公司自己的语言编写的。尽管现在有很庞大的软件在这上面编写完成,但并不意味这这套东西就没有问题。首先,后台的服务器组件不能区分POST和GET,有点匪夷所思。并且对于Session的支持也非常有限。没有事件的概念,更没有什么URL重写这些现代的东西。
数据库就更是夸张。首先,公司的数据库都不是严格意义上的关系数据库,而是自己写的数据引擎。并且与SQL不兼容!数据库查询不能使用强大的SQL,这在今天看来很不可思议。然而,整个公司的存储方案都是类似于结构文件的方式。因为没有SQL,关系数据库所带来的一切便利这里都用不上。而很多基础的东西明显缺失。比方说,没法生成唯一的递增序列作为数据的标识,只能使用很丑陋的方法模拟。更严重的局限在于,索引的字段的长度只能是255个字符,单个索引的字段长度不能长于127。常常一个简单的功能都让人困扰半天。
我的同事在另外一个项目中工作,那个项目使用了非CVS也非SVN的自己编写的原始的代码管理工具,效果是,可能还不如没有版本管理。大家经常覆盖相互写的东西。
看我写了那么多抱怨的话,是因为我这几天真的被磨得有一点没有脾气了。我一方面很佩服一个这么小的公司居然能够维持这么复杂的软件体系,一方面我的确非常不理解这样做的真实意义所在。如果说20年前,开发工具、调试工具、数据库工具都没有成熟的话,那么时至今日,市面上随便都能够找到开源的免费的好的替代产品。
最要命的还是编程语言的问题,此开发语言不能和现有的很多语言集成,比方说C,C++,或者Java。再加上人力物力的原因,语言库的开发又跟不上,文档就更旧,让人整个在浪费时间。
另一方面,对于团队开发,不使用开发工具,那完全就是自欺欺人。完全依靠一个简单的文本编辑器和原始的调试器,开发编译器是可行的,开发应用软件,那就是扯蛋。
不过,唯一让人钦佩的是,国内哪个40-50人的小公司想过开发自己的编程环境或者是数据库?考虑到这个公司存在了30年以上,不能不说还是有一些值得借鉴的地方。

近期评论