首页
社区
课程
招聘
[原创]从“学什么编程语言”说开去
发表于: 2010-11-19 15:03 22505

[原创]从“学什么编程语言”说开去

2010-11-19 15:03
22505

从“学什么编程语言”说开去

看了 vssw 写的 《学什么编程语言》
        http://bbs.pediy.com/showthread.php?t=125062
有点感想,随便说说。

编程语言只是一个工具,是帮助你实现你的思想,你的目标的。一个编程语言,首先它要能帮助你完成你要做的工程,第二它在满足第一的前提下,要足够简单。

比如,你要写一个驱动。你可以选C,C++,ASM。但如果你非要选Delphi,Basic,JAVA等,即使你天才地做到了,也不是好的选择。因为这些语言不是干这个的。

先说汇编与C++。无论是用什么语言写的程序,编译后运行起来,都成了汇编。所以,一个高级程序员,至少要能看懂汇编。这样才能从根本上理解class是怎么实现的,exception是怎么实现的等等。一些溢出的BUG,更是必须看汇编才能找到问题。但如果因此你就喜欢上了汇编,无论什么项目都用汇编来写,就是你的不对了。

比如,要实现一个链表。用C++来写,就比用汇编省力得多。为什么?因为在汇编中,你要时时考虑我只有这几个有限的寄存器,用完了就没有了,不够用了。我要时时记住EAX存的是什么东西,[ebp+4]存的是什么东西。我要时时记住函数调用时堆栈必须配平,这太累了。用C++实现一个链表根本不需要考虑这些东西。这里,我们就得出一个结论:如果一个工具,你使用它完成任务时,需要考虑太多的细节,那说明它已经不合适了。

比如我要骑马。我希望一拍马屁股就能走。不需要我考虑它先迈左脚还是右脚,不需要我分析怎么样保持不倒。不必关心这些细节,才能专心做事,才能高效做事。

微软有个白痴,告诉我们写驱动时要用C而不是C++。于是我们看到网上所有的驱动例子,公开源码的驱动项目,都是点C文件名而不是点CPP。其实,编译成OBJ后,那还能分得清原来是C还是CPP?用C写驱动,意味着所有的变量都必须在函数前定义不能随用随定义,意味着你不能用class类来划分模块,于是所有的函数都是全局的。一旦工程变大,大量不分类的全局函数全局变量将变成一团糟。

记住,写驱动一定要用C++!不过在DriverEntry前面加个 extern "C"。如果你要用new和delete的话,就手动实现这两个函数。如果要有全局类需要初始化,就写一个做这件事的函数,在DriverEntry调用一下。

这几天,我在学习并行运算方面的东西。我们知道,现在电脑都是多核的。如果用CreateThread创建多个线程,它们就可能在不同的CPU并行运行,提高效率。理解了这个道理,实现起来却并不简单。你要知道电脑是几核的。如果只有两核,你创建过多的线程并不能提高效率。你要知道一个线程是不是跑完了再去运行下一个线程。你要把并行的内容放到线程函数中才能CreateThread。总之,把一个for循环改为并行的for,需要很大的工作量。这时候,我们应该明白,C++已经不够用了。现在我知道,Intel Cilk Plus对C++做了一个扩展,增加了一个 parallel_for 关键字,就完美实现了循环的并行化。这就是找到了合适的工具。

工具,只是工具。它是帮你完成任务用的。你不要对工具有所偏爱。说我就喜欢C++,我就喜欢汇编,这是错的。

总结。如果你什么时候发现,做一件事很麻烦,需要考虑很多细节,那很可能该换一个工具了。

说开了去。反过来说。你考虑的是什么样的细节,也决定了你的层次。如果你考虑的是一行行的代码,那你是程序员。如果你考虑的是一个个模块,不同的模块之间如何联系,不同的模块交给不同的人做,那你是项目主管。如果你要考虑的是,公司要不要做这个项目,或一个项目完成哪些功能,那你是公司领导。

京沪高铁贯通了。在这个项目中,必然有一个人说,我们应该有一条北京到上海的高铁。必须有一些人,要研究这高铁要通过哪些城市,要研究是建苏州北站还是苏州南站。也必须有一些人,去征地,去建设,去拧上每一个螺钉。不同层次的人,要考虑的细节不同。不可越级。

有一首歌唱,有一个老人在地图上画了一个圈。。。于是有了今天的深圳。你今天在深圳工作,都是因为这个圈。让我们每个人都努力拼搏,争取上位,做那个画圈的人。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (47)
雪    币: 9811
活跃值: (2216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写trw2000的神级人物,再次出现了。
2010-11-19 15:28
0
雪    币: 1140
活跃值: (3176)
能力值: ( LV12,RANK:385 )
在线值:
发帖
回帖
粉丝
3
尺有所长,寸有所短,根据需要选择工具。
学习一种语言,要学会学精,切莫半途而废。
天下道理:一致而百虑,殊途而同归。
2010-11-19 15:31
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
刘涛涛 ???
2010-11-19 15:31
0
雪    币: 678
活跃值: (101)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
5
我觉得合适的就是最好的,一般新手都会疑惑学哪种语言好,其实更多的是哪种语言对你现在的工作做起来更容易。语言本身并没有好与不好,只有找到它适合的就行了。当然我们有能力还是要掌握好几门语言的,这个是必须的。
2010-11-19 15:32
0
雪    币: 184
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
语言越高级、越专门,编译器(解释器、汇编器)替你做的事越多,越省力,但是,局限性越大
语言越低级越灵活,但越费力
不同语言谈不上谁好谁坏、孰强孰弱,各有千秋罢了
杀鸡用鸡刀,宰牛用牛刀,适合就好
2010-11-19 15:39
0
雪    币: 8221
活跃值: (2806)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
微软有个白痴,告诉我们写驱动时要用C而不是C++。于是我们看到网上所有的驱动例子,公开源码的驱动项目,都是点C文件名而不是点CPP。其实,编译成OBJ后,那还能分得清原来是C还是CPP?用C写驱动,意味着所有的变量都必须在函数前定义不能随用随定义,意味着你不能用class类来划分模块,于是所有的函数都是全局的。一旦工程变大,大量不分类的全局函数全局变量将变成一团糟。

这句话深有感触..学习了.谢谢分享.

可惜不好坚持啊.以前我也很喜欢Class写驱动.

后来发觉老出一些莫名其妙的错误.

于是C写(果然省了很多事)了.哎.还需要努力啊..
2010-11-19 15:42
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
8
不管你学什么编程语言,不管你用什么工具,最终完成任务就行了,同一个项目不要以为你用ASM写,就会有人崇拜你,那是错的,不论用什么写,写好才是关键,
2010-11-19 15:53
0
雪    币: 184
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
微软有个白痴,告诉我们写驱动时要用C而不是C++。于是我们看到网上所有的驱动例子,公开源码的驱动项目,都是点C文件名而不是点CPP。其实,编译成OBJ后,那还能分得清原来是C还是CPP?用C写驱动,意味着所有的变量都必须在函数前定义不能随用随定义,意味着你不能用class类来划分模块,于是所有的函数都是全局的。一旦工程变大,大量不分类的全局函数全局变量将变成一团糟。
=====================================
不能用class来划分模块就用文件来划分,使用全局静态变量、函数,可以减少命名冲突
还有使用前缀法命名变量或函数也不错

其实C++的封装只是它的一个特性之一
我觉得它的多态(虚函数)和继承(代码重用)才是亮点,应该更有用。

还有面向对象的设计比面向过程的设计更符合人们的实际思维。
2010-11-19 15:54
0
雪    币: 38
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
这篇文章 下载 到本地收藏
2010-11-19 16:36
0
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
编程就是实现目的。
探索就必须学会底层。

顶楼主!
2010-11-19 16:51
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
12
感谢涛哥。
我认为在学习的过程中,好的方法和清醒的思维往往比看了什么书,学了什么语言要重要得多。
初学的朋友在开始学习的过程中,这些文章会非常有益。
2010-11-19 16:54
0
雪    币: 391
活跃值: (135)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
13
涛涛哥就是牛
2010-11-19 16:56
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
14
涛哥能花点时间给小菜们写写教育文章,很不容易~~请小菜们好好珍惜~~
2010-11-19 16:57
0
雪    币: 217
活跃值: (68)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
好文章
确实用什么写都无所谓 关键是达到了目的了没 完成了预想的方案了没
中间是逻辑和算法的考虑
实现简单 思路清晰 又完成了既定要求  这就太棒了

争取做个那个画圈的人
2010-11-19 17:00
0
雪    币: 705
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
书中的人物出来发帖,受益匪浅,珍惜……
2010-11-19 17:22
0
雪    币: 1450
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rxb
17
说的灰常灰常好。。鼓掌。。。
2010-11-19 17:28
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
万法皆通啊,不过这需要坚实的基础
2010-11-19 18:04
0
雪    币: 272
活跃值: (3263)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
19
很同意这样的说法,,语言只是工具而已
2010-11-19 18:22
0
雪    币: 191
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
切菜用刀,砍材用斧。物尽其用。。。。多谢涛哥指点。
2010-11-19 18:31
0
雪    币: 564
活跃值: (42)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
21
受益匪浅,,学习借鉴之。。。。。
2010-11-19 18:33
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
22
神牛出现了。。。文章读的 很有感触,珍惜ing
2010-11-19 19:20
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
特意登陆来顶一下你
2010-11-19 21:40
0
雪    币: 384
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
受教了

看完后能省去许多弯路
2010-11-20 00:26
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
期待一下一篇《算法的力量》
2010-11-20 09:21
0
游客
登录 | 注册 方可回帖
返回
//