美文网首页pythonPython训练营关于梦想,关于现实,关于TA
【知乎整理】优秀的程序员应该掌握多少门编程语言?

【知乎整理】优秀的程序员应该掌握多少门编程语言?

作者: 喵喵喵naoko | 来源:发表于2016-02-20 12:17 被阅读5311次

    一个程序员是否优秀跟他掌握语言的数量没有任何关系。而是跟他的接受能力、思维能力学习能力有关。优秀的程序猿,应该掌握需要时可极快掌握一门编程语言的能力。@川杏之

    从人角度来讲,优秀跟语言无关,优秀是一种能力,有的人只用一种语言,但是钻的很深,有的会很多种语言,涉猎面广。

    钻的深的要成为某领域专家,涉猎广的要成为一个方便好使的多面手。前者在大公司更多,后者创业型更多。大公司分工细,容易出专家,长期深耕在一两个领域,小公司快速灵活,偏向多面手,需要的时候你能快速搞出来。

    从语言角度来讲,每种语言都有自己更专长的范畴。导致语言有分工的原因既和语言本身有关,不过更多的还是语言背后的生态圈有关。C/C++偏向性能苛刻的场景,Java目前BAT三家web开发的主流语言,有很多开源框架和中间件来支撑高并发大流量的web架构搭建,PHP小网站快速开发,只要你没太多代码洁癖只求快速上线有流量再说,PHP非常适合这种起步场景,Python灵活快速的各种工具开发,python后面的开源包足够多,语言本身也不重,依赖这些包和库能快速产出工具或者web网站,obj-c/swift做苹果app专用,JSCSS做web前端。@楚中天

    至少学6种程序语言。

    其中包括一种支持类抽象的(Java和C++),一种支持函数抽象的(如Lisp或ML),一种支持语义抽象的(Lisp),一种支援声明规范的(如Prolog或C++模板),还有一种支援协程的(Icon或Scheme),另外一种支持并发的(Sisal)。@ Google 研究总监 Peter Norvig。

    2015年2月编程语言排行榜,JS排名创历史纪录

    JavaScript不断走强。本月它超过了php,现在的位置排名第六。另外,Objective-C的日子似乎已经结束。一年时间,Objective-C份额下降超过5%。现在排到第四的位置,在C++之后。Objective-C之前排在第三位的位置长达超过2.5年。

    首先是C语言:这门语言应该不用多少了,很多程序员的入门语言都是这门,但是很少有人能学的精通的,C语言更偏向于底层,是面向过程的语言,我目前正在研究操作系统的内核结构,很多情况下是要有C语言的汇编的功底的。所以C语言强烈建议掌握。

    其次是Java:Java应该算是比较优秀的面向对象的开发语言了,所以,如果要想掌握面向对象的思想的话,学习Java是一个非常不错的选择,并且Java的资料也是非常之多。而且针对于Java的开源项目也是很多的。

    接着是C++:这门就不用了,是C语言的扩展版本,属于面向对象的范畴,很多操作提供的内核也使用了C++进行开发,有必要掌握一下。

    接着是Objective-C:如果要进行IOS的开发的话,这门要掌握了,但这们也是以C语言为基础的,所以题主可以看到C语言的强大了吧。

    接着是几个脚本语言:PHP、Python、JavaScript、Perl、Ruby等,我认为脚本语言还是要掌握一门的,比如Python、Perl还有Shell Code都是不错的选择,毕竟有时候脚本还是非常方便的。@杜一

    越多越好

    语言其实是件非常重要的事情,它很大程度上决定了个体的思考方式和群体的文化特征,首先,你是用语言在思考问题,它的表达能力和逻辑结构,直接影响了对问题如何进行抽象,其次,你还需要用语言和他人进行交流,拥有共同的文化背景和审美趣味的人,会用更少的词汇,更短的时间,进行更有效的沟通,这直接带来了效率的提高,以及更优雅合理的产出物。

    我想简短地描述我所用过的一些值得学习的语言,并给出对学习这门语言的推荐程度,1-3星,篇幅有限,会非常简短,更多的介绍请自行查找。

    以下按各语言诞生的时间排序:

    -----  2014.5.12 更新 PHP,Perl,AWK ------

    ----- 2014.5.30 更新 Unix Shell ------

    Lisp 1958,3星

    Lisp是我最喜欢的语言,尽管它的诞生年代已经相当久远,但它的特性远远超越了时代,动态类型,垃圾回收等等当今已经司空见惯的特性略去不谈,最重要的是,它是第一门homoiconicity language,简单说就是代码的结构和数据结构保持一致,这意味着,它拥有所有抽象可能性中最强大的一种抽象,即用代码来生成和表现代码,比如宏,了解这件事情,对学习编程,其实也就是学习如何抽象事物,非常,非常地有帮助,其次,Lisp的列表结构和完全函数式编程,让理解和学习递归这种基本而重要的思考逻辑,变成了非常自然的事情,这是程序员必须要学习,并且要花相当多时间学习的语言。

    Smalltalk 1972,3星

    第一门真正的面向对象语言,而且在今天,它对面向对象思路的描述,即消息传递机制,几乎已经得到了广泛的认可,所有后续的面向对象语言,如Java,Ruby,Python,都受到了直接的影响,还有大量的设计模式,比如众所周知的,用于设计用户界面的MVC模式,都是从Smalltalk中诞生的。而后面这些面向对象语言,都或多或少地对Smalltalk的设计进行了一定的改动,想要真正理解面向对象,需要认真学习一下Smalltalk。

    C 1972,3星

    C语言不用多说了,因为它和Unix的绑定关系,使他成为了必须学习的语言,关于语言本身,指针的概念和操作也对于了解计算机系统的实现相当有帮助,而函数指针和宏,也赋予了C一定的抽象能力,尽管大部分情况下,是对智力很严峻的考验。

    Scheme  1975,  3星

    Lisp的一种最简化的方言,它是最适合入门Lisp,尤其相较繁杂的Common Lisp来说。

    AWK 1977,1星

    和C一样,它也来自于Unix(AWK中的K就是 Unix创造者之一的Brian Kernighan),而且本身就是个很强大的文本处理工具。不过,语言自身相对简单,构筑复杂程序时比较力不从心。它非常适合于和Sed一起,进行各式各样快捷而强大的文本处理,直到有了Perl。

    Unix shell (Bourne shell/C shell)  1977,  3星

    Shell一直是跟随着操作系统诞生而成长的,但直到第七版Unix,Stephen Bourne编写的Bourne shell(也许你更熟悉sh这个命令名),它才真正成为了完善的脚本编程语言,而之后编程奇才 Bill Joy(嗯,他写了那个我不喜欢的vi)开发的C shell(csh)则更勇于向前迈进。时至今日,Shell的一些语法特征从编程上来说,稍显老旧,但是,它依然是最值得学习的语言之一。原因有二,首先,Shell语言是非常好的粘合剂 ,它有很多种方式,让不同的程序之间,不同的进程之间协同工作,这种从进程角度组织复杂程序的思想(也是Unix哲学的核心,简洁而单纯地将一件事做好)是非常有意义的,其次,出于命令行(CLI)的要求,Shell程序天生就追求更短更简化的写法(有时不免有些晦涩),这让Hacker们感觉非常爽,直接启发了日后Perl等Hacker专属语言的诞生。所以,我认为Shell是程序员必须熟识的语言之一。

    C++ 1983,2星

    C++也是用途非常广泛,不用再多说的语言,它的泛型是一种相对独特的抽象,值得学习,而其他方面,如果你熟悉了C,Lisp和Smalltalk,那么C++对你来说不会有太多需要花大力气研究的东西。

    Common Lisp 1984,2星

    Lisp当前最流行的实现,非常庞大而复杂,除了Lisp本身的特性之外,还有面向对象等等在其他语言中引入的特性,但Common Lisp对这些特性的实现,有赖于Lisp本身的强大,而变得非常精巧和简洁,比如多重继承。

    Emacs Lisp  1985,  2星

    Emacs中的Lisp方言,相较Common Lisp,功能和特性省略了太多,在编写复杂程序时,会相当捉襟见肘,但是,它依然是Lisp,而且可能是我们工作中最常用到的Lisp方言。

    Perl 1987,2星

    Perl也是我非常喜欢的语言,它诞生于Unix文化,受Shell,Awk等语言影响极深,深深执着于以行为单位对文本的操纵,它的哲学实际上是非常受Hacker文化的影响,强调用让人惊讶的方式完成代码。这在高手眼中酷的一塌糊涂,但在新手眼中则犹如天书。随着无数高手加入社区,Perl也逐渐发展壮大成了能够独挡一面的泛用编程语言,但尽管如此,即使到了Perl 6,它也没有丢掉骨子里那种崇尚酷炫,欣赏创造力的精神,这也是我喜欢它的原因。时至今日,Perl的Hacker精神和创造力逐渐被Ruby所继承,而用它写实用性Unix脚本的人也转向了Python。但无论如何,如果想知道Hacker是怎样思考,怎么做事情的,那么Perl和Perl社区,实在可以说是非常好的选择。

    Python 1991,2星

    非常流行的Python,可能最主要的意义就是Python之道,即无比强调代码的可读性,以至于强制随进来控制代码块,“做一件事情只有一种显而易见方法”的哲学,我觉得Python是非常适合工程学的语言,比Java更好,更规整而又相对来说灵活,同时Python又足够简单,因此,可以认为Python是所有语言中最适合首先入门来接触计算机科学的语言,很多大学也都是这么做的。

    Ruby 1995,3星

    Ruby是除了Lisp之外我最喜欢的语言,也是我现在做KnewOne最主要用到的工作语言,它的主要设计哲学是“一切为了让编程更快乐”,因此,Ruby继承了Perl的Hacker精神,同时又相当统一和优雅,它强调发挥程序员的创造力,语义模糊而多样,对同一个任务,有多种不同的解决之道,这和上面Python的哲学背道而驰,也是我喜欢Ruby的原因。函数式编程,面向对象,混入(Mixin),元编程(用代码来生成代码),种种不同的设计思维,在Ruby中得到了很好的融合贯通。不过,正因如此,在Ruby社区中,人们想要互相理解对方的设计思考过程,相比Python来说是要更费力,对程序员要求更高的,所以,Ruby并不适合做为学习编程的入门语言,而更适合在你学习了很多编程语言,熟悉了编程之后,成为最长久(目前来看)的陪着你一起完成日常工作的伴侣,因为每时每刻,Ruby都让编程充满愉悦,Code Ruby,Be Happy。

    Java 1995,1星

    Java可能是世界上最流行的语言,不过我对它持有非常强烈的偏见,我一直认为这是一门由聪明的人设计,用来控制一帮智力平庸的码农,让他们不至于捅出什么篓子的语言,基本上所有的设计特性,都是为了压抑创造力,让程序员变成按部就班拧螺丝钉的机器来考虑的。不过,Java拥有可能是所有语言中最强大的虚拟机平台JVM,在其上诞生了无数优秀的软件,为了JVM,Java还是值得学习一下的,不过这门语言也是实在太简单了,假设一个人学习Lisp或C需要一个月,学习Python或Ruby或Perl需要一周,那么学习Java,也许只需要一天就可以,因为就语言本身来说实在没那么多可学的。

    PHP 1995,0星

    六七年前,在还不能自主选择公司的技术框架的时候,我被迫用过两三年的PHP做为主要的工作语言。现在,在接触很多语言之后,想起PHP,最主要的感觉就是拼凑,一种无原则的实用主义,它在九十年代末期为web开发诞生,并非一开始就以泛用型编程语言为目标,在整个发展过程中语言的进化相当混乱,不断从各种其他语言中拼贴特性。其实,PHP在web开发领域相当强大,有很多不错的web框架及函数库,语言自己也内置了不少很好的支持。但做为学习编程用的语言,它会非常,非常有害,我几乎没有见过一个PHP程序员有代码洁癖的,语言自身的混乱,造成了程序员表达上的混乱,久而久之,就形成了“能用就好,实现功能就行”的习惯。这门语言做为糊口的工具还是可以的,但远远谈不上编程的美,完全不推荐学习。@李路


    编程语言语言的确就是工具

    所谓掌握,你说了解语法算掌握?语言之后的思想和设计思路?还有相关的各种工具?你说你会Java,是不是jvm,多线程,spring,hadoop相关的工具都熟悉了?而且不同语言的design pattern还有区别,博学多门不如专精一门。此外,解决问题的能力,对系统的了解才是更重要的东西。

    别忘了,除非竞赛,程序员的价值还是体现在产品上。我不清楚SmallTalk具体是如何实现MVC的,但不妨碍我拿Java做一个完整的后台。与其花太多时间在学习那么多语言上,不如做一个精通一套完整前后台开发工具的全栈工程师。碰到设计问题能够用最顺手和方便的工具去解决,当一个攻城狮而不是程序猿,才是程序员的努力方向。

    一句话总结,从做好产品出发,而不要纠结于语言。

    相关文章

      网友评论

      本文标题:【知乎整理】优秀的程序员应该掌握多少门编程语言?

      本文链接:https://www.haomeiwen.com/subject/oievkttx.html