勿在浮沙筑高楼:给编程入门者的发起

 前几天重读Eric S. Raymond的How to become a hacker,看到他推荐编程入门选用Python,溘然以为很压抑,有了些想法。我发起编程入门的人学C可能Pascal,假如更进一步的话可以用汇编语言,因为这样能更清楚的相识底层。

  下面针对一些支持选用Java, Python, C++(指用了非C特性的C++)等高级的OO语言入门的人大概的原因作些说明。

  1. Pascal, C太老了,过期了,平时用得很少,此刻风行Java等等。

  尺度Pascal简直是较量老了,不外有Delphi后继呢,说C老恐怕就是蒙昧了,C此刻用得很遍及,好像sourceforge.net上的项目照旧C的最多。推荐Pascal不是因为Delphi。选择Pascal, C是以为两个此刻很常见,语法很有代表性,简捷明白。

  不要动不动以为什么对象过期了,COBOL尚有OO版本面世,尚有FORTRAN,LISP,好陈腐的语言吧,此刻还用得很广呢。

  2.入门要从OO开始,造就用OO方法思考的习惯。

  首先要说明,OO是要领,不是语言,初学者一入门便摆弄Java, Python, Delphi等很容易形成误解,好像OO=Java, Python, C++...

  其次,进程式语言(可能说布局化要领)的精华不会消亡,OO内里也不行能挣脱掉一条条的语句、函数挪用,布局化要领照旧需要倡导的。OO要领不是那么容易学会的(OO语言的语法弄得很纯熟不代表你懂OO),而布局化那套要领,自个写个千把行的措施就很能体会了,我是说写个实用点的对象,好比试着自个实现一些数据布局和算法,写几个小游戏等。写个一千行Hello world便是没写。

  我以为要领是实践中体会出来的,不是看看书就能学会的,你看Design Patterns等把模式背的倒背如流很大概会陷入太过设计的泥潭,你写了几千行代码,然后再去读一读,改改调试调试,逐步增加成果,你就会发明本身代码写的有何等臭了,然后看看书听听别人意见你就知道什么叫Best practice了,最好的履历就是在焦头烂额之际获得的。

  进程式语言的代码一般较量简洁,我们编措施最终的目标是要办理问题,是要计较,是要获取信息,不要被OO, pattern, EJB, Web Services等模糊了(我不是阻挡这些技能).

  强烈发起列位多读代码,你去看看莱昂氏的那本UNIX v6源码阐明,仔细看,逐步看,你就能体会到什么叫精美的代码了,然后实验凭据谁人气势气魄写代码。

  3.进程式语言弄久了,很难转入OO的思维模式

  我以前也没有深想过这个来由,不外时间久了,觉察本身不外是把数据和要了解合在一起罢了,看着利便,其实有许多不公道的对象,这里头就需要OO的理论指导了,照旧需要时间来体会。我相信有许多用OO语言的人也不外是在框架里头添添代码,挪用来挪用去罢了,把人类看成数据和操纵的打包器。

  小我私家以为只有在用进程式要领做了十来年,编码上十万行后才有思维定势,难以习习用OO的目光对待系统,然而这个转变,我仍以为比改变一小我私家的恶习容易很多。OO要领不是学了个Java, Python, C++等就能把握的,需要实践,需要时间。进程式语言也容易造就一小我私家严谨的干事立场,好比用Pascal, C等写代码,没有namespace,没有function overload, 没有reference(Pascal有,呵呵,我喜欢),没有template, 没有exception, 你要花许多心思处理惩罚一些细节,好比鉴戒数组索引越界,悬挂指针,野指针等等,请不要以为贫苦,这个就是计较机啊,底层就是这样的啊。

       4.别用C, Pascal了,看我用Java, Python, Delphi, VB, VC等轻轻松松就写了个PP的GUI,NB的漫衍式应用...

  这篇文章是给初学者看的,也可以给一些暴躁的人看看(我也反省,呵呵),初学编程的人精神应该放在数据布局、算法上面,只管多看一些底层的对象,数字逻辑,操纵系统,编译道理,计较机构成、体系布局,计较机网络等等基本常识。编写GUI拖几个控件有什么好吹的,你懂界面设计的原则么,你知道窗口动静怎么回事么,你编的界面是把易用放在第一位呢照旧把大度放在第一位呢,你的GUI措施容易修改吗?好比我一会要加个button,一会去个listbox,你会不会改的疯掉呢?你是不是在OnClick里头写了大段大段的代码,做雷同“从edit1.text中去掉不是数字的字符,搜索xxx再转成16进制,再复制到edit2.text”的事?

  嗯,你socket弄得纯熟,recv来,send去,但是假如你不懂tcp/ip协议那就有点好笑了,除了用别人做好的函数库你还能搞出什么新格式?弄漫衍式应用的知道“漫衍式”怎么回事吗,

  你是否只是在用API堆砌代码呢?倘若有一天这个函数库没人支持了,你是不是就傻眼了?

  好比编游戏,没看过3D图形学便搞DirectX,也是较量好笑的。

  我并不是说你编较量高层的对象就必需先得透彻相识底层怎么实现的,我只是发起你好歹把底层的对象混个脸熟,碰着问题时心里有个谱,查查资料,别动不动扑某个论坛求救。以前在BBS上看到或人的话,说BBS不是进修的处所,是开辟眼界的处所。深觉得然。

  进修照旧找纸版的书诚恳的看较量好,想想你积攒了几多电子书而又看了几多。

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

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

  5. C好难啊,我入门照旧从Java,Python开始吧

  首先,是自个要做措施员的吗?是想编程照旧想赚钱啊?

  其次,我们来较量一下难易:

  C: k&r那本书真的不算厚,经典的C的书很少,说C难,或许是传说中C的指针很难吧,C的语法很简明的,就是指针,只要你当真看看书,写几个措施试一试,那几个指针的用法不难把握,别的各人千万不要去死钻*++ ++*之类的语法,关于这点在《开拓好手》最后一期上裘宗燕老师有一篇出色的文章。各人记着写代码是要维护的,别耍弄语法能力给本身或后人制造贫苦,你想想本身看别人写的天书代码是惊叹照旧咒骂?

  Java: 书太多了啊,就说Gosling(没拼错吧)那本,相当厚,学Java的人一开始都被classpath和package的问题烦过吧,尚有Java的要害字,语法,Sun鼓捣出来的一堆堆Java技能名词,是不是有点晕了?

  C++简直有难度,你可以看看C++语言的设计和演化,就可以知道C++怎么这个品德了,呵呵。有意思的是Java此刻插手模版,并且因为伪模版的实现被人诟病,尚有谁人EJB的转变,有意思,各人可以思考一下“巨大”、“实用”这些词。

  Python简直较量清爽,不外深入一点后其内部工具模子也不简朴,想想操纵一个列表有几多要领,各类成果强大的操纵符,并且此刻的OO语言逼着你OO, 功效往往是语法OO罢了,没多大新意,我照旧浏览Perl, C++这类语言,你想怎么就怎么,重要的是要用符合要领,趁手东西,最少的时间做有代价的对象,把你钻研语言的语法的时间拿来熬炼一下身体,泡杯茶看看小说我以为更好一些。

  语言只是表达思想的东西,不要只范围于一种语言,不要狂热于某一门语言。

  学编程时选书最好先看一看书中的代码,是取自实际应用中的吗?写的大度吗?(指代码自身的精美,以及排版是否工致)代码中有语法错误吗?(藐视某些没编译试试就把代码copy到书里的作者)

  有本Essential C#,取的是.Net类库的代码,很棒,讲delegate(但愿没拼错,良久没弄这个了)时举的例子很清楚地让人看到这个对象该怎么用。

  别的推荐Learning Perl,我小我私家以为是我看过的最好的关于编程的书,该讲么,不应讲什么,按什么顺序讲,很好,也许是Perl的精力的传染吧,当初看这本书很有震惊的感受,本来措施设计语言还可以这么使!爽!

  断断续续写了这么长,xxx的xx布,又x又长,呵呵,但愿各人踏实一些,不要暴躁。 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8637.html