扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
我发现初学者最喜欢问的一个问题就是“我应该学什么语言?”。想不浪费时间学好一门语言然后就用这个语言解决所有问题。在提出我的见解前我先引用一段Eric Raymond的话:
“如果你还不会任何计算机语言,我建议你从Python开始。它设计清晰,文档齐全,对初学者很合适。尽管是一门很好的初级语言,它不仅仅只是个玩具。它非常强大,灵活,也适合做大型项目。
但是记住,如果你只会一门语言,你将不会达到黑客所要求的技术水平,甚至也不能达到一个普通程序员的水平---你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。要做一名真正的黑客,你需要学会如何在几天内通过一些手册,结合你现在所知,迅速掌握一门新语言。这意味着你应该学会几种不同的语言。如果要做一些重要的编程,你将不得不学习C语言,Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。 Perl很实用,值得一学;它被广泛用于活动网页和系统管理,因此即便你从不用Perl写程序,至少也应该能读懂它。 LISP 值得学习是因为当你最终掌握了它你会得到丰富的经验;这些经验使你在以后的日子里成为一个更好的程序员,即使你实际上可能很少使用LISP本身。当然,实际上你最好四种都会。 (Python, C, Perl, and LISP). 除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。”
大家看了这段话是否立刻就想按Eric Raymond的话从Pyton开始学习?或者学习他提出的四种中的C语言?且慢,我们注意这样几句话:“你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。”“(Python, C, Perl, and LISP). 除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。” 可以看出Eric Raymond提出四种语言实际是提出四种不同的编程思想。他想告诉大家的就是:开放的思维,不要局限在一个语言当中,即“通用的方法思考编程问题”。
也许有人反对说精通一门比懂很多而不精要好。确实我们必须精通一门,这个是可以根据自己需要来选择的。但不代表我们只需要学习一门语言,因为只懂一门语言很容易被它的局限性限制。C语言很灵活但是对数据的抽象处理不够。C++够强大也灵活了吧?它学习了C的灵活和高效以及Simula的抽象数据能力。可是C++的面向对象机制比不上Java。而当你学了Lisp以后你会发现原来程序还可以这样编,虽然C++也号称可扩展性,但Lisp的扩展性是C++所不能及的。而且Lisp是一种函数型语言,与面向机器的语言有着不同的思维方式,Java也从这里借用了不少思想。我觉得每一个语言都有最擅长的领域和不够的地方。没有一种语言真正通用,即使是C++,有些问题用C++来做实在有点吃力。这里一定有人有对C++痛苦的回忆。Java确实很优秀,适合分布式计算,但Java太安全了,可能不少有黑客气质的不喜欢它,因为它为了安全牺牲了很多灵活性。
我们应该学会开放性思维,看问题要看到最核心的问题,最根本的根本,而不会被其他的枝叶或表象所迷惑,做到这一步后才算比较成功。这样就会有一种分析问题的方法,学会怎么样把问题的表象剖开,看到它的本质。这时你碰到任何具体的问题,只要给点时间,都能轻而易举地解决。选择程序设计语言在这里只是选择不同工具。
并不是说工具不重要,但是如果没有一个很好的思想,那么这个工具你能用的好吗?而且解决一个问题并不是只有一种可能,或者这个问题的解决可能分几个部分而不同部分要不同的方法。这个时候没有开放性的思维,能解决好这个问题吗?就以Emacs为例。Emacs的底层代码是C写的而上层代码却是Lisp。也因此Emacs足够强大快速而且又有很强的可扩展性。如果仅采用单一的C编写,那么就是vi了。它很快也很灵活,但它扩展性怎么样?
看到一些关于该选择什么语言的问题我觉得真可笑,不知道他们想的是学语言还是学着解决问题。我们学习编程只是为了学习写程序本身还是为了学会用编程解决问题呢?如果是前者,真好你是个历史学家,尤其是只用C和汇编的可以称为考古学家了。如果是后者,那么不必再问选择什么语言了,学会编程的思想最重要,选择一门语言然后学习它的思维方式。这时先选哪门就和应该上午吃苹果还是下午吃橘子一样了,你应该熟悉更多的工具。
补充一些就是独立于程序语言以外的编程思想,那就是算法,数据结构,和编码规范。不论你精通多少门语言,当遇到一个问题能否用最快最好的方法解决,那就是考验你的算法设计能力和数据结构的操作能力了。而用程序清晰的表述一个问题就是看你编码是否规范了。当你需要改进程序时你会发现一个编写清晰易读的程序维护起来要方便的多,这也有助于快速的解决问题
婵犵數濮烽。浠嬪焵椤掆偓閸熷潡鍩€椤掆偓缂嶅﹪骞冨Ο璇茬窞闁归偊鍓涢悾娲⒑闂堟单鍫ュ疾濠婂嫭鍙忔繝濠傜墛閸嬨劍銇勯弽銊с€掗柟钘夊暣閺岀喖鎮滈埡鍌涚彋閻庤娲樺畝绋跨暦閸洖鐓涢柛灞剧矋濞堟悂姊绘担绛嬪殐闁搞劋鍗冲畷銏ゅ冀椤愩儱小闂佹寧绋戠€氼參宕伴崱妯镐簻闁靛牆鎳庢慨顒€鈹戦埥鍡椾簼婵犮垺锚铻炴俊銈呮噺閸嬪倹绻涢崱妯诲碍閻庢艾顦甸弻宥堫檨闁告挾鍠庨锝夘敆娓氬﹦鐭楁繛鎾村焹閸嬫捇鏌e☉娆愬磳闁哄本绋戦埞鎴﹀川椤曞懏鈻婄紓鍌欑劍椤ㄥ懘鎯岄崒鐐靛祦閹兼番鍔岄悞鍨亜閹烘垵顏╅悗姘槹閵囧嫰寮介妸褎鍣ョ紓浣筋嚙濡繈寮婚悢纰辨晣鐟滃秹鎮橀懠顒傜<閺夊牄鍔庣粻鐐烘煛鐏炶姤鍠橀柡浣瑰姍瀹曠喖顢橀悩铏钒闂備浇宕垫慨鎶芥⒔瀹ュ鍨傞柦妯猴級閿濆绀嬫い鏍ㄧ☉濞堟粓姊虹涵鍛【妞ゎ偅娲熼崺鈧い鎺嗗亾闁挎洩濡囧Σ鎰板籍閸繄顓洪梺缁樺姇瀵剙螖閸涱喚鍘搁梺鍓插亽閸嬪嫰鎮橀敃鍌涚厱閻庯綆鍋嗘晶顒傜磼閸屾稑绗ч柟鐟板閹煎湱鎲撮崟闈涙櫏闂傚倷绀侀幖顐も偓姘卞厴瀹曞綊鏌嗗鍛紱閻庡箍鍎遍ˇ浼村磿瀹ュ鐓曢柡鍥ュ妼婢ь垰霉閻樿秮顏堟箒闂佹寧绻傚Λ妤呭煝閺囥垺鐓冪憸婊堝礈濮樿泛钃熼柕濞у嫷鍋ㄩ梺缁樺姇椤曨參鍩㈤弴銏″€甸柨婵嗗€瑰▍鍥ㄣ亜韫囨稐鎲鹃柡灞炬礋瀹曢亶顢橀悢濂変紦
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者