谈谈我与编程


我一直想写点东西来谈谈我对编程的想法. 我的编程水平不高, 一个蓝桥入门级别的双周赛只对了第一道签到题.

VBSC++

Shellof 是我发小, 很小的时候和他谈理想, 我说 设计师, 他说hacker.

大概是上初一, 暑假里的一天, Shellof到我家向我展示他学到东西. 我很无聊地盯着他, 看他操作, 他在我电脑上新建了一个后缀为.vbs的文件, 在里面写了一行:

1
msgbox("Hello, World!")

然后保存运行, 电脑上竟然弹出了一个窗口, 上面显示着Hello, World!.我当时感觉, 诶呦, 有两下子.

我马上起了兴趣. 接着, 他又来了个升级版:

1
2
3
do
msgbox("你被坑了, 关不掉了吧")
loop

保存运行, 这个窗口还真的关不掉. 他说, 关掉它有两个方法, 第一个, 重启电脑, 第二个, 打开任务管理器, 把这个窗口的进程结束.

哇塞, **有意思. **他还来:

1
2
a = inputbox("请输入: ")
msgbox(a)

这之后我就开始喜欢上这东西了, 所以我的第一门语言应该是 Scratch VBS

后面我自己研究VBS啊, 研究出计算器啊, 坑人的东西啊. 后来Shellof给我推荐了Python. 借给我一本Python的书, 那是是初二, 我开启一学期的Python学习.

1
2
# Python
print("Hello, World")

我拿着那本书, 再到网上找教程,视频啊文档啊, 就这样子学Python. 和很多初学者一样, 学到列表不会喽.

不过我还是硬着头皮看, 最后也都是能学会的.

初二下学期, 新冠又搞得只能在家上网课, 说来惭愧, 此后一上网课, 就是我编程技术突飞猛进的时候. 初二下学期的网课时期, 我学习了PyGame, 并写出人生中第一款游戏, 仿照当时很火的文字游戏, 写了个低配版的. 后来更新了好多版本. 但由于一直无法理解的概念, 我当时的代码很烂, shi 山一层一层往上叠. 之后就越来越觉得无趣了. 这便动了换语言的念头.

当时也是屯了很多教程网站, 我就在菜鸟教程里面翻各种语言, 当时比较迷茫, 不知道要干什么, 后来我选择了C++.然后就找教程啊, 看不懂, 放弃了. 哈哈哈不过当时我想着, 不然先学C,作为一个铺垫, 再学C++应该就会轻松一点. 好的然后就找教程啊, 看不懂, 放弃了. 哈哈哈这回更迷茫了, 我就放眼前端, 学习HTML.

1
2
<!-- HTML -->
<p>Hello, World!</p>

我当时只会HTML, 什么CSSJavaScript, 只是听说过一遍, 根本不会用, 也不知道他们的重要性. 你想想, 光用HTML能写出啥? 一点样式都没有, 当时还不会相对路径, 网页网页间跳转用绝对路径, 发给别人就打不开了哈哈哈. 所以也是很快就弃坑了哈. 这个时候, 我竟然自不量力地去搞网络后端, 学PHP, 原因就是看到了网上那句话:

PHP是世界上最好的语言

1
2
3
<?
echo("Hello, World!");
PHP?>

当时PHP教程里说, 学PHP要有C语言的基础, 我C语言还没明白呢, 这让我动摇了学PHP的决心. 后来学着学着才知道, 写PHP最好要有一个服务器, 好的, 弃坑了. 弃坑就去学C语言, 学C语言的主要目的是为学C++打底子.

1
2
3
4
5
6
7
8
// C
#include <stdio.h>

int main(int argc, char* argv[])
{
printf("Hello, World!");
return 0;
}

当时被C语言的花括号吸引了, 我也不知道为什么会喜欢花括号. 后来C语言学到结构体左右吧, 准备向C++进军.

1
2
3
4
5
6
7
8
9
// C++
#include <iostream>
using namespace std;

int main()
{
cout << "Hello, World!" << endl;
return 0;
}

我对C++的热情一直不小, 在学习C++的过程中, 我终于搞清楚了的概念. 之后就一直想用C++做游戏开发. Shellof向我推荐了EasyX库, 我嫌一堆API难受, 不想学, 在网上到处C++图形库游戏库.

有一次找到Qt去了, 下载, 安装, 不会用, 卸了.

又有一次甚至误入WindowsAPI, 给我搞劝退了. 看来网上说得对, 用游戏引擎开发事半功倍.

好的那我就去学游戏引擎, 就学当时最主流的Unity引擎.

1
2
// Unity + C#
Debug.Log("Hello, World!");

Unity当然用C#啦, 我就先学了C#.

1
2
3
4
5
6
7
8
9
10
11
12
13
// C#
using System;

namespace Application
{
public class Program
{
public static void Main()
{
Console.WriteLine("Hello, World!");
}
}
}

当时把C#学到了和C++差不多的水平, 感觉足够了, 下载Unity, 安装, 不会用, 看教程, 不会, 弃坑了.

当时很无奈, 不过想想C#倒是入门了, 也就算了. 现在老老实实学C++吧.

好的, 我虽然没有接受EasyX, 但是我接受了Easy2D. 不错的游戏引擎, 用它写了点小游戏. 后来想想用一些EasyX也可以啊, 就又去玩EasyX. 这两个库都挺好. 我记得我用EasyX库做了一个绘制像素画的简单程序, 现在想想还挺好的一个项目, 只是已经很久没有再维护了, 我现在要是打开项目看, 那一定会说: 啊? 我自己看不懂我自己写的代码了. 不行, 这个项目我哪天一定得再捡起来.

我又没得学了, 有时候打开编辑器, 快速地敲了一个输出Hello, World!, 然后看着自己的Hello, World! 发呆. 这个时候也离新冠解封不远了. 回到学校意味着不能再碰电脑了. 这之后很长一段时间, C++一直处于停滞状态.

初三上学期, 那个时候是冬天, 网上小道消息说, 最近人贩子很多, 我在网上越看越害怕, 不敢摸黑上下学了. 然后每天就拉着Shellof上下学. 路上我俩可以聊很多. 然后就有了一个念头, 组建团队, 开发一个小游戏, 在初三毕业的时候放出来. 第二年 (2023) 2 月份左右, 我们定好了团队名称: Lit Studio. 然后搞策划, 决定使用C# + Unity开发游戏. 好的, 我们那段时间一直在不停地积累理论知识. 4 月份左右, 我招来了两个人当美术组. 这样四个人的团队已经建成了, 就等中考结束到毕业典礼之间 6 天时间制作一款纪念初中的游戏. 我们也花费了很长一段时间来想做一款什么样的游戏. 最后, 我脑中逐渐有了雏形, 这种画面是很难用语言描绘的, 但是我想, 应该可以用计算机语言描绘. 我们还制定了好几套计划, 以备突发情况…… 你无法想象我们做了多充足的准备.

那天下午, 中考结束了. 我一回到家就开电脑, 打开事先安装好的Unity引擎, 搞了快 4 个小时, 连一个封面都做不出来, 这一切还建立在电脑散热嗡嗡响的基础上. 我受不了了, 马上在团队群里发消息: “A 计划无法继续进行, 火速启用 B 计划 @Shellof明天来我这一趟. “

所谓 A B 计划, A 计划是用Unity + C#进行开发. 我考虑到之前Unity把我劝退过, 所以提出了 B 计划, 即: 在 A 计划无法正常进行的情况下, 使用Easy2D + C++快速搭建游戏. 当然还有 C 计划, C 计划是, 在 A B 计划都无法实施的情况下, 使用Easy2D + C++只搭建一个游戏封面, 然后在展示的时候说: 游戏剧透就不好玩了, 等你们回去自己试. 这样就延长了几天的开发时间.

我启动了 B 计划, 开始火速搭建. Shellof也表示Unity在他的电脑上也跑不动. 那天晚上, 我就完成了封面的搭建和内容的简单布置. 但是, Shellof并不会C++, 这是个头疼的问题, 也就是说, 接下来只能是我单打独斗了. 那是我做的最大的项目, 6 天时间我敲了 2024 行代码. 而Shellof完成了团队网页的搭建. 我也是把它带到了毕业典礼上, 这个项目叫 Lidarkght.

初中毕业后的那个暑假, 我想试试Qt, 然后下载, 安装, 用得很晕, 然后又卸了. 再然后我就在B站上发了视频, 因此认识了一些网友. 这之后我才知道我有多菜. 这些认识的网友一个个都比我厉害太多了…… 在这种压力下, 我决定深挖我现在学到的技术. 认识他们之前, 我不会用git, 不会STL, 模板也不会, 现代C++也不会. 认识他们之后, 这些我都去学了, 且不说学得有多深, 至少是极大地拓宽了视野.

暑假里, 我又想搞游戏开发, 在网上找好用的游戏引擎, 结果遇到了Godot这款神级的引擎, 拉着Shellof一块学了学, 有个入门的水平了.

1
2
# gdscript
print("Hello, World!")

Godot一般使用GdScript, 这个语言的语法与Python很像, 学起来毫不费力. Godot也是我认为最好的一款游戏引擎.

很快就开学了, 到了高中, 我又有了一个大计划: 同初中毕业一样, 我要开发一款游戏, 来在高中毕业的时候放出来, 从现在开始, 打磨三年. 现在正在使用Easy2D + C++进行开发.

现代C++是个很有意思的东西, 我感觉从C++11开始, C++的新标准越来越抽象, 也越来越厉害. 最让我感兴趣的是auto类型, Lambda表达式和模块. 对于自推导类型的auto类型, 网上有一段很迷惑的代码:

1
2
3
4
5
auto auto(auto auto)
{
auto auto = auto + auto;
return auto;
}

这显然是在整活, auto作为关键字肯定不能作为函数名和变量名. 我也是当做一个乐子. 且不说犯了关键字, 这段代码和一下一段是等价的:

1
2
3
4
5
auto f(auto x)
{
auto n = x + x;
return n;
}

这还是新标准. 这和以下又是等价的:

1
2
3
4
5
6
template<class T>
T f(T x)
{
T n = x + x;
return n;
}

这就是函数模板, STL为解决问题提供了大量模板和函数. 这是C++成为最强大的语言的原因之一.

C++难而强大的语言. 我对C++的了解只是冰山一角, 然而就此已经感受到了C++难度之大.

同时我发疯地去看汇编语言教程, 那真的是伤脑筋的东西, 到现在也记不住一个HelloWorld程序, 恍惚地记得:

1
2
3
; Assembly
MOV AH, 9
INT 21

这是用来输出的. 像什么AX BX一大堆寄存器, ADD SUB 一大堆运算符, 很难学. 我学了一下午, 弃坑了.

ShellofInclude

**我一直不知道如何去感谢Shellof, 他可以说是我的启蒙老师的地位. **

前面说过, Shellof是我发小. 我们之间一直都是, 一个人发现了一件有意思的事, 然后两个人一起玩, 但结果一般都是我后来居上. 就比如说编程, Shellof比我先学, 我后学. 大概在我用PyGame写低配版文字游戏的时候, 我的能力就已经开始和他齐平了. 在意见方面, 我感觉他有点像我的跟班. 之前的很多事都是让我做主. 有一次我和他准备坐地铁出去玩, 他之前就说过想坐地铁去苏州. 那天我就找他啦, 我说, “不然明天坐地铁去玩吧, 去苏州? “ 他说好好好. 我又问, “或者是反过来去上海? “ 他说, “你决定. “ 我当时就感觉哈, 之前很多事都是我决定的, “这回你来. “ 最后让他决定, 去了苏州.

他在后来选择了前端与网络安全这方面, 或者是他之前说过的hacker. 我则相反, 我不爱和网络打交道的开发. 所以想做独立游戏开发. 前不久, 23 年底, 我和Shellof聊高中选科的事. 他说不想像计算机方向发展了. 我吓一大跳. 后来我了解到, 原因是他进入了 我抛弃Python想换语言学的 那个时期, 比较迷茫. 那个样子大概就像我之前说的, 盯着自己敲的HelloWorld发呆. 我告诉他这情况我经历过. 嗨~ 我那一小段时间里, 换了好几个方向, 不过最后选择了C++. 换个语言没问题, 当时他搞前端, 用Java. 我说 “不然试试C/C++? “ ShellofC++太难了. 我知道C#这个语言是介于JavaC/C++之间的一门语言. 然后就告诉他, “不然你先看看C#做个过渡? “ 但Shellof一直不看好C#这个语言, 他说, “C#几乎是在抄袭Java, 虽然后来JavaC#开始互抄. “ 后来他打算开始学C/C++.

C++难. 话是这么说, 可C++到底难在哪里呢? 我的经验告诉我, 只要有一点其他语言的底子, 入门C++不是件难事. C++难在后面的指针, 模板, 数据结构 (鬼数据结构我现在还不会呢). 新标准中的智能指针让指针的使用变得简单了些. STL看着复杂, 多用用就知道了它有多强大.

敲代码的人电脑坏了有多痛苦

还是发生在初二寒假那段新冠封锁在家的时候, 我那个时候在Shellof那里了解到Linux系统. 当时的我是Windows系统刚刚会用一点点. 听到有这样一个神奇的系统还是蛮惊讶的. 这个时候Shellof告诉我, Windows系统有三种方法使用Linux. 一种是Windows系统里有个WSL, 叫做WindowsLinux子系统. 另一种是装一个虚拟机. 最后是装一个双系统. 我先是试了WSL, 但是电脑总告诉我哪哪哪有问题, 无法正常使用. 后来我就装了个Ubuntu的虚拟机. 跑起来有点卡, 不过我的愿望算是满足了.

我这台笔记本, 原装的是Windows10. 我在新冠被封的一开始就把它升到WIndows11了. 人家Windows11毕竟是新系统, Bug还是比较多的. 更大的原因是我装的是Windows11的家庭版. 相当于是最差的了. 所以就会出现什么情况呢? 我上着网课好好地, 咔! 电脑蓝屏了. 或者是电脑屏蔽突然花了. 这些情况让我对Windows11又爱又恨. 爱当然爱在它那GUI啦. 人家说Windows11用着不习惯. 为啥我没有不习惯呢? 因为我就从来没有去习惯过之前的系统.

这就是问题的根源. 我要一个更稳定的系统. 所以我可以运用之前的经验, 装WIndows10Windows11双系统. 上课时用WIndows10, 平时用Windows11. 这是个美好的愿望. 然后我就跟着网上的教程去装. 最后重启电脑, 然后电脑就再也没有启动了, 一直是 开机, 开一半, 自己关了, 又自己开了, 又关了. 这样一直循环.我当时直接傻了. 我的天, 我电脑坏了? 我的代码! 当时在写低配版的文字游戏, 那一个项目有一千多行shi山代码啊.

然后心情就非常不好. 不过我通过一些方法, 把电脑里的重要数据都copy出来了. 但是不能敲码了啊. 那个时候, 小区还在封着, 出去修电脑是不可能的. 至于上网课, 就暂时用一台十几年前的联想Windows7凑合着. 所以我从那是起就开始对装双系统产生了一种极大的恐惧. 不过后面Shellof装过WindowsArchLinux的双系统, 并没有出乱子.

最后, 等到 4 月份左右, 小区解封了, 我就马上抱着电脑去修. 最后重新装了Windows10系统. 回到家我还是心痒, 没几天又升到Windows11了. 不过这次我比较幸运. 本来装的Windows10是专业版, 升到Windows11还是专业版, 那这专业版可比家庭版稳定多了. 所以到现在我一直用着稳定的Windows11. 出于对微软的认知: Windows系统隔代香. 所以我会在Windows12一发布就**立刻升级. **

总结

当我发现自己竟然和计算机有了共情, 我就觉得我已经找到自己的路了. 现在回想一下, 自己之前竟然干了这么多, 还是蛮充实的.