[mystery]-前辈的经验,又是一篇振奋人心的佳做(上)

 若是是初学C语言请看完 一些成功人士的心得java

前辈的经验,又是一篇振奋人心的佳做(上)程序员

前辈的经验,又是一篇振奋人心的佳做(下)编程

转自程先的专栏
   
今天,我可以自称是一个混IT的人,并能以此谋生,未来你们能一次谋生,都要感谢两我的:克劳德.香农和约翰..诺依曼,是他们发现了全部的数字化信息,不管是一段程序,一封email,一部电影都是用一连串的10进行编码的;是他们发现了咱们能够利用一个预先编写好的程序控制机器,并使之完成咱们指望它完成的动做。建议你们在内心默念三遍他们的名字,以示仰慕。固然,若是让大家带着如今的知识回到他们的那个时代,那么就没有什么图灵奖了。
C
语言程序设计是咱们的专业基础课,可是C语言自己倒是一个很是强大的工具,它是到目前为止最为普遍使用的工具,而且在能够预见的未来,它仍然是皈依为程序员的人们心中的神器。这个工具做什么的呢?它在人和机器之间创建了一个交流的平台。
     
某天,你须要完成一个求100的阶乘的做业,因而你搬来一个最新的电脑,为它安装了最新的windows vista操做系统,而后坐在它的身前,喊“喂电脑,给我计算100的阶乘”,电脑说“ok, wait a moment”; 过了一会,一盘香菇小白菜端了上来!呵呵,电脑不是waiter, 你喂它它是不会有反应的,若是你真的wait a moment, 恐怕你就须要wait one more moment了!一万年后,人们就把你命名成“望夫崖”。
     
既然电脑不是伺应生,听不懂咱们的话,那么咱们要怎么控制它呢?若是大家给我装疯卖傻,我会告诉你期末挂了你,哦,你立马老实了!对于电脑,我要怎么才能使唤它,让它为我工做呢?不错,咱们有个强力工具,C语言!
   
好,咱们把上面的场景复习一下:
你要我算100的阶乘,因而我去机房上机,编写了一个程序:
(
参加ppt......)
运行程序,哦,结果出来了!
   
有人认为,如今是java.net的时代,有谁还须要C以及汇编呢?孰不知,java.net是创建在软件之上的,是为了垄断市场而创建起来的体系,犹如挖好一个金壁辉煌的坑,请你往下跳,还自觉得站在巨人的肩膀上,事实上成了坑底之蛙。要成为一个真正的程序员,并指望成为一个程序员高手,必须从机器出发,从cpu到操做系统,再到软件体系,高手的境界就是悟道后的明镜灵台,软件设计出神入化,我就是程序,程序就是我。
     
听完我讲高手的境界,因而乎你很受感动,说:我要努力学习,向高手学习!隔天就买了一堆MFC, VB, JAVA以及.NET的书回来,早上五点钟起来背书!这样是不行的,正确的入门方法只有一个,要证大道,惟有此法!同窗们,从C语言入手,努力学好C语言!
   
旁观者李四说:此人大笨也!我用鼠标随便拖几个控件,就是一个xxx管理系统了,你用C语言怕是一年也写不出来吧!好吧,我要认可,讲这话的都已是mS的奴才了,别的我不了解,MFC自己就是一个封闭的架构,从MFC入手学习,你只会造成一种封闭的思惟模式,由于MS但愿不少人只学会表面的东西,不致成为高手,因此它大力推荐所谓的可视化的程序开发工具,也真有不少人愿意上他的当,最后真正迷失方向。说他坐不了程序吧,他也能够做,可是若是程序复杂一点,出现问题时,问题出再哪里就搞不清楚了,反正是不清楚!
     
梁肇新,大牛啊,他说:“我就搞不懂了,用鼠标怎么写程序呢?在个人公司里,高手的键盘响个不停,鼠标偶尔响一下,新手是鼠标响个不停,键盘偶尔响一下,他们的薪水相差的就不是一倍那么多了!”
     C
语言是各大操做系统的基础,UnixLinuxWindows其内核都清一色是C语言开发的,(某些地方是和汇编语言混合开发的),君不见Windows API都是C语言函数的接口?Unix/Linux绝大多数应用都是C语言开发的;Windows应用程序用纯API开发已然很少,大多都是依靠某种Application Framework,好比所谓的VC++,其实就是指VC IDE + C++语言 + MFC(如今重点已转向ATLWTL),可是Windows服务、网络、驱动程序等底层软件,仍是C语言开发的。各类语言的编译器,包括java虚拟机,都是用C语言开发的。各类嵌入式设备,如手机、PDA也都是C语言开发的。C语言历史悠久,其内容也绝非谭浩强老师的《C语言程序设计(第二版)》所描述的那么简单——那本书只是针对中国国情的教学入门书而已。
   
学生总喜欢问:那种语言好?学那种语言有前途?这种问题每天在讨论,永无休止。其实我以为你们所关心的,无非是那种语言更有“钱途”,学习那种语言毕业后可以轻松找到高薪的工做——当年我也是这么想。那么,我告诉你,若是你精通C语言,请你去华为,不要在小池塘里浪费青春了!
  OK,
听了我苦口婆心的劝告,你准备从C语言入手,开始攀登程序员高手这座山峰了,在你出发以前,你的行囊中须要准备什么呢?
第一个要装进行囊和你一块儿前进是“规范的格式”,有不少教科书,参考书,不太注重程序的格式的问题,写出的程序就象一堆堆的垃圾同样,这也致使了如今不少人写的程序中有不少的废码,垃圾代码,这和那些入门的书有很是大的关系,要把那些做者都拿来打打PP。真正的商业程序绝对是规范的,张三写的程序和李四的程序格式大体相同,各类标识符的命名规则同样,不然谁也看不懂你写的程序。若是写出来的代码谁也看不懂,那绝对是垃圾。若是要把那些垃圾翻半天,勉强才把金子找出来,那这样的程序不如不要,还不如从新写过,这样,思路会更清楚一点。因此说,规范的格式是入门的基础。那这个规范的格式包括什么呢?很多啊,要坚持才能作到!长标志符命名,代码缩进,一对大括号范围不超过一屏幕,等等。
   
第二个要装进行囊的是耐心,所谓工欲善其事,必先利其器。要想成功,没有一个相对平淡的过程是不可能的。这不只仅指你在学习过程当中要有耐心,要按部就班,而起也说的是另外一个重要的方面:调式程序。调试是写程序过程当中一个重要的方面,若是有人能一次写成程序,牛啊,并且是大牛,不光是大牛,仍是老子骑的那头青牛,凡人是作不道的!调试是每一个程序一定经历的历程。常常有同窗问我:老师,个人程序彻底没错误啊,都是照书抄的啊!怎么就运行不出来呢?对于这个问题我也看不出来!大家有问题能够找我,找其余的老师,老师找谁啊?李师父?那是很荒谬的!我就只好坐下来调试,这个说实话,调试是很枯燥的,因此有同窗抱怨说我操做太快,不理解为何要这样,为何要那样,个人脾气不太好,一烦躁就会骂人地,因此,这个就须要大家本身修炼内功了!
有了这两个就能够了,能够出发了,估计有人说了,英语和数学不要了?你们都说大学生了,这种问题就不要问了嘛!你已经用早晨和傍晚的时光学习了英语了,我这个没有要去,计算机专业英语超简单,小学水平而已,记住一些专业词汇就能够了!关于数学,说数学好,写程序就好是没有科学根据的!我就有个同窗,数学回回100分,写程序也就是hello world的程度,不过人家如今是数学博士了!惭愧啊!作为的大学生,并且是咱们这个专业的大学生,已经彻底具有了写程序所须要的数学素养了!因此这个不是咱们要担忧的,Ready? Go
第一招,学什么呢?打狗棍法!呵呵
有一个伟人说过:“重复权威是成熟的必经之路”,这是站在巨人的肩膀上的作法,习武之人首先要学的都是各类套路,比方说辟邪剑法,而后才能融会贯通,开宗流派;咱们学习写程序也要这样来,这是一个捷径,帮你走得更远得捷径。
   
看书,看好书!书中所写,是前人数十年经验所写,看十本书,就至关于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。:)书固然要看好书,只有好书才养分丰富。要作到读书破万卷,编程若有神;枯燥的看书是很郁闷的,很容易变成化石!如今不少是书都是用源码说明问题的,源码就像是动画、就像是幻灯片,把书中的招式一一演练给你看。能够说高手的经验大都是源自代码,最后也都化成源码展示在你们面前,把书上的程序一个一个的输入(用键盘,用你的手指)到电脑中,编译运行。本身手工输入这一步不能省略,如今不少书有配套源码,不少同窗或者成年人学习的时候都耍小聪明,直接把源码复制过去编译运行,hoho, 这是没有效果的。
   
天然,我让你输入程序不是让你练习盲打,你在输入的过程就能够品出程序的好坏来了,若是发现本身输入了不少重复代码,那至少这个程序的结构就很差了,穷则变,变则通嘛,你就想改进它啊,这不是很好吗?
   
固然,程序输得多了,盲打功力也上了一个台阶,键盘敲得快了,薪水也跟着涨上去了!^_^
不过,键盘敲得快不表明你的程序就写得好,不然学校只要每一个学生发一份盲打联系软件,四年毕业后,个个都是程序高手了!
好了,你输了一个程序进电脑了,锻炼了手部肌肉,也运行出告终果,愉悦了身心,就此知足了?那离高手还远呢,要变成高手,你还要锻炼一下你得脑部肌肉!拿起你得笔,拿起你得纸,用你得大脑,这号称世界上最精密的机器来运行你输入的程序,记录下不一样运行时刻变量的值,记录下程序的运行分支,最后发现,这个程序被你解剖到了纸上,我相信也解剖到了你的内心!这是捷径的核心,必定要记住,输入的程序不是说正确运行就完事了,要去阅读一下代码,利用笔和纸作辅助工具,作一下笔记,这就是重复权威 ,固然,若是你是天才,那请你塞上耳朵,你不在咱们讨论的范围以内!
  
为何这一步很重要呢?
你们刚开始学习的时候,是否是有种感受,若是让你写一个程序,你从哪里下手呢?前面?后面?上面?下面?为了解决这个问题,个人程序该如何写呢?抓耳挠腮,好烦啊,因而乎干脆睡觉去,不写了,你看,这种行为是要打PP的!
  
练武功,老是先重复师父的动做,才能有本身的动做,因此也让咱们重重复别人写的程序开始,而后再写本身的程序吧!
遵循这个方法,大家就跟着组织走上了通往罗马的大路了!
   
接下来,你得走啊,不走怎么到罗马呢? 把你学会的程序设计方法应用到你写的程序中去啊!
某天,你看到这里有个问题,你有了想法,怎么办?上机去,和键盘奋战去!stop, stop! 暂停一下,上机以前,不要忘记了你的笔和纸,勇敢地把你的想法写下来,若是写不出来,就不要去机房浪费爸爸妈妈的血汗钱了!
  
固然,你不能乱写啊,写出来的东西怎么样才叫不是乱写的呢?实践是检验真理的惟一标准!用你的大脑去运行一边啊,不是叫“人程序合一”嘛?,这就是了!学武功就要学绝世武功!虽然号称最精密,实际效果上,人脑仍是没有电脑的准确度的,若是你的大脑能马马虎虎地运行出来以后,那么OK,带上规范的格式和耐心,去上机吧!
   
天然,咱们说一天到晚面对字符界面的TC是有些郁闷,你们都习惯了windows,微软的客户体念设计中心可不是吹出来的!windows多好,色彩斑斓的。当你修炼到我这个程度的时候,非要听这京剧才文思泉涌的写程序的时候,固然要用windows下的集成开发环境了。可是对你们来讲,不是如今,windows是很危险地,程序员仍是回到TC中去吧!
  TC
至少有一个好处,能够锻炼咱们使用组合键的习惯,能够锻炼咱们使用键盘编程的习惯,回想咱们刚刚说的梁某说的话“用鼠标怎么编程呢?”有同窗难免要提出疑问了,我是80年代甚至是90年代生人,你还让我面对那么枯燥的输入输出界面?我跟你有代沟!我期待有更丰富更吸引人的交互手段
哦,这个问题问得好,C语言中也有图形啊,彻底能够知足你们寓教于乐得心理!让咱们来看这个程序,很简单,就是在屏幕上话一个周期得正弦波!
(
参见ppt......)
运行效果是否是很好?你学数据结构的时候,树啊,图啊,你均可以这样输出啊,不少地方你均可以作的更好呢!

好了,到这里,咱们基本解决了在学习C语言程序设计时的一些方法论的东西,关于具体的学习过程,若是你要我在这里给大家讲指针要如何学习?函数要如何学习?那我讲的内容也不会多于任课老师的内容,或者开个专题叫“如何学好指针”,固然,若是你愿意和我探讨一下指针的本质和高级应用的话,课后,课后啊!
如今,咱们要谈最后一个问题!咱们这个专业的女生的比例较其余的工科专业仍是要高一些的,不知道为何常常到以下的说法:1,我是女生,我不适合写程序啊;2,个人性格比较外向,不适合坐下来安静的写程序呢!
   
性格外向不适合写程序?大家看我啊,以为我是性格内向的任吗?程序员也很是须要发散的外向型思惟,老比,地球上最富裕的人说,他招程序员更愿意招原来是学物理的人,由于学物理的人的思惟能够从极大(宇宙)到极小(原子)。全部,说性格外向不适合写程序的话是懒惰的借口,是要掩盖他不可告人的目的的接口!狂打PP!
  
女生又为何不适合写程序呢?我到知道一个理由,对皮肤很差啊!大家看我这满脸沧桑的,就知道了!除此以外,还会又其余的理由吗?英国科学家早就证实了男女的区别彻底不是人们想象的那样,不少方面女性是要超过男性的!想一想之前的母系社会,如今的惠安女!
我就见过一个上市公司的研发二部全是女性!,从软件工程师到硬件工程师再到部门经理都是女性,业绩根本不输其余的研发部门,这个公司在湖南,不是我瞎掰的!
同窗们,问你们一个问题,“二十一世纪最贵是什么?”,不错,是人才,因此,我能够负责任地告诉你们,“不学好C语言,老师很生气”,老师很生气,后果怎么样啊?是很严重!
That’s all, thank you!
   
学习C语言不是一朝一夕的事情,但也不须要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意,即便是“最小的代价”,也毫不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着你须要经历艰苦的过程。

1、要读就读好书,不然不如不读

  全部初学者面临的第一个问题即是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校一般会帮你指定一本不好劲的C语言课本;而幸运的是,你还能够再次选择。
  大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,听说发行量有超过400万,据我所知,不少学校都会推荐这本书做为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚决地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些须要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:例子程序很是不专业,不能教给你程序设计应该掌握的思考方式;程序风格至关地很差,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,其中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣你们能够百度一下:)

  KernighanRitchie的《The C Programming Language》(中译名C程序设计语言》)堪称经典中的经典,不过旧版的不少内容都已过期,和如今的标准C语言相去甚远,你们必定要看最新的版本,不然不如不看。另外,即便是最经典最权威的书,也没有办法面面俱到,因此手边常备一本C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是根据C89标准修订的,而《C语言参考手册》描述的是C99标准,两者可能会有些出入,建议按照C99标准学习。还有一本C和指针》,写得也是至关地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特色吧。不过这本书并不十分适合初学者,若是你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你能够尝试一下这本书。我相信,只要你理解了指针,C语言便再也不神秘。

  若是你已经啃完了一本C语言教材,想要更进一步,那么有两本书你必定要看。首先是C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容很是很是地有趣。要注意一点,这本书是二十多年前写成的,里面提到的不少C语言的缺陷都已被改进,不过可以了解一些历史也不是什么坏事。而后你能够挑战一下《Expert C Programming》(中译名C专家编程》),书如其名,这本书颇具难度,一旦你仔细读完并能透彻理解,你即可以放心大胆地在简历上写“精通C语言”了。
  切记一个原则,不要读本身目前还看不懂的书,那是浪费生命。若是你看不懂,那你必定是缺失了某些必需基础知识。此时,你要仔细分析本身须要补充哪些内容,而后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。

2、Unix/Linux仍是Windows,这是个很大的问题

  不一样的编程环境会造就出不一样思惟的程序员。Windows的程序员大多依赖集成开发环境,好比Visual Studio,而Unix程序员更加钟爱Makefile与控制台。显而易见,集成开发环境更容易上手,在Windows上学习C语言,只须要会按几个基本的Visutal C++工具栏按钮就能够开始写Hello, World!了,而在Unix下,你须要一些控制台操做的基本知识。有人也许认为Unix的环境更简洁,但习惯的力量是很大的,你们都很熟悉Windows的基本操做,而为了学习C语言去专门装一个Unix系统,彷佛有点不划算。
  对于一个只懂得Windows基本操做、连DOS是什么都不知道的新手而言,尽快作一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习lscat等命令有趣,何况咱们要专一于C语言自己,就不得不暂时忽略一些东西,好比编译连接的过程、Makefile的写法等等等等。

  因此我建议初学者应该以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++做为主要的学习环境,并且千万不要在IDE的使用技巧上过多纠缠,由于从此你必定要转向Unix环境的。Visual C++ 6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并很差,而Dev C++使用gcc编译器,对C99的标准都支持良好。使用顺带提一下,不少大学的C语言课程还在使用Turbo C 2.0做为实验环境,这是至关不可取的,缘由其一是TC 2.0C标准几乎没有支持,其二是TC 2.0编译获得的程序是16位的,这对从此理解32位的程序会形成极大的困扰(固然,djgpp之类的东西可使TC 2.0编译出32位程序,不过那过于复杂了)。

  等你学完一本C语言的教材,你必定要转向Unix平台继续学习,几乎全部的C语言高级教程都是基于Unix平台的(好比《C专家编程》)。转变的过程是痛苦的,你须要面对的是各类纷繁复杂的命令,彻底不一样于Windows平台的思考方式,可是这种痛苦是值得的。UnixC是共生的,Unix的思考方式和习惯更加符合C语言的思考方式和习惯。在Unix下,你能够找到无数优秀的源代码供你尽情阅读,你能够方便地查看某个库函数的联机手册,还能够看到最优秀的代码风格(说到代码风格,我会专门写一篇文章详细叙述)。

  归结起来就是一句话:初学C语言,建议使用Windows系统和集成开发环境,在准备向“高手”方向努力时,请先转向Unix平台。小程序

  (后面继续,请点击网址)http://infohacker.blog.51cto.com/6751239/1171129windows

相关文章
相关标签/搜索