编程的终极目的是让计算机替人类完成工作,从而降低人类的劳动强度。
说到编程就离不开编程语言,初学者会为此提很多问题,比如应该先学C++还是Java?Java和C#哪个好?应该学Objective-C吗?
根据楼下坛友反馈,删掉了前两节。
-
绝对不要学Java
Java 是公司产物。它有很多优点,比如说跨平台。但是今天几乎什么东西都能跨平台——正如不应该为了周围串门而学习开锁,你不应该为了跨平台而学习一门语言。
除此之外,不要学C#,它也是公司产物(有很多职业程序员认为C#比Java优秀,然而大部分语言都比Java优秀)。它们善于解决基础设施问题(比如在Java和C#中,大部分常用的系统功能,都有框架和库,而且效率非常高),因此它们看上去更像重型工程机械——水来土挡,无坚不摧。
虽然你的家人可能根本不懂什么是编程,但你可以尝试跟家里人说“我要学习驾驶重型工程机械”,然后感受一下家里人的态度。
-
绝对不要钻研微机原理
智力正常的人能够在通读教材之后掌握x86架构,了解诸如VLIW之类的概念。掌握即可,绝对不要钻研。
对于爱好者,最佳钻研方式是想办法去Intel或者nVidia上班,或者准备至少10亿人民币,开一家自己的IC公司。
之所以要专门提这一点,是因为钻研这类技术非常容易让人上瘾——但是实际上几乎学不到任何有用的东西。最终你会更擅长crack,但未必善于make。
而在工作中如果真的有需要,你可以随时开始翻书,无需预先精通。
-
绝对不要放弃数学
如果数学成绩不好,想办法把数学成绩弄好,比如请1小时100元的家教。而不要花1小时1元的电费研究程序设计。
-
劳动强度 vs 学习强度
这是对以上几点的总结。
作为爱好者,你的时间是无限的;作为学生,你的时间是无价的。在编程实践中,你会明显地发现,劳动强度和学习强度是两个维度。钻研某些问题时,劳动强度较高,比如如何调用avcodecxx.dll,如何 call Win32API,设计模式,回调参数……而在钻研另一些问题时,学习强度较高,比如如何遍历有向图,如何索引10G k-v对,如何用二叉树构建一个对象……
尽量选择学习强度高的挑战,虽然它们并不能立竿见影产生装逼效果。
200字以内,仅用于支线交流,主线讨论请采用回复功能。