我想学程序,但到底该从哪个语言入门?

作者:孙宇晨 来源:www.5idf.cn 2020-08-21   阅读:

身处在这个全民学程序时代,几年后当程序设计变成连高中生都必备的能力时,不会写程序的人在未来就要变成少数民族。当越来越多人开始对学程序语言有兴趣,大家常常问的第一个问题就是,到底该从哪个程序语言开始?

网路上常常有文章针对热门程序语言做分析,例如C++、Python、Java、Javascript、Swift、Objective-C、Ruby。然后在看这些语言介绍时,我们都会看到一堆奇怪的外星名词。物件导向?多重继承?静态成员函式?身为一个初学者只想大喊:

「我就是看不懂专业术语才要学啊,可不可以先给我看一些人话!」

完全不知道该选什么语言的下场是,让很多人打退堂鼓,或蒙着眼就选了一个看起来顺眼,但学起来很痛苦的语言。

选错语言,撞墙连连

因此,为了不要让大家留下无法抹灭的痛苦阴影,就让我们先用门外汉词汇与麻瓜语来了解哪一种语言最适合我们学吧!

谁适合读这篇文章:
想要入门学程序语言但目前还没有基础,也没有特定目标的人。

如果你已经有特定目标,那可以期待之后文章中会带你认识不同领域开发的介绍以及个别需要的语言,例如网页开发、App 实作。

只是想学程序vs 想要做出一个__

一般来说,想学程序的初学者大致可以分为两种,第一种是纯粹想要学习写程序,没有特别目标的,也就是那些会说:「感觉写程序很好玩,来写写看程序好了。」、「程序之后一定很重要,学一下锻炼脑袋也不吃亏。」的人。

第二种则是有很明确想要实作出的目标,例如:想要写出一个自己的个人网站、想要写一个好玩的App等等。

在这篇文章中,我们会先针对第一种没有特别目的的人,详细介绍两个最多人学习,使用领域也非常广泛的语言:Python 与C++。

至于已经有特别目标,想要做出网站或App 的人,在之后的几篇文章中我们也会详细介绍相关的知识,以及推荐学习的语言。

Python

讲到入门该先学哪个语言,现在最多人推荐的,大概就属Python了。的确,Python在2014年就已经成为美国顶尖大学资工系最受欢迎的入门语言,也在多项票选中,被视为最适合初学者学的语言。综观来说,Python拥有三个对新手很友善的特点,让它成为新时代的入门语言。

Python 的好棒棒之处:

  • 好理解
  • 好偷懒
  • 好作弊

好理解:

写Python 就像在跟电脑讲英文一样。

因为Python的程序语法设计的非常简洁,让读Python所写的程序代码就像在读英文一样的直观。
举例来说,如果我今天要写一个叫电脑印出「Python好棒棒」的程序,我只需要对电脑说:

print(“Python 好棒棒”)

但同样的事情,如果我要用C++ 印出「C++ 好棒棒」,我却需要跟电脑说:

#include <iostream.h> 
int main() 
{ 
cout << “C++好棒棒” << endl; 
}

如果是第一次看到这串程序代码,想必有些人已经黑人问号掉满地了。

include 后面那坨是什么?为什么要有{}?cout 库特*是我没学过的英文单字吗?此时,身为一个程序麻瓜只能暗地里崩溃,感叹为何学C++ 非得要用这种怪腔怪调。

注* Cout 念作c out,不是念作库特。

好偷懒:

Python 的语法设计让电脑自动帮了你很多忙。

Python 希望让你需要打的字越少越好,一方面加速你写程序的速度,一方面也符合它诉求程序代码简洁美丽的原则,所以Python 会把能让电脑帮你完成的,尽量留给电脑。以程序语言里一个叫宣告变数的简单动作为例:

在C++ 中,如果我要规定x 这个变数等于3 时,我需要先说x 是个整数int,接着说他等于3 ,最后再加个分号。在程序代码里,它会是

int x = 3;

但在Python 中,你可以直接说x 等于3 就好,他是整数的这件事,Python 自己叫电脑帮你判断了。在程序代码里,它会是

x = 3

可别小看这些小小的差异。虽然对于程序老鸟来说,很多像这样的小细节就像反射动作一样能够自动反应,但对刚入门的初学者而言,少一个; ,忘记宣告一个int ,少加一个分号导致程序无法执行乃是家常便饭,无形中也更增加了初学者学习的痛苦与浪费的时间。

好作弊:

Python 有很多好用的工具,让你可以把需要复杂的程序代码才能完成的功能像作弊般用几行简单程序代码就能轻松解决。

Python的使用社群提供了非常丰富且强大的模组(在这里我们可以把这个优势想像成前人留下的智慧)。简单来说,模组就是别人已经写好的程序代码,这些程序代码中预留了一些填参数的空间,让你可以客制化自己想要结果。

实际举例,假设程序麻瓜A 先生今天想要用Python 来做线性回归的数据分析,他不用自己纯手工酿造把统计学里那套最小平方法等等等的东西一笔一画刻进程序代码里,他只要使用前人的智慧,例如:sklearn 模组,把里面写好的线性回归分析功能叫出来,然后把自己的资料丢进去,咻咻咻的就在regressor 这个东西里面做完全部的线性回归的事了。在程序代码里大概长这样*

#撷取前人的智慧
from sklearn.linear_model import LinearRegression#把前人的智慧放进程序代码
regressor = LinearRegression()#把自己的资料丢进去,看着魔法发生,让模组处理好所有事情
regressor.fit(X_data, y_data)

什么,你说你还想看资料视觉化?要视觉化我们可以再使用前人的智慧,例如:matplotlib 模组。接下来把所有资料丢进去,咻咻咻,视觉化的图就喷出来了。

#撷取前人的智慧again 
import matplotlib.pyplot as plt#设定自己的资料用红点点标示好
plt.scatter(X_data, y_data, color = 'red')#设定regressor里面处理好的回归分析+预测用一条蓝色的线标示好
plt.plot(X_data, regressor.predict(X_data), color = 'blue')#把图秀出来
plt.show()
用前人的智慧轻松制图

这些强大的工具包括资料视觉化的Matplotlib、资料分析的Pandas & Numpy、机器学习的scikit-learn、深度学习的TensorFlow、爬虫的BeautifulSoup、网页用的Django 等等,网路上也有一些Python 教学是针对这些模组直接应用的,如果很想赶快应用的话可以先从这些教学开始,但也别忘了程序本身的基础还是很重要的。

注* 这边的程序代码省略了资料前处理以及真正在做回归时应该要分成train set / test set 的部分,但大致上使用模组的感觉就是这样的简单(但行有余力还是可以多去了解模组是如何运作的呦)。

C++

讲到程序语言,大部分台湾人第一个想到的非C 与C++莫属。不仅因为台湾大部分大学都以C / C++ 做为资工科系的入门,C / C++也是目前应用最广的程序语言之一。

C 与C++都是发展许久的语言,C 始于1970s,C++则是基于C 的基础,加上了一些新特性(包括物件导向、泛型等等对程序麻瓜一听就吓跑的外星名词)的增强版。而大致上,用C 写出来的程序可以用C++ 跑(有一些小例外,但就不在此讨论),但用C++ 写出来的东西就没办法用C 执行。因此,为了简化学习的选择,我们这边就先只针对C++ 做介绍。

C++ 的好棒棒之处:

  • 好扎实
  • 好轻松
  • 好迅速

好扎实

学好C++可以让你有最丰富扎实的电脑知识与程序基础。

C++是非常基础的语言,虽然在介绍Python时说过,C++对新手来说可能会觉得很啰唆,怪腔怪调的。但透过学习C++,绝对可以锻炼完整且扎实的电脑知识。例如在C++中,在学基础时就会学到记忆体位址,实际执行时也会有比较深刻地了解编译式语言(这个外星名词下面会解释)的特点等等。

另外一个让C++很扎实的原因是,他允许你用各种不同的方式与程序代码去达成同样一件事情。这样的好处是,你可以学习用很多不同的角度去解决事情。但这样的坏处是,你必须要学习用很多不同的角度去解决事情。因为如果要理解别人的程序代码,你通常需要知道大部分的方法。

好轻松

学好C++后你学其它语言绝对会觉得轻松许多,但…学C++绝对会先让你不轻松很久。

这点对大部份想入门的新手来说都不是件好事,只有你学完之后,才会深感C++对你的磨练(摧残)。在上一段提到的两点,锻炼完整知识与学习不同方法的优点背后,其实也都说明了C++并不是一个可以轻松上手的语言。

锻炼完整知识意味着你必须要从最基础开始了解,为什么一定要宣告变数、为什么要指派记忆体位址等等。这些外星知识可能会让程序麻瓜一开始只想印出一行字就学的很头痛。

学习不同方法意味着你除了要会很多方法,也要小心被各种方法搞得头昏脑胀。因为这不只让C++ 要学的东西变复杂,也让它在应用上容易与其他方法搞混。相反的,在Python 中,它的设计哲学是:「用一种方法,最好是只有一种方法来做一件事」,就是为了让程序更好被新手了解。

但度过刚开始学​​习的痛苦,之后要学习其他语言会觉得相对轻松很多。除了拥有扎实的基础知识外,目前大部分的语言都是基于C / C++发展而来,学了C++ 再去学其他语言也不会有太大的隔阂。

好迅速

C++在处理很庞大的资料量或执行很复杂的程序时,执行速度跟Python 比快很多。

在了解这一点前,我们要先理解C++跟Python在本质上有一个很大的差异。C++是编译式语言,而Python是直译式语言。在了解这两个外星名词前,我们要先知道,电脑是不懂英文的。所以要告诉电脑它要做什么,我们得先把程序代码翻译成电脑唯一懂的语言:0与1。

直译式语言指的是程序在执行时,由一个软体(直译器)一行一行把程序代码一边翻译一边执行。而编译式语言,则是在程序代码执行前,就用编译器把整份程序代码翻译好了。

这两个概念就像假如我们去听一场冰岛语的演讲,直译语言像是即时口译,在演讲时才能透过口译员(直译器)一句一句把冰岛语翻成中文。而编译语言像是由翻译人员(编译器)事先翻好的逐字稿。去听演讲时,我们可以直接对照逐字稿即可。

当然,阅读事先翻译好的逐字稿一定比边听边翻译的即时口译快。因此我们也能知道,为何编译式语言C++执行速度会快于直译式语言Python 了。

Python 跟C++ 的比较

有人说,学习C++像是开手排车,你必须要了解离合器、换档。学习Python 像是开自排车,需要你自已操控的东西变少了。学习用Python 的模组就像开自动驾驶的车子,输入目的地,咻就到了。

总而言之,我觉得C++与Python 最大的差别在于

「C++省电脑的精力,Python 省人类的精力。」

就像Python 官方的基金会所说,Python 的程序普遍上执行速度比其他语言慢,他同样的它的程序代码也比其他语言少好几倍。从刚初学入门的角度来看,如果你只是想要先试试看写程序,想慢慢尝试,那从Python 开始入门程序是不会让你失望的。但如果你一开始就想要学习最底层的知识及基础,或是本来就信心爆棚,人生志向就是要成为程序语言大师,那从C++开始入门可能是你更好的选择。

介绍完两个使用用途较广泛的语言Python 与C++后,在接下来的文章中,我们分别从写网站与写App 的使用目的做区隔,去简单介绍网站与App 的架构,以及适合入门的语言。

学习资源

如果你已经确定要开始学习程序语言,省去Google 的时间,先看看整理好的学习资源整理吧!


分享给小伙伴们:
如果本文侵犯了您的权利, 请联系本网立即做出处理,谢谢。
当前位置:孙宇晨博客 > 技术 > 《我想学程序,但到底该从哪个语言入门?转载请注明出处。
相关文章
  • 初学者学算法|谈什么是算法和时间复杂度

    初学者学算法|谈什么是算法和时间复杂度

  • 如何给液晶电视刷程序

    如何给液晶电视刷程序

  • ePSA诊断程序介绍

    ePSA诊断程序介绍

  • 阿拉伯数字与罗马数字转换程序

    阿拉伯数字与罗马数字转换程序