编程语言只是种工具?

时间:2023-02-11 21:25:04

以前,我觉得编程语言并没有好坏之分,只是一种表达工具,关键是事先想好。

上述的观点很多人都认同,语言之争中,前辈们也会用上述论调平息纠纷。上述观点也并不可以算错,然而我觉得不太完整,也很容易被误解。

语言确实是种工具,但我们不应该忽略工具的作用。我们想什么,去做什么事会决定使用什么工具,但反过来我们有什么工具也会决定我们怎么想,怎么做事。如果工具没有提供这个功能,你就不会向这方面想,也就不会这样做。比如早期的Basic语言,没有提供递归,你用这语言去写程序,你就不会使用递归算法。如果你只会Basic语言的话,你很可能连递归都没有听说过。一个只会Basic的所谓高手也可以解决很多问题,到了某种时候,那高手很可能就会觉得,Basic已经完全够用了。这时候有人跟他说Basic很差,跟他解释递归的概念,他很可能听不进去。还很有道理的说,编程语言只是表达的工具,你有你的工具,我有我的工具,我去写我的Basic,不跟你废话。

另外,我们编程的时候,多数不是全部事先想好再写的,而是边写边想,你会发现你写得越多,你就会想得越多。我觉得,软件不是设计出来的,而是进化出来的。从这角度来说,编程语言是有好坏之分的,简单的说,就是越能帮助思考的语言就越好,要灵活,表达力强,少约束。编程语言就如同数学符号。数学符号也是种工具,好的数学符号会帮助使用者思考,更奇妙的是似乎符号本身也会思考。用0123456789这几个阿拉伯数字进行笔算时,你会感到一切顺理成章,似乎数字本身在计算,而不是你在做计算。阿拉伯数字出现之前,用罗马数字做乘法,是很困难的,那个时候,大概你会做乘法,你便是数学家。

编程语言会引导思考。语言在设计或者演化的时候会提倡某种思考方式。有些语言提倡函数式编程,有些语言提倡面向对象,有些语言提倡结构化编程。如果语言连函数也没有,用goto跳转,那你使用这种语言,就可能还停留在刀耕火种,茹毛饮血的年代。各种编程风格,各种编程语言的出现,才能更好的碰出新花火。不同的场合适用不同的语言,从这角度,语言也的确没有高下之分。语言争论中,争得最大声,也最无理智的,往往是只懂某门语言,局限于某种思维的人。java的说C的不懂设计模式,只会蛮干,C的说Lisp的就会打那些愚蠢的括号,Lisp的笑C++妄想山寨出lamda,C++说java不注重效率。

编程环境也会影响我们写代码的方式。交互式环境会养成增量开发,自底向上的习惯。IDE自动完成之后,变量,函数名变长了,毕竟打两三个字母,整个函数提示全出来的,没有自动完成,就会倾向于取缩写,短小好记。我怀疑,C的标准库函数名多用缩写,是因为编写标准库的年代,名字取得长了,打字记不住。

语言确实一种工具,但它可以帮助我们思考,甚至决定了我们的思考方式。所以想不被某种编程思维束缚着,就多去接触下其它语言,了解他们独特的概念。你编程,可以用C,用java,用Lisp,但精通C编程的,往往不是整天只学C的。