Free Hit Counters
http://www.dellasdeals.com

[入门]编码初学者不要学"C/C++"

今天看到一篇文章, 对其中部分理念感觉决不吐不快.

http://coolshell.cn/articles/8088.html

==引用开始==

对技术的态度

我的观点是——要了解技术就一定需要了解整个计算机的技术历史发展和进化路线。(这个观点,我在《程序员练级攻略》和《C++的坑多吗?》中提到过多次了。)因为,你要朝着球运动的轨迹去,而不是朝着球的位置去,要知道球的运动轨迹,你就需要知道它历史上是怎么跑的

技术的发展要根植于历史,而不是未来。不要和我描述这个技术的未来会多么美好(InfoQ 的 ArchSummit大会上有一个微软来的人把Node.js说得跟仙女一样,然后给了一个Hello World),我承认你用一些新的技术可以实现很多花哨的东西。但是,我认为技术都是承前的,只有承前的才会常青。所以说“某某(技术)要火”这样的话是 没有意义的,等它火了、应用多了,规模大了,再说。有些人说:“不学C/C++也是没有问题的”,我对此的回应是:如果连技术主干都可以不学的话,还有什么其他的好学呢?这些是计算机发展的根、脉络、祖师爷,这样的东西怎么可以不学呢?

我在“软件开发‘三重门’”里说过,第一重门是业务功能,在这重门里,的确是会编程就可以了;第二重门是业务性能,在这一重门里,技术的基础就很管用了,比如:操作系统的文件管理,进程调度,内存管理,网络的七层模型,TCP/UDP的协议,语言用法、编译和类库的实现,数据结构,算法等等就非常关键了;第三重门是业务智能,在这一重门里,你会发现很多东西都很学院派了,比如,搜索算法,推荐算法,预测,统计,机器学习,图像识别,分布式架构和算法,等等,你需要读很多计算机学院派的论文。

我觉得真正的高手都来自知识密集型的学院派。他们更强的是,可以把那些理论的基础知识应用到现在的业务上来。但很可惜,我们国内今天的教育并没有很好地把那些学院派的理论知识和现实的业务问题很好地接合起来。比 如说一些哈希表或二叉树的数据结构,如果我们的学校在讲述这些知识的时候能够接合实际的业务问题,效果会非常不错,如:设计一个IP地址和地理位置的查询 系统,设计一个分布式的NoSQL的数据库,或是设计一个地理位置的检索应用等等。在学习操作系统的时候,如果老师可以带学生做一个手机或嵌入式操作系 统,或是研究一下Unix System V或是Linux的源码的话,会更有意思。在学习网络知识的时候,能带学生重点学一下以太网和TCP/IP的特性,并调优,如果能做一个网络上的pub /sub的消息系统或是做一个像Nginx一样的web server,那会更好。如果在学图形学的过程中能带领学生实践一个作图工具或是一个游戏引擎,那会更有意思。

总之,我们的教育和现实脱节太严重了,教的东西无论是在技术还是在实践上都严重落后和脱节,没有通过实际的业务或技术问题来教学生那些理论知识,这是一个失败。

==引用结束==

第一,完全赞同文章开头的说法:

你要朝着球运动的轨迹去,而不是朝着球的位置

第二,疑惑作者为什么会吐槽人家不学"C/C++"

第三,劝解作者不要一竿子否定我们的教育.

 

计算机的发展已经半个多世纪了!!!

今天还有谁愿意从机器码开始去学计算机?要知道当年的神话级程序员都是从那里开始的.

今天还有谁愿意从汇编开始学?

如同作者所言,我们的确应该要朝着球运动的轨迹去,而不是朝着球的位置

而机器码,汇编,C/C++,他们就是个球,我们无法回避的球,我们必须知道的球.

但我们不必朝着球去.

一个算法高手必须懂C/C++么? 目前的事实,是那些算法高手都懂C/C++. 但是从逻辑证明出发,无法推导出不懂C/C++就不是算法高手.

如果再过20年,作者难道还坚持说必须学C/C++么?

C/C++早晚有一天会成为和机器码一样的东西,不会成为初学者的首选。

我无非是认为这一天已经来临。

 

如果连技术主干都可以不学的话,还有什么其他的好学呢?这些是计算机发展的根、脉络、祖师爷,这样的东西怎么可以不学呢?

建议这里把“学”改成“了解”,“知道”。

 

中国人开始大量学习编程,刚好是C++的时代。因此大量高手都是通过C/C++锻炼出来的。C/C++是当时的主流通用编程语言。

上到业务系统,下到驱动程序,网站CGI,数据库连接,一切都用C/C++搞定。真正的一招鲜吃遍天。

而目前的主流语言通用语言是Java/.net。

 

如果一个新手满怀一腔热血,希望成为程序大师,但是被告知要从C/C++学起。

那么,至少半年要花在学流程控制基础语法上。

再花至少1年在MFC上,还要学ALT等等。

如果3年下来,算什么级别的程序员?能应聘怎样的岗位?

除了直接沦为底层C/C++码工,不论到哪个其他语言平台的岗位,培训超过3个月是必须的。

1995年,如果一个大学毕业生致力学习机器码而不是C/C++,那么今天他能干什么?100他那样的人,有几个能成为大牛?

 

软件开发的学习,应当从当下的主流编码语言开始,而不是上一代的主流语言。

这样可以快速了解到目前的软件发展趋势:

1。新语言之所以新,和旧的区别,它的提升、改进。

2。新语言的设计思想,设计目的,设计动机

3。整个软件行业的发展阶段,面临的困境,以及大家解决困境的尝试。

 

一个专心,但仅学了3年C/C++的人,同时对历史知识有所了解, 不过对主流语言也仅仅是了解,其C++的造诣还不足以胜任目前的C++岗位需要。

一个专心,但仅学了3年Java或C#的人,同时对历史知识有所了解的同学能找到怎样的工作呢?

 

对于大学的计算机教育,的确有脱离实际的情况。

但是,一个教授凭什么会有丰富的实践经验?难道他是某公司的系统架构师?

或者是首席程序员?

其实不少学校里面的教学已经联系实际了,只是太多的实际,台下刚刚连基础概念都没背熟的学生们会有多少理性的认识?

其实很多人对图和树真正“'掌握",一定是在工作后,在工作中。

因为,如果毕业后从来没有在项目中用到树,则一辈子不会理解树的应用。

 

所谓”掌握“, 就是懂得什么时候该用树,什么时候可以用,能从业务需求里抽象出树的应用来。这个绝对在大学阶段不是多数人能悟道的。

就好比大家都学过了傅利叶变换,但如果仅仅靠当时举几个例子,绝对不会让满堂的学生都能从此在编码时候轻松识别出他的应用场景。

能不打瞌睡已经很给老师面子了。

 

作者所说的软件开发三重门,其实是一个规律,甚至是铁律。

会编程

技术的基础

业务智能

 

任何一步能反过来么?似乎是不能的。

所以,对于初学者,第一目标是去学会编程。

而此时学习最主流的语言才会让你有资格顺利进入到下一个层次。

posted @ 2012-08-17 12:48  徐少侠  阅读(3186)  评论(22编辑  收藏  举报
作者:徐少侠 出处:http://www.cnblogs.com/Chinese-xu/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过 Chinese_Xu@126.com 联系我,非常感谢。