如何成为优秀的软件工程师

- 原文地址:How to Be a Successful Software Engineer

这篇文章还是挺符合笔者思想的。笔者涉世不深,见识短浅,不过讲真,这么多年来遇到的,笔者觉得真正能做到以下几点的,聊聊无几。这个性质往往不是由你的经验和你已知的决定,而是由你对技术本身的态度决定。笔者现在不玩游戏不看剧,每天看看文章写写代码,本身就是一件非常开心的事情。获得知识与创造的快感,只可意会不可言传。

文首是原作者参加一次会议所感,实际上绝大部分踏入程序猿这个行业的人都会考虑,怎么才能成为一名优秀的程序员,无论是为了物质生活还是精神追求,而本文列举的几点也是原作者所想。

需要注意,这篇文章是 Opinionated,请批判的去看。笔者也插入了很多自己的观点,不过主旨上还是和原文保持一致,只是做些讲解。

Know What You’re Not Doing:知你不知

有个非常著名的适用于基本上所有领域的论断,当然肯定也合适与软件开发啦: I know that I know nothing:知我所知

牛逼的工程师往往都会选择合适的事情去做,譬如知道你能够完成哪些任务,知道在当前任务下应该选择怎么样的解决方案,知道应该钻研或者关注哪些技术等等。优先做处在关键节点上的事情,相对应地,也需要知道你现在还不懂哪些东西。

不要让你已有的东西成为你的阻碍

所有人都会说学习一门语言没啥的,但是人们在选择解决方案或者承接任务的时候不可避免地会受到已会的语言的影响,就像笔者会尽可能避免使用.Net,毕竟不精通。所以你要明白,不要拘泥于你会的,不要沾沾自喜于你的经验,老实说笔者有时候听某些人动不动炫耀自己 N 年的工作经验,还是有点反感的。你应该根据需要学习任何东西,面试官更希望用你未来可以达到的去衡量你,而不是你现在所处的境界与位置。

一直记得苏格拉底的一句话,就是认识你自己,映射到程序猿中,就是能知道你可以做的和不可以做的,而尽可能地少去迷惑自己到底能不能做。无论是对于技术选型还是项目规划都适用这个观点,随着学习的深入和了解的东西的增加,自然会越发觉得知识海洋的浩瀚无垠。庄子有云,吾生也有涯,而知也无涯。以有涯随无涯,殆已!笔者之前也一直会问,当我学习的速度远远赶不上新知识出现的速度,莫大的悲哀啊。这好像一个 NP 问题,而笔者自我解决的办法就是建立一个合理的健壮的知识体系,这样我虽然记不住或者没时间深入研究很多东西,但是至少可以把它们放到合适的地方,可以借鉴笔者的。笔者自己目前最主要的信息来源主要是 5 个信息聚合的站点:

  • Medium:你可以在 Medium 上订阅一些 Tags 或者 Publication 或者 Following Users,笔者自己感觉这个的整个质量和粮草比例最高。不过缺陷是要上这个得自带梯子。

  • Reddit:可以订阅譬如 web_dev 等等感兴趣的 subreddit,经常会看到不错的文章与分享。

  • InfoQ:挺不错的,经常出现精品,但是也有不少文章感觉太过于阳春白雪。

  • 开发者头条:笔者一般只会看推荐的头条精选等,还是有很多不错的。

仅笔者自己感觉,如果想成为一名了解前沿的开发者,还是需要多关注 Medium 与 Reddit,整体而言中文咨询的活跃度与质量还是略有差距。其他的譬如 CSDN 每个月的程序员杂志与 InfoQ 的架构师质量也都非常高。

Communication Skills:沟通技巧

Dirkjan 与 Carmen 讨论了 Github 的工作氛围以及它们是怎么基于高效的通信来保证工作顺利进行。实际上,沟通能力也是一个至关重要的技巧。譬如,大部分在 Github 上的团队都散布四方,甚至于都不一定有两个雇员在一个城市。并且不同成员之间习惯的沟通方式也大相径庭,有的人喜欢用 Slack,而有的人喜欢用 Issue 或者 Pull 这种方式。因此,如果你也是远程工作并且沟通方式不一致,那么你应该及时记录你说了啥以及和他人达成的一些协议。

You don’t want to be known as the guy who writes bad commit messages.你肯定不想成为天天写错误的提交信息的人

你要能够让别人知道你已经理解了他们的问题并且能够合适的表达自己。尽可能地遵循公司统一的 Workflow,如果要和新的伙伴合作,一定要多做些预研。我挺喜欢 Github 的工作方式的,即使你在一间办公室里也不会天天让你开会,不过会基于 Pull 与 Issues 来进行异步的会议。这种方式会让新人不可避免地爱上它。

Do not Ask for Work:不要等着别人分你分配工作

笔者也觉得,搬砖和设计之间的一个很大区别就是会不会自己去划分乃至于发现潜在的任务

我第一次进行远程工作的时候就发现主动性非常重要,工作并不会主动找上门来,就像上帝重不垂青无准备之人。有时候当你发现了问题的时候,并不意味着你的领导也看到了并且会主动让你去修复。这个道理在 FaceBook 是这样的:

Nothing at Facebook is someone else’s problem.:Facebook 里,你的问题不一定是别人的问题

把这个认知结合到远程工作中,更不会像传统的办公室里还有人天天盯着你,你主动参与更加重要,这也是你的责任之一:

img

Take Your Time to Think:留点时间思考

Basecamp 的 CEO Jason Fried 提到他非常担心现在人们越来越充满压力,像个机器人一样工作。这点也引起了我的自省,我上一次主动思考是在啥时候?

img

Fried 建议是不要老在一个地方工作或者每天走走来让你从正在做的事情里暂时抽身出来,多思考思考 how、why、when。很多时候创意就来自于这短短的思考过程,而不会来源于你的朝九晚五。更重要的是,这个对你的身体和精神都很重要哦。

Contribute to Open Source Software:贡献开源社区

笔者一直认为,与传统的简历相比,博客与开源项目更能展示你

本次讨论有个主题是I’ve been advocating myself,关于贡献开源社区的好处。你不能仅仅因为贡献开源项目会让你的 Github 资料好看就去做,而应该是真的出于你的兴趣。

img

在反馈给他人和 review 它们的贡献的时候,不仅能增加你自己的编程技巧,还能增加你的远程工作能力与沟通技巧。

Final Notes

Just do it.

上一页
下一页