5 Things Every Software Engineer Should Try

       In looking back on my career (no, I’m not that old, but I have been around long enough), there have been a few inflection points that have really helped me career-wise and they strike me as being generally applicable to software engineers/programmers who are interested in either getting better at their craft or in moving up to management or simply improve their breadth of knowledge.   I realize some of these suggestions may not be possible for you given your current work situation, especially if you are at a large company with much more rigid definitions of who can talk to customers, so don’t worry if you can’t do them all.  Also note, sometimes you may just need to ask!

Contribute to a Viable Open Source Project

Unless you live under a rock, you’ve heard about open source and you maybe even have a few small projects on Github or SourceForge.  All of that is well and good, but what I mean by “viable open source” is that you should make an attempt to contribute to a project of significant size and scope that your code has to go through a vetting process and, if accepted, will see it’s way into production in a large number of systems.  The things you’ll learn from doing this are numerous.  For me personally, it’s meant: writing better code, communicating better, more job opportunities on favorable terms, higher pay, more recognition, more understanding of other points of view and a thicker skin.  On that last point, your code will, at some point, be scrutinized and criticized.  It’s not personal (assuming you picked a good project and even if it is, try to separate yourself from it) and it’s only software.  Take it as a learning opportunity and make it better instead of getting offended.  This isn’t always easy and I know it’s something I struggle with, but I also know when I let go of ownership, the code (and me) always gets better and that’s really what matters.

As an extra bonus, from an employer standpoint, I find it much easier to hire people when they have a public track record of real code in production.  I’ll take an open source contributor over someone with comparable skills any day.

Sell Your Software

Yes, I literally mean you should go on sales calls, if possible.  In other words, I think you should put the geek in you on a shelf from time to time and have to explain what you do in plain English for others, not just your peers, to understand.  If you can’t explain what it is you do, why would anyone buy it?

Doing pre-sales has been invaluable to me as it required me to have to stand up in front of a real, living, breathing customer and explain to them why I think they should buy my software.    The first few times I did it, I was nervous as can be (no doubt exacerbated by the fact that I was working at a startup and we were just trying to get off the ground), but I made it through, got some coaching, and got better.

Selling software you wrote will give you real perspective on what you are building and why, it will also expose you to a ton of use cases and real feedback as to what is good and what is bad.  It will also humble you as well as bring you a new level of confidence.  You’ll also have a lot more respect for the people who make their living off of selling the stuff you wrote.  Additionally, you’ll also know first hand the pain of when things don’t go right in the code and make you wish you had written better tests!  Finally, in the long run, it should help you see the “big picture”.

Support Your Software

The flip side of selling your software is supporting it.  Find a way to take the first line calls to support, or at least be involved in them so that you can experience first hand the good, bad and ugly of the way people use your software.  Bug reports and escalations are one thing, hearing it first hand from a customer is yet another.  Besides the social skills needed, you’ll also need to be able to quickly get into a customer’s use case and their way of seeing your code and that will further illuminate where you are good and where you can be improved.  It also means knowing what to say and what not to say, as it is a fine line when dealing with paying customers.  As with selling, it will also give you a new found appreciation for the hard work support does to support the stuff you wrote.

Write/Train On Your Software

If you haven’t got my point yet, I’ll make it clear: I put a lot of value on engineers who can not only write the code but also communicate the how and why of that code to a variety of other people inside and outside of an organization.  By writing and training on your software, you have to explain complex technical details in a clear, concise, relatable way.  It will often highlight where things are broken from a user’s perspective, too.  I can’t tell you the number of times where, in writing or training on code I helped on, I realized, mid-sentence that the feature or functionality wasn’t quite right and I went back and fixed it.  This is especially true of API design.

Writing can also bring you more exposure and a wider audience, which feeds back into your need to take your game to the next level.  There are many, many opportunities out there to write technical content for websites and publishers.  Learn to pitch your idea (see, you are selling again!) and follow through on it and next thing you’ll know you’ll be a regular author and likely even get paid for it.

Make Some New Friends

Probably the single biggest game changer for me in terms of both learning and opportunities was an explicit effort to expand my personal network.  It isn’t easy and it definitely involves “putting yourself out there”, but the rewards are often quite significant and, in hindsight, the risks are quite small.

If you haven’t networked much outside of your immediate circles, I recommend a few things.  First and foremost, the key to networking is you have to genuinely want to meet new people and you have to genuinely expect nothing to come out of it other than a new connection.  Second, make a commitment to sustain the effort for several months and beyond.  It will get easier as you get more confidence and you learn from any mistakes.  Third, be yourself, but put an emphasis on listening to others.  Fourth, and this is still my weakest, learn and remember names.  I rarely forget a face, but names often slip by if I don’t make a concerted effort to learn the person’s name.  People are rather attached to their names, so let them know you think they are important by remembering their name.

Beyond these tips, there are a number of good books on the subject.  One of my favorites is “Love is the Killer App”.  It’s a hokey title, IMO, but the advice in the book is solid and the author does a good job of presenting it.  At the end of the day, put yourself out there and learn from the feedback you get.  If you find you are getting rejected a lot, ask a trusted friend to give you real feedback on what you can improve.  When in doubt, get the other person talking.

Bonus: Find Mentors

Chances are, you already know people that you respect for their ability to handle complex problems and communicate effectively.  Odds are also good that they would be willing to share their experiences with you and give you feedback on ways you can improve.  Learn from their wins as well as their mistakes and be open to their advice.  It won’t always be right, but you should at least consider what they are saying and then make a decision.  Personally, I’ve had the good fortune to have a friend who is also an executive coach (we met serendipitously, proving the value of putting yourself out there) and a business owner.  Throughout the years, I’ve also had a number of good bosses and colleagues who have acted as mentors over the years and to whom I’m forever indebted.  To get started, ask yourself who you respect the most and then go discuss the idea with them.  You may even want to consider hiring a coach if you can’t find a friend to fill that role.

Wrapping Up

Keep in mind, that all of these things are something you can do here and there periodically.  They typically don’t require big time or monetary commitments, but they do require you to get out of your comfort zone.

Finally, I’d be interested to hear other things programmers/engineers have done to improve their career/life.  What worked for you?  What didn’t work?

以下是文章翻译

回顾我的职业生涯(不,我还没那么老,不过入行确实不少年了),确实有几次人生拐点帮我更具职场智慧,并鞭策我,使我总体来说适合成为软件工程师或程序员,成为那种要么热衷于提高自己的技艺,要么对混入管理层有兴趣,要么只是简单的期望扩大自己的知识面的人。我意识到,鉴于每个人目前的工作情况,有些建议可能并不适合于每一个人,尤其是假如你工作在一家对“谁可以和客户谈话”这种事都作出严格定义的公司的话。所以如果你现在做不到全部这些,也不必烦恼。也要注意,有时,你需要的只是开口去问! 

贡献到一个可行的开源项目 

除非你与世隔绝,否则一定听过开源项目,也许你已经在Github或SourceForge上有一些小型的开源项目了。所有这些都是好的,但是我所说的“viable open source” 是指应当尝试在一个项目中做出重大意义的贡献,你的代码必须是通过审批的流程,如果被接受,将会在很多系统的系统中被应用到。你能从共享开源项目中学到的东西非常多。就我个人而言,它意味着:写更好的代码,更高效的沟通,有利的条件获得更多的工作机会,更高的报酬,更多的赞誉,更多了解其他观点和让自己有更厚的脸皮。最后一点,是说,你的代码在某些情况下会受到详细检查和批评。开源项目只是一个软件,并不是你一个人的(假设你即使遇到了一个很好的项目,请尽力将自己和项目区分开)。所以把接受批评当作是一个学习的机会,并将事情做得更好而不是令自己生气。不过这不容易做到,我自己有时也会与这种事情斗争,但是我知道如果不去想这些代码去谁写的,这些代码(和我)都能越来越好,而这才是最重要的。 

参与开源项目者还有一个额外的优势,从雇主的角度看,我会更容易雇佣一些在能在生产环境上找到他们提交代码记录的人。对于技能差不多的候选人,任何时候,我都会他们当中选择开源项目贡献者。

销售你的软件

是的,我从字面上的意思是你应该去做电话销售,如果可能的话。换句话说,我认为你应该将自己放到极客的位置,时时的为他人用英语解释明白你在做什么,而不仅仅是你的同伴。如果你都不能解释清楚你做的是什么,其他人怎么能去购买它呐? 

做前期销售对我来说是一个非常宝贵的事,因为需要一个真实的、存在的、活生生的客户站在面前,可以为他们解释为什么他们应该购买我的软件。在开始的几次,我做到了,我非常紧张(毫无疑问的事实就是我的工作起步阶段,我们也在尝试做得更好),但是我通过了, 得到了一些锻炼,得到了一些提升。 

卖你写的软件会给你真正的观点你正在构建什么和为什么构建, 它还能让你接触到大量的使用案例和真实反馈,什么是好,什么是坏。它也将磨练你,同事也会带给你信心。你还可以得到更多的使用你写的软件而改善他们生活的人的尊重,另外,当代码不正确时你也会是第一个感受痛苦的人,这也会使你希望自己写出更好的测试代码。最后,从长远来说,它帮你看得更远。 

支持你的软件

销售你的软件之后的另一件事就是支持它。找到一种你能工作在第一线的支持方式,或者至少参与到支持工作中,来使自己能够真切的体验到人们使用你的软件的各种方式:好的、不好的、甚至丑陋的方式。错误报告和升级是一方面,直接从客户听取意见则是另一回事。除了需要社交技巧,你也需要能够迅速的进入用户的使用场景,了解他们看待你的代码的方式,这将进一步告诉你哪些你做的很好,哪些你还需要改进。这也意味着要知道哪些该说哪些不该说,因为这是你和付费客户打交道时要把握的分寸。伴随着销售,也会带给你一个新的欣喜,即之前开发阶段的辛勤工作没有白费,它很好的支撑着软件支持阶段的工作。 
写/培训与你软件相关的内容 

如果你还没有弄明白我的意思,我将会解释清楚一点:我十分重视那些不单单能写代码并且在公司内部和向公司外部人员解释那些代码是什么和为什么这样写的工程师。通过撰写和培训软件相关的内容,你必须简明、清晰地解释复杂的技术细节。也需要经常强调那些从用户的角度看是不对的地方。我说不出多少次在写文章和培训的过程中发现功能或特性不是十分正确,从而回去修改代码。这种情况在API设计的过程中更加经常发生。 

写作也可以增加你的曝光并带给你更广的观众群体,从而得到反馈并令你的作品更上一层楼。有很多,很多的机会可以去为网站或出版社撰写技术的文章。学着去推销你的想法(看,你又在销售了!)并坚持下去,下一步你就会发现你将会成为一名合格的作者并有可能从中获得回报。 

结交一些新朋友

也许对我来说,在学习和机遇两个方面最大的一种变革力量,就是我对扩展自己人际网络的明确努力 。当然这并不容易,而且这肯定涉及要“使你自己身心投入其中”,但回报经常是极为显著的,而且以事后所见,其中的风险非常小。 

如果在你直接接触范围之外没有太多的人际网络,我给你一些建议。首先最重要的,人际网络的关键是你必须真诚的与新朋友会面,而且你必须除了这个新的关系之外别无所求。其次,许下承诺去维持这样的努力数月乃至更久。当你获得更多的自信并从任何失误中获得经验之后,这将变得越来越容易。第三,做你自己,但要注重倾听他人。第四,这也是我最弱的方面,获知并记忆名字。我很少忘记一张脸,但如果我不努力去学习别人的名字,这些名字就会在我脑中溜走,所以记住别人的名字,让别人知道你看重他们。 

除了这些技巧,还有许多关于这个主题的好书。我最喜欢的有一本“爱是杀手锏”。就我看来,这是一个做作的标题,但书中的建议都是干货,而且作者很好的将它呈现了出来。在每天结束时,让你自己沉浸其中,从你获得的实际反馈中学习。如果你发现自己被太多次拒绝,问问一位信任的朋友,让他给你在何处改进的真实意见。如果有困惑,找别的朋友讨论。 

红利: 找到导师

有可能你已经知道一些令你尊敬的人物,他们拥有解决复杂问题和高效沟通的能力。如果他们愿意与你分享他们的经验,并给你改进方法的反馈,那么自然有了胜算。从他们的经验和教训中学习,对他们的建议保持开放的态度。虽然它不会总是正确,但你至少应该考虑一下他们说的是什么,之后再做出决定。就我个人来说,我很幸运拥有一个朋友,他也是一个高管教练(我们意外的相遇,证明了使自己投入某事的价值)和一间企业所有者。在好多年里,我也遇到许多好老板和好同事,他们充当了我的人生导师,我对他们感激不尽。在开始以前,问问自己最敬佩谁,然后去和他们讨论你的想法。如果你找不到可以胜任此角色的朋友,甚至可以考虑雇佣一位教练。 
完结

请记住,所有这些事情是你可以在这里和那里周期性的做。 他们通常并不需要很大的时间或货币的承诺,但他们确实需要你走出你的安乐窝。 

最后,我很高兴听到一些程序员/工程师做这些事之后,确实改善了他们的职业/生活。你工作是什么?哪些工作没有起到作用? 

猜你喜欢

转载自blog.csdn.net/ieflex/article/details/83986737