世上本没有路,走的人多了也便成了路。
但是偏偏有人在走完了前人开创的路以后,非要把路刨了,让后人无路可走。或者不建议后人走自己成功的路。但是,他的这种又坏又蠢的想法是不会实现的。毕竟人人都见到他从这条路走过。
vczh自己就是靠大学的时候,学习C语言,自己搞编译器。之后成功登陆美国的。现在他不推荐别人走这条路。真是令人喷饭。
正相反,我倒是建议初学编程的人把 C 作为入门语言?毕竟你连个指针都搞不明白。后面更加复杂的计算机概念,就更加吃力了。作为大部分软件的编程语言,C语言的每一个语法特征都是需要在初学阶段扎扎实实搞清楚的。
个人看法,如果不打算做专业程序员,不用从c学,如果打算干这行,即使工作上没用到,或早或晚,都应当学学c。学习c的过程中,会对内存分配有更敏感的认识,即使用别的语言,这也是很重要的。
编程语言是有两面的。
一面是抽象的一面,给人(包括自己和别人)看和理解的。
一面是实现的一面,语言如何跑在机器上。
而我觉得抽象的角度至少和实现的角度一样重要,而且很可能更重要
你不会半点硬件知识也可以写写py写写js。你硬件知识比较菜可能写出来的C也就比别人慢个20%。但你不会抽象的能力,写什么语言都一样,只要代码量一大就要崩,糊出来也丑的要死。
所以我认为第一门编程语言最重要的教学抽象的能力、写出可读代码、组织代码的能力
从这个角度看,C合适吗?C本身类型系统菜、表达能力弱,C有很多++之类的糟糕功能。而C最大的特点,和硬件之间的鸿沟小,对于第一门编程语言来说就是纯粹的噪音
那第一门编程语言该是什么样的?
理论上满足上述条件的都很合适,现实是这样的语言很少。我姑且先摆一个OCaml在这里。去掉type那条条件的话,racket/scheme也可以。
====== upd:基于和网友气氛融洽的对线,写了篇东西说明“为什么语义可以脱离任何硬件与实现存在”