主题:【整理】关于编程改革 -- 代码ABC
虽然中国人会做题,但是抽象的思考问题,数学化的思考问题从我在网络辩论上所感觉的,一般都很差。
研究算法的好多是学数学出身的。但是普通程序员在编程中也需要数学知识。比如Big O, 和 正则表达式分别是离散数学和逻辑学的内容。而离散数学和逻辑学是计算机本科的必修课。
做架构师的确更需要抽象和管理能力,比如怎么分析用户需求说明书,怎么把用户需求抽象成不同的模块功能,用什么数据结构来表达用户数据等。
而真正写代码的程序员,除了实现功能以外,则主要考虑代码是否写的简洁易读,便于维护和重复使用等。我确实见过一些程序员爱用层层嵌套的if-then-else,也很少用switch 或 loop 语句的。有的一个模块一写几万行,除了难读以外,也无法被别的模块调用的。主要还是基本功不扎实啊。
数学素养说白了就是逻辑思考能力下的解决问题的能力,这个当然是理工科的本行,数学学得越多,人的思维越程式化,与计算机的沟通能力越强,自然设计出来的程序运行起来约好。
但是编程技术在现在这个年代仍然是个力气活,因此就需要越来越多的人来满足计算机扩张占领人的各种生活领域的编程需要,因此许多没有什么数学训练的人,尤其是文科生,艺术生特别喜欢加入编程工作,主要是因为门槛低,也没有对理工科思维训练的硬性入行规定,因此计算机行业就从一个严格依赖逻辑的工作变成了因为编程的出虫量大面积增加而成为以测试除虫为主要工作的行业,并因此产生了各种各样的管理学派,项目管理技术,以及复杂的除虫技术,并从而加剧了软件业的人工成本,最后拖了整个计算机业的后腿。
在“码农”哲学指导下的软件行业,为了在制造更多虫与除更多虫的问题中求生存,不得不雇佣更多的文科生与艺术兵,大打人海战术,而人海战术的一个前提是单位产出下降之后的单位收入必须得到控制,于是就不得不放眼到第三世界去寻找更多的廉价文青。在印度大婶大妈小媳妇,三娃二愣子全民皆兵之后,这个人工成本终于得到了比较的解决方案,辅以各种流派的架构,管理流程方面为此专门发展的各类学说,就形成了我们今日看到的所谓企业级应用软件工程这样一个空前绝后的产业结构与学科。
与此同时,少数经过理工训练的头脑,已经把眼光放在了从根本上去处这个不伦不类产业的方向上。云计算,数据挖掘,从形态上来说无一不是强调软件的运行水平,逻辑严密,对数学要求高的新产业,更主要的是,这是一个需要人数少,但是高精尖的行业。大妈大婶三娃与各种文青都可以随便混口饭吃的时间不会很久了。“码农”之说可以休矣。
DEL
很多“高手”只是做得多了,手熟尔,这不需要很高文化水平,只须在特定的领域和方向(例如比较多见的黑客或者病毒、木马领域)上钻而已。真正的编程高手要求严谨的逻辑思考能力,他们思考的问题更多近似于数学模型,而不是细节上使用什么样的代码去实现某些具体的功能。
也不算是什么新思想,著名的Labview就是这方面的代表,但是对于大量的缺乏长期逻辑训练的“码农”来说,管理大量代码与复杂逻辑的一个有效方式显然是通过图形界面,因为人类的大脑天生对图形的感知程度高于文字,尤其是中国人(中文字体)。
这方面目前有一两家startup现在在做这方面的工作。而在股票程序化方面,类似的工具其实更早就出现了。但是对于比较特殊的软件,文字编程则仍然是不可缺的。
编程的一个主要困难,并离不开人类(用计算机编程),是因为人类的思考习惯与计算机不同,编程本质就是把人类的思考转化为计算机使用的语言,其实就是翻译,其中最大的困难是思考方式的转变,既人类的思考方式与计算机的思考方式是有很大不同的。所有计算机高级程序语言的发明都是为了使计算机语言更接近与人类的语言和思考方式而产生的,因此使用起来越方便的语言或界面,效率上的损失则越大。
因此计算机工程其实需要解决的一个最大问题,是如何能够更好的把人类思考转化为计算机的思考,所谓需求管理的重要性与日剧增,就是说的这个问题,否则人想要的是一回事,计算机运算出来的是另一回事,其中就是“翻译”出的问题。
图形编程也好,专用语言也好,都是为了从不同角度简化这个翻译工作的复杂度,也是目前编程这个工作暂时还没有被计算机本身代替的主要原因。一旦有办法把人类的需求有效的传递给计算机,如何编程,设计,开发,这些其实反倒都是计算机可以自己做的,关键是做什么东西这个目的问题计算机自己无法解决,必须要从人类那里来,从而带来了整个编程问题的困难性,其实就是个如何让计算机了解人类需求的问题,许多动态语言的出现也是高级语言向需求方向靠拢的一种尝试,这个图形编程也是个不错的尝试,也曾经有过比如UML那样的需要人类向计算机方向靠拢的需求建模,但是都没有从根本上减轻人类的劳动,更主要的是没有完美的准确无误的解决这个需求翻译的工作,也许要等到人工智能发展出比较好的语义能力后才可能实现。
mark
..