如何成为一个通晓多种编程语言的程序员

学习一门新的语言是一种冒险。我总是热衷于尝试新的东西——学习新的语法,了解不同的模式,乃至彻底改变思维方式。不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的——学习新语言,就得走出舒适区,花时间花精力来学习新的理念和方法。

这段日子,我每天都要用大约5种不同的语言来写不同的项目!

我应该先学哪种语言?

有关这方面的讨论真可谓数不胜数。很多刚进入编程社区的初学者,都会问这个问题,简直就是前赴后继。有些人建议先学不费力的,如Python和Ruby,也有的人认为应该先学例如C、C++和GO这类难一些的低层次的内容。我要说的是我们在选择新的语言之前,应该注意以下几个要点。

类型系统

从我的经验和先前的学习路径看,这是最重要的概念之一。我很庆幸我一开始学的是C,接着尝试了C ++,一段时间之后,我又投入了Java的怀抱。然后是Scala,以及现在我开始玩Ruby。同时,我对Objective-C、Python、甚至是OCaml也有所涉及。哦,对了,最近我正在捣鼓Swift和CoffeeScript。

如果我一开始学的是JavaScript、Python或Ruby,那么后面去理解什么是类型和变量就会非常困难。理解静态和动态以及弱类型和强类型系统之间的区别,对于领悟语言的工作原理是至关重要的。我无法想象,如果我一开始不能掌控类型,那么后面涉及到的声明与定义,以及汇编与解释之间的差异,会是让人多么头大的一件事。

不过,也有很多开发人员希望能有立竿见影的效果:既想快速看到结果,又不愿意过多地了解细节。他们喜欢接轨新的应用程序。最好是不用动脑子的语言,碰到这样的他们最开心了。因为在他们眼中,掌握 integer、string和boolean是学习编程的超级大障碍。最好能够毋须分辨类、对象和方法,直接写代码:

scala> println(“Hello World!”)
Hello World!
>>> print "Hello World!"
Hello World!
2.2.1 :001 > puts "Hello World!"
Hello World!

不可否认这种途径能够给人信心,让人觉得自己学到了新的东西。

首先,请明确你属于哪种类型,摆正自己的位置。你想要探究隐藏起来的工作原理吗,喜欢深入研究本地执行吗?愿意去理解语言结构吗?又或者你只在乎能有快速的结果,不想了解虚拟机和编译工作,并且语言内部机制对你而言也一点都不重要?

从自己的利益角度考虑

你可能需要处理哪些数据?你打算写复杂的业务系统还是相对简单的CRUD创业公司?请基于可能会让自己感兴趣的内容来确定工作领域。

所以,如果你确定你想要去企业工作,那么你可以试试Java或者.NET。如果你倾向于黑客并高度注重安全问题,那么不妨学习C/C ++或Bash。如果你梦想成为一名Web开发人员,那么先掌握PHP、JavaScript或Ruby吧。如果你想要编写一些机器、机器人、汽车或其他电子方面的程序——也行,先学C ++或Python吧。你喜欢捣鼓移动设备?那么Java、Swift或C#就应该是你的首选。如果你喜欢数学和算法,那么Lua、Erlang或R就很适合你。等等等等,不胜枚举。总之——一切取决于你的目的和爱好。

查看大图

语言内部机制

你有组织化的堆栈内存吗?你在程序中传递变量时使用引用类型还是只使用值类型?你是否利用指针和析构函数来控制对象的生命周期?你是自行清理存储器还是使用相关的垃圾收集器?你是否计算和跟踪引用类型和子类?

这些都是我们平时不会关心的问题。但是有时候,它们却是一些你不得不处理的概念,所以理解内部机制很重要。虽然现在你会觉得这些概念很复杂,理解起来很难,因为终有一天,你会庆幸自己现在的选择,有道是,书到用时方恨少,不要到用的时候追悔莫及。

我应该学习哪些语言?

查看大图

社区——StackOverflow、Reddit

下面是一些Reddit上面有关于通用编程的内容:

你也点击http://stackoverflow.com/tags 或http://t.cn/zQ6JvmN在特定的语言社区中寻求帮助。许多乐于助人的高手就在那里等你。

函数库

函数库之所以重要是因为它能让你有效利用现有资源,而不必再“重新发明轮子”。我们通常需要解决特定问题,实现业务规则,处理重要进程,从数组中找出所需元素,利用给定字符串,过滤特定集合等等。最好语言本身或者第三方函数库能够提供一些可以加快开发进程的实用程序、辅助工具和数据结构。

下面是一些不同语言的社区函数库代码仓库:

保持对第三方支持可扩展性、开放性和易于集成等方面的审查。

从创造者/维护人员那儿获得文档和支持

你阅读文档吗?文档是不是易于理解的,全面的,最新的?更新频率如何?有多少维护人员,是否也在社区中?从文档中你能提取多少信息?你能否轻松驾驭不同的部分?

这是一个非常有效的观察报告。只要有创造者提供有助于学习和理解语言的文档,其他的其实无所谓。例如,Ruby就有不少提供文档的网站,如:https://www.omniref.com/http://ruby-doc.org/
Scala也有相当不错的API说明书http://www.scala-lang.org/api/current/

语言的创造者对待社区的态度也很重要。他能否像Ruby创始人Matz一样愿意接受和倾听反馈?他是否像Scala之父Martin Odersky一样有着纯粹的经营方针?又或者他是否会像Clojure的发明者一样鼓励社区发展?

资源和实例——博客、GitHub代码仓库

下面是一些可作为起步指导的好例子:

至于网上教程,下面这些是很不错的门户网站,如:

不妨去看一看。

资金

没错,前面我们谈论了思想、激情,以及一些抽象的概念,但是最后所有这一切都归结到资金,也就是金钱。在选择语言之前最好先搞清楚哪种薪酬/需求相对比较高。当然,你也可以纯粹是因为好玩而选择它。新事物总在不断地出现和发展,虽然这可以拓宽我们的视野,但学一些有用的东西还是非常重要的。在这种情况下你有以下两种解决方案:

  • 学习当前市场上最流行/需求量最大的语言/技术/框架。这能确保你不但能找到工作,还能获得优渥的报酬。
  • 按照自己的观点学习。这可能有点难以想象。因为谁也不能打包票说下一个流行的就一定是这种编程语言。试想一下,10年前你要是说Ruby会成为当前社会的宠儿,谁会相信。还有Scala和GO,没人知道之后,比如说,5年以后它们会发生什么变化。如果你现在选择了它们——那么,要么你将成为高薪专家,因为以后会变得非常普及;要么你只是掌握了一种没用的,被淘汰的语言。

查看大图

查看大图

点击这里查看市场分析:https://gooroo.io/analytics

我要不要一次学习多种编程语言?

刚开始——不要这么做。从长远来看——是的,你应该学习多种编程语言。

当你刚踏上编程之旅时,你应该只专注于一种语言。你需要掌握所有的概念,全神贯注于学习某个特定区域。

当你已经是一个有一定经验的程序员,那情况就有所不同了。由于你已经知道内部机制和程序的工作原理,这时你需要做的就是学习新的语法和新的范式,因为很多概念在不同语言里面都是相通的。

万事开头难,一旦正确起步之后,就会像滚雪球一样越滚越顺。

总结

那么归根究底我们为什么要学习新的语言呢?因为没有哪种工具是适用于所有目标的。而我们有着不同的项目,不同的问题,不同的体系结构。也许在启用新的应用程序和选择技术堆栈之前,我们首先应该考虑的是解决实际的业务问题,然后才能选择出最切合实际的最佳工具。

不要从工具和兴趣爱好入手。要从问题着手,然后找出解决方案。只有在了解这些的基础上,你才能选出合适的语言,帮助你用最有效的方式实现业务规则。

当然,如果你通晓多种编程语言,那你肯定能更快,更高效。因为你总是可以挑选出完美的工具,用最经济的方式解决问题,并提供最有力的实现。

书籍

下面这些是我认为对大家学习初级概念很有帮助的书。

工具

下面这些工具可以用于比较编程语言——不但包含语法,还包括社会普及程度和社会支持程度。

时间: 2024-10-12 11:56:59

如何成为一个通晓多种编程语言的程序员的相关文章

转: 如何成为一个通晓多种编程语言的程序员

如何成为一个通晓多种编程语言的程序员 2015-07-16 程序猿 学习一门新的语言是一种冒险.我总是热衷于尝试新的东西——学习新的语法,了解不同的模式,乃至彻底改变思维方式.不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的——学习新语言,就得走出舒适区,花时间花精力来学习新的理念和方法. 这段日子,我每天都要用大约5种不同的语言来写不同的项目! 我应该先学哪种语言? 有关这方面的讨论真可谓数不胜数.很多刚进入编程社区的初学者,都会问这个问题,简直就是前赴后继.有些人建议先学不费力的,如

译:如何成为一个通晓多种编程语言的程序员

学习一门新的语言是一种冒险.我总是热衷于尝试新的东西——学习新的语法,了解不同的模式,乃至彻底改变思维方式.不幸的是,许多开发人员对此不以为然,甚至可能是深恶痛绝的——学习新语言,就得走出舒适区,花时间花精力来学习新的理念和方法. 这段日子,我每天都要用大约5种不同的语言来写不同的项目! 我应该先学哪种语言? 有关这方面的讨论真可谓数不胜数.很多刚进入编程社区的初学者,都会问这个问题,简直就是前赴后继.有些人建议先学不费力的,如Python和Ruby,也有的人认为应该先学例如C.C++和GO这类

一个迷茫并且不合格的程序员,敢问路在何方

我的人生是这样的. 出生在农村,从小我特别听话,家里人不让干什么就不干什么.拿了很多三好学生.妈妈说不能游泳,我就看小伙伴们游.从来不知道创新是什么,只知道听别人的,别人好就好,生怕别人生气...一直到初中我都很听话.也不然我做家务,我爸是个小学老师,只要他觉得没意义的事情,他不然让我做,看NBA没意义不让看,听歌没意义,不让听,要听英语.打乒乓球没意义.但我打篮球不介意就是了.所以我除了游戏就是读书.而且课本上的书,什么名著之类的从来没看过,所以我感觉我知识面特别窄. 直到高中学会了上网,那时

如何面试一个1-3年的 iOS 程序员(持续更新)

如何面试一个1-3年的 iOS 程序员(持续更新) 计算机基础类 请说一说 HTTP 1.0 和 1.1之间的区别(懵逼题)这是一道计算机类别的题, 具体区别可以单独写一篇博客了, 但是一般情况下, 最主要的区别还是指1.1中支持长连接. 1.0规定的是浏览器只能与服务器保持短连接, 浏览器的每次请求都需要跟服务器建立一次 TCP 连接, 请求处理完以后就立即断开 TCP 连接, 服务器不跟踪每个客户也不记录过去的请求. 具体可以看这篇博客 请说一说长连接和短连接的区别这个和面试官讨论了一下,

一个三流院校毕业的程序员奋斗历程 (转)

一个三流院校毕业的程序员奋斗历程 分类: 微薄2011-03-25 18:28 1300人阅读 评论(10) 收藏 举报 工作delphi嵌入式windowsmotorola开发工具 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助. 一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS.数据库,应用程序

如何给一个完全不懂的非程序员解释复杂的、耗时的、易出错的软件开发的过程?

简评:相当有趣的一篇文章,教导你如何给非程序员讲清楚最难.最复杂的那些开发问题. 回答这个问题首先你应该解释一下如何泡一壶茶: 烧水 把茶叶放在锅里 当水烧开后,把它倒入锅里 等待 5 分钟 把茶倒进杯子里 喝 现在开始变得有趣了.你需要开始问他们这些问题: 烧水? 水来自哪里? 水壶在哪里呢? 你怎么把水弄到水壶里去呢 你怎么知道放了多少水 如果没有水 / 水壶 / 电怎么办? 如果你的填充传感器失败了怎么办? 如果你的沸腾传感器失败了? 把茶叶放在锅里? 锅在哪里,如果没有一个呢?我们应该在

太刁啦!这个Android特效竟然能让一个刚培训出来的程序员月薪就拿到16k!

android-image-slide-panel图片照片墙的加载图片的时候一张一张叠加和加载完成后切换每一张的滑动特效,自定义ImageSlidePanel,按照初叶的使用习惯,每一页应该是一个模板,所以此处命名时使用了Template关键字 运行效果: 就这个Android特效让一个刚培训出来的程序员月薪就拿到15k,打死我都不信,我看这代码敲的也没有什么特别之处啊,我也是醉啦,我复制出了链接大家瞧瞧:完整源码查看地址:http://www.itlanbao.com/code/2015090

一个工作了两三年程序员的学习计划

本人已经工作两年多了,尴尬的是待过的两家公司都是外包,大部分外包公司技术性都很一般,这也是很多人看不起外包公司的一点.可是已经在外包 公司了怎么办,我也很绝望啊.....而且我做过的项目都是很老的项目,后期做些需求.现在带的甲方公司项目很多,我接触的项目框架就是SSH,中 间件是Redis.ActiveMQ,当然会包含企业内部开发的一些构件等.这里不是说甲方公司技术性不高,只是我接触到的项目技术性不高. 进入公司的时候,自己基本知道情况了,几乎不加班,这点事挺好的(因为我们组就三个人,负责项目需

由一个简单算法想到的程序员素养问题

题记:五月从帝都回到武汉,旅游半个月后开始找新工作,六月选择了一家华中地区为数不多的移动互联网公司入职至今,略有感触——比较帝都码农与武汉码农的平均水平,就跟两个城市的经济发展水平差异一样大,不是说武汉这边没有优秀的程序员(我也算半个嘛),而是说平均水平确实不如其他一线城市.想想也正常,巨头公司都扎堆北上广深,以极具竞争力的薪酬福利和巨头光环吸引着广大程序员,反观武汉的互联网发展尚处在初级阶段,无论从公司规模.名气还是最实际的薪酬福利方面均不如一线城市,自然无法吸引广大程序员咯.本人在新公司待了