首页
社区
课程
招聘
[旧帖] [原创]为什么编程入门不要从Delphi等开始 0.00雪花
发表于: 2010-8-20 23:11 2946

[旧帖] [原创]为什么编程入门不要从Delphi等开始 0.00雪花

2010-8-20 23:11
2946
为什么编程入门不要从Java,Python,Delphi,C++等开始

//这篇东西是给想做程序员的人写的,是给乐于编写代码的人看的,
//如果你只想弄弄HTML, ASP之类弄个网页就了事那就不用看了。
//最适合的就是刚开始学习编程的xdjm们,呵呵。

//申明:我不是反对OO, Pattern, C++, Python, Java, C#等等,
//相反,我都喜欢,呵呵。

前几天重读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, CB, 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又长,呵呵,希望大家踏实一些,不要浮躁。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (24)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Pascal 利于学习English...关键字是所有编程语言中相对最完整的....

其它没发现有什么好的,虽然Linux下也可以用跨平台的Kylik...但是总觉得很那里不对劲,哦 可能是语法太严谨
2010-8-21 00:51
0
雪    币: 74
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
值得学习,我现在才刚开始自学编程,有很多不懂。呵呵。慢慢学习吧。
2010-8-21 09:28
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了,学习第一门语言c中
2010-8-21 11:44
0
雪    币: 12
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Get
5
精通才是硬道理
2010-8-21 14:03
0
雪    币: 73
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
真的有好坏吗?个人理解吧!任何东西都有他生存的理由!
2010-8-21 16:03
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
正在准备学习,但是总入不了门,看完了书后面什么都不知道了
2010-8-21 17:03
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主搞笑了
delphi是工具,Pascal是语言。
delphi不就是用的Pascal嘛??
2010-8-21 20:42
0
雪    币: 7985
活跃值: (2561)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
对帖子内许多信息深有感受..

看了这贴.让我坚定了当初的选择.
2010-8-21 20:50
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学什么并不重要,重要的是你学了这些为了做什么。。。楼主还是太理想化了,你的方法的确是出高手、出奇才的方法,但对于一般人来说只能想想而已,没有实际作用。我承认在满大街飞着java和.net编程招生广告的时候,浮躁成为了主流,但你要知道人生存是第一本能,而理想只是生存不受威胁后才会有的东西。。。正如中国的软件业一样,所有的人都知道这个行业的浮躁,但没人能够改变,这是历史发展的必然,因为我们还没到达那个水平,就不要提理想了。还是踏踏实实的做好自己的工作,休闲时学习一些自己喜欢的编程技巧吧!
2010-8-23 13:58
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学什么没有关系,关键是看你有没有天赋!
2010-8-25 01:04
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了......
2010-8-25 01:36
0
雪    币: 185
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
写得不错!
个人感觉这个跟学武术差不多,外家拳与内家拳的区别,学好了哪个都很牛,但要登峰造极就要都精通才行。
2010-8-25 09:23
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
个人情况吧,编程也好,生活也好,不断进步就好了

昨天才看到一句话,很经典:

Delphi是世界上最容易上手,也最难精通的一门语言------大卫?托马斯《程序员修炼之道》作者
2010-9-7 11:20
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
实用+够用就好了。
2010-9-7 12:00
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
非常有建设性
2010-9-7 15:52
0
雪    币: 31
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
多年前为了学习破解而去钻研了一两年的汇编,几年下来都忘得差不多了,学习汇编和破解的日期真是怀念啊!不过话又说回来,破解和编程没有一颗恒心是不行的,我就是个例子。
2010-9-7 20:42
0
雪    币: 839
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
从那里开始无所谓,重要的是要认真学!
2010-9-8 11:04
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
膜拜牛人
2010-9-8 12:41
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
同意精通才是硬道理!
2010-9-8 13:56
0
雪    币: 55
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
目前是学习的Java.J2EE方向的..觉得的确是那么说的..拿到框架..然后就把里面的东西弄来弄去..
弄了那么久.其实对面向对象的理解还是很模糊的.路还很长啊...
2010-9-8 15:45
0
雪    币: 118
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
哦哦。哦哦
2015-1-10 15:25
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
如果只是做一般的数据库应用,学习Delphi就可以;但是想理解系统层面的东西,那要学习的东西就很多了。
2015-1-10 15:51
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
mark一下啊
2015-1-10 16:04
0
雪    币: 118
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
我懂了,入门如果从delphi开始的就是天才,从c语言Pascal 开始的就是农民工
2015-1-10 17:31
0
游客
登录 | 注册 方可回帖
返回
//