0%

重读《由C#风潮想起的-给初学编程者的忠告》有感

来源:小城故事-重读《由C#风潮想起的-给初学编程者的忠告》有感

我大约刚开始学编程时就看到这篇文章了(下面简称《C#风潮》),这是一篇被转载了上万次的名文,可参见这里文章搜索。今天无意间又看到它,《C#风潮》显然是很不错的文章,作者列举学习中的实例包括自己的经历,将自己对技术学习的深刻理解,清晰地展示给我们,并指出了学习的方向。又一年就要过去了,现在重读,联想这几年的经历和认识的发展,我觉得有一些新的体会。

文章的第一句话是:“我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。”

作者没有直接解释原因。为什么呢,现在我有点明白了。很显然,如果你能比别人更早地认识到一项新技术的潜力,你就比别人有更好的发展机会,获得更大的收获。作者的想法是,作为初学者,他不太可能具备判断技术前景的能力。其实这种能力其实在真正的技术人员中,也只有少数人具备。

接着,作者对大学的师弟师妹们忽视基础课程,学习C#等“先进”语言感到痛心。可是,为什么同学们会把课本扔了呢?我来解释吧,乏味的课程、过时的教材、水平低下的师资、脱离实践的教学让大学生们失去了方向。作者是非常有才华的,他在大学的成功是个别案例。说实话,中国的大学教育让每个有识之士都痛心。

最近常在看李开复等大家的博客,开始体会到一点学习的本质,就是忘掉你学到的知识和技能后剩下来的东西。不管是大学生也好,初学编程者也好,如果没有面临眼前的生活压力,就请追随自己的激情和兴趣,选你最喜欢的技术吧,不用管那些科班的教授专家怎么说。你可能走得不是他们指定的阳关大道,但关键是,要去学,有目的地学,不管是C#也好还是汇编也好,都可以找到共通的学习方法。

如果你对新技术感兴趣,完全可以勇敢地去追。当然也不能为了赶流行风潮,看到别人追我也追,而是为了它的学习价值。确实有绝大多数新技术是昙花一现,但有旺盛生命力的技术也在不断扎根发芽。现在早已证明了,当年涌现C#语言及其所在的.Net平台不是一阵风,而是一场革命。即使某项技术失败了,也未必就是技术本身的问题,比如可能是过于超前了,但其中蕴含的思想却可能非常可贵。将思想和方法学到手,会让人终身受用。

接下来作者讲了几个初学者的误区。第一个是“认为计算机技术等于编程技术”,这个说不上什么误区,人的认识是随着对事物了解的逐渐深入而提升的,这是一个持续无止境的过程。很多人开始连网络和服务器都搞不清,自然不会对计算机技术有多全面的认识。不过我认为,对于初学者来说,只要能像作者后面说的“日三省乎己”,时常想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣之类问题,对计算机技术认识自然会丰富并立体起来。

第二个误区是“咬文嚼字的孔已己作风”,双手赞成,这显然是应试教育的恶果。有个作者的师弟跟他说:“C++ 太难了,学了这里忘了那里,学了继承忘了模板。”作者的回答道:“你不去学就容易了”。作者说,“死抠C++的语法就和孔已己炫耀茴字有几种写法一样毫无意义。你根本不需要对的C++语法太关心,动手编程就是了,有不记得的地方一查MSDN就立马搞定。”编程是创造性思维的结晶,不像马哲那样可以靠死记硬背,而要结合实践加以理解贯通。而如果你对这个技术点的应用有相当的心得,让你再描述一下这个知识点,你说得会比国内绝大多数技术书籍上那些专家写得还要好。

联想到前几个月,园子上有个热门文章关于最近面试的一点感想,讲面试时询问对方“delegate在.net framework1.1,2.0,3.5各可以怎么写”的问题。老赵为此连作三篇文章(从.NET中委托写法的演变谈开去)详述了对delegate这个技术点的心得,事实充分,论证严密,证明这确实是一个能够检验面试技术人员水平的好问题。这才是真正地学懂了、学会了!不过好问题也是有条件的,这个问题将来会在网上广泛传播,要是再有面试官出这样的题目,就值得商榷了,有可能会真的招到像孔已己一般的牛人。不过时下的环境各种浮躁,从那篇文章的评论中,可以看到山间竹笋和墙上芦苇盛行,连孔已己都不多见了。

第三个误区点到《C#风潮》文的核心,“不顾基础,盲目追赶时髦技术”。作者举了自己的亲身经历,并与同学对比,看上去很有说服力。综合看这篇文章,作者不经意泄露了他的潜意识,即从汇编到C++到VC的道路才是编程的武学正宗,其他都是“歪门邪道”。作者下面对各个编程相关课程的描述也证明了这一点。

首先,编程语言没有高低之分,编程开发者的水平,当然也包括他的报酬,和他用语言没有关系。C++程序员能拿到的薪水,C#或VB程序员一样能达到,并且未必就得比C++程序员付出的努力多。只是由于C#是更容易入门的语言,所以菜鸟程序员要多得多,显得好像不如C++“高贵”,其实这反倒是它先进的体现。

至于说数据结构和操作系统原理是学习编程的基础,前者还算可以,可以使你更好地理解性能、存储、算法的概念。至于操作系统原理,如果你有志于参加个Windows 8开发(微软总部已经在招聘了),当然是必须学好的。但对于一般地C/S、B/S以及嵌入式开发,我实在是想不明白了解操作系统原理有什么必要性。当然了解了更好,但是可能还不如花半小时研究一个性能测试工具的使用更有意义。

其实,并不是先学HTML和VB导致作者的同学在毕业时输给了作者,而是那位同学不够努力和专注。他没有在Web开发上,达到与作者相同的高度。我认为初学者真正的第三个误区是(如果第一个算的话),不明白成功源自努力和专注。开始作者说,师弟师妹们把课本扔了花钱买C#、ASP的书看,但据我所知,绝大多数人花钱买了书,看不几页也丢到一边了。大学新生,只要去将毕业的师兄师姐物品处理摊拉,肯定能淘到好多新书。同样,很多人买了电脑,开始是想练编程,过不多久就成了网游用机。

这也不能怪这些初学者。国内出版的技术书籍水平实在不敢恭维,近两三年还好了些,翻译的书多了,也有个别不错的国内作者,但对初学者一开始就看出某本书的价值还是困难了点。再就是应试教育环境下长大,大家自学能力和意识普遍很差,大学里又没有人指引,实践机会也少,遇到一些困难和困惑,结果自然就是放弃了。

作者还以课程描述的形式,设计了他理想中的Windows程序员技术学习路线。我想他认为这条路线适应于所有想成为程序员的人,但还是保留了一下。我觉得《操作系统原理》、《计算机体系结构》大致了解一下就行,不了解也没太大关系。《数据结构》还是比较重要的,尤其是其中的思路和方法。英语的重要性就不用说了,至于《大学英语》就算了,那不是我们需要的,多看原版技术书籍和文章吧。软件工程也非常重要,作者的学习方法非常值得称道:“不要花太多的时间 去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获”。许多开发人员甚至技术管理人员,都完全没有软件工程的概念和意识,你如果有,哪怕是一点,也是将对未来你的发展弥足珍贵。

这些课程中,作者相当推崇《Windows 程序设计》,现在情况也不一样了。作普通windows程序设计,.Net平台下开发效率要远超过C++平台。就是在C++平台中,VC++也属于较难上手的,C++ Builder则容易得多。我们有很多的选择,每个人的情况都不一样,适合自己的才是最好的。

最后,作者谆谆提出了对初学者的忠告:为你的将来着想,把最多的时间花在学习上。只要去学,只要不是学害人的东西,学什么都要比把时间荒废要好得多。环境也许无法改变,但你可以改变自己。

纵观全文,不可否认,《C#风潮》是有部分保守的观点。 但多年之后重读此文,在到处是浮躁的大学,浮躁的业界,浮躁的社会中,这篇文章依然能闪光。

Publishing this article is for the purpose of conveying more information, and does not mean agreeing with its views or confirming its description, nor does it mean that we are responsible for its authenticity. Should you have any questions or doubts about the content of the post, please don't hesitate to contact us. We will respond to you and deal with it as quickly as possible.
推进创文常态化 共建文明襄阳城 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 做文明襄阳人 建文明襄阳城 凝聚文明正能量 筑梦千年古襄阳 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 创建全国文明城市 加快建设汉江流域中心城市 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 讲文明 树新风 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 用微笑融化陌生 用文明美化襄阳 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 争当文明使者 播撒文明新风