Files
devops/language.md
2025-09-17 16:08:16 +08:00

7.3 KiB
Raw Permalink Blame History

编程思考

1997年开始的大学学Fortran77是一门面向过程语言算比较早的高级编程语言了提供了比较丰富的内嵌函数库工程和数值计算领域曾经独领风骚。后来出来fortran9095据说支持派生数据类型也就是结构体为设计数据结构适用大型软件提供了方便。大学毕业后就没有再使用fortran语言。Fortran现在来看比较落后 但在当时作为编程启蒙还是相当不错。

2003年开始用C++/C编程开始学习C++/C语言做桌面应用在linux用QT。 C++语言在当时确是打开了一扇窗户OOP观念实在先进感觉写程序除了抽象思维还和现实世界有了更多链接OOP概念就是现实世界的语言描述。如果说原来面向过程编程是记流水账想到哪里写到哪里那么OOP就是写小说更多考虑架构及内生关系面向过程特点是线性的零散的重复的OOP强调抽象组合、有机的、复用的解耦的。C则便于写出快速精炼的函数C语言专家往往强调C语言是完全不同于C++语言有其他语言不可替代性诚然不虚但对一般使用者除非要写面向底层高并发高性能特殊应用或组件应用层面C++已经完全可以取代C语言况且硬件资源限制越来越不是问题了高效才是关键另外C语言的内存管理需要程序猿考虑对于新手来说实在是一趟艰难的冒险之旅。这里要说下QT是一家叫奇趣科技的芬兰公司几个程序员开发后来被诺基亚收购。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来自动化分析工作那算不上编程。

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