上周和一个即将毕业的大学生聊天,他很厉害,学了很多,抱怨到很多人学了很多编程语言,但最后都只是会写一个“Hello World”〔1〕的程度。我说,因为他们大多是一直在准备学习,往往刚开始学的时候,便放弃了。
——题记
我叫雨帆,所有的汉字中我觉得我“雨”、“帆”这两个字写的最好看,不是因为我字写的好,而是因为我专门针对这两个字专门练习。
同样的话语可以套在很多东西上,许多东西,比如人的技能,擅长的东西,并不是一蹴而就的,需要频繁的练习。没有谁能一开始就能成长为参天大树,即使是所谓的天才,在你看不见的背后,也有着常人难以想象的汗水与努力。
所以一直一来,我很赞同一句话:信念永远不能达到目的地。每个人都有自己的梦想,但是如果只是梦想,却不去付诸行动,那么它也仅仅是梦。
记得三年前有一个叫做谢钦的网友邮件问了我很多关于独立博客的话题,当时的感觉就是在茫茫大海中看到一束光的感觉。就是一直以来,你一直以为只有自己一个人在做什么事情,周围没有一个人懂你的时候,突然有一个人理解你的感觉。
然而过了三年,他的博客还是一句话:“未命名博客更新中”……
当然,我不是刻意黑这位朋友,更多的是想表达一种遗憾。因为写一个独立博客的准备工作真的很麻烦很麻烦,如果像我一样在国内的话还要备案一类的繁琐程序。如果不是喜欢写博客,真的一开始就会想放弃。那么为何都准备好了,最后关键的写文章一步却放弃了呢?
写代码的时候老大总教育我们一句话,不要过度设计。什么叫做过度设计呢?就是和业务无关的东西写了一堆一堆,但是关键的业务的代码却写的很少。
说这个前,不得不提知乎上之前一个很流行的问题:为什么有些大公司技术弱爆了?当时看到的时候就想起前老大的一句话,“满足业务需求的代码就是好代码”。
对于很多还未毕业的计算机专业学生可能会觉得不可思议,尤其是看到很多外表看似光鲜的项目,底层竟然是如此垃圾的代码。甚至某些方式(如数据库的设计),完全是教科书般的错误案例。而实际上,它们只做好了一件事,满足业务需求,然而,因为做好了这件事情,它至少可以给公司带来收益。
当然,我并不是为了给烂代码洗地,对于互联网公司而言,快速的上线和迭代开发才是保证收入的根本。如果是使用智能机的你,尤其是Android手机的话,可能最大的感受就是那些APP,基本上一周恨不得更新个十几次。为何不能从一开始就是设计好呢?
从产品的角度而言,需求是不断变化的。比如输入法,一开始,人们的需求就是能打字的时候少一些选择,于是有了词库,包含常见词。后面有了按照词频不同的动态候选词序,再后来,由于互联网聊天的流行也许有了所谓的Emoji、字符画等特定需求等……但是一开始就想做好这些,是不可能的。比如你潜心花上几个月甚至几年打磨一个输入法,往往还没开发出来,要么是市场被人抢走了,要么是你自己耗死了。
话题扯的有点偏,换句话说,很多东西,不可能一开始就做的很好,如果不去做,而是一直在想怎么写好,怎么做才好,那是永远做不出来东西的。你只有上手做了,比如,先写个demo,然后完成一个主流程,再一点点考虑里面的问题细节。如果一开始就想做好,要么是你很累,想要放弃;要么是团队不会给你太多时间。
记得上周参加Openresty Meetup的时候和一个架构师聊天,聊架构。在他看来,架构的存在是在公司的业务数量级达到一定的规模之后的必然产物。然而,对于一个初创公司而言,往往却是可有可无的产物。因为你的业务数量级没有到这个级别,套用安迪比尔定理,这个时候的业务量,无需多好的架构设计,关键是满足主要业务需求就好。按照业内常见的标准,只有业务量上升到百万这个级别,你才需要考虑架构,考虑设计。
当然这也许有点偏激,在此我保留意见,回到前面说写代码这事上。我觉得,这事应该是这么一个顺序:能写出代码
=> 能写出满足业务需求的代码
=> 能够按照业务需求优化代码
=> 能够考虑未来可能的需求变更预留扩展的接口
=> 能将唯一可变行为剥离接口参数化
=> 能在现有的语言发展层面上进行演进
=> 能不再为设计模式而设计模式
=> 开始理解熟记 Clean Code 的全部准则
=> 拥抱 TDD,不断重构测试驱动
当然,换种说法也许就是:不要为了设计模式而设计模式,不要提前优化,不要过度封装,不要过于追求最新的技术。
看一些牛逼的老程序员写代码就非常有意思,你会发现,他们写出来的代码,往往都十分小而简,恰当的地方使用一些让你眼前一亮的设计。当时我在写公司的开放平台,写的很累很累,花了半个多月,进展基本还是起步阶段。当时和带我的人聊天,他的一句话点醒了我:“理解需求,构建抽象实体,打通主流程”。如果我总是在想要用什么,要怎么写,也许我到今天什么都写不出来。
很多人都有完美主义倾向,什么东西,一定要做好,做棒。为此付出大量时间做准备。等到开始做的时候,才发现,后面的人已经超过了自己……
当然,做好一件事,离不开准备。但是,只准备,不去做,那么永远做不好。我的话说完了。
[1]、Hello World,基本上任何编程语言的教科书,一开始都是教大家如何写一个Hello World,久而久之成为一个梗。
第一次来~~
西门群里看到你的博客还有原来王叨叨的,现在还在偶尔更新,你们是动力啊[good]
走在写的路上....独立博客也越来越小众了
我喊“准备减肥”都两年了,然而……
以前存在书签里的那些链接似乎都很有默契,主页写着相同的话:无法访问此网站,DNS_PROBE_FINISHED_NXDOMAIN。
该做什么,要速度,不强求,随意,进步更快。
图可真不错。
以前有人兴趣盎然地来问我独立博客的事情,以及自信满满地要写什么什么的,我还是会秉着同圈子交流的心态聊半天。现在见多了死的很快的,基本就不搭理了。
本科把当时学校最流行的几种语言都上课学过,最后熟悉的还是javascript,也仅仅停留在入门阶段。研究生想想痛下决心精通java去,最终除了写论文的算法外没敲几行代码。现在就是好像各种都会一点,各种都不太熟悉。
估计以后还是主要用java写吧,需要慢慢结合项目多熟悉熟悉,现在刚来实习就修点小bug,前后端都涉及到一些。
感觉我每次说去健身就是这么回事情
我几乎也是只能写个Hello World、、、、、