只有第一点值得商榷,Java和C#是用的人最多的静态类型字节码语言,静态类型语言的应用早已得到验证和广泛接受,并不能被忽视。
另外,公司产物就一定不好吗?我看个人开发者开发的语言才是由着自己的方便来的,往往会存在各种偏见和不完善,而公司则会更多地考虑客户的需求,经过长年累月修补之后会更加健全。
我认为,即使要学习动态类型语言,也要在学会这些静态类型语言之后,否则就可能舍本逐末。
编程的终极目的是让计算机替人类完成工作,从而降低人类的劳动强度。
说到编程就离不开编程语言,初学者会为此提很多问题,比如应该先学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对,如何用二叉树构建一个对象……
尽量选择学习强度高的挑战,虽然它们并不能立竿见影产生装逼效果。
只有第一点值得商榷,Java和C#是用的人最多的静态类型字节码语言,静态类型语言的应用早已得到验证和广泛接受,并不能被忽视。
另外,公司产物就一定不好吗?我看个人开发者开发的语言才是由着自己的方便来的,往往会存在各种偏见和不完善,而公司则会更多地考虑客户的需求,经过长年累月修补之后会更加健全。
我认为,即使要学习动态类型语言,也要在学会这些静态类型语言之后,否则就可能舍本逐末。
引用 celeron533:我的建议是给编程爱好者的,不是给程序员的。作为职业程序设计师,需要用什么语言就学什么语言呗。但是作为给初学者的推荐,我认为Java在培养编程思维方面的效率非常低。相对地,我认为Python、Ruby、Lisp 这些语言更应该作为初学入门。
第一条太绝对了。存在即合理,如果一个语言真的有种种问题,是不会流行的。
个人认为吧,首先要精通C语言,然后学习一点C++的皮毛(看懂C++ Primer就够了),然后基本上有三条康庄大道在你面前:
至于JavaScript,如果有某个项目要用,用就是了,但是拿它入门的话,bad idea
引用 acmilan:米兰又黑JS。我在“动态网页挑战”里面,演示了JS的高级抽象能力:将【顺序处理用户的多次访问】,从【状态机】写法改为【异步+闭包】写法,且不使用任何设计模式。
个人认为吧,首先要精通C语言,然后学习一点C++的皮毛(看懂C++ Primer就够了),然后基本上有三条康庄大道在你面前:
1. 尽快找到饭吃:学Java
2. 尽快做出Windows程序:学C#……
引用 novakon:非也,JS是不需要黑的。JS是一种先天不足,后期过度发育的语言,表达能力强是先天不足和后期过度发育一个副产品而已,同时,它和lisp一样,它距离真相太远,不利于初学者掌握真实的计算机的性质,比如lisp实际上最适合lisp机而不是冯诺依曼机上运行。
米兰又黑JS。我在“动态网页挑战”里面,演示了JS的高级抽象能力:将【顺序处理用户的多次访问】,从【状态机】写法改为【异步+闭包】写法,且不使用任何设计模式。
JS语法像C,表现力接近lisp,因此我……
引用 novakon:那想搞GUI岂不是只剩下Qt大法了
我的建议是给编程爱好者的,不是给程序员的。作为职业程序设计师,需要用什么语言就学什么语言呗。但是作为给初学者的推荐,我认为Java在培养编程思维方面的效率非常低。相对地,我认为Python、Ruby、……
引用 1176764177:常念Qt大法好吧,Qt大法已经不止GUI了,是一套全方位的API,实在太方便
那想搞GUI岂不是只剩下Qt大法了
引用 我说要有光:然而那东西一调试我都不知道跳进去的是什么函数。。还得查简直虐心
常念Qt大法好吧,Qt大法已经不止GUI了,是一套全方位的API,实在太方便
引用 novakon:最后所说的内容 貌似已经涉及到自动化编程的范畴
然后是“绝对不要钻研微机原理”,好吧其实微机原理很酷,搞懂x86处理器和系统总线,对设计操作系统有很大帮助。搞懂存储器和网络适配器对设计数据库和分布式系统有很大帮助。
所以,我觉得还是删掉第二条吧,在……
引用 acmilan:学js绝对不会碰壁 js搞不定的话 就去修改Google的v8引擎 c#写的 c#搞不定的话 还可以去修改mono C++写的 mono搞不定的话 还可以研究汇编 要是连汇编也搞不定 咱们还可以搞起VHDL 向龙少学习~~ :D
有吃了第五个馒头饱了而忘了第二个馒头之嫌。
先以C#入门并无不妥,但是不要固步自封,不要误入反复设计界面、反复尝试API的歧途。不要过分夸大工具的作用,编程语言只是认识计算机世界的一个窗口而已。
引用 AaronZeng:所谓程序 实际上就只有三种逻辑
入门学的C语言,之后看了C++,初步领略了C++的博大精深。深感道艰而路远~ 学c++时,看了一点java 的语法,感觉如出一辙。这就是所谓的触类旁通?
引用 acmilan:响应您的观点,原文已经删掉第一点。
有吃了第五个馒头饱了而忘了第二个馒头之嫌。
先以C#入门并无不妥,但是不要固步自封,不要误入反复设计界面、反复尝试API的歧途。不要过分夸大工具的作用,编程语言只是认识计算机世界的一个窗口而已。