---
author: Kojo Idrissa
category: 观点
comments_data:
- date: '2017-04-06 17:06:15'
  message: 不提java吗
  postip: 117.151.53.39
  username: 来自湖北的 Chrome 57.0|Windows 10 用户
- date: '2017-04-07 01:55:12'
  message: 看完简例,我居然明白了参数的工作逻辑,以前只知道区别,现在理解了逻辑,果然是灵感一瞬间啊
  postip: 61.183.246.102
  username: lovetoheart [QQ Browser 9.5|Windows 7]
- date: '2017-04-07 11:45:44'
  message: 神奇的一点通 ~~
  postip: 114.245.11.87
  username: linux [Chrome 57.0|Mac 10.11]
- date: '2017-04-07 14:59:46'
  message: 由俭入奢易，由奢入俭难。
  postip: 211.102.192.66
  username: 编程浪子 [Chrome 57.0|Windows 7]
- date: '2017-04-07 21:27:06'
  message: Node.js做后台性能还是太差了
  postip: 58.240.23.89
  username: 来自江苏南京的 Internet Explorer 11.0|Windows 7 用户
- date: '2017-04-08 10:14:04'
  message: "题目与内容差别太大。<br />\r\n估计作者是搞网页开发的，介绍了python和java script。而其它方面的比如数据分析R，文本处理（正则式表达）perl，科学计算Fortran，matlab，一些面向对象开发的语言等等都没有介绍。试问，如何让读者通过阅读来了解选择语言？"
  postip: 1.31.110.142
  username: Moonlimb [Chrome 55.0|GNU/Linux]
- date: '2017-04-10 19:45:27'
  message: 我的启蒙语言是C，，现在高二了。。还在啃c++
  postip: 111.43.240.80
  username: Ghjoker [Firefox 45.0|GNU/Linux]
- date: '2017-08-02 17:08:41'
  message: "我觉得，对于没学过微机原理的人而言，第一语言应该是C，对于学过的，第一语言应该是ASM好吧<br />\r\n<br />\r\n对于没有至少学过C的人而言，想要理解计算机内部的工作方式，太难了。<br
    />\r\n第二语言，现在说来绝对是python了"
  postip: 61.133.215.190
  username: 来自宁夏银川的 Chrome 59.0|Windows 7 用户
count:
  commentnum: 8
  favtimes: 2
  likes: 0
  sharetimes: 0
  viewnum: 9663
date: '2017-04-06 16:26:43'
editorchoice: false
excerpt: 关键是你打算做什么。为什么你要学习编程？你的回答很大程度上影响你的决定。
fromurl: https://opensource.com/article/17/1/choosing-your-first-programming-language
id: 8379
islctt: true
largepic: /images/p/201704/06/162637h3c1l3c1zqx17h3z.jpg
permalink: /article-8379-1.html
pic: /images/p/201704/06/162637h3c1l3c1zqx17h3z.jpg.thumb.jpg
related: []
reviewer: ''
selector: ''
summary: 关键是你打算做什么。为什么你要学习编程？你的回答很大程度上影响你的决定。
tags:
- 编程语言
thumb: false
title: 如何挑选你的第一门编程语言
titlepic: true
translator: ypingcn
updated: '2017-04-06 16:26:43'
---

想学编程的原因有很多，你也许是想要做一个程序，又或者你只是想投身于这个行业，所以，在选择你的第一门编程语言之前，问问你自己：你想要在哪里运行程序？你想要程序来完成什么工作？


![](/images/p/201704/06/162637h3c1l3c1zqx17h3z.jpg)


你学习编程的原因将会决定你的第一门编程语言的选择。


在这篇文章里，我会交替使用<ruby> “编码” <rp>  （ </rp> <rt>  code </rt> <rp>  ） </rp></ruby>、<ruby> “编程” <rp>  （ </rp> <rt>  program </rt> <rp>  ） </rp></ruby>、<ruby> “开发” <rp>  （ </rp> <rt>  develop </rt> <rp>  ） </rp></ruby> 等动词，<ruby> “代码” <rp>  （ </rp> <rt>  code </rt> <rp>  ） </rp></ruby>、<ruby> “程序” <rp>  （ </rp> <rt>  program </rt> <rp>  ） </rp></ruby>、<ruby> “应用程序” <rp>  （ </rp> <rt>  application </rt> <rp>  ） </rp></ruby>、<ruby> “应用” <rp>  （ </rp> <rt>  app </rt> <rp>  ） </rp></ruby>等名词。这是考虑到了你可能听过的语言用法。


### 了解你的设备


在你编程语言的选择上，你的程序将运行在何处是个决定性因素。


桌面应用是运行在台式机或者笔记本电脑上的传统软件程序。这样你编写的代码在同一时间内只能在一台电脑上运行。移动应用，也就是我们所熟知的“app”，运行在使用 IOS 、Android 或者其他操作系统的移动设备上。网页应用是功能像应用的网页。


按互联网的 客户-服务器（C/S）架构分，网页开发者经常被分为两类：


* 前端开发，就是编写运行在浏览器里面的代码。这是个面对用户的部分，或者说是程序的前脸。有时候被称为“客户端编程”，因为浏览器是网站的客户-服务器架构的客户端部分。浏览器会运行在你本地的电脑或者设备上。
* 后台开发，也就是大家所熟知的“服务器端开发”，编写的代码运行在你无法实际接触的服务器上。


### 创造什么


编程是一门广泛的学科，能应用在不同的领域。常见的应用有：


* 数据科学
* 网页开发
* 游戏开发，以及
* 不同类型的工作自动化


现在我们已经讨论了为什么你要编程，你要程序运行在哪里，让我们看一下两门对于新手来说不错的编程语言吧。


### Python


[Python](https://www.python.org/about/) 是对于第一次编程的人来说是最为流行的编程语言之一，而且这不是巧合。Python 是一门通用的编程语言。这意味着它能应用在广泛的编程任务上。几乎**没有**你不能用 Python 完成的工作。这一点使得很多新手能在实际中应用这门编程语言。另外， Python 有两个重要的设计特征，使得其对于新手更友好：清晰、类似于英语的[语法](https://en.wikipedia.org/wiki/Python_syntax_and_semantics)，和强调代码的[可读性](https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Indentation)。


从本质上讲，一门编程语言的语法就是你所输入的能让这编程语言执行的内容。这包括单词，特殊字符（例如 `;`、`$`、`%` 或者 `{}`），空格或者以上任意的组合。Python 尽可能地使用英语，不像其他编程语言那样经常使用标点符号或者特殊的字符。所以，Python 阅读起来更自然、更像是人类语言。这一点帮助新的编程人员可以聚焦于解决问题，而能花费更少的时间纠结于语言自身的特性上。


清晰语法的同时注重于可读性。在编写代码的时候，你所创造的代码的逻辑“块”，就是一些为了相关联目标而共同工作的代码。在许多编程语言里，这些块用特殊字符所标记（或限定）。它们或许被 `{}` 或者其他字符所包住。块分割字符和你写代码的能力，这两者不管怎么结合起来都会降低可读性。让我们来看一个例子。


这有个被称为 `fun` 的简短函数。它要求输入一个数字，`x` 就是它的输入。如果 `x` 等于 `0`，它将会运行另一个被称为`no_fun` 的函数（这函数做了些很无趣的事情）。新函数不需要输入。反之，简短函数将会运行一个使用输入 `x` 的名为 `big_fun` 的函数。


这个函数用 [C 语言](https://en.wikipedia.org/wiki/C_(programming_language) 将会是这样写的：



```
void fun(int x)
{
    if (x == 0) {
        no_fun();
    } else {
        big_fun(x);
    }
}

```

或者，像是这样：



```
void fun(int x) { if (x == 0) {no_fun(); } else {big_fun(x); }}

```

功能上两者等价，而且都能运行。`{}` 和 `;` 告诉我们哪里是代码块的不同部分。然而，第一个对于人们来说*明显*更容易阅读。相比之下完成相同功能的 Python 是这样的：



```
def fun(x):
    if x == 0:
        no_fun()
    else:
        big_fun(x)

```

在这里，只有一个选择。如果代码不是这样排列的，它将无法工作。如果你编写了可以工作的代码，你就有了可阅读的代码。同样也留意一下两者在语法上的差异。不同的是 `def` ，在 Python 代码中这个词是英语单词，大家都很熟悉这单词的含义（LCTT 译注：def 是 definition 的缩写，定义的意思）。在 C 语言的例子中 `void` 和 `int` 就没有那么直观。


Python 也有个优秀的生态系统。这有两层意思，第一，你有一个使用该语言的庞大、活跃的社区，当你需要帮助指导的时候，你能向他们求助。第二，它有大量早已存在的库，库是指完成特定功能的代码集合。从高级数学运算、图形到计算机视觉，甚至是你能想象到的任何事情。


Python 作为你第一门编程语言有两个缺点。第一是它有时候安装起来很复杂，特别是在运行着 Windows 的电脑上。（如果你有一台 Mac 或者 Linux 的电脑，Python 默认已经安装好了。）虽然这问题不是不能克服，而且情况总在改善，但是这对于一些人来说还是个阻碍。第二个缺点是，对于那些明确想要建设网站的人来讲，虽然有很多用 Python 写的项目（例如 [Django](https://www.djangoproject.com/) 和[Flask](http://flask.pocoo.org/) ），但是编写运行在浏览器上的 Python 代码却没有什么好的选择。它主要是后台或者服务器端语言。


### JavaScript


如果你知道你学习编程的主要原因是建设网站的话，[JavaScript](https://en.wikipedia.org/wiki/JavaScript) 或许是你的最佳选择。 JavaScript 是关于网页的编程语言。除了是网页的默认编程语言之外， JavaScript 作为初学的语言有几点优点。


第一，无须安装任何东西。你可以打开文本编辑器（例如 Windows 上的记事本，但不是一个文字处理软件，例如 Microsoft Word）然后开始输入 JavaScript 。代码将在你的浏览器中运行。最顶尖的浏览器内置了JavaScript 引擎，所以你的代码将可以运行在几乎所有的电脑和很多的移动设备上。事实上，能马上在浏览器中运行代码为编程人员提供了一个非常*快*的反馈，这对于新手来说是很好的。你能尝试一些事情然后很快地看到结果。


开始 JavaScript 是作为前端语言的，不过一个名为 [Node.js](https://nodejs.org/en/) 的环境能让你编写运行在浏览器或者服务器上的代码。现在 JavaScript 能当作前端或者后台语言使用。这增加了它的使用人数。JavaScript 也有大量能提供除核心功能外的额外功能的包，这使得它能当作一门通用语言来使用。JavaScript 不只是网页开发语言，就像 Python 那样，它也有个充满生气的、活跃的生态系统。


尽管有这些优点，但是 JavaScript 对于新手来说并非十全十美。[JavaScript 的语法](https://en.wikipedia.org/wiki/JavaScript_syntax#Basics)并不像 Python 那样清晰，也不怎么像英语。更像是之前例子里提到的 C 语言。它并不是把可读性当作主要的设计特性。


### 做出选择


选 Python 或者 JavaScript 作为入门语言都没有问题。关键是你打算做什么。为什么你要学习编程？你的回答很大程度上影响你的决定。如果你是想为开源做贡献，你将会找到*大量*用这两门语言编写的项目。另外，许多主要不是用 JavaScript 写的项目仍使用 JavaScript 用作前端组件。当你做决定时，别忘了你本地的社区。你有在使用其中一门语言的朋友或者同事吗？对于一个新手来说，有实时的帮助是非常重要的。


祝好运，开心编程。




---


作者简介：


Kojo Idrissa - 我是一个新晋的软件开发者（1 年），从会计和大学教学转型而来。自从有开源软件以来，我就是它的一个粉丝。但是在我之前的事业中并不需要做很多的编程工作。技术上，我专注于 Python ，自动化测试和学习 Django 。我希望我能尽快地学更多的 JavaScript 。话题上，我专注于帮助刚开始学习编程或想参与为开源项目做贡献的人们。我也关注在技术领域的包容文化。




---


via: <https://opensource.com/article/17/1/choosing-your-first-programming-language>


作者：[Kojo Idrissa](https://opensource.com/users/transitionkojo) 译者：[ypingcn](https://github.com/ypingcn) 校对：[bestony](https://github.com/bestony)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出