0%

Write the code, Change the world

Write the code, Change the world

Author: HeiPa

Date: 2022-4-17

“Write the code, Change the world”,是我作为一个程序员的梦想。为什么学习计算机和编程,为什么选择程序员做为自己的职业,这是我从选择计算机专业以来一直思考的问题。至今为止,我对于编程、写代码的感受可以分为3个阶段,每个阶段对这个问题都有不同的答案。

程序员活在自己想象的王国里

我刚接触电脑就发现电脑的妙处,电脑远没有人那么复杂。如果你的程序写得好,你就可以和电脑处好关系,就可以指挥电脑干你想干的事。

这个时候你是十足的主宰。每你坐在电脑面前,你就是在你的王国里巡行,这样的日子简直就是天堂般的日子。

电脑里的世界很大,编程人是活在自己想象的王国里。你可以想象到电脑里细微到每一个字节、每一个比特的东西。

这是雷军个人博客中的一段话,我觉得这非常贴切的描述了我大学时期对于编程的看法,这也是我编程的第一个阶段。

本科专业是一个建筑+智能化交叉的学科。专业涉及了建筑中的水、电、消防等传统建筑专业课,以及单片机、传感器、数据库等智能化相关的课程。因此我也接触到了编程。编程体验的启蒙大一学C语言的时候,第一次用编程解决了hanoi塔的问题。这个小游戏我从几岁的时候就在手机上玩过,但从未想过以计算机的思维递归的解决这个问题。后来,大二大三学习单片机,开始接触硬件,了解身边电子设备的运作机制。大四的毕业设计做了一个ardunio单片机+RFID+PC上位机的项目。说起来也非常简单,其实就是RFID(食堂饭卡、小区门禁)刷卡并且在电脑上显示结果。再加上本科乱七八糟的科创比赛,这几乎就是我本科阶段有关编程的全部了。

本科期间我觉得计算机和编程更像是一个听从指令的玩具,我可以指挥它做所有想做的事。即使出了问题或者有些做不到的事,也是我的指令(代码)错了或是我还没有掌握对应的指令。另外,计算机跟人的交流总是清晰、明了的。一段程序,一段代码,0永远是0,1永远是1,没有歧义,不会因为时间、地点、人而变化,方方面面都有迹可循。它不像人那么复杂,跟它交流不需要猜它的潜台词,不需要揣测它的想法,没有那么多拐弯抹角。这是一个社恐人最喜欢的沟通方式,生活中,永远无法像计算机这么高效的沟通。

编程本身就让我感到快乐

本科阶段的我并没有去考虑做不做程序员,而是本科毕业后考研时产生了这个想法。起因是一些不靠谱的复试经验里面说有些导师面试会问“为什么选择xx专业”这种问题,最好提前准备。后来发现计算机这样的专业有大把专业课、项目、算法要问,根本没有导师关心这种无聊的问题。但我还是在逼乎轮子哥的回答中找到了答案:编程本身就是一件令人感到快乐的事。

如果学习编程本身就可以让你觉得爽到浑身发抖的话,你就可以通过读计算机专业而获得成功。这种成功甚至不需要靠你的高收入,简直易如反掌,爽到不行啊。想想,你现在在读书那么贫穷,都已经这么快乐了。那将来万一找到了一份好工作,娶到了一个善解人意的漂亮的妹纸,生两个女儿,岂不是成仙了?你都已经这么快乐了,那你要用计算机来谋求什么,其实就是一件次要的、完全可以随缘的、顺其自然的事情了。你的人生已经成功了,还有什么好烦脑的呢?接下来你要做的,那就是让自己不断地爽下去,学一辈子计算机,写一辈子代码,爽到妈妈都不认识你了。

由于本科并非计算机科班,在考研的时候不可避免的要学习几门完全没接触过的专业课。但这并没有成为阻碍,反而学习专业课的时间变成了每天最轻松和最喜欢的内容。相比于学习高数、英语、政治的痛苦,数据结构和操作系统对我来说简单得多。数组、链表、树、图,进程同步、作业调度、死锁,大部分问题理解起来没有什么难度。由于没有机试,考试的内容是手写伪码。每天在纸上手写和画图模拟让我对很多算法记忆深刻,以至于后来刷leetcode的时候一些经典的算法很轻松的重新拾起来。

如果说考研时的学习是从不快乐的生活中寻找乐趣,那考完研之后真的是快乐驱动。我大概花了一周时间学习python,去学习爬虫,学习numpy处理数据,每天都有新体验。后来开始刷OJ,刷PAT,刷LeetCode,每一个AC都真的让我感到快乐。有些朋友好奇,我在不用找工作,不用面试的时候为什么还会刷Leetcode。我觉得就像打游戏的收集癖,我会去尽可能达成游戏成就,收集游戏物品,进度达成100%。大部分游戏里的非氪玩家想做到100%收录都很难,刷题也是一样的。我不可能刷完 LeetCode 2000多题,但学到的每一个解决问题的算法,通过的每一个题目,看到进度一点点的提升,这本身就是一件值得快乐的事情。怕什么真理无穷,进一寸有一寸的欢喜。

每一个生命来到世间都注定改变世界

如果你问我我的梦想是什么,我的回答是“Write the code, Change the world”。每个人或许都曾梦想过改变世界,充满了雄心壮志,但经历过社会的毒打后改变了想法。我觉得这是错误地把改变世界等同于英雄史观,过分强调个人成就在历史上地创造作用。作为坚定的唯物主义论者,我自然也坚信马克思主义的群众史观。只是我理解的改变世界是罗永浩那种理性的、温和的、循序渐进的方式,通过自己的努力去改变这个世界,而写代码是我改变世界的方式。

每一个生命来到世间,都注定改变世界,这是你的宿命,你别无选择。你要么把世界变得好一点,要么把世界变得坏一点。有些人不服气,说:“妈的我就不信了,我自杀。”你自杀就把这个世界的自杀率改变了一点点。你如果走进社会,为了生存或是为了什么不要脸的理由,变成了一个恶心的成年人社会中的一员,那你就把这个世界变得恶心了一点点。如果你一生耿直,刚正不阿,没做任何恶心的事情,没有做任何对别人造成伤害的事情,一辈子拼了老命勉强把老婆、孩子、老娘,把身边的这些人照顾好了,没有成名,没有发财,没有成就伟大的事业,一生正直,最后梗着脖子到了七八十岁死掉了,你这一生是不是没有改变世界?

你还是改变世界了,你把这个世界变得美好了一点点。因为你,这个世界又多了一个好人,听懂了吧?每一个生命来到世间,都注定改变世界。所以将来有一天你心里挣扎,不知道要做一个流氓,……还是做一个正直的人。你在这个中间彷徨的时候,希望你记得我今天给你讲的这句话,每一个生命都注定改变这个世界。

编程、写代码都不是目的,解决问题才是。从一开始写代码,就是在源源不断地解决问题,除了自己的,也包括别人的问题。最早的时候我用python帮朋友处理数据,画了几张图,朋友给了我50块。虽然只是很少一笔钱,但这是我写代码赚到的第一笔钱,也是我第一次通过编程帮助到了他人。在后来,研二实习的时候进了一个DSL语言设计、编译器和工具研发的部门。我负责做语言静态检测工具和VS Code中的插件,即代码的补全、高亮、跳转,以及代码质量检测等功能。跟用户交流的时候,他们让我好好做,对我的工作非常期待。因为语言刚设计出来,最初用户都是在类txt的环境下去写代码的,效率很低。这是我第一次感觉到自己的工作非常有意义,真正有人需要我的工作成果。我的代码能给别人带来便捷,改善其他人的体验。

我觉得程序员的工作自带了帮助他人,改变世界这个属性。开源精神鼓励大家分享成果,用自己的代码帮助他人解决问题,在他人的项目中贡献也能更好地帮助发现和解决问题。而程序员的工作成果也是惠及了大众。往大了说,国内的支付宝、微信、百度、淘宝、滴滴、美团……国外的微软、亚马逊、FaceBook……每个公司或项目都服务了几亿用户,提升了地球上几十亿人各方面的体验。这都程序员的工作成果,说程序员改变世界一点不为过;往小了说,就算是像我一样,写的软件、程序给他人带来了便捷,写的文档、博客帮别人解决了问题。其他人生活因为我而发生了改变,这又何尝不是改变世界呢?

所以,作为一个程序员,虽然我水平菜,人又懒,只做了一点微小的工作,但这不影响我将改变世界作为自己的理想。写好每一行代码,做好每一件事,用自己的代码去改变世界,这可能就是我学习计算机、选择成为一名程序员的目的和意义。

写在最后

最后,如果你想要做一个游戏/app,生活中需要某些插件/脚本/工具,文章/算法有疑问,甚至是你有一个能够改变世界的idea,就只差一个程序员了。那你可以通过github/邮箱/评论等方式联系我。虽然我很菜,大概率解决不了问题,但我仍很乐意尽我所能地提供帮助。