了解编程

从最原始复杂的 机器语言 ,到至今更符合人类思维的 各大高级语言,几乎所有的编程语言都在为 人类的运算任务或者便利 服务。那么先了解一下有那些编程语言吧!

各大编程语言简介

Python

是一种解释型的编程语言,它有海量的开发库(使用 pip 或者 conda 管理),如:pytorch 和 TensorFlow(深度学习)、scipy(科学计算)等库可供使用。

编码效率虽然很快,但执行效率还是比 C/C++ 略逊一筹(Pytorch 等深度学习库的计算除外,因为最后那些计算库还是用 C/C++ 写的)。

源文件以.py 结尾,运行这类程序最简单只需要 python 程序.py,当然怎么运行这些程序最好看一下 README.md。

C/C++

这是作者最推荐先学的编程语言。C/C++ 算是高级语言中的低级语言(不是什么 C/C++ 人上人,而是高级指的是接近人类的思维方式,低级指的是接近计算机的计算方式)。强调类型,还提供位运算相关的运算符以供更好的对内存之类的二进制玩意进行读写……

不同于其他编程语言,它需要先编译连接后才能运行,通常这些过程会通过 make 进行管理(一般大的项目会这样做,小的程序直接 g++ 源文件.cpp -o target就行)。

据说使用 gcc/g++ 的时候,可以吸氧(-O2)提高运行速率,吸臭氧(-O3)来大幅提高运行速率,但会限制运行时的平台 / 架构。(雾)

有一说一,Python 等解释型语言的爸爸是 C/C++,类似与 Javascipt,PHP 等语言使用了 C/C++ 的运算符和控制语句语法。因此先学 C/C++ 可以给转型到 JS,PHP 等带来较大的优势(学的是基础和基本思想)。

C++ 与 C 不同的是:增加了 class(类,可以 OOP(面向对象编程))、模板等更方便地进行 OOP。

除了 BASIC 语言外,C/C++ 在现在也是保留了 goto 语句(其他的编程语言几乎都删了这毒瘤)。

Javascipt

也是一门解释型语言,用于给 HTML/PHP 文档增加在客户端(前端)可操作的逻辑以及配合 CSS 来构建更吸引人的动态网站。还整出了用于后端的 nodejs,典型的例子是 云崽……

这玩意的浮点数精确程度很迷,如下图:

特性,不解释

PHP

是世界上最好的语言!(雾)

PHP 脚本可以嵌入到 html 文件中构建动态网页,还有非常丰富的函数库以及有更加方便的连接数据库的功能。

简单的示例如下:

<?php echo "这是最简单的PHP脚本,它会输出这一句话。"; ?>

它使用了 Perl 的弱类型与变量 和 C/C++ 的控制语句与运算符 等特性,使得 PHP 会更加容易地入门。

Shell

主要分为常见且应用广泛的 Bash 以及更强大(支持浮点数)的 zsh,不同于其他编程语言的是以一句一句地执行,且以空格分隔 程序与参数。

它也借鉴了 C/C++ 的运算符与控制语句。

从C/C++开始(推荐)

首先,作者极其不推荐看老谭的“红宝书 / 绿宝书”(作者有他的绿宝书也是“受害者”之一),因为这系列的书使用的环境极其古老(Turbo C 和 Borland C++,这些都是 DOS 时代的老古董了),其次是“遇到警告先不管”会给开发可能带来不可估量的灾难,还有变量名的命名极为乱套(int x,y,z;//这是最为忌讳的命名方式,因为其他人不理解你把这个变量命名为单个字母是什么意思)。

还有,不要一开始学就觉得 C/C++ 难(大可能是受老谭的书的远古内容影响),心态也会影响学习的主观能动性。()

从 cstdio/iostream(标准库)的输入输出函数 开始是一个不错的选择,然后学习理解以下内容:

  1. 变量类型
  2. 控制语句
  3. 常见算法(没基础别死磕在不懂的地方,这是个长期的过程)
  4. 函数
  5. 类与对象(C++)(从这里开始最好要有OOP思想)
  6. 继承与多态以及喜闻乐见的运算符重载(C++)
  7. 指针(这个有很多人觉得难,其实是 带特定类型的地址 类型,用于指向对应变量的内存地址)
  8. 字符串和数组(本质上就是指针)
  9. 引用(C++)
  10. 模板 等一些C++11的新特性(了解一下就行)

这里推荐看《C++ Primer Plus》来开始学习 C++,摆脱老谭的苦海。(雾)

然后可以尝试去理解 多线程与互斥机制 ,对转型到 Javascript 等有很大帮助。

有了C/C++的基础后,可以尝试做的事

当你有了 C/C++ 的基础后,学习新的编程语言的难度相比没有基础而言是大幅度降低的,只需要了解这些语言间的不同点以及特性就行。

例如作者在有了 C/C++ 基础后快速而流畅地转到 Javascript、PHP 等 Web 开发相关语言。

还可以尝试 GUI 相关编程,跳出黑框框的终端,踏入 GUI 的世界。

试试GUI

不同于 CLI,现代的 GUI 通常是消息事件化的、多线程的,下面了解一些常见的 GUI 框架 / 库:

MFC

这是专属于微软 Windows 的远古的 GUI 库,Linux 下的 Wine 可以运行大部分使用这库的软件。

相当于面向对象版的 WinAPI。

由于历史原因,MFC 惨遭淘汰(?),不推荐学 MFC 库。

Gtk

Linux 下的开源 Widget(控件)库,隶属于 Gnome 阵营。

主要使用 C 语言开发, 具有 GObject 即 GLib 对象系统。

不过有移植到其他如 Win 的平台的版本。

Qt

(读作 cute)是个 跨平台 C++ 的开源(还是开源!)的 App 开发框架。主要用于写 GUI 程序,被广泛的应用于各种领域。

无论新手还是老手,推荐用它带的 IDE: QtCreator。

集成了各种模块,不过作者尝试过静态编译(MinGW+Qt5),一个 Release 版本的可执行文件起码 17MB 那么大。(大即是好,大即是美)(雾)

使用了更加容易理解的 Signal/Slot 机制,用于绑定点击按钮等产生的事件,来作出回应。

尝试了解操作系统库

例如强大而复杂的 WinAPI 或者 Linux 等,不过作为新手还是脚踏实地地打好基础再来了解最好。

结尾

学习编程嘛,是个循序渐进的漫长的过程,不要太着急地去速成。

你 急 了 ?