国外有个词叫做10x Programmer,直译是以一当十的程序员。我并不认为一个技术大牛能完成10个普通程序员的工作,技术大牛会花1/10的时间把工作做完,然后用剩下9/10的时间平衡生活、爱好和未来,所以我仅把10x Programmer叫做10倍速的程序员。
也许有人会觉得这种定义太过狭隘,没错,确实狭隘。不同的程序员处在不同的技术水平阶段,有着不同的人生追求和生活诉求,我谨以此文让大家换个角度去审视这个职业,也许你会有些感触和启发。
Keep You Sane
这是我很喜欢的这句英文,保持清醒。我希望所有人都能做到工作和生活的平衡,有更多的精力去做自己爱做的事,陪自己爱的人。这是本文的最终目的。
善用工具
业界有句话叫做“不要重复造*”,人类就像一台内存有限、CPU有限、硬盘有限的服务器,既然可以选择调用API,就不要试图在本地跑各种服务,那样只会让自己变得臃肿、耦合、满负荷。
像Beyond Compare(代码比较合并), Notepad ++(关闭时无需保存), Chrome(现代浏览器), VPN(google必备), FastStone Capture(截屏、测量、录屏、取色等)、Chrome 翻译插件(快速翻译网页英文)、反编译工具(不同语言开发者各异)、CookieInjector(cookie注入工具)等。这些工具可以说是程序员必备的,没有下载的可以下载,最后一个在github里搜。
不要记忆
不要记忆。这个观点同样狭隘。但我认为把JDK源码看一遍这种事大可不必去做。如果你把JDK装载脑子里占用了太多”硬盘”不说,还浪费了过多精力。我建议的做法是索引。还记的索引的定义吗?它就像是一本书的目录。我通常会记一遍JDK的API列表,知道哪个Function对应在哪个库里。当需要的时候去取就可以。我相信做过数据库的都应该知道索引的意义和用处。
举例来说,你记住concurrent包是用来处理多线程的,你记住反向代理有nginx、Apache,你记住python适合计算、Java库比较多、C++适合原生、Zepto适合移动终端、XML比Json占用更多字节、SVG比PNG更适合比例放大、无论Mysql/Oracle/SQLite/Cubrid都是ANSI SQL类似这样就足够了,用什么才去取什么,无需都记在脑子里。只需记住,在哪里能找到答案就可以了。
善于记录
即使你的思维再清晰,也需要记录。正如“好记性不如烂笔头”这句俗语所说。把需要做的工作,手头做了一半的工作记录下来,然后可以迅速的切换自己的思维到生活状态。当然,翻开自己的TODOs也可以迅速切换回工作状态。现在手机电脑都可以下载各种各样的记事本,像Evernote、有道云笔记这种有checkbox、列表的,完成一项勾一项。
博客。这种最原始内容载体,开放于互联网,不限于某个产品的生态圈。在你记录博客的同时,你重新审视了自己的技术,并且为了复述清楚,你会更加谨慎的思考技术逻辑。同时,假如你陷入了某些思维误区,会有热心的朋友帮你指出,共同进步。
设置闹钟
程序员都是专注的。即使你生性不是如此,也会在长期的职业生涯中渐渐变得专注、谨慎、注意细节、逻辑清晰。但是正因为这份专注你可能陷入思维的死循环中。当你低头专注于某项技术的时候,外界的技术每天都在快速的迭代、增长、创新。正式这份专注可能会让你错过很多东西,就好像一个bug嵌套另外一个bug,你整天都在解决bug,然后就陷入了递归、for、do…while里面去了。你需要设置一个触发器(trigger?break?whatever),让自己跳出自己的思维,重新认识这个世界。这里我说的不仅仅是技术,而是一种思维,跳出程序员的思维,也许……你会有女朋友的。
闹钟的作用就是叫醒你。当你无法解决一个问题是,放下,换个角度,也许用10分钟就可以了,而不是你钻研一个晚上。
广交朋友
技术是不分城市、国界的。有时候与其闭门造车,不如结交一些像尤雨溪、stormzhang、justjavac、Sean Larkin、caiyongji这样的人。他们的观点和技术分享是引领国内技术潮流的(虽然最后一个比较渣),和他们探讨技术也是别有一番乐趣。我有幸有上面其中几位的微信,比如caiyongji的微信是takeurhand。
当你遇到技术难点需要攻克的时候,可能牛人们已经遇到了,与其上网搜索,不如直接和牛人们探讨。
善用口诀
口诀是需要记忆的东西。比如快捷键、JVM优化方法、SQL的执行顺序、数据库分库分表技巧、锁的原理、内存结构。这些是IT界的元素周期表。
放弃完美
String和StringBuffer的区别并不是很大,如果不是在大量重复的循环语句中,不要在乎那点内存浪费。不完美的成果会在快速迭代中解决。也许你过度优化的时间成本足够为服务器加一条内存了。
Relax! 准备好迎接你的2018吧。