热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

作者:Laruence()本文地址:www.laruence.com201208062681.html转载请注明出处首先,这篇文章不是对@左耳朵耗子的C++的坑真的多吗?一文的反驳,我只是在我的理解角度说一下我对语言选择的一些感悟.关于C和C++的争论,由来已久,从当年Linus

作者: Laruence( ) 本文地址: http://www.laruence.com/2012/08/06/2681.html 转载请注明出处 首先, 这篇文章不是对@左耳朵耗子的C++的坑真的多吗?一文的反驳, 我只是在我的理解角度说一下我对语言选择的一些感悟. 关于C和C++的争论, 由来已久, 从当年Linus

  • 作者: Laruence( )
  • 本文地址: http://www.laruence.com/2012/08/06/2681.html
  • 转载请注明出处

首先, 这篇文章不是对@左耳朵耗子的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手册就够了….

有人会问, 一门很简单的语言, 学起来这么简单, 那后续怎么成长啊?

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

当你为了精通一门语言, 埋头闭关三年, 苦读各种书籍, 终于有一天学成出关的时候, 你却悲剧的发现, 这门语言已经不流行了… 不知道你作何感想? (写这段话的时候, 我脑袋里浮现出, 东成西就中的王重阳出关场景, 嘿嘿)

所以, 不要本末倒置, 选择你会用的(学一个易于学习的), 尽快开始解决实际问题吧!


Comments

  • 2012/08/06, Demon writes: 学习成本永远是衡量一门语言是否可以大范围被使用的最重要的一个标准。
  • 2012/08/06, Smile writes: 对于用户来说简单是最好的。鸟哥,推荐一本关于C语言的书。
  • 2012/08/06, donieli writes: 看到c++ primer那厚度我就头大 c++11又加了一堆新东西
  • 2012/08/06, walu writes: @Smile 《Linux C编程一站式学习》 我觉得不错 没想到这次讨论能持续这么久。 仅把知识吃进去没用,产出的东西才决定价值。
  • 2012/08/06, higkoo writes: php确实简单易学,c++则太难了。
  • 2012/08/06, bridge writes: 或许人性都是如此, 觉得掌握了复杂的东西会比较吊, 然而他们却忘记了, 还是我刚才的观点, 语言只是你学习来解决你实际问题, 把你的想法变为实际的工具, 你的成长应该是你在使用它们解决问题的过程中, 解决问题的经验的成长, 而不是语言的使用技艺的增长.
  • 2012/08/06, Greyson writes: c++ primer买了后,一直没看完的路过。。太讨厌了。
  • 2012/08/06, Leo writes: PHP初学是比较简单,但深入还是比较难的 甚至还要学习其他语言来补充 如 C
  • 2012/08/06, root writes: 人生苦短,我用python
  • 2012/08/06, wufaliang writes: 很赞同仁兄的观点,学就是为了用,不用学来做甚。。。
  • 2012/08/06, hsu writes: 人生苦短,python java
  • 2012/08/06, 说的很对 writes: 说的很对。苦读三年。。。没用上。。大悲剧。
  • 2012/08/06, 月小升 writes: 支持你的观点。为什么看到网上那么多吐苦水的程序员。就是因为过于在于程序。忘记了根本。程序是为其他事情服务的。比如商业,销售,宣传。等等。。
  • 2012/08/06, 刘志强 writes: 从解决问题的角度,C和C++可能确实区别不大,尽管C++提供了足够多的丰富的特性供我们使用,但C本身已经足够了。 然后就具体问题来讲,不同的语言解决的是不同的问题,例如C和C++在效率上的优势就是PHP、Perl、Python等望尘莫及的。我曾经自以为是地用PHP实现一个当时项目中使用C++实现的算法,效率差了10倍以上。 但同时我也用PHP实现了当时项目中用C++实现的一个cgi的web系统,效率几乎一样,而且PHP在这方面的快速开发和易于维护的优势是C++望尘莫及的。 当然我也用Bash实现了快速排序或者更复杂的决策树分类算法。效率就差到要命。 但是用Bash来做Linux下的一般性任务,那其他任何语言都没有其的开发效率或维护方面的优势。 事情就是这样,用什么语言,取决与你要解决什么问题,仅此而已。
  • 2012/08/07, moven writes: @左耳朵耗子 其实已经承认cpp难学的,只是认为学cpp可以收获很多。很显然学习其他的也同样收获很多,而且更加合理。楼主本文的观点很直接的挑明如何去做选择的。这下大家明白了吧
  • 2012/08/07, liqiang427 writes: 这话有失偏薄,没有哪个语言是全能的,选择那个语言要看具体的性能约束和开发成本。 性能约束放在这里,你python,perl,php死都达不到,你咋办? 开发简单的画面,网站,你非要用C++写,非要抗下这个开发成本,以其他语言几倍的开发成本,得到一个和其他开发语言一样的结果,这个也是你自己的问题。。。 我认为是否学习C++主要还是看你是否用得到,看你希望将来从事的行业,不可一概而论。不过学习C++的人,的确会经常有些莫名其妙的优越感。。。
  • 2012/08/07, wclssdn writes: 去年有门语言.. AAuto. 类似VB那种. 拖吧拖吧.拽吧拽吧就写完程序了. 当时, 我用了几天大概了解了下这个语言, 就写出来个当时需要的小工具.. 但是, 当我想深入学习的时候, 发现那语言连个规则都没有... 各种用法都有... 没个标准. 有的地方这样, 有的地方那样.. 学起来真心费劲.. 就放弃了.. 后来也不知道咋了.. 我那小工具竟然被杀软无情的杀掉了-_-!!!
  • 2012/08/07, lizhichao writes: 我想招2-3个人,做件大事,期望大神加入
  • 2012/08/07, dvaknheo writes: 当年那些苦背 Dos 中断的牛人们现在在干什么呢
  • 2012/08/07, MudRain writes: 学习程序到今天,1年零1个月,在技术上我不敢做太多评价,我认为程序是为了满足生活或工作需求而存在的,不管用什么语言,满足需求,做到有效率,有质量就行。
  • 2012/08/08, ttes writes: 一个项目的语言选择第一条原则绝对不是易用,第一条原则是是否能满足需求(性能需求,可维护性需求,成本控制)
  • 2012/08/09, 奇言妙事-文学奇谈小小说阅读xlinblog.sinaapp.com » Blog Archive » 关于语言的选择-选易用的 writes: [...] 本文地址: http://www.laruence.com/2012/08/06/2681.html [...]
  • 2012/08/11, 熊猫 writes: 确实 现在只有在实际项目中应用才能快速的掌握你欠缺的,如果你埋头把一门语言所有的东西都学会在去应用的话 你用的时候就会发现 其实用到的永远都是那些很基础的东西,更多的都是很多门技术的综合应用,对于PHP来说 他是一门入门很快,但是精通很难的语言,他的函数,自由行很大,想实现一个结果,PHP函数有多种方法能实现,但是哪个更高效,只能实际测试或者按需所用来搞定了。。至少我工作几年了 PHP的函数没用完。。。所以常备PHP手册才是王道,嘿嘿 顶鸟爷、、、、、一直都在用你的yaf。。。开发了很多项目了、、呵呵
  • 2012/08/13, Yasin writes: "我觉得PHP和C很像",只有这句,我深表同感。
  • 2012/08/14, yhg7752 writes: 说的有道理!!!
  • 2012/08/24, yesin writes: "你的成长应该是你在使用它们解决问题的过程中, 解决问题的经验的成长, 而不是语言的使用技艺的增长."非常赞同这句,这也是我一直想说的话
  • 2012/08/25, 关于PHP的编译和执行分离 | 奇言妙事-文学奇谈小小说阅读xlinblog.sinaapp.com writes: [...] 关于语言的选择-选易用的 [...]
  • 2012/08/26, sandy writes: 说的有道理,永远支持php!
  • 2012/08/30, 海纳百川 writes: 写的非常棒啊。边学的过程中要努力去实践。
  • 2012/09/15, lingcarzy writes: 工具就是要简单,能当即使用就是好工具
  • 2012/09/16, 奇言妙事-文学奇谈小小说阅读xlinblog.sinaapp.com » Yar – 并行的RPC框架(Concurrent RPC framework) writes: [...] 关于语言的选择-选易用的 [...]
  • 2012/09/19, Qiang writes: 模板,OO,STL都被你华丽的无视了,他们都不能解决实际问题了? 你C++都没学会,咋就下这么大的定论呢? 楼上有人说学C++的有 莫名其妙的优越感,我觉得那是因为精通掌握了C++,java, php啥的 都是手到擒来阿。你要是只会php,你转个其它语言试试?
  • 2012/09/24, Jason.Pan writes: 说的非常好!赞同!~
  • 2013/01/21, rst writes: 其实前提是你不是小孩子了。高中的时候学 pascal 参加竞赛。现在是选择一门学了养家糊口
  • 2013/02/21, Irving writes: c++学习成本对一个初学者来说太高了,一堆语法特性用不上,学了又忘,博主高明远见,选择一些学习成本比较低的语言,如php,python,静态语言java,再辅以一些系统编程,网络编程等的基础知识,这样学习效果会更好
  • 2013/03/15, 冷锋 writes: 我学PHP连书都没买 只是天天读代码 天天写代码 偶尔翻翻手册
  • 2013/03/15, h writes: 看到那些源码中用C语言实现OO到内容就头大……
  • 2013/03/15, 某瓜 writes: 每逢看到语言之争,我只说两个字:呵呵
  • 2013/03/15, Anonymous writes: 从文中你对于c++的评论可以看出,你对于c++的了解少得可怜,只是凭自己的臆想得出这么多的结论,这是不负责任和幼稚的
  • 2013/03/18, zhanyue24 writes: 鸟哥,字体太小啦,看着累~
  • 2013/03/28, yaocoder writes: 我觉得你的出发点就不对,就是拿自己了解的东西和自己不了解的东西做对比,我只是觉得每种语言都有每种语言的适用场景,纵然有优劣也是相对的,你说的太绝对了。 建议你看看《c++语言的设计与演化》,作为c++之父,他对语言之间的比较都诲莫忌深,我想我们是不是也该严肃点,不要误导别人?
  • 2013/04/07, momognu writes: 真有意思,这年头web程序员都出来评论c++了。gcc已经开始转向c++了,其实也没什么,顺理成章的事情,还有F35战斗机jsf-av-C++标准。C++的运用场合不是我们讨论的事,好好做应用吧,不懂的别乱说,我只能算是c程序员而已,我是很务实,用不好的不会贸然用,但是++兄绝对有用。
  • 2013/04/07, momognu writes: .net的clr也是c++写的,.你们居然都视而不见,语音的选择只是看你做的是什么,外加你自己的习惯,想做的领域c++帮不上忙的话,不学也无妨,如果你想进clr团队,kde团队,不还得学c++吗
  • 2013/05/01, 关于语言的选择-选易用的 | 午后小憩 writes: [...] 本文地址: http://www.laruence.com/2012/08/06/2681.html [...]
  • 2013/05/01, 请手动释放你的资源(Please release resources manually) | 午后小憩 writes: [...] 关于语言的选择-选易用的 [...]
  • 2013/05/02, PHP的Calling Scope | 午后小憩 writes: [...] 关于语言的选择-选易用的 [...]
  • 2013/07/16, Puchi writes: LS的「momognu」真让人笑话,鸟哥会PHP,他是「web程序员」,但他不光是,人家是PHP核心开发组的程序员,用C的,LS的要达到人家的水平,这辈子估计没希望了
  • 2013/08/15, momognu writes: @LS
  • 2013/08/15, momognu writes: 首先我所指的不是鸟哥,而是某些凑热闹回复的人;其次,你怎么就断定我不能和表哥比,我知道鸟哥在php核心里是大师级的,小女子虽不才,但是各种编程语言的原理、应用及实现扩展,操作系统原理,网络编程,通信协议,算法与数据结构,数据挖掘,机器学习,分布式等等都略有研究,不惧和任何人交流讨教,输又如何赢又如何呢?
  • 2013/08/25, cuit writes: @momognu show your code
  • 2013/11/11, niklaus writes: @momognu 呵呵,满满的优越感么?
  • 2013/12/10, javalife writes: 我就不喜欢太复杂的语言,所有的语言设计者应该为减轻开发人员的工作负担来设计,让开发人员花更多的时间去理解业务,而不是一味地在语言的语法和工具的应用中浪费时间。
  • 2014/09/18, little joe writes: 如果某些人觉得学了c++再学习java或python php等很容易学,就认为c++好,那我推荐他们去用scheme,从造车轮干起,或者直接用汇编,岂不是更牛逼

Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)
推荐阅读
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文整理了Java中org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc.getTypeInfo()方法的一些代码示例,展 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文讨论了读书的目的以及学习算法的重要性,并介绍了两个算法:除法速算和约瑟夫环的数学算法。同时,通过具体的例子和推理,解释了为什么x=x+k序列中的第一个人的位置为k,以及序列2和序列3的关系。通过学习算法,可以提高思维能力和解决问题的能力。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
author-avatar
ChiuChiuLIN
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有