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

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

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

最后以一句话与大家共勉,”路漫漫其修远兮,吾将上下而求索“。
目录
相关文章
|
8月前
|
算法 测试技术 开发工具
编写高效技术文档的艺术:C++项目实践指南
编写高效技术文档的艺术:C++项目实践指南
182 0
|
8月前
|
机器学习/深度学习 开发框架 人工智能
探索C++的深邃世界:编程语言的魅力与实践
探索C++的深邃世界:编程语言的魅力与实践
|
2月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
40 7
|
10天前
|
人工智能 Linux 程序员
从零开始_先跑起来_入门编程选什么系统
从零开始_先跑起来_入门编程选什么系统
|
3月前
|
设计模式 前端开发 数据库
探索安卓开发之旅——从初学者到专家
在数字时代的浪潮中,安卓应用开发成为了众多开发者的热门选择。本篇文章旨在为初入安卓开发的新手提供一个清晰的学习路径,从基础概念到高级技巧,逐步引导读者掌握安卓开发的核心知识。我们将通过实际代码示例,展示如何从零开始构建一个安卓应用,并介绍一些提升开发效率的工具和库。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往安卓开发世界的大门。
|
5月前
|
测试技术 Linux Android开发
探索安卓开发之旅:从初学者到专家
【8月更文挑战第29天】本文是一篇为初学者和有一定经验的开发者准备的安卓开发指南。我们将从基础概念开始,逐步深入到高级主题,如自定义视图、性能优化等。无论你是刚刚入门,还是希望提升自己的技能,这篇文章都将为你提供有价值的信息和建议。让我们一起踏上这段激动人心的旅程吧!
|
8月前
|
API 定位技术 开发工具
Mars3D小白专属:开发者快速上手实战指南
Mars3D小白专属:开发者快速上手实战指南
399 0
|
SQL 运维 Java
如何用ChatGPT提高程序员开发效率?
如何用ChatGPT提高程序员开发效率?
576 0
|
开发者 知识图谱
免费下载!《低代码开发师(初级)实战教程》让初学者快速掌握 0 代码搭建应用的技能
“低代码开发师(初级)”让初学者快速掌握0 代码搭建应用的技能,并且能够通过拖拉拽的方式或基于模版创建简单应用。
免费下载!《低代码开发师(初级)实战教程》让初学者快速掌握 0 代码搭建应用的技能
|
前端开发 小程序 程序员
人人自媒体的时代,程序员该如何利用好自己的优势?我记住了这些神器...
无可否认,随着互联网的不断发展完善,我们现在的生活无时无刻都在与网络打交道。伴随着流量这个名词的冲击,我们对自媒体这一行业也开始了不断的摸索,基本在我的圈子里,做自媒体的太多太多了,有图...
400 0