我的编程之路

今天是2021年4月27号,距离我第一次接触到编程这个概念已经十多年了。我是怎么走上编程这条道路的呢?这首先要从一部电影说起 —— 《黑客帝国》。《黑客帝国》是斯皮尔伯格导演的商业动作大片,这部电影内容比较深沉,这里不做详述,但是它在我的心里树立了一个神一般的职业 —— 黑客。电影里的黑客神奇无比,他们能够熟练的驾驭计算机,随意黑进他人的电脑,窃取资料。那一闪而过的黑框,一条条黑底白字的指令在屏幕上飞舞,我当时觉得这个职业酷毙了。也萌生了当一名黑客的念头。

像这样:

 

命令行就是程序员与系统的互交,输入命令 cd (change directory) 翻译成中文就是切换目录,计算机会在 PATH (目录)里面寻找名为 cd.exe 的程序,然后执行它。

cd F: 就是切换目录到 F 盘,F: 就是 cd 命令的参数,好比开车时方向盘向左转 30 度,方向向左就是命令,30度就是参数。没什么

在我的电脑 F 盘可以看到如下文件:

 

可以看到 Ai_Doc、C_Proj 等等目录。命令行下显示的也是这些东西。

这本是一件稀疏平常之事不值得大惊小怪,只不过当年啥也不懂,所以才觉得非常神秘。像极了爱情,没有经验的人总是那么盲目!

自从黑客和编程这两个概念在我心里树下高大上的形象之后,我开始自发的注意这些东西,碧如编程的图书。可惜由于学业,一直没有机会。。。。

2009 年,我在一本数学课辅资料的附录里面发现了新大陆,由于Pascal(帕斯卡) 编程竞赛的原因,这本书里竟然有编程的教程。我眼前一亮,书是别人的,于是我默默的编程的那部分抄了下来。

Pascal 语言是我编程的启蒙,我已经不太会写 Pascal 程序了。这种程序比较古老,偏学院派。

Pascal 出现的较早,缺乏预编译的指令,也没有内存技术,这注定它只能用作数学教学,干不了什么活。

后来,我在2010 年买了自己的笔记本。(当年那台笔记本目前还放在我的桌子上,虽然我应经不在用它了。)然后买了一本 Delphi 程序设计。(Delphi 是 Borland (宝蓝公司)开发的 Pascal 语言的 IDE(集成开发环境)。

一边打字,一边学习 Pascal。Borland 对 Pascal 语言进行了增强,添加了指针,还设计了一套GUI(可视化的图形) 开发工具,当年我不费吹灰之力就写了一个计算器。Delphi 曾经大红大紫,大名鼎鼎的梦幻西游就是 Delphi 写的,可以后来微软挖走 Delphi 的核心开发者安德斯,之后 Borland 倒闭,由于 Delphi本身bug 就多,开发公司倒闭之后就失去了商业维护。我的第一次编程自学也宣告结束。

后来,弟弟上了大学,而我高职辍学在家,在弟弟的建议下我学了另一门编程语言—— C 语言。

在xuexi111.com 这个网站上我找到了 郝斌老师的C语言视频,由于 C 比较简单,大概不到 30 天我就学完了 。C 语言的代码我比较熟练,这里随手撸一串。。

程序将 十六进制数 0x1C 分离,输出了八个数字 00011100,这是一个简单的算法。

我第一次成为了真正的程序员,然而程序却不若与语言这般简单。编程就像大海一样,我的知识只不过是这大海里的一颗石头。

我学完了才知道 C 语言,除了能在命令行窗口显示一些文字以外,什么都做不了。想显示图像用 C++\Qt,想制作 Windows 客户端 用 C#,想制作网页用 Javascipt 吧。。。。等等。于是就有了大约 600 种编程语言。

加起来编程语言长这样:

图片来自网上。

这恐怖的数量,它们都有特定的用途。这里简单的就我了解的解释下这些是干啥的。

首先排除掉非主流的一些语言,留下大约 十几种,C、C++、Java、Python、ASM、PHP、Javascript(这货跟Java 没什么关系,就是蹭热度,也蹭火了)、Matlab、Shell、Verilog HDL、SQL。。呵呵,学无止境啊。

首先是Maltab ,Matlab 是一个商用数学软件,用于算法开发,支持矩阵运算,支持复数、可以方便的进行算法开发,计算和处理数据。Matlab 涵盖了所有尖端学科的数学知识,神经网络、生物医学、金融分析、统计、有限元等等。一个强大的数学仿真工具 Simulink,可以方便的进行数学建模,求解微分方程等等。这里简单的演示下 Matalb 的绘图输出功能。

Matlab 极其强大,这里展示的功能不过 Matlab 最基本的功能。鄙人才疏学浅,望大神见谅。

Verilog HDL 和 VHDL,HDL(Hardware Description Language)即硬件描述语言,这个两个语言类似,都是用来设计硬件的。Verilog HDL鄙人会一丁点:

这个代码描述了以下电路:

使用语言来描述电路,抽象级别更高,也更有效,芯片就是用这种语言编写的。

Verilog HDL 也能支持仿真和验证,能出波形图,这在我的博客里占了太多内容,这里不再赘述。我觉得VerilogHDL也算的上一种企业级语言吧。

Verilog HDL 也极其的难学,也极其的昂贵,这也许是世界上最贵的代码了。,不说了。

ASM 就是汇编语言,一种助记的机器语言,长这样:

X86-64 的汇编(GNU 格式的)。汇编的用途主要在 CPU 及相关硬件的初始化上,目前汇编基本上使用编译器自动生成,不再需要手工编写了。呃呃,黑客就是干这个的,反汇编分析代码,找到漏洞,看似很牛逼,基本上靠写游戏外挂生存。另外早年的病毒软件也出自黑客之手。

黑客这门手艺,就是逆向研究别人的东西,你做了一个产品,黑客就是把东西拆开分析的人。这项技术基本上盲人摸象,出不了什么大成果,工作需要耐心、细致和运气,主要用来搞破坏。最大的功绩就是破解收费软件、绿化流氓软件。黑客多数无名默默无闻到死,出名的大多以出恶名而闻名于世(震荡波、熊猫烧香、千年虫还有永恒之蓝)。真的没什么好崇拜的。

 

Shell (包括 bash、csh、cmd、PowerShell)等等,它们主要用来控制操作系统,如下,使用 CMD来查看网络信息:

可以看到,CMD (命令提示符),输出了我的个人电脑的一些信息。除了操作系统之外,一些大型软件,AutoCAD、Cadence 也有自己的 Shell 用于与内核互交。

 

C++ 语言,由于 C 语言的开发者看到了 C 的不足,又开发的 C++ 也就是 C Plus Plus (增强版的意思),C++ 兼容 C。Qt Company(奇趣)开发了一个巨大无比的 C++ 库,也叫 Qt

Qt 包含了一种叫做信号槽的独特机制来支持GUI 开发。目前 Qt 已经更新到了 Qt5

以下是 C++ 的代码展示:

C++ 增加了命名空间和操作符重载等功能,抽象能力非常强大。而且C++ 性能极佳,绝大多数的游戏引擎(虚幻引擎)、视频解码器、搜索引擎、浏览器等都是 C++ 写的。除 Qt 之外C++还有一些图形库,碧如GTK+ 等等。但都不是主流技术。C++ 用在对软件性能要求极高的地方。学完了基本上也只能出个黑框框,做不了界面。

 

网页三剑客 HTML、CSS、Javascript,几乎所有的网页都是这三个货写的。长这样:

HTML 是一种标记语言,主要用来组织文本。

CSS 也是标记语言,用来修饰网页,上面网页的蓝底白字就是 CSS 修饰的结果。上图中的蓝色方框部分就是 CSS 代码。

Javascript 用来给网页展示动态效果,上面的代码实现了点击按钮显示时间信息。

HTML、CSS、Javasscript 运行于浏览器之上,浏览器是一种专用的虚拟机,主要用来展示图形界面。浏览器动辄几十兆,还需要一个操作系统垫底。基本上只有 x86+Win、ARM+Android 才能跑得了浏览器,浏览器代码动辄数个GB,想移植浏览器于其他平台目前无异于登天。

而且浏览器巨大的内存开销也就意味着技术还有很大的提升空间,有提升空间意味着技术还会进一步的迭代。

C++ 没能解决算法的问题,编程只能自己找算法,于是Java 就横空出世。Java 的两个重大的技术革新,其一:使用虚拟机,虚拟机可以免疫硬件的差异,实现二进制跨平台"一次编译,到处运行"。其二 Java 还包含一个强大的官方库,包含大量算法,用户程序员只需看看文档说明,就能够免去算法的苦恼。

Java 之后继续横向发展,出现了多个平台的 Java 技术,面向 web 的 JSP、还有著名的嵌入式版本(诺基亚塞班的 S60V2、S60V3)均基于 Java。这只是 Java 技术的冰山一角。

著名的Android 操作系统(这里指系统组件,Android 的内核还是Linux)也是 Java 写的。由于我没有学过 Java,这里不多做评论。

Java是一门真正的企业级语言。可惜Java 的语法又臭又长,给一段让大家感受下:

/*一个简单的Java应用程序,显示内容:Hello World!

文件名为Hello.java*/

class Hello{

  //程序开始于main()

  public static void main(String args[]){

    System.out.println("Hello World!");

       

    }

 }

 

Python,Python 是一门解释型语言,和 前面的Shell 类似,

#!/usr/bin/python3

print("Hello, World!")

 

这货开发效率极高,写的快,运行就比较慢了,在 Web 开发领域也红极一时。Python 在爬虫机器人这个领域极有优势。

Python 包括一个叫做 pip 的工具,可以安装 Python 的软件包,实现软件包的安装、升级、卸载等功能,这点比 Java 的库在功能上还要更进一步。

 

2004 年以后,出现了多核处理器,以上所有的语言对于多核处理器都没有很好的支持,Java 选择使用了框架来支持多核。由此为分界线,业界出现了原生支持多核的编程语言Erlang 和 Golang。

Golang 由Google 开发,它也是一种企业级语言,这货并发高的可怕,性能无比强悍,无需虚拟机,速度高于 Java。未来可能会取代 Java。Go 语言我学了一点:

Go 语言出现的比较迟,目前也只能操作命令行,而且Go 主要用于服务器端,碧如短视频业务,还有一些高并发的网盘、游戏服务使用 Golang来编写。Golang无意向GUI 等桌面方向发展。

 

还没完,C 语言有个很神奇的功能—— 指针,这货很高级,不用指针的话 C 语言函数只能返回一个参数,基本上没法用,字符串处理和函数也必须使用指针,用上指针经常出现内存泄漏、野指针等内存安全问题,于是内存安全的且无需 GC(垃圾回收器)的 Rust 横空出世了。

Rust 主打内存安全,性能高、无需GC,这意味这 Rust 可以用来写操作系统。在这之前绝大多是操作系统都是 C 写的,Linux、WindowNT 都是使用 C 语言来编写。Rust 如果发展良好,一定会取代 C 语言。目前微软 Win10 的安全补丁、游戏引擎的反外挂补丁,也逐步采用 Rust 语言编写。

Rust 代码比较奇怪,抄一段给大伙看看:

fn max(array: &[i32]) -> i32 {
    let mut max_index = 0;
    let mut i = 1;
    while i < array.len() {
        if array[i] > array[max_index] {
            max_index = i;
        }
        i += 1;
    }
    array[max_index]
}

fn main() {
    let a = [2, 4, 6, 3, 1];
    println!("max = {}", max(&a));
}

 

Rust 出现了很多新概念,目前比较难以上手。Rust 是编译型语言,平台方向也支持 STM32、RISC-V 等新型平台。

 

还有 Windows 平台的技术,C#,微软出品,C++++ 的意思,可以可视化的构建界面,由于早期微软不开源,直接失去了很多的开发者,这导致C# 错过了发展的黄金期。虽然 C# 语法较为 C 、C++ 更为优美,但是市场、性能已经被 Java 吊打。目前背靠大树,依旧苟活的很好。主要开发环境为宇宙第一的 Vistual Studio,此外 Unity3D 这个游戏引擎也使用 C#。C# 我认为没有学的必要。

 

此外 Aplle 公司也有自己的技术哦,Object-C 和 Swift ,专注于开发 IOS以及MacOS。开发环境为 CodeX,这个软件只能用在 MacOS 平台。我呢由于没有米去购买苹果的笔记本,于是接触不到。

 

(⊙﹏⊙)。

posted @ 2021-06-14 21:36  夏日时光  阅读(310)  评论(0编辑  收藏  举报