软件设计奇遇记(一):时间线索

不知不觉加入软件行业,已经近十年的时间了,

从第一次接触编程开始,也有二十多年了。


可能的我接触到的第一行代码应是 98 年左右,

那时用 BASIC 写下了一个求解 1000 以内所有素数的程序。


然而,这并不代表着我会在软件领域能有什么建树,

回忆一下过去的话,更多的也只是一种缅怀,切不能以吹嘘的心态审视自己。


不过也正是因为有这样的渊源,最近才有了这样的想法,

我想记录一下这些年的所见所闻所感,

目的是从个人视角,横跨软件开发不同的子领域,说说自己的浅薄认识。


止增笑耳。

程序设计

既然是进行程序设计,那么必不可少的工具就是编程语言了,

我个人也对编程语言本身也挺感兴趣,

所以,以我所接触到的编程语言为线索,重新回顾整个过程,应当是一件有趣的事情。


我们知道中国古代有四大发明,造纸术、印刷术、指南针、火药。

它们都是古代先哲们智慧的结晶。


这里提起它们是因为,我觉得 “活字印刷术” 可看做是程序设计的雏形。

时间点,宋仁宗庆历年间(公元1041-1048)。


而一般对程序设计的历史的追溯,大都只追溯到了 “雅卡尔织布机” 为止,

雅卡尔织布机可利用打了孔的卡片为图样编制程序,输出织好的布匹。

时间点,工业革命期间 1799,18世纪末,19世纪初。


且不谈这两项技术的年代差,因为这跟民族自豪感没什么关系,

但如果只看技术特点,却能意外发现,它们有了很大的相似性。


都是采用一种预先编排好了的 “物件”,来指导机器自动化的完成任务。

这就是程序啊,能看清这一点会让我们洞悉编程的本质。

程序是指挥机器的媒介,通过一种办法将大脑内的无形知识,转换成自动任务。


所以,从这里看,也能冥冥之中窥探到一些端倪,

知识的转化过程,在编程领域中会占据至关重要的位置。

编程语言

我总共接触过这么几个编程语言:

Basic,C,VB,Assembly,C++,JavaScript,

C#,SQL,Scheme,Prolog,Fortran,Matlab,

Java,Haskell,Common Lisp,Racket,Erlang,

Python,Clojure,Go,Swift,R,ML,Rust,Ruby。


这里不是在炫耀这样的经历,因为多并不代表什么。

只是说,我的思维方式,确实受到了这些优秀语言的影响。

所以字里行间之中,无意中可能会透出一些来自这些语言的 “偏见”。


诚然,程序语言会影响一个人的思维方式。

但什么不会影响呢,一个人所有的经历也都会影响他的思维方式。

所以,为了让自己的思维不局限在一个狭窄的维度,大可多去尝试。


有过多语种编程经历的朋友,更容易消除对编程语言本身的迷信,

每个语言都有其自身的特点和局限性,

甚至会感受到,发明一个语言也不是多么值得兴奋至极的一件事情。


在我看来,语言不但提供了一种全新的编码、思维方式,

更重要是提供了一个社区,一个环境,一个心智模型,或说是一整套解决方案。


人在这个社区中,比方案本身,扮演了更重要的作用,

所以说选用不同的语言就选用了不同的生活,也并不过分。


用不同的语言进行编程,就会强迫我们用不同的方式转换自己的想法,

将大脑内的知识,转换成当前语言所能表达的样子。


所以有过多语种编程经历的朋友,他们的思路可能是更加灵活的,

并不局限于特定语言的表达能力,必要时,甚至可以发明新的语言来表达自己的想法。

硬件

软件行业有其自身的发展路线,虽然它还是一个年轻的行业,

软件业虽然从 1949 年就开始了,但软件这个术语首次被使用是在 1959 年。

至今也才只有 60 年的时间。


不同人会对这 60 年进行不同的划分,

个人看来,影响软件行业形态的几件大事是,个人计算机、网络、云计算。


这三件大事导致了软件行业编程方式的重大变革。

没有个人计算机,计算能力就无法普及,也就不会有用于普通民众的程序出现,

网络进一步加速了这个过程,软件才开始变成了一个系统工程,

云计算是最近一些年火热的概念,能不能彻底改变软件组织形态,还不太确定。


除了软件形态之外,硬件算力的提升其实跟软件设计领域的发展是相契合的,

个人计算机时代,人们用的编程语言有,Assembly、BASIC、Pascal、C 等,

随着硬件水平的提升,面向大型软件系统的语言也出现了,Delphi,Java,C# 等。

网络流行之后,一些网页上编程语言 JavaScript 得到了长足的发展。

而如今 云计算 大数据 AI 时代,Python Go,等语言也得以大放异彩。


所以,软件解决方案总是由问题导向而催生出来的,同时受制于当时硬件条件(资源条件),

正是由于有这样那样的问题需要被解决,所以合适的方案才会越来越流行。

这个规律在任何一个时间节点上都适用。

结语

本文从历史发展进程的角度,介绍了程序设计的一些背景内容,

其中夹杂着很多个人的体感认识,以及自身的感想。


如果必须用一句话来向别人解释程序设计是什么的话,

我想我会说,程序设计就是一种把大脑中的想法转化成自动化任务的过程。


这其中必然会涉及到:

  • 如何丰富自己的大脑,让自己的思路更加的清晰

  • 如何进行转化,应该怎样进行思考

  • 转化成什么,不同的转化结果会产生什么影响

  • 机器是怎么执行任务的

等等,还有很多需要关注的点。


所以,我不认为程序设计是能够脱离人而存在的,

这也是为什么软件开发过程中,离不开软件工程的原因吧。

现在越来越多的公司开始关注工程、关注人了,而不仅仅是编程本身。


后文我们也会再次提到这个重要的核心要素。

人和信息,会给我们观察软件行业提供一个不同的视角。


这可能是一件有趣的事情吧。