- /
- Blog/
- 我该选择哪门编程语言来学习/
我该选择哪门编程语言来学习
目录
『我家小孩想学计算机编程语言,应该选择哪门语言入手?』 『我是计算机本科专业的学生,选择哪门编程语言来学习?』 『我已经工作有一段时间了,最应该选择专攻哪一门编程语言?』
经常会被问到这些问题,但它们并没有标准答案。
编程语言,它是一门经过设计的流程、数据操作的标记符号、语法规则集合。流程、数据操作的目标是确定的,但是过程步骤(这里指程序执行)却不是唯一的,则编程语言会因为语言设计者本身的爱好、经验背景、针对的特定领域所要解决的问题,会诞生风格非常不同的语言,即编程语言存在多样性,如同人类自然语言一样,是在一定的文化、历史、地理背景下产生所多样性音符、字符、语法表达习惯。
从20世纪50~60年代至今,计算机编程语言数不胜数,真让人无从下手。编程风格有过程式、面向对象、s-表达式…
学习编程语言,不应该单按照喜好来选择,还要考虑语言本身的专业领域、学习难度、应用规模、发展趋势、经济效益等因素。但对于一个初学者来说,无法从那么多的角度来分析、判断。
即便认识了在 IT 行业从事了多年编程工作的朋友,也会负责任地建议你,要按照实际需要来选择。
那么,我们是否可以从这几个方面来思考,试图寻找这些问题的答案。
- 学习的目的:只是单纯为了学习,理解一下编程语言的结构;为了工作;为了解决特定领域问题;不同的目的,差别会非常大。
- 语言的用途:没有应用场景的语言,只会浪费时间。
- 语言的发展前景:没落的语言是不会理会的,之所以没落,就是因为自身不符合发展的要求,被淘汰的,让它安静走进历史即可。它的优点会在新的语言继承下来。
- 语言的风格:语言风格倒不是非常重要,只是它会影响开发者的情绪、效率,从而影响或者衍生出创新。 语言的应用规模:应用规模越大,人才需求就会越大,掌握该大规模使用的语言容易找到工作机会。
列举当前流行的编程语言 #
本节显得非常突兀,会出现一些莫名其妙的语言名称。但是不要紧,因为后文会涉及引用相关名称,故此处先简单罗列,当作是名词解析。
javascript,在网页开发方面非常流行。
python,被用到非常广的领域。
go,针对网络应用、web 服务设计。但可以在其它方面使用。语法简洁,是可以用来当入门语言的。
java,主要被用来开发系统的后端,安卓 app。面向对象的代表。
c、c++,由于使用门槛太高,一般用来编写较低层次的程序,获得更高性能表现。可以用的范围很广,但不建议新手拿来入门。有悟认为,能驾驭 c、c++ 的人,都是人才。
rust,为了解决在 c、c++ 较容易出现的缺陷问题而设计的、语法符号非常有特点的语言,有学习门槛,不建议新手使用。
php,好像是目前互联网 web 应用使用得最多的吧,主要还是 wordpress 这个用 php 写成的系统。
ruby,大概十年前,被广泛用来写 web 应用的吧。
lua,由于自身的特点,在某些领域有特殊的地位,比如 web 服务器的插件。
sql,它本身不是编程语言,而是数据查询语言,在数据分析领域是必要技能,不适合新手。
学习编程语言的目的 #
只想单纯了解一下的初学者 #
若你学习编程,只是想打发周末无聊的空暇,那么可以选择 python,虽然它有被用在非常专业的领域(比如数学),但来它来当初学上手练习,并不会涉及专业领域,只是简单的语法与过程。它的代码格式要求比较特别(语句块层次缩进,在其它语言中很少会这样要求),但这个影响基本可以忽略,并不是功能特性的要求,不会增加学习编程的心智负担。让学习过程更纯粹。
心智负担,通俗地讲,就是一边写编程,一边要不断记得使用的该门编程语言的显性或者隐性的要求来自我反馈,减少错误。说白了,会很累的意思。
若你只是为自家孩子寻找兴趣 #
上一节有提过,先学习语法没有太多负担的 python 来做兴趣挖掘。也许,你家的小孩对编程世界并没有兴趣。如果他(或她)有这方面的兴趣踏入这个世界,python 足已。
你是一名计算机专业的学生 #
若你是一个学习计算机专业的学生,那么你学习计算机知识的目的性、针对性就会非常强。
除了专业设计上的课程安排之外,建议你认真从计算机原理、编译原理、计算机程序与设计之些基础入手,以编程练习为辅助的方式来学习计算机编程。有可能课程设计上,会让你选择 java、c 这些语言作为入门,无关系,只是开头难度上的差异而已。当你的编程能力积累到一定程度之后,学习其他语言对你来说,都是比较轻松的。
好多大学里教授计算机的老师,可能连编译原理都没搞明白,什么BNF,最左最右推导,实际上理论到实践在知识还有个映射过程。
虽然编译原理、计算机程序、计算机原理这类基础知识都被安排在课程开始的最前面,但是要真正弄懂、搞懂,会应用,是需要很多年的理解和修炼的,这些可能会发生在毕业工作的五年以后。在实际工作上,普通的功能编程并不及涉及这些方面的知识,但当工作经验积累到一定程度之后,通常会去研究一些更深层次的原理并解决问题,你会惊讶地发现,那些知识曾经是天书里不知所云的东西,无时不在影响着你,也许时间可以倒流,愿意多花两年时间好好深入进去。因为若能搞懂了,那么在工作上可能可以创造出别人做不到的创新。
(就是理论如何应用的问题,而这些都构建在一个很长时间都没有变化过的基础之上。)
– 来自一个没有学好计算机基础的计算机相关专业的中年大叔的建议
若你是一枚有多年经验的资浅程序员 #
经验会让人自我膨胀,也会让人尚失自信。
从事 IT 行业的人,一定要有个这样的认知,因为计算机的发展非常快,根本无法跟上技术的更新。 在计算机行业世界中,技术都不是孤立的。有些技术是方法论、有些技术是工具的使用,有些技术是某些理论转实践的应用。很少人有这种能力,可以完全并完整的跟踪多项技术同步更新。你需要接受这个现实,因为只要是从事 IT 编程相关的工作就无法回避。
有悟在这里给想在IT行业的能够长期打滚而又不迷失方向的人提点建议。
在行业领域应用上,编程语言是存在区域的。则,在某个应用领域上,不管是不是同一家公司,你会发现,大家知道的东西都差不多,大家所会的东西也差不多,可能连公司的主打产品都长得很像。比如,在编写企业管理系统时,大家都会使用 java 来写后端的服务,而你非要做 php 或者是 python 去跟 java 的人凑热闹,通常是得不到好结果的。在游戏开发领域上,已经默认使用 lua 来为系统编写动态功能好多年,这个时候你说现在 javascript 很流行,咱们用新技术来给系统写模块吧,第二天领导就要找你谈话了。而在 IOT或者编写通讯模块,大家都在用很底层又很繁琐的c使劲敲的时候,你非得说你 java 很厉害,那是自讨没趣。
你一定会问怎么办? 它并没有标准答案。
当你有相当工作经验以后,自然会有自己的看法,只是平时自己没想过而已,并且这个问题在你的职业生涯的不同阶段会有不同的答案。
从事软件开发的职业生涯是怎么样的?
像公务员一样,从毕业入行以后就可以一直干到退休!!😀,想得美。
技术发展太快,或者公司所从事的服务业务的行业周期比较短,干个三五年就发现需要跳槽或者换行业。
– 若想降低技术快速变化的影响,那么尽量往低层次、底层化方向走,越是底层变化演进越慢
想一门手艺学到老、用到老,当个匠人!!😀,正常情况下办不到。
企业聘请程序员,是为了做产品研发、系统开发,这些工作的周期通常都是一年、两年,上一个产品、下一个产品之间的技术一定会存在差异,并且为了能跟着技术发展潮流,一定会引入一些原来并不涉及的技术来改进某些方面。单这一项,就要求你需要不断的学习。
– 最多能做到的,是专注于某一个底层化应用领域,比如操作系统、数据库、浏览器 这类会活很长时间的软件生态。
由于具有独特的观察力,洞察了某个商机,将技术商业化,从此人生走上康庄大道。恭喜你,这事还真有可能发生。
IT 软硬件行业已经有非常多的例子。
而在中国,最大规模的成批量的程序员,始于20世纪90年代末,这一批从业人员仍未退休。他们的总体经验或者事迹,顶多都是圈子内以口相传,目前还没看到专门的调查总结。
如果你对技术有非常纯粹的兴趣与爱好,喜欢研究一些新技术,喜欢用编程来解决一些重复劳动、管理杂乱的事物,也许你在寻找可能为别人编制专用的小规模软件来赚取家用,那么,对解决问题的专注,是必要的。而会所掌握的知识与学习能力,会决定你所能解决的问题。
- 不要试图自己解决所有的问题,有些领域不是你的强项,你也没有可以驾驭它的学习能力。放弃或者寻求合作是个不错的选择。
- 不要试图什么都要去学,你不会有足够的时间,并且有些知识的复杂程度与难度超过你所能激发的潜力。
- 条件允许的情况下,学习一些工作以外的技术知识(平时多关注技术发展趋势),也许有一天,这些知识足以让人开辟一条新的道路。
- 对于行业淘汰或者过时的知识,不要过份着迷,总结它的长处优势以备后用即可。
- 编程语言,只是用来描述、编制计算机程序过程的符号与规则,对暂时尚未掌握的其它语言不要有偏见。要通过不断的编程,来不断加深对计算机原理的了解。有可能的情况下,尽量选择使用较低层次的语言来编写程序。以便在可能出现不可回避地要学习新语言时,可以更快的掌握(因为编程语言最终编译成程序后都要运行在计算机上,编程技巧,比不上对原理性知识的更深层理解)。
- 不要忽略对专业问题的研究。比如了解所在公司的产品所服务于客户的行业领域。对行业的了解,是非常有必要的,有时还会为了带来意外。(程序是用来解决用户问题的,关注某个领域问题,有时比关注某项技术更重要。)
说到这里,并没有给出大家任何答案,而是想通过有悟自己的一些理解、感悟,可以激发大家自己的思考,为自己寻求答案。