@
lizon [你认为一开始就应该给初学者提供比较完善的语言和类型系统,让初学者知道什么是对的,什么是先进的,以最快速度学习享受到现在最先进的理论成果,更多的关注语言本身的描述能力。]
你觉得先有认识还是先有实践??
如果一个人之前见识到了高级语言的完善,才可能探寻在 C 中怎么实现。如果一个人先接触了 C ,在接触其它语言之前不可能凭空发明出这些完善的设计。能凭空发明的人也不会在这里问问题。
具体来讲,一个人之前如果没见识过 C++(或其它语言)的 Map ,自己还真不一定能想出来并实现这个 Map 。一个人如果没见识过 Golang 的 GC ,也不可能想出来我也在 C 里面实现这个 GC 。
[我认为一开始应该提供给初学者最大的自由,暴露合适的硬件细节,让初学者明白计算机到底在做什么]
光有自由是不够的,需要见多识广。
小学生设计的汽车能上天入地,工程师设计的汽车就是现在的样子。
[我说的奢俭,是指初学者一旦高级语言用爽了,屏蔽了本来应该了解的细节,很可能就呆在舒适区不想出来了,称他还没养成惰性,照脸糊 C ]
如果一个人学了 Python ,并且认为解释器及下面都是黑盒,那它就不适合做程序员。不要妄想着学 C 给矫正过来。 C 有没有细节??一个人学了 C 之后,不想了解汇编、指令集、流水线、数字电路,你又能怎么办?
[面向初学者的教材几乎全是 C ,算法教材也大部分是 C 代码或者类 C 伪码,各大高校开设的计算机课程必定有 C ,已经为初学者尽可能降低了学习曲线。 ]
拿数据说话,你可以统计近几年的数据结构和算法书,从豆瓣上找。也可以统计国内外大学开的导论课。
[初学者需要“学习 C ”,而不是“精通 C ”,不要去研究 C 语言本身的细枝末节,最主要是理解指针概念。 ]
请把编程和计算机原理 /系统的学习分开。
如果大部分语言都适用于没有指针(或者只有弱指针)的设计,那么就**编程**而言,没必要搞懂指针。
指针可以放到 System 相关课程里去学。一开始接触指针会徒增入门的难度。
[为什么 C 语言最合适,往上看,高级语言写法风格大都类 C ,要学习其他语言并无太大的不适应。 ]
你这个论据也能说明“先学其它语言再学 C 也并无太大的不适应”。
实际上先学 C 会不适应(或需要重新学习)其它语言的 FP ,或者 OO 。反过来倒是无大碍。
[如果是做语言研究,连用 C 入个门都困难,或者跌入个 C 设计上的坑都要大呼小叫,我觉得可能他的能力不适合做语言研究。]
请把“学习编程”或者入门跟学习 PLT 区分开。
[在不清楚这个初学者以后到底要干什么的情况下,在初学者连自己都不知道自己到底要干什么的情况下, C 是性价比最高的语言。]
在不清楚这个初学者以后到底要干什么的情况下,就不要假设初学者以后搞 CS 研究或者搞 IT 。这种情况下,应选择一种尽量“普适”的语言。如果学了 Java 或 Python ,假设以后不干这些了,还能编个程序跑数据,解决那个领域的问题。学了 C 能干嘛呢?