Files
xhsautopublisher/markdown/language.md
2025-09-05 17:20:14 +08:00

9.6 KiB
Raw Blame History

layout, title, subtitle, description, date, author, image, draft, tags, URL, categories, slug
layout title subtitle description date author image draft tags URL categories slug
post 程序猿往事 2015-01-19 11:00:00 大童 true
代码
思考
language

97年上大学学的Fortran77一门面向过程语言。Fortran算较早的高级编程语言提供了丰富的内嵌函数库工程和数值计算领域曾经广泛应用。后来出来fortran90/95据说支持派生数据类型也就是结构体为设计数据结构适用大型软件提供了方便。

大学毕业后就没有再使用。Fortran现在来看比较落后但在当时作为编程启蒙还是相当不错的。

2003年开始用C++/C编程逐步学习C++/C语言做桌面应用可视化用用QT跨平台。 C++在当时确实打开了一扇窗户OOP观念实在先进。写程序除了抽象思维还和现实世界有了更多链接OOP概念就是现实世界的语言描述。如果说原来面向过程编程是记流水账想到哪里写到哪里那么OOP就是写小说更多考虑架构及内生关系面向过程特点是线性的零散的重复的OOP强调抽象组合、有机的、复用的解耦的。C则便于写出快速精炼的函数C语言专家往往强调C语言是完全不同于C++语言有其他语言不可替代性诚然不虚但对一般使用者除非要写面向底层高并发高性能特殊应用或组件应用层面C++已经完全可以取代C语言况且硬件资源限制越来越不是问题了高效才是关键另外C语言的内存管理需要程序猿考虑对于新手来说实在是一趟艰难的冒险之旅。

说说QT是一家叫奇趣科技的芬兰公司几个程序员开发后来被诺基亚收购。完全开源源代码写的非常规范易读绝不故弄玄虚大量的注释(当然是英文)是学习C++上上好的源码。QT并不是一个玩具最早在Fedora上标配的桌面KDE全部用QT写如此大型的桌面项目全面检验了QT的成产力和成熟度。QT的文档化做的非常好Tutorial和Practice做的很好我至今印象深刻的是Tutoral中Step By Step例程是实现一架动态的加农炮QT的注释也相当完备无论入门还是高阶用户都能从中得到有效指南C++本身有较好的封装和解耦特性QT在此基础上采用Slot/Signal的机制该机制进一步把实现者和使用者进行解耦。

在Linux下写代码有些类似瑞士军刀式工具可以大大提高效率比如用的较多awk和perlawk脚本特点是灵活小巧能够高效支撑文本处理也支持正则perl相比awk提供了各类高级特性尤其突出的是强大数据结构和天生文本匹配能力。perl可以写出简单oneliner代码也支持写出复杂软件perl信奉条条大路通罗马的哲学用不同的方法实现同一需求。perl作者larry wall是自然语言家所以perl很多表达类似写作这点是perl的优势可以写出灵活多变的程序很多程序体现作者乍现的灵感。但这也是问题perl代码常常会显得晦涩难懂这在当前开源盛行注重产出和生产力作坊式或生产线模式下是尤其不友好。开源和流水线对让代码可理解易阅读性要求较高沟通成本要低造轮子要少晦涩难懂的好代码往往成为一堆无人问津的数字垃圾。我相信Python作者一定领悟到perl的前车之鉴python坚持简单清晰与perl理念相反python提倡只用一种方法来完成一件事。这实在是设计哲学范畴孰优孰略很难界定perl见证了兴衰python终于后来居上从另一个角度印证了传播性在语言设计中重要性。

突然想起当年学python的一桩小事2007年某天我决定用python写点东西于是我翻了下python手册大概了解了数据类型、控制结构、文件处理。从哪里着手呢从熟悉的工作吧当时我正在实现一个用仿真通信系统用户模型语音通信模型里用户到达符合泊松分布用户使用时间符合指数分布在数据通信里涉及类型更多我们用马可夫链来计算概率用蒙特卡洛算法模拟大量用户请求事件来输出系统指标 。算法是同事刘伟写的北大高材生这哥们大抵是个数学家大约2012年移民韩国搞5G去了。我当时已经完成C++实现, 并达到预期效果。 这个软件的大部分底层C代码是Michael Mandell写的我们叫他老孟博士美国人UT首席科学家原来波音公司的首席科学家的确NB闪闪难以企及。回到python于是就拿这个还热乎又有一定复杂度的应用来练手大约花了一周业余时间写好算法代码问题是这个python的应用运行的概率结果就是不对这个问题又大约花了2天业余时间加部分工作时间还是没有解决绝望之下放弃了python。

之后在大约2008年左右开始用JAVA写WEB应用原因是当时MVC架构的Struts给web编写提供了相当便捷性代码结构清晰与数据库oracle交互的采用基于JDBC封装的Hibernate持久层中间件屏蔽了原生SQL而是用一系列Bean来交互存储数据用起来也是相当顺手。此外apache有个叫mina的NIO框架免去自己写异步通信的烦恼这个mina的作者也是后来netty的作者厉害。C++转JAVA基本上没什么门槛跨平台也更加方便工具集更加友好开发环境搭建更容易开源资源更加丰富入门容易。丰富资源和活跃社区意味着程序很多时候只需要复制黏贴修改用JAVA作为开发语言的软件公司越来越多JAVA长期徘徊在语言排行榜第一位置JAVA程序员供不应求工作容易找薪水水平高又助推小孩们学JAVA这种现象似乎现在也出现在Python上。可这么容易写一个东西类似堆几块积木想必缺乏内在生命力

大部分软件大咖,是以写代码为乐,写代码对他们来只是另一种游戏而已--一种思维游戏他们甚至在写代码过程进入心流状态Linus Torvalds传记说他linux时状态就是编程――睡觉――编程――睡觉――编程――吃饭――编程――睡觉――编程――洗澡――编程……一切编程之外就是简化到维持生命必须我想他必定是体验到规则之下自由创造的乐趣。我不知道其他大部分程序猿写代码的状态但对我来说大多数时间并没有体验到自由创造的乐趣编程对于我更多的是苦役这不是说我不能集中精力沉浸其中而是常常沉溺细节而无法构建一个恢弘的大教堂我们所做更多的是重复性而非创造性的工作。这让我想起小时候帮父亲家具作坊搬木头劳累又厌倦。大约在2012年后我基本上告别编程也切断由此带来的烦恼。当然偶尔会写点perl来自动化分析工作那算不上编程。

这么多年,软件业已呈现出星河日月之势,编程已经交织到我们的生活当之,只是我们不自知而已,代码构筑虚拟世界的触角会延伸渗入物质世界中,侵蚀软硬的边界,甚至未来,世界的形态根本就可能由虚拟之物构成,我们所珍视,精神层面的东西都可以是一片算法而已。如此想来,我们是不是当及早了解一二,以在我们变得更老而探索之力消逝的时候仍然可以理解这个世界。

老孟

2008-05-29

老孟姓名孟凡克原名Michael Mandell地道美国人。 老孟2002年离开美国波音公司chief Scientist岗位再之前在美国军工企业Hughes Space and Communications公司也是Chif Scientist。

第一份工作,老孟第一个面试官,大抵问了些诸如正弦曲线、数值算法之类的数学问题。

老孟喜欢与人聊天,喜欢平仄不分的音调,援引简单的中国小诗,摆弄汉字四字成语,常让我想起美国版孔乙己。老孟喜欢拿用滑动铅笔在废纸片上涂画汉字。老孟的日常爱好和后来的中文精进,推想老孟刚来中国时中文应该还比较烂。老孟的本地化进程不止在语言上。老孟在某老小区居住,据说该小区的大爷、大妈和老孟都挺熟的,碰到老孟都会寒暄几句。腰间别一手机并加套,在这里流行过,又不流行了,不知老孟是因为流行还行因为方便。

与老孟一起工作始于2003年参与老孟主导开发的一个项目项目组总共就5人一起干了4年不到。2006年老孟调去深圳做WiMAX芯片开发。期间老孟的建议和指点虽寥寥数语却总能起到指点迷津。

老孟头衔很多孟老师、孟博士、专家、首席科学家……这些头衔对于老孟都是货真价实无虚假成分的。我看老孟本质上是一个程序员老孟具有一个好程序员的特质老孟有扎实的数学基础严谨的思维对未知东西热烈的好奇热情的付出。老孟写的代码简洁清晰富逻辑、具美感折射出其深厚的编码素养。但老孟代码注释极少有注释处也是极其精炼对于阅读者是一个不小挑战极不符合开源精神。这种个人英雄主义的做派我猜想一定程度上受美国当时Linus等人影响另一方面可能跟原来波音和休斯军工背景有一定关系。

老孟性情温和、或者说随和、或者说亲和更贴近些。在中国几年,老孟已深谙中庸之道,不知是品性使然,还是被国人中庸感染。其实,和他一起工作的很多中国人都不那么中庸了。