每个软件工程师都应该尝试的5件事情
回顾我的职业生涯(不,我还没那么老,不过入行确实不少年了),确实有几次人生拐点帮我更具职场智慧,并鞭策我,使我总体来说适合成为软件工程师或程序员,成为那种要么热衷于提高自己的技艺,要么对混入管理层有兴趣,要么只是简单的期望扩大自己的知识面的人。我意识到,鉴于每个人目前的工作情况,有些建议可能并不适合于每一个人,尤其是假如你工作在一家对“谁可以和客户谈话”这种事都作出严格定义的公司的话。所以如果你现在做不到全部这些,也不必烦恼。也要注意,有时,你需要的只是开口去问!
贡献到一个可行的开源项目
除非你与世隔绝,否则一定听过开源项目,也许你已经在 Github 或 SourceForge 上有一些小型的开源项目了。所有这些都是好的,但是我所说的“viable open source” 是指应当尝试在一个项目中做出重大意义的贡献,你的代码必须是通过审批的流程,如果被接受,将会在很多系统的系统中被应用到。你能从共享开源项目中学到的东西非常多。就我个人而言,它意味着:写更好的代码,更高效的沟通,有利的条件获得更多的工作机会,更高的报酬,更多的赞誉,更多了解其他观点和让自己有更厚的脸皮。最后一点,是说,你的代码在某些情况下会受到详细检查和批评。开源项目只是一个软件,并不是你一个人的(假设你即使遇到了一个很好的项目,请尽力将自己和项目区分开)。所以把接受批评当作是一个学习的机会,并将事情做得更好而不是令自己生气。不过这不容易做到,我自己有时也会与这种事情斗争,但是我知道如果不去想这些代码去谁写的,这些代码(和我)都能越来越好,而这才是最重要的。
参与开源项目者还有一个额外的优势,从雇主的角度看,我会更容易雇佣一些在能在生产环境上找到他们提交代码记录的人。对于技能差不多的候选人,任何时候,我都会他们当中选择开源项目贡献者。
销售你的软件
是的,我从字面上的意思是你应该去做电话销售,如果可能的话。换句话说,我认为你应该将自己放到极客的位置,时时的为他人用英语解释明白你在做什么,而不仅仅是你的同伴。如果你都不能解释清楚你做的是什么,其他人怎么能去购买它呐?
做前期销售对我来说是一个非常宝贵的事,因为需要一个真实的、存在的、活生生的客户站在面前,可以为他们解释为什么他们应该购买我的软件。在开始的几次,我做到了,我非常紧张(毫无疑问的事实就是我的工作起步阶段,我们也在尝试做得更好),但是我通过了, 得到了一些锻炼,得到了一些提升。
卖你写的软件会给你真正的观点你正在构建什么和为什么构建, 它还能让你接触到大量的使用案例和真实反馈,什么是好,什么是坏。它也将磨练你,同事也会带给你信心。你还可以得到更多的使用你写的软件而改善他们生活的人的尊重,另外,当代码不正确时你也会是第一个感受痛苦的人,这也会使你希望自己写出更好的测试代码。最后,从长远来说,它帮你看得更远。
支持你的软件
销售你的软件之后的另一件事就是支持它。找到一种你能工作在第一线的支持方式,或者至少参与到支持工作中,来使自己能够真切的体验到人们使用你的软件的各种方式:好的、不好的、甚至丑陋的方式。错误报告和升级是一方面,直接从客户听取意见则是另一回事。除了需要社交技巧,你也需要能够迅速的进入用户的使用场景,了解他们看待你的代码的方式,这将进一步告诉你哪些你做的很好,哪些你还需要改进。这也意味着要知道哪些该说哪些不该说,因为这是你和付费客户打交道时要把握的分寸。伴随着销售,也会带给你一个新的欣喜,即之前开发阶段的辛勤工作没有白费,它很好的支撑着软件支持阶段的工作。
写/培训与你软件相关的内容
如果你还没有弄明白我的意思,我将会解释清楚一点:我十分重视那些不单单能写代码并且在公司内部和向公司外部人员解释那些代码是什么和为什么这样写的工程师。通过撰写和培训软件相关的内容,你必须简明、清晰地解释复杂的技术细节。也需要经常强调那些从用户的角度看是不对的地方。我说不出多少次在写文章和培训的过程中发现功能或特性不是十分正确,从而回去修改代码。这种情况在 API 设计的过程中更加经常发生。
写作也可以增加你的曝光并带给你更广的观众群体,从而得到反馈并令你的作品更上一层楼。有很多,很多的机会可以去为网站或出版社撰写技术的文章。学着去推销你的想法(看,你又在销售了!)并坚持下去,下一步你就会发现你将会成为一名合格的作者并有可能从中获得回报。
结交一些新朋友
也许对我来说,在学习和机遇两个方面最大的一种变革力量,就是我对扩展自己人际网络的明确努力 。当然这并不容易,而且这肯定涉及要“使你自己身心投入其中”,但回报经常是极为显著的,而且以事后所见,其中的风险非常小。
如果在你直接接触范围之外没有太多的人际网络,我给你一些建议。首先最重要的,人际网络的关键是你必须真诚的与新朋友会面,而且你必须除了这个新的关系之外别无所求。其次,许下承诺去维持这样的努力数月乃至更久。当你获得更多的自信并从任何失误中获得经验之后,这将变得越来越容易。第三,做你自己,但要注重倾听他人。第四,这也是我最弱的方面,获知并记忆名字。我很少忘记一张脸,但如果我不努力去学习别人的名字,这些名字就会在我脑中溜走,所以记住别人的名字,让别人知道你看重他们。
除了这些技巧,还有许多关于这个主题的好书。我最喜欢的有一本“爱是杀手锏”。就我看来,这是一个做作的标题,但书中的建议都是干货,而且作者很好的将它呈现了出来。在每天结束时,让你自己沉浸其中,从你获得的实际反馈中学习。如果你发现自己被太多次拒绝,问问一位信任的朋友,让他给你在何处改进的真实意见。如果有困惑,找别的朋友讨论。
红利: 找到导师
有可能你已经知道一些令你尊敬的人物,他们拥有解决复杂问题和高效沟通的能力。如果他们愿意与你分享他们的经验,并给你改进方法的反馈,那么自然有了胜算。从他们的经验和教训中学习,对他们的建议保持开放的态度。虽然它不会总是正确,但你至少应该考虑一下他们说的是什么,之后再做出决定。就我个人来说,我很幸运拥有一个朋友,他也是一个高管教练(我们意外的相遇,证明了使自己投入某事的价值)和一间企业所有者。在好多年里,我也遇到许多好老板和好同事,他们充当了我的人生导师,我对他们感激不尽。在开始以前,问问自己最敬佩谁,然后去和他们讨论你的想法。如果你找不到可以胜任此角色的朋友,甚至可以考虑雇佣一位教练。
完结
请记住,所有这些事情是你可以在这里和那里周期性的做。 他们通常并不需要很大的时间或货币的承诺,但他们确实需要你走出你的安乐窝。
最后,我很高兴听到一些程序员/工程师做这些事之后,确实改善了他们的职业/生活。你工作是什么?哪些工作没有起到作用?英文原文:5 Things Every Software Engineer Should Try
来自: 开源中国社区