飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5103|回复: 22

程序点滴,正确的入门方法

[复制链接]

该用户从未签到

发表于 2007-9-6 08:37:46 | 显示全部楼层 |阅读模式
在这一节中,主要讲从我的经验来看,一般程序员需要注意的地方。教你怎样去具体学习不是我的责任,你可以去任何一个书店去找一本书回来自己看就可以了。这里只是对这些书做一些补充以及一些平常从来没注意的内容。

     入门最基本的方法就是从C语言入手。如果以前学过BASIC语言的话,那么从C语言入手是非常容易的。我就经历了一个过程,根本不觉得这中间有太大的难度。其实,C语言本身和BASIC没有什么两样。BASIC每个所谓的命令在C语言里面都可以做成一个函数来实现,那么你就能用那个命令组合成整个程序。从这个角度来看,BASIC和C语言没有本质的差别。C语言就是入门的正确方法,没有其他。

     现在的C语言本身就包含了嵌入汇编,使学习汇编语言的时候更加方便。你可以忽略掉纯汇编里面的很多操作。也许有人觉得这个方法太慢了。但要知道,工欲善其事,必先利其器,要想成功,没有一个艰苦的过程是不可能的,所以一开始的时候就要有耐心。如果你准备花5年的时间成为高手,那我敢说,你根本不用等到5年,你只要有这个耐心就足够了,你可能2年~3年内就能达到目标。但如果你想在一年时间内就成为高手,即使5年后,你还是成不了高手。

我们公司1998年招的开发人员都是应届大学毕业生。很明显,有人好像什么都会,又会CorelDraw,又会Photoshop,又会Flash,又会C++,甚至VB也会。可是这样的人到现在还是全都会,但是什么事情也做不好,做的东西“臭”死了。但其中有一个人就不同,他以前甚至连Windows的程序都没有做过,只会在DOS下做几个小程序。但当我们把超级解霸的程序给他看,让他去研究的时候,他只用一周的时间,就迅速掌握。他那个月进步非常快,几乎就是一生中进步最快的阶段,这就是一个质的飞跃。

  从基本入手以后,当你的积累到达一个阶段以后,就会有一个质的飞跃的阶段。事实上,我也有这么一个阶段,这个阶段也是我离开大学以后,真正去公司做事的时候。当我真正拥有一台计算机后,我把所有以前积累的问题在一个月内做了探讨以后,感觉自己的水平迅速提高。




      入门和积累是很重要的。事实上,到达高手的境界以后,不管什么语言不语言的,其实都根本不用去学,只要拿过来看两天,就全部精通。如果你没有入门,即使去书店找n本书,天天背它,你也不会成为高手。

    所有的语言只是很花哨的表面东西。高手马上就能透过它的表象而看到它的本质。这样才是真正的高手。他不需要再去学什么Java,或者其他什么语言。当他真正要写个Java程序的时候,只要把Java程序拿过来看一看,瞄一瞄书,就全都清楚了。如果这时他学VB就更容易了,我想他不用一天的时间,就能学会。到达高手的境界以后,所有的事物都是触类旁通的。

       当你成为C语言的高手,那么就你很容易进入到操作系统的平台里面去;当你进入到操作系统的平台里去实际做程序时,就会懂得进行调试;当你懂得调试的时候,你就会发现能轻而易举地了解整个平台的架构。这时候,计算机基本上一切都在你的掌握之中了,没有什么东西能逃得出你的手掌心。
  
     上面只是针对程序的角度说明,另外一点也很重要,即好的程序员必须具备开放性思维,也就是思考问题的方法。程序员,尤其现在很多的程序员,都被误导从MFC入手,这就很容易形成一种封闭式的思维模式。这也是微软希望很多人只能学点表面的东西,不致成为高手,所以他大力推荐MFC之类的工具,但也真有很多人愿意去上他的当,最后真正迷失方向。说他做不了程序吧,他也能做程序,但是如果那个程序复杂一点,出现问题时,问题出在哪里就搞不清楚了,反正是不清楚。如果你真正有一种开放性的思维,在你能够成为高级程序员的时候,对MFC这些是不屑一顾的,MFC、VB根本不会在考虑的范围之内。

     事实上很多人,包括外面很多公司里面工资挺高的人,可能一个月能拿五、六万的这些人,他们的思维也不一定能达到很高的境界。但是,他确实做了很多的事情,已经有很好的积累了。但要上升到更高的境界上,就要有正确的思维方法。这就是为什么比尔·盖茨说,他招人的时候宁愿招一个学物理,而不是学编程的。学物理的人会有非常非常广的思维,他考虑的小到粒子,大到宇宙,思维空间非常广阔,这样,他思考问题的时候,就会很有深度。

    有人研究物理研究得比较深的时候,他能针对某个问题一直深入进去。很多写程序的人只会注意到这行代码或那行代码,则比较起来则显得肤浅。所以,编程的时候也要深入进去,把你的爱好、你的所有思维都放进去,努力做到物我合一的境界。
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-9-6 08:39:13 | 显示全部楼层
1.3.1  规范的格式是入门的基础
以前所有的C语言的书中,不太重视格式的问题,写的程序像一堆堆的垃圾一样。这也导致了现在的很多程序员的程序中有很多是废码、垃圾代码,这和那些入门的书非常有关系。因为这些书从不强调代码规范,而真正的商业程序绝对是规范的。你写的程序和他写的程序应该格式大致相同,否则谁也看不懂。如果写出来的代码大家都看不懂,那绝对是垃圾。如果把那些垃圾“翻”半天,勉强才能把里面“金子”找出来,那这样的程序不如不要,还不如重新写过,这样,思路还会更清楚一点。这是入门首先要注意的事情,即规范的格式是入门的基础。

1. 成对编码
正确的程序设计思路是成对编码,先写上面的大括号,然后马上写下面的大括号。这样一个函数体就已经形成了。它没有任何问题。然后,比如你要写个for循环,这时候先申明一个变量I,再写这个for循环。写上面的大括号,马上写下面的大括号,然后再在中间插一二行代码。插这段代码后,如果你又要用到新变量,则再在头上添加新的变量,然后再让它进行工作。这就是一种成对编码。

这样,当你用到一个内存的时候,写一个分配函数分配一块内存,马上就接着写释放这块内存的代码。然后你再在中间插上你要用这个内存做什么。这是正确的快速的编程方法。否则,你去查或调试代码都无从下手。针对这个程序来说,如果用成对编码,则它任何时候都是可以调试的,不需要你整个程序都写完后才能进行调试。

它是任何时候都可以编译调试的,甚至你写了两个大括号,中间什么也没有,它是空的时,你都可以进行调试。你写了第一个for循环,它也可以进行调试,当你又写了一个分配内存、释放内存以后,它还可以进行调试。它可以编译运行,里面可以放断点,这就是成对编码。

成对编码就涉及到代码规范的问题。为什么我说上面一个大括号,下面一个大括号,而不说成是前面一个大括号,后面一个大括号呢?如果是一般C语言的书,则它绝对说是后面加个大括号,回过头前面加个大括号。事实上,这就是垃圾程序的写法。正确的思路是写完行给它回车,给它大括号独立的一行,下面大括号也是独立的一行,而且这两个大括号跟那个for单词中间错开一个TAB。

集成环境的TAB首先要设成8,因为TAB的基本定义就是8,而现在的VC把它设成了4,这样使得你编出的程序放到一个标准的环境里看的时候就是乱的。

代码一定不能乱,一定要格式非常清楚,这点使你写的程序我能读,我写的程序你也能读,不需要再去习惯彼此的不同写法。

而且结合成对编码思维,这时候你去读一个程序的时候,你会发现,你读程序的方法变了。以前读程序的时候,你可以先去读它的变量是什么,然后再读第一行、第二行,读到最后一个大括号,这是一种读程序的方法。现在就不一样了,现在读程序的时候就养成了一种习惯,就是分块阅读程序,很明显两个大括号之间就是一块代码。

那么写出一个程序后,你要读这个程序是干什么的,只要看这个大括号和那个大括号之间的部分就可以了,不需要再去读其他的代码是干什么的。比如,你从Linux中或网上下载了一个“烂”程序后,该怎么去阅读它?最好的方法是先把程序所有的格式都整理好,先别去读它。把所有的格式按照这种规范化的方法,把它的括号全部整理好。这时候你再读那个程序,只要半分钟就读懂了,但是你可能要整理一个小时。但如果不这样做,你可能读两个小时都读不清楚该程序。

这点绝对不会有人告诉你,现在没有人去讲解这方面的技巧。这也是我写了那么多的程序,才总结出来的。一开始的时候,我也像那些教科书所教导那样写,后面放个大括号,前面放个大括号,甚至括号连括号,一连四个括号,每个括号对哪个最后都找不清楚。编译告诉你好像少了一个括号,于是找呀,找呀,上面找,下面找,而这个程序又很大,只有一个函数,上面在上屏,下面在下屏,最后翻来翻去也翻不出。

所以我就想,大括号之间要互相对应,即使不在一个屏幕内,也能很容易地看到它,因为只要光标落在这个大括号里面,往上去找,即能找到它头上的那个与此对正的,而且这些代码是在一起的。这一层代码和下一层代码是互相隔开的,我只要读这层代码,下面那一层代码就不需要了。

比如,它有n个for循环的时候,我只想看某一个for循环,这时我只要对正大括号,它的光标往上走,一下就能找到了。如果按照教科书那样写的话,你要读呀,读呀,要把所有的代码,把所有的for

循环都读一遍,才可能找到你要的东西。这就是成对编码和规范化的方法(详细叙述请参考代码规范一章)。



代码中如果不包括正确的思路,那该代码就没有什么用。如果是一个代码爱好者去收集代码,而现在网络上代码成群,Linux本身就带了一大堆的程序,那些程序对你真的有用吗?我看不见得。而且那些程序还在不断地升级,那程序还会有新版,如果你把它拿来看一下,对你来说其实没什么价值。

那怎么样使得它对你有用?就必须用上面所说的方法,经过这么处理以后,你就能真正取到它其中的设计思路,这样才能变废为宝。如果是MFC之类的东西,那你就不用找了,因为即使找,也找不出有价值的东西,全部是VC自动给你生成的一堆堆的垃圾框架,相对于网上Linux程序来说,它可能更“臭”一些。
PYG19周年生日快乐!

该用户从未签到

发表于 2007-9-6 10:19:15 | 显示全部楼层
好多字,看了一下,喜欢的那句

“对MFC这些是不屑一顾的”,这些封装了的东西,掩盖了事件的真相
PYG19周年生日快乐!

该用户从未签到

发表于 2007-9-6 12:04:03 | 显示全部楼层
支持原创!!
不过感觉不是入门了,而是一种方法了。.
重剑无锋!
PYG19周年生日快乐!

该用户从未签到

发表于 2007-9-6 23:09:05 | 显示全部楼层
把你的爱好、你的所有思维都放进去,努力做到物我合一的境界:loveliness: :loveliness:
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-9-7 07:53:06 | 显示全部楼层
原帖由 sislcb 于 2007-9-6 12:04 发表
支持原创!!
不过感觉不是入门了,而是一种方法了。.
重剑无锋!


是梁先生的大作
PYG19周年生日快乐!

该用户从未签到

发表于 2007-9-7 20:17:52 | 显示全部楼层
看了一下,感觉收获很大。基础很重要。
PYG19周年生日快乐!

该用户从未签到

发表于 2007-9-13 16:17:06 | 显示全部楼层
现在初学者普遍关心的是:我到底该学哪种语言。或者说哪种语言有前途
PYG19周年生日快乐!

该用户从未签到

发表于 2007-9-13 19:19:51 | 显示全部楼层
这个 真的很 感谢  
还好没进误区,不过 还是要看下MFC  不然对API的理解不够
纯看汇编又有点头晕
对C已经入门了  目前可以用C编写算法注册机, 我知道这是远远不够的
问下怎么提高编写C的能力?

[ 本帖最后由 xhn1002 于 2007-9-13 19:26 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2007-9-16 01:47:28 | 显示全部楼层
感谢楼主分享 支持一下
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表