title | author | date |
---|---|---|
每个人都值得拥有一根思维的杠杆 |
Leask Wong <[email protected]> |
2019-03-06 |
大家好,我是 @leaskh。最近在为 PRESS.one 招聘,为新项目扩充团队,看到不少简历都有让人羡慕的学历,亮眼的从业背景。很多时候我都会问自己,相比于这些候选人,如果让我参加面试,我会有优势么?如何在这个行业可以独当一面,脱颖而出?非不能说是必杀技,但是就学习能力、知识应用和动手能力上,我骄傲一点说,可能比平均水平稍好一些。认识我的人都知道,我是名副其实的“野生程序猿”,身为红绿色弱的“残疾人”,在我高考那个年代,是不能报考理工科的,因此我本科学的是经济,这对于当时沉迷计算机并已经开始自己编写软件的我来说,打击十分沉重。但是我凭借自己自学,毕业后成功进入程序开发行业。转眼已十余年,在漫长的自我摸索过程中,有几点想分享一下。
小时候我特别顽皮,喜欢胡乱拆家里的电器。拆坏,我妈骂我,我爸却从不骂,然后在我面前很有耐心地细致修好。我拆坏东西,他还在别人面前夸我那么小就能用螺丝刀。我爸没什么本事,没挣多少钱,但是这种教育对我产生了深远的影响。从那时起,我就开始不畏惧拆开通电的东西,觉得总能修好,这种心态一直到我后来接触了计算机,我知道对于编写程序而言,就好比你拆开一个玩具,加上新的功能,没弄好的话,重启机器,删代码重来,一遍一遍,总能成。所以当我看到笑来老师这本互动编程教材的内测版本之后相当兴奋,因为我觉得这种打开一个页面,就可以尝试编程,免除了大家零基础接触一个新环境的恐惧,怕把设备搞坏的恐惧,这将是一个美妙的新旅程。
起初,我之所以想学习编程,其实是希望能开发一个自己的播放软件。我开始去看书,从笨拙地学习控制窗口上的按钮开始,到慢慢知道如何调用解码器,优化资源占用。我并不知道执行这些代码之后,计算机里面发生了什么,但是对我来说,能在界面上看到直观的变化,实际观察到程序的执行结果,令人欢欣鼓舞。我就是这样,从需求出发,像拼乐高一样,完成了自己第一个作品。从做自己想做的事情出发,反向去了解和储备知识,让我把之后遇到的每一个项目,都当成是一次令人愉悦的学习过程。这其中很关键的一点,就是实时反馈:修改->执行,又修改->执行,再修改->执行。这样很容易培养出对代码的亲切感,让你上瘾,不断写,你对代码修改越来越好奇,同时对代码的行为和输出越来越有预期。总之,一开始不要写战线太长、没有成就感的代码,更不要去刨根问底,那是将来的事情,这样会让你陷在其中,丧失兴趣。这也正是为什么我认为如果有一本可以互动修改代码,点一下就能执行看效果的“书”,可以让初学者少走好多弯路。
写程序和绣花差不多,都是相当细致的工作。当一个项目接近完成,就需要开始控制细节,例如输入的边界条件约束,输出效果的美化等等。尝试去细致化你的代码,了解每一行,无论这一行是抄回来的还是自己写的,考虑一下它是不是已经极致,还有没有办法写得更高效和漂亮。当程序已经实现了你想要的功能,那可能仅仅是一个新的开始,不要畏惧尝试修改她,重构她,甚至颠覆她。版本管理工具是你的好朋友,代码的完善也永远没有终点。新思路、新技术的引入,往往会有意象不到的效果,不要畏惧重新开始,只要时间允许,你永远可以写出更优雅的一版。
我一向反对刚开始就去钻研理论,这会让你延迟动手,这让很多人丧失信心,一蹶不振。这好比你学会开车就行,但是从来没有人要求你考驾照要学会修发动机。但是当你的车子开上路了,你想开得更好,希望更省油,希望更安全,你就需要知道一些发动机的工作原理了。同理,这个时候,你要开始理解内存,理解 CPU,理解数据结构,理解编译原理,理解算法等等。当初见成效,就要总结一下自己在这个项目中学到了什么,用了什么技术,是不是如果对某一方面有更深的认识,就可以把这件事情做得更好?这个时候,就是回归理论的最佳时机。赶紧针对性地补课,这将会让你遇到后面的项目的时候,从一开始就站在更高的视野。
我一直觉得学习是一个不断循环迭代的过程,从“知道自己不知道”,到“不知道自己不知道”,又回到“知道自己不知道”……上面说的四点思考,一直帮助我走过了好多次这样的循环。我一直庆幸自己学会了写代码,在遇到问题时,多了一个思考问题的维度。像程序员一样思考和解决问题,会让你更具逻辑性,对资源的制约更有认识。你就像拥有了一根思维的杠杆,只要你愿意,虽不说撬动地球,起码足够颠覆你过往对世界的认识。万物伊始,如果你觉得程序的世界混沌难懂,的确是,“Let there be light”,好奇就是这一道光。