热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我应该从哪一门编程语言上车?

很多人的代码之路可能从某个Google搜索开始,譬如 如何学习xxx ,不过又该决定从哪个语言开始这一段旅程呢?如果你问身边朋友的建议,可能会听到这些建




很多人的代码之路可能从某个Google搜索开始,譬如 如何学习xxx ,不过又该决定从哪个语言开始这一段旅程呢?如果你问身边朋友的建议,可能会听到这些建议:


  • 硅谷里的小伙伴经常调笑Java,我觉得我可以先学这个。


  • Haskell,现在这么热,肯定要学这个。


  • Go语言的Logo好可爱。


不过还有很多人估计会选择直接搜索,我应该学习啥语言呢?我们的思考过程可以总结在下面这张图中:

这个过程真的是纠结而又快乐,估计如果是强迫症的处女座会更痛苦。从我的角度来看,我们考虑学哪一门语言应该从以下几个方面进行考虑:


  • 这门语言的市场需求量如何


  • 这门语言的未来前景如何


  • 这门语言是否容易上手


  • 你计划用这门语言构建如何的项目


编程语言的这片红海也是英雄辈出,每年都会有新的编程语言出现,我们先来看一幅漫画:

当我们现在考虑应该选择哪一门入门语言时,我们也要来看看这些年里别人的选择,下图是12年里各个语言的搜索量排行:

Java本身有其优势与劣势,而Python正在逐步成长为最受欢迎的选择之一。不过这两年随着Web技术的迅猛发展,Javascript正成为日益受欢迎的选择之一。在正式阐述之前,我首先澄清一下:


  • 我并不想引起圣战,并没有强调哪一门语言就比其他的好


  • 我认为每个人不应该拘泥于某一门语言


  • 我推荐才入门的同学可以从Javascript开始


现在我们来看看学校里是怎么教编程语言的。

Computer Science 101

大学里经常在计算机科学与技术的系列课程中开设某一门编程课,并且常常看做数学或者电子课程的扩展。估计你也经常会听到如下的论述:计算机科学与技术的课程并不能让你成为编程大拿,就像刷墙的并不能成为美术大师一样。而在2016年里,还是有很多大学像教数学一样教授计算机科学与技术。在这种背景下,很多编程入门级的课程都关注与C这样的底层抽象语言,或者专注于数学的类似于MATLAB这样的语言。

上图就是TIOBE对于编程流行度的排行榜,而在2014年里Python逐步代替Java成为最广泛的美国计算机科学与技术语言:

而如果我们专注于工程应用领域的语言流行度,则有些不同:

超过一半的开发者在使用Javascript,Javascript的浪潮从前端开始逐步席卷到后端,并且逐步发展到游戏开发与物联网等领域。而对于Javascript开发者需求量也仅次于Java:

在过去的两年中,超过5000名开发者在Free Code Camp的帮助下寻找到了合适的开发工作。我并不是因为我本身负责教授Javascript就去推广它,而是因为Javascript是最易于找到第一份工作的语言所以我选择去教授他。

Factor #1:The Job Market

如果你是完全处于个人的兴趣爱好而学习编程,那么你可以跳过本节。不过 绝大部分 学习编程的人都希望能够获得一份不错的工作。就像我早前提及的,Java是目前看来最受雇主欢迎的语言,而Javascript紧随其后。不过这其中有个很大的因素就是Java已经流行了20多年,很大一部分岗位来源于对于旧系统的维护需求。

从上图可以看出现在大概2.7个Java开发者竞争一个岗位,而PHP与iOS差不多是两个人竞争一个岗位。

Factor #2:The long term prospects

差不多现在开源项目中,每个Javascript项目的Pull Request请求数是Java、Python、Ruby平均数的两倍,从这一点看来,Javascript比其他任何的流行语言都要发展迅速。

而Javascript生态圈也不断受益于来自Google、Microsoft、Facebook以及Netflix等公司的投资,譬如Javascript生态圈中的著名的静态扩展TypeScript有超过100位的开源贡献者,其中很多都是来自于Microsoft或者Google的雇员。目前收购了Sun的Oracle也在寻求利用这种社区参与度扩大Java的影响力。

Factor #3:Difficulty To Learn

估计大部分开发者都同意相对高层的脚本式语言相对易于学习,Javascript、Python以及Ruby就是属于这个范畴。虽然不少学校在教Java或者C++,不过它们是真的不容易学啊。

Factor #4:Projects you can build with it

这一点正是Javascript耀眼之处,Javascript可以运行在任何支持浏览器的设备上,你可以用Javascript构建任何应用,然后随处分享。正如Stack Overflow的合伙人Jeff Atwood所说:所有能够用Javascript实现的应用最终都会转到Javascript中。Java曾经也是主打一次编译,到处运行,估计你还记得 Java Applets ,近两年才被Oracle去掉这一特性。而Python也面临同样的问题,这里我们列举几个好玩的用Javascript构建的游戏:

1970s style Simon game


  • Conway’s Game of Life


  • Star Wars-themed Wikipedia Search


  • A roguelike dungeon crawler game



Objection #1:Javascript不是运行的很慢吗?

Javascript其实是一个非常高效的语言,NodeJS本身是比Python、Ruby以及PHP要快的,它也近似于C++、Java以及Go这些编译语言。

Objection #2:But Javascript isn't statically typed

类似于Python或者Ruby,Javascript同样是一门动态类型语言,很方便,不过很容易引起动态类型转化与验证的问题。譬如我以为我操作的是一个数组:

exampleArray = [1, 2]
-> [1, 2]
exampleArray.length
-> 2

然后如果一不小心转化为了字符串,那就糟了:

exampleArray = “text”
-> “text”
exampleArray.length
-> 4

Objection #3:我打算写个移动应用来着

Angular Cordova 与 React Native 都是不错的选择。

 

来自:https://segmentfault.com/a/1190000007398287

 





推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Flow 生态案例学习 | Emerald City为Flow上DAO、教育和开发铺平道路
    原文链接:https://www.onflow.org/post/emer ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
手机用户2602918765
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有