百科问答小站 logo
百科问答小站 font logo



为什么知乎用户 vczh 不建议初学编程的人把 C 作为入门语言? 第1页

  

user avatar   lu-luce 网友的相关建议: 
      
世上本没有路,走的人多了也便成了路。

但是偏偏有人在走完了前人开创的路以后,非要把路刨了,让后人无路可走。或者不建议后人走自己成功的路。但是,他的这种又坏又蠢的想法是不会实现的。毕竟人人都见到他从这条路走过。

vczh自己就是靠大学的时候,学习C语言,自己搞编译器。之后成功登陆美国的。现在他不推荐别人走这条路。真是令人喷饭。

正相反,我倒是建议初学编程的人把 C 作为入门语言?毕竟你连个指针都搞不明白。后面更加复杂的计算机概念,就更加吃力了。作为大部分软件的编程语言,C语言的每一个语法特征都是需要在初学阶段扎扎实实搞清楚的。


user avatar   ze.ran 网友的相关建议: 
      

个人看法,如果不打算做专业程序员,不用从c学,如果打算干这行,即使工作上没用到,或早或晚,都应当学学c。学习c的过程中,会对内存分配有更敏感的认识,即使用别的语言,这也是很重要的。


user avatar   newbie-tu-xing-cheng-xu-yuan 网友的相关建议: 
      

编程语言是有两面的。

一面是抽象的一面,给人(包括自己和别人)看和理解的。

一面是实现的一面,语言如何跑在机器上。

而我觉得抽象的角度至少和实现的角度一样重要,而且很可能更重要

你不会半点硬件知识也可以写写py写写js。你硬件知识比较菜可能写出来的C也就比别人慢个20%。但你不会抽象的能力,写什么语言都一样,只要代码量一大就要崩,糊出来也丑的要死。

所以我认为第一门编程语言最重要的教学抽象的能力、写出可读代码、组织代码的能力

从这个角度看,C合适吗?C本身类型系统菜、表达能力弱,C有很多++之类的糟糕功能。而C最大的特点,和硬件之间的鸿沟小,对于第一门编程语言来说就是纯粹的噪音


那第一门编程语言该是什么样的?

  • 首先,“以后能不能拿开干活”在我看来不能成为一个理由,除非你打算只学这一门语言就不学了。因为作为第一门编程语言建立起正确的观念和思考方式才是最重要的。
  • 不符合直觉的语义越少越好。哪怕这个设计在现实中很有用处,如果跟初学者没发简单地解释这个用处那就没有意义。例子:++,python的弱智作用域,js的隐式类型转换
  • 最好有类型。哪怕对于动态类型语言,写的时候脑子里有虚构的类型在也是极好的。建立这种思考方式是很重要的
  • 学语言的时候要同步地培养审美。要了解什么是代码复用、模块化、接口实现分离、避免不合法状态

理论上满足上述条件的都很合适,现实是这样的语言很少。我姑且先摆一个OCaml在这里。去掉type那条条件的话,racket/scheme也可以。


====== upd:基于和网友气氛融洽的对线,写了篇东西说明“为什么语义可以脱离任何硬件与实现存在”




  

相关话题

  现实中程序员是怎样飞快敲代码的? 
  为什么 Java 只有值传递,但 C# 既有值传递,又有引用传递,这种语言设计有哪些好处? 
  编译器是如何编译自己的? 
  程序员开发进度太慢被公司告上法庭,索赔 90 万,如何评价该公司的这种行为? 
  35岁后程序员应该怎么办? 
  为什么这个程序电脑运行的结果和手机运行的不一样?数值小的时候一样? 
  C语言中逗号表达式存在的意义是什么? 
  有“数学公式”编程吗?如维基百科粘贴一个LaTeX公式,赋初值后,就能计算出结果? 
  程序员所积累的编程知识在十年后将有多少变得没用? 
  如何轻松阅读 GitHub 上的项目源码 ? 

前一个讨论
听不懂英语,但是能复述怎么办?
下一个讨论
金书里的张三丰是怎么吹出来的?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利