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

简介: 作者: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++中,为什么要有虚拟函数,为什么要有纯虚函数,为什么组合要好过继承,等等;以及其背后是如何实现的,像虚拟函数如何实现?构造函数和析构函数又是如何实现,为什么没有返回值等等。当追究这些问题的答案时,尽量不要仅仅去搜索资料,要知道事情的来龙去脉,要自己动手去做试验。对了,还有一个重要的事情,就是去想编译器和链接器是如何支持该语言特性的。当这些问题对你不算问题的时候,我相信你已经是一名该语言的合格的程序员了。

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

最后以一句话与大家共勉,”路漫漫其修远兮,吾将上下而求索“。
目录
相关文章
|
1月前
|
小程序 前端开发 测试技术
小程序开发心得体会
小程序开发心得体会
|
1天前
|
机器学习/深度学习 开发框架 人工智能
探索C++的深邃世界:编程语言的魅力与实践
探索C++的深邃世界:编程语言的魅力与实践
|
1月前
|
存储 数据采集 人工智能
Python编程入门到实践,你的编程之旅从这里开始
Python编程入门到实践,你的编程之旅从这里开始
22 0
|
2月前
|
API 定位技术 开发工具
Mars3D小白专属:开发者快速上手实战指南
Mars3D小白专属:开发者快速上手实战指南
97 0
|
9月前
|
存储 开发框架 小程序
【全栈小程序开发路线】手把手教你入门小程序开发,小白必看!
以下内容是结合我项目中实战经验,踩坑记录,大量时间学习小程序的积累,总结分享给大家。 学习路线包括前端基础、小程序开发框架、UI组件库、云开发、周边生态以及插件这几个纬度,学完这些,你也能全栈开发一个属于自己的产品。
337 0
|
6月前
ChatGPT上手实践完全教程
ChatGPT上手实践完全教程
67 0
|
开发者 知识图谱
免费下载!《低代码开发师(初级)实战教程》让初学者快速掌握 0 代码搭建应用的技能
“低代码开发师(初级)”让初学者快速掌握0 代码搭建应用的技能,并且能够通过拖拉拽的方式或基于模版创建简单应用。
免费下载!《低代码开发师(初级)实战教程》让初学者快速掌握 0 代码搭建应用的技能
|
移动开发 JSON 小程序
小程序进阶之路:跨平台开发避坑指南
小程序的开发不可避免的会面临跨平台开发的问题。各小程序平台有哪些特点?如何处理各平台的差异?本文分享淘票票在跨平台开发上的经验总结,包含了技术演进及差异控制策略,希望能帮助同学们提前避坑。
1195 0
小程序进阶之路:跨平台开发避坑指南
|
人工智能 JavaScript Java