《你在成长为一个优秀的程序员吗》
以下是翻译过来的原文:
在软件开发过程中,你经历的每件事情都会潜移默化地影响着你。随着时间的流逝,年纪的增长,对于程序开发技术(相同/或者相关能力)以及自身的理解也会不断沉淀,这些最终也会帮助你达成目标——成为一名优秀的程序员。
这里谈到的经历不仅限于程序员生涯里的里程碑,比如换工作、成为领导/经理或者自己创业。你所经历的每一份工作、每个项目(不论大小)、与团队成员的每次交流、甚至你实现的每一个程序模块,都会让你变得比以前更优秀、更有活力、更有见地。
在日常的工作当中不放过任何一点可以学习的新知识,会让你成为更加出色的程序员。我说的是重要的经验——你不必去关心琐碎的事情(比如每一次敲击键盘是否完美),重要的是把握好每一天的安排。如果你出去旅游归来发现两手空空毫无收获,你肯定认为这是在浪费时间。对于程序员生涯也是如此。如果你在完成一个项目或者实现了一个程序功能之后自己没有收获(比如,对软件开发的理解没有提高并且也没有学到什么新的技术),这同样也是一种浪费。
你可能会说,有些必须完成的工作对你而言是无聊的重复劳动,从中学不到任何东西。事实可能的确如此,但是这取决于你如何看待它。归根结底你需要自己创造成长的条件,在做事的时候需要保持创新。
从每一次的经历中汲取营养。
首先,除了学习新的编程语言,掌握你钟爱的开发平台最新特性,你还需要提高自己的沟通技巧。
其次,学习如何与别人一起工作,提高自己团队协作能力也很重要。
接着,你还需要掌握领导能力、管理能力、如何自我激励、财务知识、行业专业知识、营销知识和组织知识。
除此之外对所从事行业相关的内容最好也要有广泛的认识和理解。在学习的过程中不断将自己推向极限,最终你会不断提升成为优秀的程序员。
我想说的是,无论你做什么,都可以从上面列举的这些方面来对照自己,看哪些方面可以有所提高。有的时候你的机遇很好,接触的是最新的技术,采用的是对你而言崭新的开发流程,这时你不由自主地就开始学习和吸收新知识。而有的时候工作确实很乏味,如果你不会自己创造条件自我提升(从上面列举的方面找到可以提高的地方),你就只能做着机械劳动白白浪费了一次提高自己的好机会,以及自己宝贵的时间。
下面我通过一个例子来说明如何从平凡的工作中提高自己。比如说你是一个SQL大牛,有一项工作需要完成很多SQL,只有你是最佳人选。你很精于此道,表面上这项工作很枯燥而且你也不能从中学到什么。但是如果进一步来看,也许这项任务需要与别人配合完成,而你可能并不十分擅长与别人搭档或者沟通,这就是你提高自己的绝佳机会,你要做的就是发现这个机会。或者也许你也十分擅长与别人搭档工作,但是假如这次你的搭档可能连新手都算不上,这就是你提高培训技巧的绝佳机会,捎带地也让这位新人快速成长。
也许这些都没有发生,你在做着一件你闭着眼睛都可以完成的工作,为什么不尝试去更深入地了解和提高你使用的技术呢?也许你也可以就此机会提高一下你的打字技巧,这肯定没有什么坏处。如果你实在不想做这件无聊的工作,可以尝试和老板沟通一下把事情推掉,虽然这不在我们上面的讨论范围之内,你也可以尝试一下。也许沟通不能达到目的,但是你可以从尝试沟通当中锻炼一下自己的机智和勇气(如何在尴尬的情形下保持镇定),毕竟你不会为了推掉任务而去惹恼你的经理/领导:)。所以,如果你能从不同的角度看待一个任务,突然之间你会发现在成为优秀程序员的路上又迈进了一步。
如果你在原地踏步该怎么办?
有的时候你一直无法摆脱一些事情(似乎这些事情本来就是如此)。即使从各个角度看也无法从中找到一点可以提高的地方,这个时候你该怎们办?这个问题问的很好,但你应该问的不是这个问题。如果你真的觉得不能从工作中学习和成长,为什么你还在做这样的工作呢(这个才是你应该问的)?如果是因为经济的原因(比如你现在的收入很高),那么一定要确保不会为了短期利益而损害了未来的前途。如果是因为你舍不得团队里一起工作的同事,那么只要分析一下利弊就会知道,即使你不在这里工作了,你们依然还是好朋友。你只是离开了公司,但你们的友谊没有结束。
如果不是上述的原因,那你为什么还在做这样的工作呢?你应该意识到,你会因此丧失宝贵的机会。请记住,对你所做的每一件事情给出评价,看它是否能给你带来改变或者加深你对程序开发技术的理解。如果答案是否定的,你可以马上离开;如果答案是肯定的,那么(做这件事的时候)你不但能够从中获得满足感,而且每一天(而不仅仅是每一年)都会在技术和人格上朝着完美的境界迈进。
-----------以上原文结束-------------
题外话:
这一段时间工作压得比较近,整个工作的排期被PM们排得满满的,对于今年三月底刚刚入职的自己来说,如何协调好每一天的安排,真的是一个不小的挑战。有时候会向自己要好的同事抱怨,“这么多工作,什么时候是个头…”同事说得好,你要是都干完了,你就不用上班了。这一时期的开发,暂时由我们三个人来负责,而我负责项目的前端开发,剩下的两个同事负责后端的开发。一个FE负责,压力可想而知,今天工作的安排,昨天在头脑里都已安排好,但是等到今天,就会发现,自己的开发任务的安排,被一堆一堆的琐事给占据,而正常的开发则被耽误。需要和pm们讨论和确认需求,需要协同qa来修改上一批次的bug们,需要上线发单走流程,需要,需要,,很多需要。这就是自己矛盾的地方,昨天回来的时候,感觉这一天的开发怎么又被耽搁了,于是跟在和女朋友打电话的时候就开始抱怨,女友在听我的抱怨的时候说的一句话让我记忆犹新,是关于修改各种bug的:“你开发的东西肯定不是完美的,上一批次的那些bug,难道需要别人去帮你擦屁股吗??”,说的很在理,实际情况也是,上一批次的bug们,都是在我手上诞生的,现在我却要返回再去清理它们,说句不好听的话,活该你造这么多bug!!
晚上无聊的情况下在博客园瞎转悠,猛然发现了这个好文章,读了好几遍,感觉很受益!!“在日常的工作当中不放过任何一点可以学习的新知识”,“归根结底你需要自己创造成长的条件,在做事的时候需要保持创新”,我把这两句话放到了自己的博客的header上面,时刻提醒自己。还有就是:“我说的是重要的经验——你不必去关心琐碎的事情(比如每一次敲击键盘是否完美),重要的是把握好每一天的安排”,经过了4,5,6,7,8,9,10月,整整七个多月的实习(虽然还要实习到明年6,7月份 - -!),越来越发现,开发也许不是工作中的难点,真正难的地方是在安排好每一天,以及如何让每一天的工作变得有效率,如何让每一天都可以学到东西。不想去改上一批次的bug,那就在每一批次的开发中,好好地设计,好好地构思,写代码的时候,要“三思而后敲”,提高每一个字母的质量,切忌“急于求成”;不想去在开发的时候又去和pm讨论确认需求,那就在需求阶段努力地思考需求的细节问题;不想为了一个固定要走流程而去“浪费”时间,但是有无法避免,那就想办法用最少的时间去完成这个流程;不想去跟pm们交流时,用五句话说清楚一个意思,那就动动脑子,用一句话搞定;不想…那就…;不想…那就…,其实,归根到底,甚至自己都知道,这个“烦人”的事情的解决办法,就看你用心去解决不去。
我自己的一个一直比较热衷的游戏是《反恐精英》,俗称CS,曾经苦练过一段AWP,深深地被它的响声,被它彪悍的外表,被它的杀伤力所吸引,但是它也有它的缺点,笨重,不能连发,也就是说,在中距离或者近距离作战,一枪未击中敌人,那么自身就相当“难保”了。最终,在和身边的朋友的切磋中,自己使用AWP的小技得到了朋友们的“承认”,以为可以“出山”的自己,想去更大的“世界”和有同样爱好的人们切磋,可是慢慢地发现,自己的那点小技,仍旧会被很多高手们“破掉”,甚至被打得“落花流水”,让自己不敢再相信自己还会使用AWP。我想用这个例子来说明什么,我只是想说,永远不要以为自己的技艺已经很高超了,因为,这个世界之大,不管你有多么“厉害”,依然会有更“厉害”的角色,毫不留情地PK掉你。那么不禁去问自己,你的“苦练”是在追求什么???
“永远保持虚心,你所拥有的和不断在完善的技艺,不是为了一辈子得到别人的认可,仅仅因为自己喜欢它,仅仅是想去追寻完美的它。”