欢迎大家来评论:由C#风潮想起的-给初学编程者的忠告 作者: 刘巍(0分)

A

amsea

Unregistered / Unconfirmed
GUEST, unregistred user!
原文的快捷方式连接:
http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39041202,00.htm
http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39041202-2,00.htm
(建议看原文,因为原文进行了较美观的排版。)
我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。
几个误区

初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种:
认为计算机技术等于编程技术:
有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息学院的学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层的人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式识别,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东西,学的时候并不比其它专业难,所以自然也不会高档到哪里去。
咬文嚼字的孔已己作风:
我见过一本女生的《计算机网络原理》教材,这个女生象小学生一样在书上划满了横杠杠,笔记做得满满的,打印出来一定比教材还厚。我不明白的是,象计算机网络原理这样的课程有必要做笔记?我们的应试教育的确害了不少学生,在上《原理》这一类课程的时候许多学生象学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。所谓《原理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。极端认真的学生背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头的格式等等,但是忘了路由的原则,忘了TCP/IP协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学。在学习编程的时候这些学生也是这样,他们确切的记得C++语法的各个细节。看完了C++教程后看《Thinking in C++》(确实是好书),《Inside C++》,《C++ reference》,this C++, that C++……,然后是网上各种各样的关于C++语法的奇闻逸事,然后发现自己又忘了C++的一些语法,最后回头继续恶补…。有个师弟就跟我说:“C++ 太难了,学了这里忘了那里,学了继承忘了模板。”我的回答道:“你不去学就容易了”。我并没有教坏他,只是告诉他,死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你根本不需要对的C++语法太关心,动手编程就是了,有不记得的地方一查MSDN就立马搞定。我有个结论就是,实际的开发过程中对程序语法的了解是最微不足道的知识。这是为什么我在为同学用Basic(我以前从没有学过它)写一个小程序的时候,只花了半个小时看了看语法,然后再用半个小时完成了程序,而一个小时后我又完全忘记了Basic 的所有关键字。
不顾基础,盲目追赶时髦技术
终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来,变成钱。这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT技术进步是如此的快,不跟进就是失业。但是对于初学者来说(尤其是时间充裕的大中专在校生),这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。但在IT领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。基础的课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个linux(这是许多人嘲笑理论课程无用的原因),但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK的编程)来说甚至是不可或缺的。一个活生生的例子是我和我的一个同学,在大一时我还找不到开机按纽,他已经会写些简单的汇编程序了。我把大二的所有时间花在了汇编,计算机体系结构,数据结构,操作系统原理等等这些课程的学习上,而他则开始学习HTML和VB,并追赶ASP的潮流。大三的时候我开始学习Windows 操作系统原理,学习SDK编程,时间是漫长的,这时我才能够用VC开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方:假设学习VB编程需要4个月,学习基础课程和VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习后者,再来学VB,也许你只需要1个星期就能学得非常熟练。
几个重要的基础课程

如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的建议是针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目,这些书应该都还可以在书店买到。说实在的,我在读其他人的文章时最大的心愿就是希望作者列出一个书单。
大学英语-不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E文印刷上去。学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质。
计算机体系结构和汇编语言-关于体系结构的书遍地都是,而且也大同小异,倒是汇编有一本非常好的书。《80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。
计算机操作系统原理-我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。关于学习它的必要性,ZDNET上的另一篇文章已经有过论述。
数据结构和算法-这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C++版的,但我觉得没有必要。C++的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。
软件工程-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获。
Windows 程序设计-《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。在学完了它以后,你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要。
上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。
对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。
你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书。
日三省乎己
每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。
把最多的时间花在学习上
这是对初学者最后的忠告。把每个星期玩SC或者CS的时间压缩到最少,不玩它们是最好的。同时,如果你的ASP技术已经能够来钱,甚至有公司请你兼职的话,这就证明你的天份能够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。眼光放长远一些,这无论是对谁都是适用的。
相信你已经能够决定是否学习C#或者什么时候去学它了。

--------------------------------------------------------------------------------
刘巍 - 高级程序员、软件设计师,精通VC,VB,COM,PLATFORM SDK,DDK,TCP/IP。独立开发过多种windows应用程序,WDM USB驱动程序,网络应用程序。熟悉加密技术,熟悉LINUX下的C/C++开发。
--------------------------------------------------------------------------------
 
为什么看的人不少,没人说话呢,我转发过几次帖子,但是似乎我的欣赏方式
和大家有距离?为什么我觉得挺值得思考的文章,大家都不说话?
不太明白,望来的朋友指点一二:)
 
文章确实不错,可是人经常是要走走弯路才会成长的
或者这就是淘汰法则的一部分,看清楚的人才能走的更远
看不清楚的,给无数个忠告还是没用的
 
同感,可能我的基础没你的好,因为非科班出身,但我还是坚持将许多基础课程都学了一边,
还经常回头看看,自信对计算机的理解不比科班出身的差,可惜在中国,大多数人都急功近利,
希望很快得到回报,公司为了获得项目,向客户吹嘘erp crm,采用最新技术如C#,.net
之类的,项目的手,在找些刚学会C#之类的人来做,尽快做完然后拿钱,,至于做成什么样子,
只要拿到钱就行,因为有这样的需求,也就产生了一大堆追赶潮流的人,如果从头学,时间长不说,
如果你在简历上 没写上这些东西,估计你面试的机会都没有,其实公司负责人可能忘记了
基础好的人,学会一门新的技术要比基础不好的人,不知容易多少倍,而且更能深入进去,技术
生涯更长(MS的技术大都好入门,难精通),,也或许公司负责人他也不懂这个道理.我也有几年的
开发经验,也做过上千万的大型项目,也见过各种招聘,项目招标等事情,现在越来越感觉基础的
重要,现在最大的心原就是能回学校在读读书,补补基础,争取有更进步的提高
 
其实计算机技术从根本上讲,是一门真的需要天赋的学科。很多人都明白这些道理,并不是
他们不想学习基础的、高深的东西,而是他们从根本上无法理解。有些人不需要很努力,不
需要看很多的书,一样可以很快的理解非常高深的技术;有些人很努力,但是仍旧一事无成
这一点就如同搞艺术的,不是你努力就行的,要有天赋。
还有一点就是,计算机技术归根结底是要为人类服务的,也就说,计算机工作者的工作目的
是为了更多的人能够使用计算机帮助他们高效的完成工作,事实上,懂得高深的计算机技术
得人确实值得钦佩,但是能够编制出拥有良好的人机界面的程序员同样是高手,不是任何人
都能够做出使用感非常好的程序的,而那并不需要你知道什么高深的技术,但是你要非常了
解你所用的开发工具,这可不是“半个小时”能够做到的。
我觉得这有一些像建筑设计师和建筑工人的区别,要知道,在盖房子的过程中也是有很多的
技巧的,而这是设计师们所不知道的。当然了,工人的工资也让人们觉得,这工作是个人就
能干,也许真的不是那样的。其实,只要你有天赋,你也可以做设计师。
 
拜托,换换行行吗?
 
PigDong,装IE6或者5.5就好了。
 
haihai,还不是钱的问题。现在很多人学编程并没有多少爱好,纯粹是因为
生活压力.在这种情况下随波逐流就是不可避免的了.
 
个人认为:这里,有点偏重:开发工具。
其实,开发工具,就只是一种工具而已。重要的是思想。作软件项目,重点是,
如何把企业的思想,用数据,来模型化。这,在我看来,才是最难的。而不是,
作什么语言来实现。作什么语言来实现,我也认为,只是查查资料。就OK的了。
但是,要把:企业的理念,用软件来表达出来。是每个软件工作者,要考虑的。
这也就是:建筑设计师和建筑工人的区别。
 
文章那么长,怎么看呀。
前段时间本人差点用VC去了,幸好找到了一家工资报酬不错的用DELPHI的公司。
 
我不这样认为。至少不完全正确。
我本人就是在学C的时候“跟风”到学delphi的。当时是大一下学期。自学c快完了。
但是听到了很多有关delphi的故事,其中还有同学与身在电脑公司中的朋友的谈话。
之后对比,立即缩短学C的过程,转向delphi。之后是用到win api后再研究的c/C++。
我想每一东西它能有这样那样的名声自然是有一定的道理的。并不可能完全凭空吹捧。
要说你看到很多人因为"跟风"而偏了方向,那么我想你更应该知道,有更多的人是死
抱着课本最后甚至没有进入我们这个行业。
 
从中足见技术的重要性拉,
哎,上次哪个WDELPHI的浅见足见使多么愚蠢的
技术按部就班来,一步一步来,不能图快,任何急功近利只会害了自己~~~~~~
 
应该给国家教委的说这些。
 
我认为懂计算机的人一定懂编程。。。。
就像回计算机的人一定会用记事本。。。。
不会编程 拿什么弄多媒体??拿什么弄网络。。。。
编程不可以专注。。
就像是你会用记事本 计算器 空当接龙一样没什么可炫耀的
编程是一种基础。。
就像会用鼠标的双击 单击一样
是一个回计算机的人的基本要求。。。。。
在此之上在学习其他技术。。。。。。
就像你要先会说话才会做诗一样。。。
 
狗屁文章,没点人话。
什么不重要,全是废话。
 
哈哈哈,张无忌还惦记着我哪!
如果你的中文阅读能力有高中毕业,就不至于把原文的意思曲解成这样,刘巍的悲哀!
刘巍主要说的是学习的方法的问题,同时也提到了学习的方向性的问题。对于前者,我认同,
对于后者,只是中国大多数程序员的理想--学汇编、学OS、学编译,哪天也写个系统软件出
来--罢了,相信就在这里,把他说的那些东东都读通的牛人就有不少,也许你张无忌就是
一个,但这些牛人仍然不过就是些牛声牛气却什么也做不出来的家伙罢了,你张无忌这么牛,
排名70位,你能拿出什么来给大家看看?什么也没有,就是一堆分罢了!
这里99.9%的程序员,大家还是务实的做些erp、mis为人民做点贡献吧,用VCL也能写出有价值
的程序的,你要是瞧不上VCL,那用api也行,不过你最好能用好,不要用api做一大堆垃圾出来
炫耀你的水平!
我从未否认过技术的重要性,不过我认为正视自己的能力、务实工作更重要,毕竟不是人人都
能成为bill的,不是非要用汇编、api做程序才能得到承认,这才是真正的思想的误区,其实,
只要你的软件别人爱用,你就是得到了这些人的承认,就能体现你的劳动成果的价值,
每个层次的存在都是有道理的!
要不是张无忌先骂我,我才懒得说他呢!就这些话,先向各位(除了张无忌)道个歉,各位不
必理会这些话,希望大家就我的其他论点进行讨论!
 
我回击蚂蚁的口水,免的以大欺小
 
没有走过这一步的人,看了之后觉得可能有道理,
又或会觉得有些过于绝对.
而走过这一步的人,会觉得这是至理名言.
然而,世上的事情往往如此,我曾经无数次向
那些想要投身it业的人给出如上的忠告,可是,
真正听进去的没有几个...的确没有几个......
 
首先我认为,有用的东西应该学,
如果在应用的层次上,C#应该学,
如果在系统的层次上,汇编,os应该学
发展方向不同,选择的学习方向应该不同,

 
刘先生是学院派,他说的内容我也有同感(我的经历和技术覆盖面跟他差不多),不过我的感觉是
这样的方式只适合某一类人,从1985年到1998年的人生经历和编程经历让我感觉学院派的人技术会强一些,
后来的几年我深深的认识到创新才是技术的原动力,有几件事决定了我们作为一个个体存在的价值:
1.创造性的想法总是产生于一个局部团体(或社会环境)的单一个体头脑里,并且,一开始让其他
个体接受你的创造性的想法是比较困难的事(经历和资料告诉我们是这样).
2.创新能力不是知识,无法与别人分享,也不能获取,只能不断磨练.
3.学院派的人通常在做出成绩时能够进行总结(方案/计划/文档等);在提出想法时比较系统(论文);
通常可以做一个局部团体的handbook(知识库);还有一定指导能力(Leader).所以比较受欢迎,
而真正的价值(团体价值/商业价值)则往往来自于进行创造性思维的个体.
我的看法是培养自己一项或几项能力收获会很大,获取知识/理解知识/想象力/创造新知识,这几项
能力是做技术领域最根本的东西.而对看书,我的看法是谈同一个问题的书,至少看不同版本不同作者
的书10本以上,比一本书看10遍有价值,能了解到不同的观点,同时可以锻炼自己的多方面能力.
我在生活中有一项习惯,一个月读10本专著,坚持了很多年.
我在学习管理学的时候发现了以下现象:
1.古今中外,到现在为止管理学没有对"管理"这个词形成一个准确的,为大多数人所接受的定义.
换句话说就是--管理是做什么,学管理是在学什么,大多数人的意见都不一致.
2.生活中的大多数人,不知道上面结论1这个事实.
另外我结合计算机技术举个例子谈一下思维抽象与创新能力(准确的说是符号学,在中国能够
获得符号学的知识是很难的,尽管这是我们计算机语言的基础):
道德经里有句话:无名,天地之始;有名,万物之母
古今中外有很多解释,不下二十种(而南怀谨先生则把众人的解释罗列了一下,然后说他不知道该怎么
解释好.这种谦虚,严谨的态度真令人敬佩)
我尝试着解释如下:无 名 天地之始/有 名 万物之母
名词(常量)"无"定义为"天地之始"的含义,名词(常量)"有"定义为"万物之母"的含义
所以"无"和"有"作为动词(过程/函数)等时又不是这个意思。
根据变量定义及用法:天下万物生于有,有生于无
解释为:天下万物 生于 万物之母,万物之母 生于 天地之始
我的解释不一定对,谨供参考.你如果能看到20本以上的道德经注,或者读
南怀谨先生的那一本,我想你会觉得:
1.没人象我这么解释.
2.其他人的解释好象不太接近原意.
下面给一个名家的解释作比较:
1.无名,天地之始;有名,万物之母
太上慈悲渡世,广为说法,曰:鸿蒙未兆之先,原是浑浑沦沦,绝无半点形象——虽曰
无名,而天地人物咸育个中。此所以为天地之始也。及其静之既久,气机一动,则有可名,
而氤氤氲氲,一段太和元气,流行宇宙,养育群生。此所以为万物之母也。始者,天地
未开之前,一团元气在抱也;母者,天地既辟之后,化生万物是也。
2.天下万物生于有,有生于无
天下万事万物,虽始于有形有象、有物有则,然其始不自有而肇也。圣人当大道之成,
虽千变万化,无所不具,而其先必于至虚至无中采之炼之,然后大用流行,浩气充塞
于两大。若非自无而炼,焉得弥纶天地,如此充周靡尽乎?故曰:“有生于无。”学
人修养之要,始也自无而有,从静中炼出微阳来;继也自有而无,从蓬勃内复归于恬
淡;其卒也,又自无而有,混混沌沌,人我俱忘——久之自炼出阳神三寸、丈六金身。
可见有有无无,原回环不已,迭运靡穷。学者必照此行持,方无差忒。

 

Similar threads

回复
0
查看
523
不得闲
回复
0
查看
684
不得闲
回复
0
查看
671
不得闲
回复
0
查看
579
不得闲
顶部