转眼又过去了两个月,无论快过慢过,充实的过还是虚度的过,枯燥乏味还是流光溢彩,时间过得就是这么快。在过去的两个月主要就干了两件事,搞学术和编程序。搞学术最近4个月一直在接触,看了许多文献,知道了某一个专业领域中的一个细分领域的理论知识和实践现状,也写了一篇不太像样的论文。编程序是一件从大三就开始做的事情,也是现在实习的主题。了解过C和汇编,接触过MATLAB、JavaScript、Python,搞过HTML和微信小程序的开发,也用过学习过node.js、express、Nginx、MySQL等。学术和编程合起来,有一些感触,不吐不快。
要保持对学习的好奇心
学习是一个枯燥而充满乐趣的过程,要保持“想一出是一出”的童心,这是学习的动力。有时间,有精力,想到就要去学习、去积累。在学术上有想法,就会去发现、去探索、去总结。在技术上有想法,就会想着如何去实现。有时候一个简单的想法,比如要做一个分享页,让用户可以分享我的小程序到朋友圈。要实现这样一个简单的功能,就要去查资料,就会去学习HTML的canvas、在小程序里如何实现、用户如何保存图片、页面如何设计更加友好等等问题。“世之奇伟、瑰怪,非常之观,常在于险远”,每一次学习的过程都会让人有一种“雄关漫道真如铁,而今迈步从头越”的身临其境感,是一个收获的过程。
小tip:无论是学术还是编程,虽然百度有自己的优点,但是我查资料还是更喜欢谷歌。做学术项目的时候曾经体会过用百度3天都总结不了资料,用谷歌一个晚上就整理好了;用百度查app的设计思想和设计风格出现的是广告,用谷歌出现的是干货。类似的案例不胜枚举。
要加强沟通和协作
沟通是开发中必不可少的技能,缺少沟通、闭门造车、自娱自乐、没有一个开放的态度会让你在某一段时间充满挫败感。大三时候第一次帮助老师开发代码块和软件包,也是第一次学术体验。当时要解决一个新方法在流动问题的应用,新方法的核心基于拉格朗日插值,发现效果并不理想,然后老师建议试试改用埃尔米特插值的方法。我理解偏误,以为是用埃尔米特插值的方法改写整个软件包,花了一周的时间写好了新的软件包,自己体会整个过程的喜怒哀乐。虽然事实证明解决一般问题性能也确实更好,由于还是不能解决这个流动问题,处在甲方地位的老师自然也是不太满意的,改动好的新软件包也被放在一边。这个时候对自己写的东西,给自己带来成就感的东西,也只想任由其“零落尽”,而“慵收拾”了。
弱点也好、缺点也罢,无论是个性还是共性的问题,对我来说,这都是一种需要克服的强烈的负面情绪。“想一出是一出”适用于学习,而不适用于团队协作和开发。遑论编程或者是学术,都要抓住核心思想和要义不动摇,要把握住价值观,志同道合是基础。同时,也要照顾到同伴的情感和态度。在开发的过程中,一定要在一定的时间频次与自己的同伴、用户、上下级交流和沟通,不要想当然的以为自己整理出一份工作方案、费尽心机弄出来的东西是没有问题的,别人可以充分理解你,按照你的思路走。在沟通的过程,也要学会沟通的艺术,既可以增加工作的愉悦度,又可以缓和因为不理解、不配合带来的工作推进慢,也可以减少因为分歧而带来的不愉快。工作的分歧有毁了一段长久友谊的风险,有效的沟通和协作是良药。
要注意学习与总结
不知道从哪听来的一句话,说“写文档的时间要占到一个程序员开发时间的30%以上”,以前不以为意,现在深以为然。互联网行业是一个没有安全感的行业,技术更新日新月异,层出不穷。正所谓“八千里路云和月”,搞开发也是一个需要不断学习的过程,需要随时的查阅资料和学习文档。在编程的时候,写完代码也要写好文档,特别是上千行、上万行代码的时候。有时候你会因为实现一个功能而沾沾自喜,或者是实现了一个自认为复杂的逻辑而兴奋不已。但维护的时候就会发现当时的自己写的代码质量真的不高,维护起来花费的时间甚至是开发的时间的3-4倍。写好文档有助于梳理清楚自己的编写逻辑、实现路径、用到的技术,有助于梳理清楚当时的想法和想到的问题,有助于更好的把握和驾驭自己的代码,也能够帮助后来者接手你的项目时,能够花费更少的时间快速上手。
搞学术会积累许多参考文献,积累许多新观点、新知识和新思路。比如我最近做的学术项目,回头看,写的东西和积累的文献竟然也有1.2G。
无论是学术还是编程,知识的管理和技术的总结尤为重要。“想一出是一出”也不能雁过无声。虽然曾经拥有也花费了巨大的心血,但是需要的时候、关键的时候拿不出来,什么实现理想、团结协作都是笑谈。胸中有丘壑才能从容不迫,知识的管理和总结至关重要。可以使用一些能用、好用的管理软件,比如Evernote、有道云笔记等。回头再看的时候,会因为形成一个知识库而高兴。它们会让你有一种充实感和回忆感。