??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
作者: 刘巍
Monday, July 15 2002 11:06 AM
我始l认为,对一个初学者来_IT界的技术风潮是不可以追赶的Q而且也没有能力去q赶。我时常看见自己的DDMM们把课本扔了Q去卖些h不菲的诸如C#, VB.Net q样的大部头Q这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针{等则让我觉得好W。C#p当年的ASP一P“忽如一夜春风来Q千树万树梨花开”Q结果许多学校的信息学院成了“Web 学院”?6,97U的不少大学生都dWeb 了。当然我没有M歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的旉多花一点在基础的课E上应该是可以走得更q的?/p>
几个误区
初学者对C#风潮的追赶其实也只是学习q程中经帔R到的几个误区之一。我用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一U或者几U:
认ؓ计算机技术等于编E技?
有些人即使没有这个想法,在潜意识中也有这L冲动。让我奇怪的是,许多信息学院的学生也有这L念头。认机专业是~程专业Q与~程无关的,或者不太相关的评他统l都不管Q极端的学生只要书上没带“~程”两个字他׃看。其实编E只是计机技术应用过E中一U复杂性最低的力_Q这是Z么IT业最底层的h是程序员QCODERQ。计机技术包括了多媒体,计算机网l,人工Q模式识别,理信息pȝ{等q些斚w。编E工作只是在q些具体技术在理论研究或者工E实늚q程中表辄法的q程。编E的Z一定对计算机技术的了解׃定很高。而一个有的现象是,不少大师U的计算机技术研I者是不懂~程的。网上的炒作和现实中良好的工作待遇把~程q种力_秘化了。其实每一个程序员心里都明白,自己q些东西Q学的时候ƈ不比其它专业难,所以自然也不会高档到哪里去?br>
咬文嚼字的孔已己作风Q?br>我见q一本女生的《计机|络原理》教材,q个女生象小学生一样在书上划满了横杠杠Q笔记做得满满的Q打印出来一定比教材q厚。我不明白的是,象计机|络原理q样的课E有必要做笔讎ͼ我们的应试教育的害了不学生,在上《原理》这一c课E的时候许多学生象学《马列原理》一样逐字背诵记忆。这乃是我见q的最愚蠢的行为?br>所谓《原理》,x需要掌握它Z么这样做Q学习whyQ而不是howQ怎样做)。极端认真的学生背下以太|的|线最大长度,数据帧的长度Q每个字D늚意义QIP报头的格式等{,但是忘了路由的原则,忘了TCP/IP协议设计的宗旨。M许多了大量的旉把书背得滚瓜烂熟却等于什么也没学。在学习~程的时候这些学生也是这P他们切的记得C++语法的各个细节。看完了C++教程后看《Thinking in C++》(实是好书)Q《Inside C++》,《C++ reference》,this C++, that C++……Q然后是|上各种各样的关于C++语法的奇闻怺Q然后发现自己又忘了C++的一些语法,最后回头l恶?#8230;。有个师弟就跟我_“C++太难了,学了q里忘了那里Q学了承忘了模ѝ?#8221;我的回答道:“你不d容易了”。我q没有教坏他Q只是告诉他Q死抠C++的语法就和孔已己炫耀茴香豆的“?#8221;字有几种写法一h无意义。你Ҏ不需要对C++语法太关心,动手~程是了,有不记得的地方一查MSDNq马搞定。我有个l论是Q实际的开发过E中对程序语法的了解是最微不道的知识。这是ؓ什么我在ؓ同学用BasicQ我以前从没有学q它Q写一个小E序的时候,只花了半个小时看了看语法Q然后再用半个小时完成了E序Q而一个小时后我又完全忘记了Basic 的所有关键字?/p>
不顾基础Q盲目追赶时髦技术:
l于点到题目上来了。大多数的h都希望自q东西能够马上跑v来,变成钱。这U想法对一个已l进入职业领域的E序员或者项目经理来说是合理的,而且IT技术进步是如此的快Q不跟进是׃。但是对于初学者来_其是时间充裕的大中专在校生Q,q种x是另解的。一个ƈ未进入到行业竞争中来的初学者最大的资本便是他有_的时间沉下心来学习基性的东西Q学习why 而不是how。时髦的技术往往Ҏ掌握Q而且来容易掌握,q是商业利益的驱使,Z最大化的降低Y件开发的成本。但在IT领域内的现实是q样Q越Ҏ掌握的东西,学习的h多Q而且淘汰得越快。每一ơ新的技术出来,都有许多初学者跟q,q些初学者由于缺乏必要的基础而得自己在跟进的过E中p大量的时_而等他学会了Q这U技术也快淘C。基的课E,比方数据l构Q操作系l原理等{虽然不能让你立马就实现一个linuxQ这是许多h嘲笑理论评无用的原因)Q但它们能够显著的减你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比方Win32 SDK E序的设计,DDK的编E)来说甚至是不可或~的。一个活生生的例子是我和我的一个同学,在大一时我q找不到开机按U,他已l会写些单的汇编E序了。我把大二的所有时间花在了汇编Q计机体系l构Q数据结构,操作pȝ原理{等q些评的学习上Q而他则开始学习HTML和VBQƈq赶ASP的潮。大三的时候我开始学习Windows 操作pȝ原理Q学习SDK~程Q时间是漫长的,q时我才能够用VC开发出象模象样的应用程序。我曾一度因为同学的E序已经能够q行而自p在学习如何创建对话框而懊gԌ但到毕业才发现自己的选择是何{的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方Q假讑֭习VB~程需?个月Q学习基评和VC的程序设计需?q。那么如果你先学VBQ再来学习后者,旉不会减少Q还?q_而反q来Q如果先学习后者,再来学VBQ也怽只需?个星期就能学得非常熟l?/p>
几个重要的基评Q?br>如果你是学生Q或者如果你有充的旉。我你仔l的掌握下面的知识。我的徏议是针对那些希望在IT技术上有所成就的初学者。同时我q列Z一些书目,q些书应该都q可以在书店买到。说实在的,我在d他h的文章时最大的心愿是希望作者列Z个书单?/p>
大学p-----不要觉得好笑。我极力推荐q门评是因为没有专业文档的阅读能力是不可想象的。中文的译往往在猴q马月才会出来,而现在的许多出版Cֹ脆就直接把E文印刷上厅R学习的Ҏ是强q自q原版的教材,开始会看不懂,用多了自然熟l。吃得苦下得狠心l对是Q何行业都需要的品质?/p>
计算Zpȝ构和汇编语言------关于体系l构的书遍地都是Q而且也大同小异,倒是汇编有一本非常好的书。?0×86汇编语言E序设计教程》(清华大学出版C,黑色面Q杨季文著)。你需要着重学?86后保护模式的E序设计。否则你在学习现代操作系l底层的一些东西的时候会觉得是在看天书?/p>
计算机操作系l原?-----我们的开发L在特定的操作pȝ上进行,如果不是Q只有一U可能:你在自己实现一个操作系l。无论如何,操作pȝ原理是必ȝ。这p我们Z个芯片制作外围设备时Q芯片基本的工作时序是必需了解的。这一cM也很多,我没有发现哪一本书非常Z。只是觉得在看完了这些书后如果有I就应该看看《Inside Windows 2000?微Y出版C,我看的是E文版的,中文的书名想必是Windows 2000 技术内q之cd)。关于学习它的必要性,ZDNET上的另一文章已l有q论q?/p>
数据l构和算?-----q门评能够军_一个hE序设计水^的高低,是一门核心课E。我首选的是清华版的(朱战立,刘天Ӟ。很多h喜欢买C++版的Q但我觉得没有必要。C++的语法让法实现q程变得复杂多了Q而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的?/p>
软g工程-----q门评是越到后来就发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的徏议是看《实用Y件工E》(黄色Q清华)。不要花太多的时间去记条条框框,看不懂就跌厅R在每次自己完成了一个Y件设计Q务(不管是练习还是工作)以后再来回顾回顾Q每ơ都会有收获?/p>
Windows E序设计--------《北京大学出版社QPetzold著》我M企图设计Windows E序的h在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。在q本书中Q没有C++Q没有GUIQ没有控件。有的就是如何用原始的C语言来完成Windows E序设计。在学完了它以后Q你才会发现VC其实是很Ҏ学的。千万不要在没有看完q本书以前提前学习VCQ你最好碰都不要碰。我知道的许多名校甚至都已经用它作ؓ教材q行授课。可见其重要?/p>
上面的几门课E我认ؓ是必学的重要评Q如果你惛_Windows E序员)?/p>
对于其它的课E有q样单的选择ҎQ如果你是计机pȝQ请学好你所有的专业基础课。如果不是,请参照计机pȝ评表。如果你发现自己看一本书时无法看下去了,LC的最后,看看它的参考文献,扑ֈ它们q学习它们,再回头看q本书。如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的l节Q你应该以一天至?0늚速度掌握其要领。尽可能多的在计机上实践一U理论或者算法?/p>
你还可以在CSDN上阅d许多书评。这些书评能够帮助你军_M么样的书?/p>
日三省乎?/p>
每天ȝ书太多,Ҏ让hq失方向。一定要在每天晚上想惌己学了些什么,q有些什么相关的东西需要掌握,自己对什么最感兴,在一本书上花的时间太长还是不够等{。同时也应该多想x来最有可能出现的应用Q这栯够让你不是追赶技术潮而是引领技术潮。同Ӟ努力使用现在已经掌握的技术和理论d作具有一定新意的东西。坚持这样做能够让你真正成ؓ一个Y?#8220;研发?#8221;而不仅仅是一个CODER?/p>
把最多的旉花在学习?/p>
q是对初学者最后的忠告。把每个星期玩SC或者CS的时间压~到最,不玩它们是最好的。同Ӟ如果你的ASP技术已l能够来钱,甚至有公司请你兼职的话,q就证明你的天䆾能够保证你在努力的学习之后取得更好的收益Q你应该d更复杂的东西。眼光放长远一些,q无论是对谁都是适用的?br>
怿你已l能够决定是否学习CQ或者什么时候去学它了?/p>
————————————————————————?br>刘巍 Q?高E序员、Y件设计师Q精通VC,VB,COM,PLATFORM SDK,DDKQTCP/IP。独立开发过多种windows应用E序QWDM USB驱动E序Q网l应用程序。熟悉加密技术,熟悉LINUX下的C/C++开发?br>————————————————————————?br>
我觉得写得真?也很适合每个致力于该领域的有理想的h?借以互勉!!!
1.1 EXE
1.2 C OBJ EXE
1.3 序 选择 循环
W二?/font>
一 . 选择?/span>
2.1 B 2.2 D 2.3 B 2.4 A 2.5 C 2.6 A 2.7 B
2.8 B 2.9 D 2.10 C 2.11 B 2.12 B 2.13 A
?/span> . 填空?/span>
2.14 11 12
2.15 4.2 4.2
2.16 { } 定义 执行语句
2.17 关键?/span> 用户标识W?/span>
2.18 int float double
2.19 float a1=1; float a2=1;
2.20 存储单元
2.21 3.5
2.22 (a*b)/c a*b/c a/c*b
2.23 把常?/span> 10 赋给变量 s
2.24 ?/span> 1 ?/span> 0
2.25 8 127 0111111 -128 10000000
2.26 32767 -32768 1000000000000000
2.27 10 8 16
?/span> . 上机攚w?/span>
2.28
Q?/span> i nclude "stdio.h"; 删除行尾?/span> ";"
main(); / * main function * / 删除 ")" 后的 ";", 注释中的 * 要紧靠?/span> / ?/span> , 卛_为?/span> /* ”和?/span> */ ?/span>
函数开始处遗失了一个?/span> { ?/span>
float r,s ; /*/*r is radius*/,/* s is area of circuilar*/*/ 注释W号不可嵌套使用
r = 5.0 ;
s = 3.14159 * r * r ;
printf("%f\n",s) 行尾遗失了?/span> ; ?/span>
函数l束处遗׃一个?/span> } ?/span>
2.29
Q?/span> i nclude "stdio.h"
main /* main function */ main 后遗׃?/span> () ?/span>
{
float a,b,c,v; /*a,b,c are sides, v is volume of cube */
a=2.0; b=3.0; c=4.0 行尾遗失了?/span> ; ?/span>
v=a*b*c;
printf("%f\n", v) 行尾遗失了?/span> ; ?/span>
}
W三?/font>
一 . 选择?/span>
3.1 C 3.2 C 3.3 D 3.4 C 3.5 D 3.6 B 3.7 C 3.8 D 3.9 A 3.10 B
3.11 C 3.12 D 3.13 D 3.14 A 3.15 C 3.16 C 3.17 C 3.18 无答?/span> 3.19 C 3.20 B
?/span> . 填空?/span>
3.21 (1)-2002500(2)i=-200,j=2500
(3)i=-200
j=2500
3.22 12 0 0
3.23 一条语?/span> ;
3.24 ;
3.25 100,25.81,1.89234 100 25.81 1.89234 100 25.81 1.89234
3.26 x=127,x= 127,x= 177,x= 7f,x= 127
3.27 x=127,x=127 ,x=$127 ,x=$000127,x=%06d
3.28 a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500
?/span> . ~程题和攚w?/span>
3.29 修改后的E序如下Q?/span>
main()
{
double a,b,c,s,v;
printf("input a,b,c:");
scanf("%lf%lf%lf",&a,&b,&c);
s =a*b;
v=a*b*c;
printf("a=%f,b=%f,c=%f\n", a,b,c);
printf("s=%f,v=%f\n",s,v);
}
3.30
Q?/span> i nclude
main()
{
int a=560,b=60;
printf("560 minute is %d hour and %d minute.\n",a/b,a%b);
}
3.31
Q?/span> i nclude
main()
{
int a,b;
a=1500;b=350;
printf("a div b is : %d\n",a/b);
printf("a mod b is : %d\n",a%b);
}
3.32
Q?/span> i nclude
main()
{
double a,b,c,ave;
printf ("input 3 double number : \n");
scanf ("%lf%lf%lf",&a,&b,&c);
printf ("%.1f\n",(a+b+c)/3);
}
3.33
Q?/span> i nclude
void main()
{
int a,b,c,t;
printf(" 请依ơ输入整?/span> a,b,c:");
scanf("%d%d%d",&a,&b,&c);
printf("\n 你输入的值是 : a=%d,b=%d,c=%d\n",a,b,c);
t=b;b=a;a=c;c=t;
printf(" 交换之后的值是 :a=%d,b=%d,c=%d\n",a,b,c);
}