我对编程的想法

大半年没有写任何东西了,这段时间发生了很多事情,对编程的想法也在发生着改变。以前是怕编程,怀疑自己不是编程的那块料,毕竟我从来没有做出过任何值得称道的项目。内心深处因为大学没有扎扎实实学过任何一门编程的课,总有那么一个障碍。看到这些复杂的项目觉得自己肯定写不出来,也搞不定。

改变是从学习完 C++ 基本的内容开始的。在学习 C++ 之前,我觉得这个东西极其的神圣,学会了肯定就什么都会了,对于会 C++ 的人有一种发自内心的觉得不可超越。直到学习完之后才发现,这东西并不是不可为,并不是学不会。而且由于我极其认真地几乎将整本《C++ primer》都翻译成了中文,去掉了其中解释性的句子,只保留了最简单的描述以及复杂点的解释。说实话,C++ 语言的各种用法确实太多了,而且需要注意的坑也太多了,即便是这样学完了之后,如果要真的写点东西的话还是有非常多地方需要深思,免不了要多翻一下自己的笔记。

然而我已经知道 C++ 是怎么回事了。虽然肯定达不到精通的地步,但想要继续深入的话也是完全可能的。我就此打住了,原因是如果用 C++ 去找工作的话,毕竟不太现实,工作相对来说也比较少。但我已经可以用 C++ 写点东西了,慢慢就会越来越熟练的。

这一段经历给我后续生活的改变是,我开始关注层次更高的东西——算法。再没有任何一门语言会让我如此牵挂,别的语言学习起来简直是小儿科,拿着能上手写点代码都一两个小时的事,就算是真的要写项目中的代码也不是什么难事。5~6 月的时候公司需要开发一款简单的区块链游戏,我学习了 solidity 语言、学习了 javascript 语言以及 node 框架,也顺利写了点东西。开始的时候很慢,要查 api ,要了解奇怪的异步编程方式,要学习工具的用法,渐渐也顺手了,积累了一些代码,后面的事就轻松了许多。

学习编程并不是只靠看书就能达到的事情。编程是就是敲代码,得一点点地敲起来才能慢慢掌握。这跟学游泳、学开车、学音乐是一样,得练。而且不能单纯地抄写。得解决一些问题,从处理一些日志文件、生成随机字符串这些非常基础的问题开始,再到一些更加大而复杂点的问题。很多需要处理的问题都是一样的,只是用不同的语言去表达而已。能用 lua 解决的,用 javascript 也是一样的,除了若干语法不一样之外,也没什么不一样的。它们的惯用方式的确不一样,有些强调异步,有些强调协程。深入去学习这些工具,甚至在别的语言中模拟这些东西。我们曾在 lua 中实现了事件驱动的机制,这完全是从游戏客户端的编程中借鉴过来的。

慢慢地我开始知道了编程的一些门道,慢慢地知道其学习的方法。编程语言的语法固然重要,但如果了解之后不经常使用的话肯定会忘记,现在我的脑子里还有多少 C++ 的语法呢?还有多少 Python 的语言呢?答案是没有多少了,我都忘记的差不多了。但不必焦虑,以前我是会焦虑的,怎么能忘记呢。需要知道的是语言的语法只是编程的形式而已,这种东西忘记了可以查,网上各种现成的资料可以查,没必要记在脑子里,而且这种东西用多了自然而然就会记住。关键在于多练习,拿语言去解决一些问题,会发现不过是将 Java 翻译成 C++ 解决一些相同的问题,没什么大不了的。

随着经验的增长,对于编程领域的理解更加深入,对于它是什么心中更加有数,遇到问题也会更容易找到方法。编程是一门实践的学科,它有许多的经典的方案、架构、算法、模式、流程、哲学,这些东西会随着时间而沉淀下来,对于后来的学者来说是一笔宝贵的财富。而计算机科学的历史的确是值得了解的,了解其演变,才能更加理解我们为什么会在这个位置。深入去思考,将更多的心思放在这上面,那么更上一层楼是很自然的事。

我马上就要 29 岁了,已经没那么年轻了。前段时间对于这个年纪,以及目前所掌握的知识水平来说很是懊悔,悔恨自己浪费了这么多时间,走了这么多弯路。感慨要是大学选择了计算机专业,现在的处境肯定更好,在大厂见识大场面。但目前既然已经在这里了,也要学着淡然,过去了这么久的时间已经对于目前的暗淡平凡的处境看得比较淡了。当然,我还是觉得天赋不高,肯定也想不出什么惊世骇俗的解决方案,而没有很高的学历,对于计算机科学了解不全面,没有几个可以讨论的小伙伴,也没有老师来指点。对啊,走了很多弯路。但我相信,我会更上一层楼,会理解掌握计算机基本的知识,更加深入也更加全面,不再一味求快而囫囵吞枣。我不是盲目地相信,也不是一种愿望,而是我看到了那束光,剩下就是用时间去争取过来。