zoukankan      html  css  js  c++  java
  • 《你在成长为一个优秀的程序员吗》

    以下是翻译过来的原文:
     
    在软件开发过程中,你经历的每件事情都会潜移默化地影响着你。随着时间的流逝,年纪的增长,对于程序开发技术(相同/或者相关能力)以及自身的理解也会不断沉淀,这些最终也会帮助你达成目标——成为一名优秀的程序员
    这里谈到的经历不仅限于程序员生涯里的里程碑,比如换工作、成为领导/经理或者自己创业。你所经历的每一份工作、每个项目(不论大小)、与团队成员的每次交流、甚至你实现的每一个程序模块,都会让你变得比以前更优秀、更有活力、更有见地。
     
    在日常的工作当中不放过任何一点可以学习的新知识,会让你成为更加出色的程序员。我说的是重要的经验——你不必去关心琐碎的事情(比如每一次敲击键盘是否完美),重要的是把握好每一天的安排。如果你出去旅游归来发现两手空空毫无收获,你肯定认为这是在浪费时间。对于程序员生涯也是如此。如果你在完成一个项目或者实现了一个程序功能之后自己没有收获(比如,对软件开发的理解没有提高并且也没有学到什么新的技术),这同样也是一种浪费。
    你可能会说,有些必须完成的工作对你而言是无聊的重复劳动,从中学不到任何东西。事实可能的确如此,但是这取决于你如何看待它。归根结底你需要自己创造成长的条件,在做事的时候需要保持创新。
    从每一次的经历中汲取营养。
     
    首先,除了学习新的编程语言,掌握你钟爱的开发平台最新特性,你还需要提高自己的沟通技巧。
    其次,学习如何与别人一起工作,提高自己团队协作能力也很重要。
    接着,你还需要掌握领导能力、管理能力、如何自我激励、财务知识、行业专业知识、营销知识和组织知识。
    除此之外对所从事行业相关的内容最好也要有广泛的认识和理解。在学习的过程中不断将自己推向极限,最终你会不断提升成为优秀的程序员。
    我想说的是,无论你做什么,都可以从上面列举的这些方面来对照自己,看哪些方面可以有所提高。有的时候你的机遇很好,接触的是最新的技术,采用的是对你而言崭新的开发流程,这时你不由自主地就开始学习和吸收新知识。而有的时候工作确实很乏味,如果你不会自己创造条件自我提升(从上面列举的方面找到可以提高的地方),你就只能做着机械劳动白白浪费了一次提高自己的好机会,以及自己宝贵的时间。
     
    下面我通过一个例子来说明如何从平凡的工作中提高自己。比如说你是一个SQL大牛,有一项工作需要完成很多SQL,只有你是最佳人选。你很精于此道,表面上这项工作很枯燥而且你也不能从中学到什么。但是如果进一步来看,也许这项任务需要与别人配合完成,而你可能并不十分擅长与别人搭档或者沟通,这就是你提高自己的绝佳机会,你要做的就是发现这个机会。或者也许你也十分擅长与别人搭档工作,但是假如这次你的搭档可能连新手都算不上,这就是你提高培训技巧的绝佳机会,捎带地也让这位新人快速成长。
    也许这些都没有发生,你在做着一件你闭着眼睛都可以完成的工作,为什么不尝试去更深入地了解和提高你使用的技术呢?也许你也可以就此机会提高一下你的打字技巧,这肯定没有什么坏处。如果你实在不想做这件无聊的工作,可以尝试和老板沟通一下把事情推掉,虽然这不在我们上面的讨论范围之内,你也可以尝试一下。也许沟通不能达到目的,但是你可以从尝试沟通当中锻炼一下自己的机智和勇气(如何在尴尬的情形下保持镇定),毕竟你不会为了推掉任务而去惹恼你的经理/领导:)。所以,如果你能从不同的角度看待一个任务,突然之间你会发现在成为优秀程序员的路上又迈进了一步。
     
    如果你在原地踏步该怎么办?
     
    有的时候你一直无法摆脱一些事情(似乎这些事情本来就是如此)。即使从各个角度看也无法从中找到一点可以提高的地方,这个时候你该怎们办?这个问题问的很好,但你应该问的不是这个问题。如果你真的觉得不能从工作中学习和成长,为什么你还在做这样的工作呢(这个才是你应该问的)?如果是因为经济的原因(比如你现在的收入很高),那么一定要确保不会为了短期利益而损害了未来的前途。如果是因为你舍不得团队里一起工作的同事,那么只要分析一下利弊就会知道,即使你不在这里工作了,你们依然还是好朋友。你只是离开了公司,但你们的友谊没有结束。
    如果不是上述的原因,那你为什么还在做这样的工作呢?你应该意识到,你会因此丧失宝贵的机会。请记住,对你所做的每一件事情给出评价,看它是否能给你带来改变或者加深你对程序开发技术的理解。如果答案是否定的,你可以马上离开;如果答案是肯定的,那么(做这件事的时候)你不但能够从中获得满足感,而且每一天(而不仅仅是每一年)都会在技术和人格上朝着完美的境界迈进。
     
     
    译文出处:伯乐在线- 职场博客 - @程序员的那些事 
    原文:Alan Skorkin 译文:敏捷翻译 - 唐尤华
    -----------以上原文结束-------------
    题外话:
          这一段时间工作压得比较近,整个工作的排期被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掉你。那么不禁去问自己,你的“苦练”是在追求什么???
         
      “永远保持虚心,你所拥有的和不断在完善的技艺,不是为了一辈子得到别人的认可,仅仅因为自己喜欢它,仅仅是想去追寻完美的它。”
  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/secondtononewe/p/6227056.html
Copyright © 2011-2022 走看看