程序员这个职业某种程度上,可以说是一种解决问题的职业,因为编写一个程序,更多的时间是花费在调试代码上面。在实际工作当中,总会出现各种奇奇怪怪的问题,这些问题在你一开始看书学习的时候是没人跟你提起过的。所以你要自己想办法解决,很多刚入门的程序员一开始最大的难题在于各种bug的侵扰时的心态把握,一旦开始心浮气躁,工作就开始变得低效。
这次其实也算不上“生病”二字,但在期间,对于“身体出了问题”和“程序员解决问题的思维”略有思考,于是做如下记录。
记录
一个月以前,我的右眼突然开始偶尔会疼痛。一开始只要休息休息就会缓解过来,但是后来变得逐渐严重。于是我便去了医院。
第一次去的是家门口A医院,医生注意到我的左眼有近视,大约200度,而右眼没有近视,加之我平时是不戴眼镜而又大量使用电脑、手机,于是医生判断我是右眼疲劳过度,推荐我配了一副眼镜。因为右眼没有度数,所以配的是平光的镜片。
大约过了一个星期,症状没有得到明显缓解,于是去了三甲医院B医院,挂了专家号。诊断结果为眼睛疲劳导致的疼痛。处理方式是开了两种抗疲劳的眼药水。
又过了两周,症状依然没有太多的缓解,于是又去B医院复查,这次的诊断结果为屈光不正导致的视疲劳,为什么屈光不正呢?我是半个多月以前刚配的眼镜啊!医生的解释是,当时我在A医院验光的时候,没有先散瞳,这并不符合程序。于是我重新散瞳验光,这次检查结果是右眼有较严重的散光,达200度,需要重新配镜。于是摘下半个月前在B院配的眼镜,重配眼镜。
于是,眼睛很快便不疼了。
思考
因为是喜剧收尾,所以乍一看可能觉得是一件很普通的事情,但对于置身事间的我来说,这一个月其实不容易,首先是作为程序员不能多看电脑,工作几乎停滞;另外是在原因不明的情况下,那种不确定感尤为考验一个人。
于是我开始思考,如果身体是一个软件系统,在某些地方出问题的时候,我们应该如何去解决问题?我们如何给自己的身体debug?程序员思维有什么可以借鉴的地方呢?
-
线索式的思维
一个优秀的程序员在碰到程序出bug的时候,第一件事情是做什么呢?一定是根据自己之前系统性地学习的知识和经验,根据问题的特征,寻找一些线索,然后验证。换种说法也就是说,养成一个独立思考的习惯。如果你的身体出了问题,你不是根据身体的具体症状和系统的对身体的理解去寻找问题,而是去直接上手尝试一个个各种渠道获得的“偏方”,那不能说是愚蠢,但是属于下策。就像程序员一碰到问题直接google、百度,然后copy解决方法,这是懒惰的行为。 -
想要高效debug,必须有log
程序员都知道,一般要解决什么问题,先看log。结合到身体的问题,你要想高效地解决自己的问题,就应该在日常生活中,全面地记录自己每天的身体状况。但问题是,程序的log记录很简单,代码自己会啪嗒啪嗒记录下很多log。但是一个人想长期记录全面的细致的个人身体数据,这是很难的。我之前也曾做过一些尝试,比如买一个手环,可以自动记录每天的运动数据和睡眠数据。但这毕竟太不全面,比如这次眼睛出问题,这些数据就不能派上用场。更早的时候,我自己开发过一个Android的每日身体数据记录app,但是需要你手动输入,而且也是一些有限的固定的指标。很不幸,我自己的app,我坚持用了一个月就用不下去了,这个习惯很难坚持。
目前最好的解决方案也许是每天记录自己的身体健康日记。把自己关于每天健康的感觉都以日记的方式记录下来。我相信这些数据在以后人工智能和nlp的进步下(英文的系统如IBM的Watson),会为每个人的诊断起到相当重要的作用。但目前自己打log,可能依然意义不大。但是如果你能养成记日记的好习惯,它起码能提醒你注意,你的身体这个系统,就像你自己写的代码一样,随时可能在任何情况下,出现一个bug。 -
你遇到的难题,很可能别人也遇到过
刚入门的时候,老手都会跟新手说,碰到什么奇怪的bug不要害怕,耐心google一下,你遇到的问题,一般都不是你自己一个人碰到的问题,网上有很多解决方案。在你遇到难题自己苦苦思索不得其解的时候,这句话还是一剂有效的强心针的。
你要相信,大部分情况下,你身体出的问题,或者说你得的病,不是什么诡异的疑难杂症。但很多时候,我们总觉得自己的身体是很独特的,跟别人的症状总有那里这里不一样,于是怀疑自己得的是不是疑难杂症。像一些新手程序员一样,碰到一些问题,想不通,随便搜一下,也没有解决方案,就觉得,这一定是一个诡异的问题。是不是硬件出问题了?是不是用到的库或软件自身存在难以克服的bug?只要是进入了这样的思维,那这个问题基本上就等于放弃了。
因此,你应该多想想办法,从别人的经验中学到点什么。当然,在身体的问题下,你的最佳方案还是去寻找医生的帮助。因为他才是最有经验的人,而不是某个病友,告诉你他有类似的症状,他的治疗方案。因为你觉得的类似的症状,到底是不是同一种病因,最好是医生来判断。 -
去尝试,去追问
在你写代码的时候,“去尝试,去追问”,这可能是你的座右铭。你多去写几行代码验证你的猜测,你多问几个为什么去深究,你就会是一个比别人更好的程序员。但这在应用到身体上,确实很难。首先,你可能不是一个专业的医学知识的学习者。但这没关系,每碰到一个问题,把相关的知识了解一遍,其实就够了。
很多时候我们不知道程序哪里出了问题,这个时候要一遍遍地修改一个地方,另一个地方,一遍遍地试验查找。如果身体出现了一个比较麻烦的问题,你也要耐心地去按照医生制定的方案,一个一个去试。但注意,绝不是盲目地试,要像调代码一样,你试一次最少要排除一种错误的可能,而且每次要去尝试可能性最高的那种。
还有就是多问,在看病的时候,像专家号,那些专家很忙,可能会直接告诉你解决方案。但你一定要耐住性子,多问一些问题,当然不是有的没的瞎问,而是要弄清治疗方案的原因和目的。如果你是一个思路清晰的状态去和医生沟通,大部分情况下,医生是愿意解答你的问题。当然,再强调一遍,你需要耐住性子。 -
团队总是强于个人
我觉得大部分程序员应该还是认可这个观点的。团队强于个人,前提是团队的成员至少是靠谱的,最好是和你一样,也是一个独立思考的程序员。他可能知识体系和你不同,但这正好形成互补。所以当你遇到这些问题的时候,可以和身边你觉得“靠谱”的人多讨论,不要把所有的责任都推给别人,不要把所有的期待压到别人身上,只是讨论,你会获得一些启发。生病了也一样,你的朋友可能不是医生,但讨论解决方案总会有所帮助。
结尾
这次的总结,暂时到这里。我会一直关注这个问题,并持续地更新。