高中毕业那天,看着电脑屏幕,心里比吃奶都难受。

那时候总认定世界是个庞大的、没有出口的迷宫。书上的算法理论像天书,代码写得像神仙写的,根本看不懂。直到我自己动手,按了个回车键,一行一行地敲,才突然认定,原来这市面上真有人能听懂逻辑,有人能造出东西。 初学的时候,最烦的就是那些“类”和“接口”。我在网上搜资料,看到一堆大牛的代码,全是 `public class` 这种格式,听得我耳朵发麻。我就想,咱不整那些虚头巴脑的,就按实际需求来。

本来是想攒个钱包,结局一算自己带的钱,连买个键盘的钱都不够。为了凑数,我抄了一堆别人写的代码,给别人的车改个颜色,给别人的家装个新风系统。

那时候网上有“野鸡”教程,专门忽悠小白,说只要跟着敲代码就能当专家。我信了,结局三个月下来,连个报错都解决不了,屏幕上的蓝色光标像个小丑。 那时候遇到报错,第一反应不是查文档,而是往键盘上敲。想想当年那种崩溃感,跟目前没区别。我试着用 `console.log` 试试,发个消息给电脑看“我在呢”,结局电脑是个哑巴。急了,再试 `alert`,弹出个傻逼弹窗。折腾半天,还是得回头去翻书,找那本黄历一样的《日语言 C++》。书里讲指针,我脑子里乱得像鸡窝。

后来干脆拉倒了指针,老师都说这是大忌。我就直接绕道,用 `const` 代替,用 `void` 代替。别看感觉不够酷,但起码代码能跑起来。

那时候认定,懂点语法,别碰底层,那是给底层程序员的。 后来遇到一个做游戏的项目,感觉挺有意思。

那会儿流行《我的世界》之类的模拟经营游戏,我本来想写个好办的点击器。先写个 `class` 叫 `Button`,再写个 `class` 叫 `Window`,然后把两样东西拼凑在一起,程序就出来了。

那个按钮,就是那个按钮。敲完代码,按下回车,游戏里弹出一个“你好,世界”的窗口。

那一刻,我认定自己仿佛确实长大了。

不认定枯燥,不认定像在写论文,感觉像是在和一群不会讲话的邻居聊天。 真正开花结局的时候,只是想搭个好办的网页。

本来想用 Bootstrap 做框架,结局发现那些大公司有版权,写不出个好办的 Demo。只能绕道,用纯 HTML 和 CSS。费了三天工夫,把页面上的文字排得整规整齐,把图片放上去,配色选了个蓝白灰,看着清爽。最得意的是那个导航栏,我用绝对定位硬是将“首页”“关于”“联系”几个方块固定在了屏幕角落。结局页面一刷新,方块位置全歪了。我当时急了,想把那一堆 `

` 换个 `` 试试,结局 Table 忒死板了,如何动如何乱。 后来想到用 JavaScript 插个脚,加一行 `document.querySelector('.nav').top = 100;`,奇迹形成了!网页上的导航栏立马升高了二十行。

那一刻,我简直要疯了。

原来逻辑这东西,只要写对,就能变魔术。我试着写个好办的定时器,每隔一秒,把网页刷新一次。结局刷新了,页面又回来了,但那个闪烁的加载动画消亡了。折腾了半天,发现是浏览器缓存没清理干净利落。 这时候我才明白,编程不是记公式,是找方式。

那会儿看别人代码,心里想的是“这个是哪位写的”,目前想的是“如何把这个功能做成”。

比如做服务器,不用自己去写复杂的 Nginx 配置,直接用 Python 的 `requests` 库,几分钟就能搞定。

那会儿认定这玩意儿是高级语言,目前一看,原来它只是搞数据的。数据一出来,服务器不就行了? 记得有一次,我想自己写个外卖系统。想搞个订单表,想搞个用户表,想搞个支付接口。最终发现,还不如自己写库,不如直接去学那个“Python + Flask"。

那个库号称“Python 的胶水”,啥都能接。写个 `app.py`,放点代码,点保存,几秒钟,一个能接收 POST 请求的接口就出来了。

接着是用 `Flask-SQLAlchemy` 搞定数据库。

哎,那个 SQLAlchemy 的 ORM,就是那个 ORM,写的代码特别短,特别酷。写个 `create_engine()`,设置好数据库配置,然后写个 `connection = SQLAlchemy.create_engine()`。OK,数据库连接建立成功了。 接着写模板文件,用 Jinja2 做个好办的 HTML 模板。把数据库查到的数据串进去,渲染出来。搞定。我打开浏览器,输入一个 SQL 查询语句,结局页面上弹出了三条订单记录。

那一刻,隔着屏幕都能感觉到那个成就感。

那会儿看别人写代码,认定那是他们在和计算机斗智斗勇,目前自己写出来,才发现计算机只是听话的执行器。 后来在社区发了个帖子,说“如何用 100 行代码复刻一个电商后台”。我看了几篇,顿时认定撂挑子。

那种“只要思路对,代码随意凑”的氛围,让我认定这行活实际上挺有意思的。我不需求懂 C++ 的内存管理,不需求懂 Java 的并发模型,只要能把需求拆解开,找个现成的库,搭个框架,写个接口,就能把东西做好。 我也遇到过被嘲笑的时候。有篇文章说我的代码是“垃圾代码”,出于用了忒多现成的库,显得不专业。我反驳说,不是垃圾,是工程化。就像盖房子,不用自己每块砖都砌个花哨的装饰,但结构要稳,水电要通,门窗要合,这才是正经的。

那些所谓的“手写”代码,往往是为了应付考试要么想通过面试拿个头衔,结局入职后连个框架都没摸过,天天写 CRUD 接口。 目前回头看,高中那年那些想剪头发的日子,实际上挺宝贵的。别看没能做出啥惊天动地的大事,但那种从无到有,从难到易的过程,确实让一个人明白了啥是“逻辑”。逻辑不是死记硬背的条文,而是对世界规律的好办映射。编程就是这种映射,用代码表达思想,用数据回应用户。 目前的我,可能也不一定是个高级程序师,但肯定比高中毕业时更懂“如何干活”。

不再需求熬夜研读晦涩的文档,不再需求对着报错发呆。遇到不懂的,直接搜“如何用 Python 实现 X 功能”,答案往往就在百度文库的“小作文”里。

这种对技术的理解力,比在书上背十个定义要强得多。 人生苦短,何必为了一个头衔去折腾那些和你无涉的难题。把工夫花在真正能解决难题的东西上,比如学点实用的技能,比如把某个项目做完。

哪怕只是写个好办的脚本自动化处理工作,也比在论文里填几个关键词有意义。 有时候夜深人静,看着屏幕上的代码流,会认定孤独。但转念一想,这些代码是我自己的,这是我思索的产物。它们没有生命,但能帮我解决实际难题。就像那会儿学画画,在纸上涂鸦也是画画,只不过没有透视关系。编程也一样,只要结局有用,过程是不是挺酷? 赶明儿要是遇到更难的东西,比如深度学习框架,要么分布式系统,我不会再去啃那本大部头了。我会先找个现成的库,比如 TensorFlow 要么 PyTorch,先跑通一个模型。再慢慢搞懂那些底层原理,理解为啥要这样设计。

毕竟,能跑通的是基础,能优化的是进阶,能创新的是未来。 高中那年的那个“我”,并不完美,有大量不懂的地方,也有大量焦虑。但正是这些真,让我学会了如何面对未知。编程的魅力,就在于这种“别看我知道我不知道,但我想试试”的冲动。它让你信任,能够通过思维的力量,去转变现实。 目前想想,那些写在代码里的字符,不是冷冰冰的 0101,而是我 brainstorming 后的结晶。是我在无数个深夜里,试图理解世界的方式。别看有时候也挺煎熬的,但总得承认,这行当,确实有点意思。