随笔 | 写代码时极有可能面临的焦虑
本科学管理,被诸如《市场营销学》这类课程的作业搞得焦头烂额时,就会羡慕学计算机(或更广一点如「工科」)的同学:工程问题,有绝对的标准与尺度;不像这种经管的作业,没有明确的基准,辛苦写好的作业到底能得多少分,怕是只有老师的心情说的算。
现在自己每天敲代码,心态反过来了。
代码或者说项目文件有问题,那么程序跑不通就是跑不通,我就得在原地打圈圈,花费大量时间与精力排查问题、尝试解决——还未必有效——进而,我会想到:那些写《商业计划书》的、那些与人打交道的,只要持续推进,就横竖会把自己的任务解决,只不过是效果有好坏之分吧。羡慕。
很多人都以写程序为生,我的职业规划大抵也是如此。这两日,被一个 bug 卡到怀疑人生,便开始思考:
•写代码的优点大概也是其缺点?•再次遇到同质问题,如何避免焦虑?
写代码的优点大概也是其缺点
仅仅从工作内容上看,我觉得有两点是『写代码』这三个字概括的工作很吸引我的:
•说一不二,确定性•需要不断学习新技术
说一不二,确定性
我们写出一个1 1
的程序,则得到的结果一定是2
,这就是我所谓的「确定性」;但也正是因为我们预期了「确定性」的结果,当出现「不确定性」的事件时,我会尤其焦虑。
当我写出一个1 1
的程序时,得到的结果是3
或者得不到结果,我就会很迷茫,进而只能根据自己有限的知识与检索能力逐一进行排查:
•程序语法有错误吗?通常不会有,否则编译时会报错;•程序逻辑有错误吗?•是编译器的问题吗?•是操作系统不兼容的问题吗?•...
大部分情况下,我们可以通过互联网得到解决方案,因为我们的错误有人犯过,并且他/她自己或者其他高手已经给出了解决方案。但是当我们在自己的领域深挖时,我们面临的问题只有我们自己经历过,这将导致没有人能为我们提供手把手的指导。
我面临的问题是,我无法在 windows 10
平台上编译并使用 gecode
,而让我感到焦虑的是:我之前已经在 linux
上成功编译运行了 gecode
的实例,并且在 windows 10
上我都是按照 gecode
的编译说明书配置的:
•我首先尝试用 gcc/g
编译,失败,在调用 sh
脚本时,显示 OS
不适配,那我只能更换平台•于是改用 Cygwin
上的 gcc/g
,在编译时也报错,没有查到类似错误及其解决方案•最后,我下载 VC ,使用 MSVC 里面的 cl.exe
直接搭配 gecode
的 64 位安装包,成功运行了实例
但之后还面临一系列问题,这里不详述...
总之,我目前面临着一个最棘手的问题:
•能运行、不报错、逻辑通顺,但自己的实例就是与预期不符...•或者说,没有结果;无论我更改什么配置,结果都是一样的即「没有结果」,这将导致我不知道哪里出了问题,很难把搜索范围减小
需要不断学习新技术
『需要不断学习新技术』让写程序没那么枯燥,却也充满挑战。
令我焦虑的是,我没有扎扎实实学完技术,而是直接上手做。
比如,gecode
自己有一套逻辑体系,而这个体系并没有在我的脑海里成型。但我现在却要求自己直接开始应用 gecode
写实例——这将导致我效率低于预期。
或许当程序员的话,真的需要占用自己的生活时间,来学习工作上的技能,否则,容易跟不上业务、被淘汰。
如何尽可能避免写代码的焦虑
老读者知道,我讨厌束手就擒,也不会怨天尤人。
遇到不舒服的地方,要么想办法改善,要么避开。
我将从两个方面分析『如何尽可能避免写代码的焦虑』:
•策略或曰心态上•方法论:记住根目标与回溯
策略或曰心态上
首先,宏观的心态是:
•就算现在做不出来会怎样?就算真的永远做不出来会怎样?- 会导致别人都有论文了而我的研究还没有成型?长期做不出来会导致老师的失望?•好,那这些后果我能承担吗?至于让现在的我焦虑吗?宏观上,能承担做出来的后果,我还有别的路可以走;不至于让我现在不开心。
微观上:
•有没有其他思路?我有什么收获?•比如在这个例子里,我第一次脱离 VC
使用命令行直接调用微软的 cl.exe
,我知道了 Cygwin
及其背后的大概原理...
卸掉思想负担,轻装而行。
方法论:记住根目标与回溯
找 bug 的过程实际上使人疯狂,当我冷静下来时,我发现我似乎已经与『根本的目标』背道而驰。
于是我冷静下来,画了一颗“树”。
树状图
这才发现,自己一直纠结的 bug ,似乎可以先「搁置」。因为 pybind11
目前只是一个手段而已,我们可以先抛开 pybind11
,回溯到“第一阶段结束”那里,思考有没有思路二三四。别忘了,我们的阶段性目标是『载入数据』,而根本目标是『运行自己的实例』。或许,我们可以回溯到““第一阶段”开始前,考虑更换一个系统,如 Linux 或者 Mac OS 。
此外,向他人求助不失为一个好手段。
成文于 2021年2月22日九点半前,而此时(2021年2月22日中午一点半),已经解决了 bug 。我将把大概的解决思路和探索思路具体阐述于评论区。