经验分享:学习新编程语言的意义以及如何迅速上手

  1. 云栖社区>
  2. 博客列表>
  3. 正文

经验分享:学习新编程语言的意义以及如何迅速上手

club111 2015-02-02 22:44:09 浏览201 评论0

摘要: 作者:gfree.wind@gmail.com 博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net    本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。

作者:gfree.wind@gmail.com
博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net
 
 
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
======================================================================================================

这段时间一直在想着,身为一名程序员究竟怎样去提高自己,其中的一条问题:身为程序员,究竟要学会多少种编程语言?我在以我自己为例吧,将将自己的思想变化。在刚刚学习编程的时候,觉得编程语言会得越多越牛B,于是自己也各种语言都想去学习,尝试一下。再往后,又觉得贪多嚼不烂,不如专精一门语言。尤其是C语言,身为底层语言,不仅应用广泛,而且由于与操作系统联系紧密,所以认为C才是王道。没有C语言做不到的事情。只要给我足够的时间和资料,任何的需求,都可以实现。慢慢的,随着时间的推移,经验的增加,我渐渐又回到了第一阶段的认识——也许,这就是所谓的螺旋式的上升吧。

我再次感觉,想要成为一名优秀的程序员,还是精通多种语言更牛B。重要的是精通二字,达到这一程度,相当有难度。那么天赋不高的我,就定为熟悉多种语言吧——目前,以我而言,只有C语言能达到熟悉二字。熟悉的境界,最好是达到信手拈来的地步。对于解决某一问题,可以自然的应用最适合的语言。这一方面提高了开发效率,另一方面,当熟悉多种语言以后,思考问题,解决问题,不是从某一种语言的角度去思考,而是直接面对问题本身。那时,语言,才真正的只是一种工具。这也是各高手经常挂在嘴边的一句话”语言只是工具,重要的是思想“。

举个简单的例子,对于C程序员来说,当解决问题时,更常见的思考方式是:完成这个问题,我要先怎样,然后怎样,一步步的流程想清楚后,这个问题解决了,代码的流程也清晰了。——所以C语言被称为面向过程的语言。而C++程序员呢,当解决问题时,会把问题涉及的东西尽量看作为对象,然后思考的是这些对象之间如何相互作用。当对象及其行为定义清楚后,再将这些对象组装起来,问题也就基本解决了。前段时间,我简单的学习了一下面向函数的语言Haskell。由于没有实际做过什么东西,只能简单的谈一下我的理解。对于Haskell来说,基本上它将所有的object,都看作函数。因此对于Haskell来说,没有真正的变量,有的只是函数。并且,绝大部分的函数都要满足这样一个规则,同样的输入,要保证输出也是一致的。这样做还是有不少好处的。在编写代码时,我们无需关系side effect即任何副作用,也方便测试代码。每个函数的功能或许很简单,但是各个函数可以很容易的组合在一起,就像unix下面的小工具,每个功能都很简单,但是组合起来就形成强大的功能。

那么如何迅速上手一门新的语言呢?就我看来,首先就要理解该语言的思想,像上面所举的三个例子,直白点说,就是如何从这门编程语言的角度,去看问题思考问题,去看世界。因为语言的一些基本元素还是比较相似的,无非是变量,循环,条件判读,函数等。但是如何应用这些基本元素,去编写正统的该语句,却需要好好的领会其本质思想。不然也是,用C++的语法写出来的C语言。而当学会了该编程语言的思想以后,这时在编写程序的时候,完全可以抛弃这门语言,用另外一种语言同样可以实现该思想。比如C语言同样可以按照面向对象的方式去编程。——只不过有时由于语义的局限性,不像C++那样的自然。这其实就是多学习编程语言的一种好处,学会一门新的语言,实际上可以领会另一种编程思想,可以换另外一个角度看问题。

当掌握了基本的语法元素,和领会该编程语言的思想以后,基本上已经可以写出像模像样的程序了。但是要想写好,仍然需要更多的努力,需要关注该语言的细节。这时的细节,倒不必非得去读该语言的标准。我认为重要的是去理解该语言的语法背后的细节,在写程序的时候,多问几个为什么,多想想该语言是如何实现的,为什么要这样做。比如C++中,为什么要有虚拟函数,为什么要有纯虚函数,为什么组合要好过继承,等等;以及其背后是如何实现的,像虚拟函数如何实现?构造函数和析构函数又是如何实现,为什么没有返回值等等。当追究这些问题的答案时,尽量不要仅仅去搜索资料,要知道事情的来龙去脉,要自己动手去做试验。对了,还有一个重要的事情,就是去想编译器和链接器是如何支持该语言特性的。当这些问题对你不算问题的时候,我相信你已经是一名该语言的合格的程序员了。

学会一门新的语言,一定要多看,多写,更重要的是多想!

最后以一句话与大家共勉,”路漫漫其修远兮,吾将上下而求索“。
【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧!  详情请点击

网友评论

club111
文章167篇 | 关注1
关注
阿里云机器学习是基于阿里云分布式计算引擎的一款机器学习算法平台。用户通过拖拉拽的方式可视化的... 查看详情
云数据库PPAS版,是阿里云与EnterpriseDB公司合作基于PostgreSQL高度兼... 查看详情
PostgreSQL被业界誉为“最先进的开源数据库”,面向企业复杂SQL处理的OLTP在线事... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航