程序员的职业技能不止于敲代码!

程序员,除了编码,还需要关注哪些技能?

程序员的职业技能不止于敲代码!

当我在寻找一名可以合作的程序员时,我认为相比起专业技能来说,非专业方面的技能更能让他们成为优秀的合作者。

事实上,本文中谈到的所有技能都能帮助技术项目编写好的代码。其中大多数的技能也有助于促进编程以外的职业发展,但我想专心讨论一下为什么这些技能对于程序员尤其有益。

1.共情

为了打造一款出色的产品,你必须设身处地地为用户考虑。他们将如何使用你的产品?哪些功能对他们有帮助?你的程序怎样才能帮助他们改善生活?反过来,你的产品会如何伤害他们,或对他们的生活产生负面影响?你的应用程序的伦理意蕴是什么?

共情对于你的许多应用程序至关重要。如果保管不当,那么你的用户信息会被第三方滥用。

如果有人无法访问你的产品,那么会妨碍使用产品的人数。如果产品运行非常慢或需要大量宽带才能运行,那么用户就会离开,而且网速很慢的用户以及移动用户都无法使用产品。

每天有关一些公司实现了一些有害算法的文章层出不穷,比如 YouTube 的算法中激进的右派,亚马逊建立的带有性别歧视的招聘算法(最终他们并没有使用该算法),或是 AI 误判黑皮肤女性的性别。在你写代码的时候,仔细想想每个人!

此外,共情有助于成为团队成员和导师。设身处地的为经理或其他开发人员想想。为什么他们要做出这些决定?你怎样做才能帮到他们?拥有共情肯定能够提高你的能力,让你成为一名高效的队友。如果你是老板,那么你可以留住你的人才,如果你表现出共情,那么员工的工作效率会更高。

耐心地对待其他程序员,尤其是那些正在学习新技术的人。提醒你自己你当初学习的时候也非常难,你当时的感受如何。他们可能也很类似。粗鲁地对待他们,只能让他们的进步减慢,在他们面前装腔作势只能给他们带来伤害,让他们举步维艰。

你的言行都会带来一定的后果,你可以用自己的言行来引导积极的改变,也可以伤害他人。这不仅会发生在面对面的交流中,也会发生于在线沟通中。你可能认为自己很幽默,或者只是想放松一下,但是实际上对某人的生活造成了负面影响。你的行为由你自己决定,而在伤害到某人后也由你自己决定如何道歉。

2.解决问题

在教人编程的时候,我发现很多人的困难在于解决问题,而非代码本身。能够将问题分解成小问题,然后解决这些小问题的能力需要许多的实践。善于解决问题可以帮助你成为一个更强大的程序员。

此外,大多数问题都有多个解决方案。作为软件程序员,我们工作的很大一部分是思考这些不同的解决方案并选择最佳解决方案。应该选择实现更快的那个?还是运行效率更好的那个?还是价格上更经济的那个?所有这些都是重要的问题,选择正确的解决方案是软件开发中充满挑战又非常重要的部分。

3.合作

作为程序员,你与他人合作的机会非常多。如果你是自由职业者或是企业家,那么你必须与其他开发员、业务员、经理、开源贡献者、利益相关者以及其他不计其数的人合作。学习如何与不同的人和不同性格的人一起工作至关重要。

有很多东西可以促进良好的合作。首先必须清楚孤掌难鸣,一个人无法做好所有的事情。不同的人拥有不同的技能、观点和生活经验,所谓三个臭皮匠顶一个诸葛亮。不要总觉得你需要背负一切,是所有人的救世主。如果让别人也贡献力量,你可以做得更好。

向他人寻求帮助,同时也要愿意帮助别人。你不需要在所有事情上都成为专家,而不同的人可以在不同的领域成为专家。依赖其他人,如果遇到困难,请务必寻求帮助,这样做你就不会长时间陷入困境。

有人请你帮忙时,你要愿意帮助他们。在帮助他人的过程中你自己也可以学习很多东西,而且还能加强自己对某个主题的了解。如果你是管理层,那么请务必留出时间指导和有效合作!

同样,不要试图说服别人或立即驳回他们的观点。如果他们的意见不被重视或体谅,那么将来他们就不大可能会作出贡献。

在别人分享他们的想法时积极地倾听,而不是在他们说话的时候思考你要怎么回应或为什么你的想法更好,而是应该多想想为什么他们的方法也很好,或是怎样才能实现。

最后,如果你实现了别人精彩的想法,那么要将这些想法归功于他们。在团队中,成员的想法被忽视、被低估、或是功劳被别人抢走是抹杀员工效率的最大因素。

4.沟通

当与其他人一起工作时,无论这些人是同事、客户、使用产品的人、经理、或是下属,良好的沟通至关重要。凡事都要抱着诚实的态度,诚实并且和蔼地汇报项目的进展,项目目前的状况,以及你的观点。如果你的态度粗鲁或没有建设性,那么别人就不太愿意接受反馈。但是,如果你不诚实,或不言明要害,那么就看不到积极的改变。我们要在这一点上做到泾渭分明。

我现实生活中遇到的一件真事:有人曾经在看了我的一篇博文后,写了一封长信针对我的语调形容我有多么傻。我常常会使用大量感叹号,而且会努力让我的博文听起来令人兴奋,而且我有意使用骇人听闻或有趣的标题。那个人在信中表现得非常性别歧视,还说了很多伤人的话。话虽如此,我可能会减少使用感叹号,仍然会让别人对编程感到兴奋。如果那个人可以用更加具有建设性的批评来说我,那么我会更加容易接受他的批评。

如果事情进展不顺利,我们也需要据实相告。诚实地说需要推迟截止日期,或者在工作中哪些事情进展不顺利。只有坦诚相告才更有可能改变状况,让一切都好起来。

5.包容

我曾经在夏令营担任攀岩教练和辅导员,与我一起的大多数人是中学女生。她们是我最喜欢的一批人。但是,话虽如此,通常中学生不是很能接受不同的意见或很容易集体反抗。

有一次我们一起做游戏,我们画了一个大圈,然后如果一个辅导员说某某“出圈”,那么他们就必须离开游戏,而背后的决定因素并没有告知他们,而且他们也无法掌控。依旧在圈里的人可以玩游戏,而圈外的人将被排除在外,只能远远看着。

通过这个游戏让这些女孩明白:因为一些在你掌控之外的因素而被排除在外时,你的心理感受。而我也在思考这个问题。作为成年人,我们还会将别人排除在圈外,因为一些他们无法控制的因素将他们排除在外。但是,如果我们让他们回到圈中,让他们贡献自己的力量,那么我们的产品可以赢得更多不同的体验,可以更好。

关于多样化团队表现更好的研究有很多。但是从个人的角度来看,想想如果自己被排除在圈外时的感受,我们应该让这个圈更大,而不是更小。

有可能你的很多用户都是传统意义上被排除在科技圈之外的人。我可以根据自己的亲身经验告诉你,成为团队中与众不同的一份子滋味并不好受,因为在我的编程职业生涯中,只有 5% 的时间里团队中会有另一位女性。

这也与共情相关,确保你做的程序可以服务于各种各样的用户。不只是四肢健全的人,或是拥有尖端互联网或技术的人。你可以吸引更多人。

6.耐心

在编程的时候,第一个你需要有耐心的就是你自己。编程很难,有时你会遇到 Bug 或难以克服的问题。如果编程工作总是很容易,那么你就不会遇到挑战,也就不会成长为程序员。

坚韧不拔,坚持努力工作。但是,你也可以休息一下,过一段时间再来解决问题。也许休息一下有助于你解决问题。

另外,对待他人也要有耐心。学习需要花费时间,人无完人。犯错和失败是学习过程中最重要的经验,在不安全的环境中才能冒险或成长。你需要理解尺有所长寸有所短,还要知道学习需要投入时间。

7.创造力

作为一名程序员,我最喜欢发挥我的创造力,建立对他人有益的事物。你可以创造性地建立非常酷的东西。

在提出新功能、接口和应用程序的时候,创意的想法非常重要。有人购买我为一家公司做的一款产品很大一部分原因是因为该产品拥有的创意界面,而我的作品展示网站备受瞩目也好是因为它富有创意。

除此之外,许多问题都需要创造力来解决。每个编程问题都有多个解决方案,提出一些具有创意的方法往往可以带来优化的解决方案。

8.谦逊

你可以从其他程序员那里学到很多东西,一个人不可能掌握编程世界里所有的东西。接受建设性的批评,而不是抵触。你可以根据反馈改进代码和自己,一味固执己见不利于个人的成长。你不可能不犯错,而且你应该接受别人的想法。

9.自信

反过来说,我们要有自信。我承认这对我来说可能是最困难的事情,而有些人可能会过度自信。在我的职业生涯中,每次业绩考核时我需要改善的头等大事就是自信。我还单独撰写过有关这个主题的一篇文章,对自己充满信心、相信自己的能力非常重要。

首先,请相信你可以参与项目。不要觉得自己只能承担简单的工作,或在分配到较难的工作时质疑自己。尽自己所能解决问题,然后寻求帮助克服最困难的部分。

此外,不要觉得需要调查一切。相信你自己,在 Google 上搜索答案之前,请尝试自己作答。只在 Google 上搜索部分问题,而不是全部。如果你做的每一件事情都是正确的,那么在开发中尝试别的方法,看看它们是否可行,这也没有什么坏处。有时候你可能会惊讶自己知道的如此之多。

还有一个办法是记录胜利时刻。我的计算机上有一个文件记载了所有我做过的很酷的事情,还有别人给我的赞誉。当遇到困难或质疑自己的时候,打开这个文件就会让我更加自信。

10.适应性

编程仍然是一个新世界,它正在以超快的速度发展。在情况发生变化时,能够快速适应至关重要。当遇到一个新的框架、库或语言的时候,学习这些东西非常重要(当然是在合理的范围内)。如果我们仍然在 Fortran 中编写代码,那么这个行业将是完全不同的局面。当情况发生改变时,我们需要改变和适应。

此外,项目的目标和功能通常也会发生变化,特别是在面向客户的工作方面。当情况发生变化时,我们必须调整并适应这些需求(再次重申,在合理的范围内)。

11.参与社区

社区对于编程非常重要,会议、博客文章、社交媒体和聚会对于学习和成长非常重要。此外,开源软件和周围的社区是该行业的命脉。能够与人们建立联系对于教育、寻找经验和新机会都非常重要。

即使你是一个内向或不喜欢社交的人,那么也可以通过很多在线社区,从中学到很多东西。而且,即使在公司内部,拥有一支紧密联接的团队也可以帮助大家更好地共同工作。

12.总结

以上这些技能通常被称为“软技能”,但我觉得这样说还远不够。这些技能不仅有助于编程,也有助于成为一名优秀的同事。这些技能的重要性超过了对一门具体的语言、库或框架的了解,它们甚至超越了科技的范畴。对于程序员来说,以上这些技能真的非常重要。话虽如此,但是人无完人,每个人都有成长的空间。所以持续发展自我,并努力掌握这些非编程技巧!

原文:https://medium.freecodecamp.org/the-most-important-non-programming-skills-for-programmers-d39fadc1a0fa

作者:Ali Spittel,Python 以及 JavaScript 开发人员。General Assembly 的首席讲师。

译者:弯月,责编:屠敏

相关推荐