编程往事:从CheatEngine修改造梦西游讲起
柏舟 新冠4年 10-30
我快上初中的时候,朋友发给我造梦西游的修改器,使用CE,搜索WPXT(物品玄铁的首字母)然后替换成其他二字物品的首字母,就可以从商店买到修改的物品。还有搜索双浮点数修改成功率,就可以实现100%的物品合成和升级。当时并不理解双浮点数这些是什么意思,觉得特别神奇。现在看就是直接修改程序的内存,.data中的静态变量改变了,而代码中访存的路径是写死的,自然逻辑就变了。如果这个程序是纯联网的,并且做了校验,就很容易被封号,但是这个方法仍然适用于我的世界等等在本地有逻辑的游戏。
做HTML网页
后来上了初中,信息课教做HTML,用Dreamweaver做网站。当年还是HTML4,网站用table布局很常见,我感觉老师也不懂div的布局。做了个网站参加比赛,只会用绝对大小的布局,在我的电脑上网页是全屏的,而老师的电脑分辨率不一样,就只有部分了。现在想起来恍若隔世,HTML4已经好多年了,table布局也没有了。以前也没有那么多JS,当时我只知道静态的html文件,事实上我在引用图片的时候连文件路径都搞得不是很清楚。
上大学
2019年考大学的时候,人工智能、大数据已经火了好几年了。996的名声广为流传,再加上没怎么接触编程,就不想搞计算机。而且信息类分数很高,厉害的人都考信息类,我成绩也不好,竞争不过这些人。所以当时一面心思想搞数学或物理,然后阴差阳错地进了航空航天。
大一学了C语言,当时啥也不懂,用CodeBlocks,学完了什么也不会。大二上一门课需要用Python,花了一周自学,发现Python很有意思,写了个Tk小程序,给了我极大的自信。于是寒假花了一个月的时间学了Django和Vue.js,当时学得特别艰难,因为http这些什么都不懂,MVC只看得懂概念,Django的模板、ORM还有自带的东西,抓不住重点。学Vue.js的时候,我以为网页就是一个HTML静态文件,引用CSS在header加上URL,浏览器下载下来就完了。我并不明白Node.js Webpack这些东西是干嘛的,到底要不要加header的css路径,也不知道什么是CSR,我后来才知道Vue的Router是浏览器内部模拟的,相当于下载了一个小程序。文档里同时提供了内嵌vue和脚手架方案,给了我极大的困惑,我不明白为什么前面还是内嵌的Js后面直接就是vue模板文件了。
技术学会了,网站却没有做成功,但是我觉得我是真牛逼,从零开始学都能让我学成了。后来我陆续看了《程序员的自我修养》、《SICP》等书,然后接触了Clojure、Go、Smalltalk、Ada、CPP、Rust、Java、C#这一串编程语言。其中Clojure、Go、Rust、Java、C#写得比较多。
这个网站当时是网站搞失败了,就参加创新创业大赛搞了一个简单的词典应用,用Django+Vue搞的。所以域名带dict,后来结束就被我挪作私用。搞完后偶然遇到一个课题组,缺人做前端,结果后来又做了后端的分布式系统。
编程感悟
我其实到现在都没有想清楚,我没有特别喜欢编程,为什么成了现在这个样子。能学成现在这个样子,可能是因为需要做项目,而且只有计算机能做,就不知不觉地学了。我上高中的时候想傻逼明知道996还去,然后上大学就自学了;上大学跟着搞分布式系统的时候,我想算法这么卷,傻逼才去,然后现在不得不搞强化学习和最优控制了。唉,真香可能会迟到,但是永远不会缺席。
我个人觉得学编程语言很简单,在我学过C和Python之后除了Clojure、CPP和Rust学了一周左右,其它就是一看就会。我觉得不需要这么多人学计算机,因为计算机真的能自学,虽然我学得很艰难但是它只是人造的经验性的知识,涉及的数学很少。不像力学,空气动力学和理论力学泛函分析拉格朗日方程,我到现在都看不懂。我都不好意思说我是学航空航天的。
学习编程
学习编程第一关,编程语言不难,但是配置环境很难。我大部分时间都是花在学如何import其它文件的函数和如何构建上面,比如CMake和Webpack等Js工具链就是一坨大便,看着就烦。Go、Rust和C#包管理比较好,Java9的兼容性一直不怎么样,“你发任你发,我用Java8”。
其次是IDE,虽然说我看过Emacs,但是我实在是不喜欢折腾IDE,最后选择Vscode。我相信很多人并不清楚怎么Debug,弄不清楚launch.json。在编程语言集成方面,Go的工具链最舒服,虽然Go的语法真的垃圾,但是它默认配置下,引用其它库的函数自动import,自动format,自动移除多余依赖,我感觉生产力比Python都高。
学习编程第二关,Linux和命令行。我感觉我能玩明白这个东西可能跟WSL和搭建服务器有关系,当时觉得最难的是弄不清楚文件路径,而且也不知道usr, var这些东西是什么。
总的来说,自学最难的是连大体的框架都不知道,掌握不了重点,不得不学大量碎片化的知识,花时间整合,死磕,要么直接放弃。我估计上班后自学是不可能的。对于我来说,学这么多编程语言是有用的,比如学完go和rust后就知道interface怎么用,学了clojure就知道怎么函数式编程。我现在写csharp,基本全是readonly 没有virtual。
编程语言选择
- 你不能讨厌这门语言。
- 库完善,资料找得到,社区资源丰富。比如Java和Python。
- 你应该关注核心业务,比如说我就不是程序员,你不能指望非计算机的人折腾Cmake,ln这些根本不是核心业务的东西。所以你可以选择放弃CPP或者把那帮人打一顿。
- 除了C和CPP,一定不要有多种语言混编的想法,太难调试了,太难管理了,太难部署了。所以最好要选一门基本啥都能做的语言。对,我说的就是你
CPP,C#。 - 如果是多人协作,尽量选择大家都会的语言,或者Java这种容易招人的语言,或者GO这种容易学会的语言。