编程学习中的一些错误认识

错误认识1.   C/C++太老了,过时了,平时用得很少,现在流行都Java、C#等等。

解惑:不要动不动觉得什么东西过时了,COBOL还有OO版本面世,还有FORTRAN,LISP,好古老的语言吧,现在还用得很广呢。杨中科老师经常提醒我们“一切语言都是纸老虎,一通百通”,学校已经开了 C/C++的课,并且想继续深入学习编程,那么就继续使用学过的语言来学习,不要再去学一门新的语言。等把C/C++弄熟了以后,回头一看,相信你也能像杨中科老师那样“半天学会一门新语言”了吧。

错误认识2.入门要从OO开始,培养用OO方式思考的习惯。

解惑:初学者一入门便摆弄Java、C++等很容易形成误解,似乎OO=Java, C++…。一切编程语言的根本都是面向过程的,Java、C++等语言也是支持面向对象特性的面向过程的语言。面向过程就是if……else……、while、for这些东西,Java、C++等语言中难道就没有这些语句了吗?

过程式语言(或者说结构化方法)的精髓不会消亡,OO里面也不可能摆脱掉一条条的语句、函数调用,结构化方法还是需要提倡的。OO方法不是那么容易学会的(OO语言的语法弄得很熟练不代表你懂OO),而结构化那套方法,自个写个千把行的程序就很能体会了,我是说写个实用点的东西,比如试着自个实现一些数据结构和算法,写几个小游戏等。写个一千行Hello world等于没写。

我觉得方法是实践中体会出来的,不是看看书就能学会的。过程式语言的代码一般比较简练,我们编程序最终的目的是要解决问题,是要计算,是要获取信息,不要被OO, 设计模式等迷糊了。

错误认识3.过程式语言弄久了,很难转入OO的思维模式

解惑:我以前也没有深想过这个理由,不过时间久了,发觉自己不过是把数据和方法集中在一起而已,看着方便,其实有很多不合理的东西,这里头就需要OO的理论指导了,还是需要时间来体会。我相信有很多用OO语言的人也不过是在框架里头添添代码,调用来调用去而已,把人类当作数据和操作的打包器。

个人觉得只有在用过程式方法做了十来年,编码上十万行后才有思维定势,难以习惯用OO的眼光看待系统,然而这个转变,我仍觉得比改变一个人的恶习容易许多。OO方法不是学了个Java,C++等就能掌握的,需要实践,需要时间。过程式语言也容易培养一个人严谨的做事态度,比如用汇编, C等写代码,没有命名空间、没有一大堆类库,没有模板、没有异常, 你要花很多心思处理一些细节,比如警惕数组索引越界、悬挂指针、野指针等等,请不要觉得麻烦,这个就是计算机啊,底层就是这样的啊。

错误认识4.别用C了,看我用Java、 VC等轻轻松松就写了个漂亮的图形界面

这篇文章是给初学者看的,也可以给一些浮躁的人看看,初学编程的人精力应该放在数据结构、算法上面,尽量多看一些底层的东西,数字逻辑,操作系统,编译原理,计算机组成、体系结构,计算机网络等等基础知识。编写GUI拖几个控件有什么好吹的,既然你会拖几个控件那么一个初中都没毕业的也会拖控件,你和他的差异性体现在哪里?你知道窗口消息怎么回事么,你编的界面是把易用放在第一位呢还是把漂亮放在第一位呢,你的GUI程序容易修改吗?比如我一会要加个button,一会去个listbox,你会不会改的疯掉呢?你是不是在OnClick里头写了大段大段的代码,做类似“从edit1.text中去掉不是数字的字符,搜索xxx再转成16进制,再复制到edit2.text”的事?

学习还是找纸版的书老实的看比较好,想想你积攒了多少电子书而又看了多少。

底层不了解,仅多也就飘在别人上头,别人一闪身,你就得摔下来。

初学编程的人一来就IDE, GUI, Network啥的猛搞,能不浮躁么?还是沉下心来研究一下基础知识吧,我以脑袋担保你有生之年会觉得他们有用的(呵呵,你转行我就没辙了),别看着别人弄JFC, Socket了你还在头大这个quick sort怎么就不对呢就心里惶惶的,你要知道在一批API不被支持后不少人心里空空的没个着落:天啊,我除了那个就啥都不会了,郁闷啊,花了我那么久时间钻研那套API,呜呜。。。。

错误认识5. C好难啊,我入门还是从Java,C#开始吧

解惑:语言只是表达思想的工具,不要只局限于一种语言,不要狂热于某一门语言。