Press "Enter" to skip to content

关于语言的选择-选易用的

首先, 这篇文章不是对@左耳朵耗子C++的坑真的多吗?一文的反驳, 我只是在我的理解角度说一下我对语言选择的一些感悟.
关于C和C++的争论, 由来已久, 从当年Linus攻击C++是恐怖的语言的时候, 就一直没有停歇, 而就我自己来说, 我对C++的掌握还远远不够, 所以没有能力来从语言设计角度来对比(我在最初, 也尝试学过C++, 用过C++, 但后来发现, 我学不好, 用不好, 就放弃了). 所以我尽量避免在这个方面说错话.
诚然, C++引入了很多的新东西, 如@左耳朵耗子一文所说, 它确实是为了解决一些问题而设计的, 但是问题是我们需要么?
在我看来, 语言, 或者工具, 它是一个工具, 它的存在是为了让我们能使用它们解决问题. 从这个角度讲, 一个语言最大的优点应该是易于上手, 能被快速的掌握, 这样学习者才不会本末倒置, 花费巨大的精力在掌握"工具"的使用上.
当然, 古话也有云:"兵欲善其事必先利其器", 然而C++相比C来说, 并没有扩展更多可适用的场景, 也没有提升性能, 更没有提高多少开发效率, 当然, 从OO来说, 能从设计理念上或多或少影响使用者, 提高代码的可维护性. 然而这不是必须的, 因为也有太多的成功的, 可维护性很高的C项目, Linux, Unix, Apache, PHP.......
我对语言的设计是有一些经验的, 在我们设计开发PHP的时候, 最最慎重的就是新语法的添加, 这个过程近乎苛刻, 一个新的语言特性, 往往预示着不兼容, 更多的误用的可能, 更大的学习成本. 所以本能上我们排斥一些新的语法. 这也是对简单的一种追求.
相比C, C++提供了更多的新的语法, 新的语言特性, 这也就是说, 需要更多的学习时间, 更大的学习成本. 举个例子, 大家看看C++ primer有多厚, 看完这些还不够, 因为还有很多的细节你可能会误用, 所以又有: "Effective C++", "More Effective C++", 哦, 还有STL, " Effective STL"等等. 你真的愿意为了学习一门语言, 花费如此巨大的精力么?
如果你觉得学习一门高深的语言, 可以满足你自己的智商优越感, 那我无话可说, 但我还是要善意的提醒你, 即使你花了大半年, 学完了这些, 你还是什么都做不成, 因为语言还需要和实际结合, 要真正在实际中使用, 还有很多知识等着你: "Advanced Programming in the UNIX Environment", " Unix Network Programming" , 对于Windows的话, 那要看的书就更多了...
所以, 现在你还觉得你有那么多的时间学习所有的这些么? 假设你真的坚持你有时间, 那么好吧, 我再来提醒你一下, 你所学到的很多东西, 是你这个时候无法理解的. 因为你还没有实际解决问题的时候遇到一些设计模式上的经验, 所以你现在是看不懂那些设计模式, 或者一些看似很无用的功能的. 看吧, 多么矛盾, 学习高级语言需要实际项目经验, 而实际项目经验有需要你学习一门语言以后来掌握....
从这个角度上, 我觉得PHP和C很像, 我学PHP只买了一本书, 然而也没看完, 因为一个tutorials学下来, 我发现我已经学会了怎么解决当时的需求了... 现在对我来说, 一本PHP手册就够了....
有人会问, 一门很简单的语言, 学起来这么简单, 那后续怎么成长啊?
或许人性都是如此, 觉得掌握了复杂的东西会比较吊, 然而他们却忘记了, 还是我刚才的观点, 语言只是你学习来解决你实际问题, 把你的想法变为实际的工具, 你的成长应该是你在使用它们解决问题的过程中, 解决问题的经验的成长, 而不是语言的使用技艺的增长.
当你为了精通一门语言, 埋头闭关三年, 苦读各种书籍, 终于有一天学成出关的时候, 你却悲剧的发现, 这门语言已经不流行了... 不知道你作何感想? (写这段话的时候, 我脑袋里浮现出, 东成西就中的王重阳出关场景, 嘿嘿)
所以, 不要本末倒置, 选择你会用的(学一个易于学习的), 尽快开始解决实际问题吧!

58 Comments

  1. 的
    November 4, 2019

    当初被误导了,其实应该先学c++打基础,再学其它语言的

  2. shyandsy
    shyandsy January 6, 2016

    @little joe
    滑铁卢计算机科学大一就学这个scheme

  3. little joe
    little joe September 18, 2014

    如果某些人觉得学了c++再学习java或python php等很容易学,就认为c++好,那我推荐他们去用scheme,从造车轮干起,或者直接用汇编,岂不是更牛逼

  4. javalife
    javalife December 10, 2013

    我就不喜欢太复杂的语言,所有的语言设计者应该为减轻开发人员的工作负担来设计,让开发人员花更多的时间去理解业务,而不是一味地在语言的语法和工具的应用中浪费时间。

  5. niklaus
    niklaus November 11, 2013

    @momognu
    呵呵,满满的优越感么?

  6. cuit
    cuit August 25, 2013

    @momognu
    show your code

  7. momognu
    momognu August 15, 2013

    首先我所指的不是鸟哥,而是某些凑热闹回复的人;其次,你怎么就断定我不能和表哥比,我知道鸟哥在php核心里是大师级的,小女子虽不才,但是各种编程语言的原理、应用及实现扩展,操作系统原理,网络编程,通信协议,算法与数据结构,数据挖掘,机器学习,分布式等等都略有研究,不惧和任何人交流讨教,输又如何赢又如何呢?

  8. momognu
    momognu August 15, 2013

    @LS

  9. Puchi
    Puchi July 16, 2013

    LS的「momognu」真让人笑话,鸟哥会PHP,他是「web程序员」,但他不光是,人家是PHP核心开发组的程序员,用C的,LS的要达到人家的水平,这辈子估计没希望了

  10. momognu
    momognu April 7, 2013

    .net的clr也是c++写的,.你们居然都视而不见,语音的选择只是看你做的是什么,外加你自己的习惯,想做的领域c++帮不上忙的话,不学也无妨,如果你想进clr团队,kde团队,不还得学c++吗

  11. momognu
    momognu April 7, 2013

    真有意思,这年头web程序员都出来评论c++了。gcc已经开始转向c++了,其实也没什么,顺理成章的事情,还有F35战斗机jsf-av-C++标准。C++的运用场合不是我们讨论的事,好好做应用吧,不懂的别乱说,我只能算是c程序员而已,我是很务实,用不好的不会贸然用,但是++兄绝对有用。

  12. yaocoder
    yaocoder March 28, 2013

    我觉得你的出发点就不对,就是拿自己了解的东西和自己不了解的东西做对比,我只是觉得每种语言都有每种语言的适用场景,纵然有优劣也是相对的,你说的太绝对了。
    建议你看看《c++语言的设计与演化》,作为c++之父,他对语言之间的比较都诲莫忌深,我想我们是不是也该严肃点,不要误导别人?

  13. zhanyue24
    zhanyue24 March 18, 2013

    鸟哥,字体太小啦,看着累~

  14. Anonymous
    Anonymous March 15, 2013

    从文中你对于c++的评论可以看出,你对于c++的了解少得可怜,只是凭自己的臆想得出这么多的结论,这是不负责任和幼稚的

  15. 某瓜
    某瓜 March 15, 2013

    每逢看到语言之争,我只说两个字:呵呵

  16. h
    h March 15, 2013

    看到那些源码中用C语言实现OO到内容就头大……

  17. 冷锋
    冷锋 March 15, 2013

    我学PHP连书都没买 只是天天读代码 天天写代码 偶尔翻翻手册

  18. Irving
    Irving February 21, 2013

    c++学习成本对一个初学者来说太高了,一堆语法特性用不上,学了又忘,博主高明远见,选择一些学习成本比较低的语言,如php,python,静态语言java,再辅以一些系统编程,网络编程等的基础知识,这样学习效果会更好

  19. rst
    rst January 21, 2013

    其实前提是你不是小孩子了。高中的时候学 pascal 参加竞赛。现在是选择一门学了养家糊口

  20. Jason.Pan
    Jason.Pan September 24, 2012

    说的非常好!赞同!~

  21. Qiang
    Qiang September 19, 2012

    模板,OO,STL都被你华丽的无视了,他们都不能解决实际问题了?
    你C++都没学会,咋就下这么大的定论呢? 楼上有人说学C++的有
    莫名其妙的优越感,我觉得那是因为精通掌握了C++,java, php啥的
    都是手到擒来阿。你要是只会php,你转个其它语言试试?

  22. lingcarzy
    lingcarzy September 15, 2012

    工具就是要简单,能当即使用就是好工具

  23. 海纳百川
    海纳百川 August 30, 2012

    写的非常棒啊。边学的过程中要努力去实践。

  24. sandy
    sandy August 26, 2012

    说的有道理,永远支持php!

  25. yesin
    yesin August 24, 2012

    “你的成长应该是你在使用它们解决问题的过程中, 解决问题的经验的成长, 而不是语言的使用技艺的增长.”非常赞同这句,这也是我一直想说的话

  26. Yasin
    Yasin August 13, 2012

    “我觉得PHP和C很像”,只有这句,我深表同感。

  27. 熊猫
    熊猫 August 11, 2012

    确实 现在只有在实际项目中应用才能快速的掌握你欠缺的,如果你埋头把一门语言所有的东西都学会在去应用的话 你用的时候就会发现 其实用到的永远都是那些很基础的东西,更多的都是很多门技术的综合应用,对于PHP来说 他是一门入门很快,但是精通很难的语言,他的函数,自由行很大,想实现一个结果,PHP函数有多种方法能实现,但是哪个更高效,只能实际测试或者按需所用来搞定了。。至少我工作几年了 PHP的函数没用完。。。所以常备PHP手册才是王道,嘿嘿
    顶鸟爷、、、、、一直都在用你的yaf。。。开发了很多项目了、、呵呵

  28. ttes
    ttes August 8, 2012

    一个项目的语言选择第一条原则绝对不是易用,第一条原则是是否能满足需求(性能需求,可维护性需求,成本控制)

  29. MudRain
    MudRain August 7, 2012

    学习程序到今天,1年零1个月,在技术上我不敢做太多评价,我认为程序是为了满足生活或工作需求而存在的,不管用什么语言,满足需求,做到有效率,有质量就行。

  30. dvaknheo
    dvaknheo August 7, 2012

    当年那些苦背 Dos 中断的牛人们现在在干什么呢

  31. lizhichao
    lizhichao August 7, 2012

    我想招2-3个人,做件大事,期望大神加入

  32. wclssdn
    wclssdn August 7, 2012

    去年有门语言.. AAuto. 类似VB那种. 拖吧拖吧.拽吧拽吧就写完程序了. 当时, 我用了几天大概了解了下这个语言, 就写出来个当时需要的小工具.. 但是, 当我想深入学习的时候, 发现那语言连个规则都没有… 各种用法都有… 没个标准. 有的地方这样, 有的地方那样.. 学起来真心费劲.. 就放弃了.. 后来也不知道咋了.. 我那小工具竟然被杀软无情的杀掉了-_-!!!

  33. liqiang427
    liqiang427 August 7, 2012

    这话有失偏薄,没有哪个语言是全能的,选择那个语言要看具体的性能约束和开发成本。
    性能约束放在这里,你python,perl,php死都达不到,你咋办?
    开发简单的画面,网站,你非要用C++写,非要抗下这个开发成本,以其他语言几倍的开发成本,得到一个和其他开发语言一样的结果,这个也是你自己的问题。。。
    我认为是否学习C++主要还是看你是否用得到,看你希望将来从事的行业,不可一概而论。不过学习C++的人,的确会经常有些莫名其妙的优越感。。。

  34. moven
    moven August 7, 2012

    @左耳朵耗子 其实已经承认cpp难学的,只是认为学cpp可以收获很多。很显然学习其他的也同样收获很多,而且更加合理。楼主本文的观点很直接的挑明如何去做选择的。这下大家明白了吧

  35. 刘志强
    刘志强 August 6, 2012

    从解决问题的角度,C和C++可能确实区别不大,尽管C++提供了足够多的丰富的特性供我们使用,但C本身已经足够了。
    然后就具体问题来讲,不同的语言解决的是不同的问题,例如C和C++在效率上的优势就是PHP、Perl、Python等望尘莫及的。我曾经自以为是地用PHP实现一个当时项目中使用C++实现的算法,效率差了10倍以上。
    但同时我也用PHP实现了当时项目中用C++实现的一个cgi的web系统,效率几乎一样,而且PHP在这方面的快速开发和易于维护的优势是C++望尘莫及的。
    当然我也用Bash实现了快速排序或者更复杂的决策树分类算法。效率就差到要命。
    但是用Bash来做Linux下的一般性任务,那其他任何语言都没有其的开发效率或维护方面的优势。
    事情就是这样,用什么语言,取决与你要解决什么问题,仅此而已。

  36. 月小升
    月小升 August 6, 2012

    支持你的观点。为什么看到网上那么多吐苦水的程序员。就是因为过于在于程序。忘记了根本。程序是为其他事情服务的。比如商业,销售,宣传。等等。。

  37. 说的很对
    说的很对 August 6, 2012

    说的很对。苦读三年。。。没用上。。大悲剧。

  38. hsu
    hsu August 6, 2012

    人生苦短,python java

  39. wufaliang
    wufaliang August 6, 2012

    很赞同仁兄的观点,学就是为了用,不用学来做甚。。。

  40. root
    root August 6, 2012

    人生苦短,我用python

  41. Leo
    Leo August 6, 2012

    PHP初学是比较简单,但深入还是比较难的
    甚至还要学习其他语言来补充 如 C

  42. Greyson
    Greyson August 6, 2012

    c++ primer买了后,一直没看完的路过。。太讨厌了。

  43. bridge
    bridge August 6, 2012

    或许人性都是如此, 觉得掌握了复杂的东西会比较吊, 然而他们却忘记了, 还是我刚才的观点, 语言只是你学习来解决你实际问题, 把你的想法变为实际的工具, 你的成长应该是你在使用它们解决问题的过程中, 解决问题的经验的成长, 而不是语言的使用技艺的增长.

  44. higkoo
    higkoo August 6, 2012

    php确实简单易学,c++则太难了。

  45. walu
    walu August 6, 2012

    @Smile
    《Linux C编程一站式学习》
    我觉得不错
    没想到这次讨论能持续这么久。
    仅把知识吃进去没用,产出的东西才决定价值。

  46. donieli
    donieli August 6, 2012

    看到c++ primer那厚度我就头大 c++11又加了一堆新东西

  47. Smile
    Smile August 6, 2012

    对于用户来说简单是最好的。鸟哥,推荐一本关于C语言的书。

  48. Demon
    Demon August 6, 2012

    学习成本永远是衡量一门语言是否可以大范围被使用的最重要的一个标准。

Leave a Reply

Your email address will not be published. Required fields are marked *