程序员最重要的非编程技能

2020-09-24 22:36:52

当我考虑作为一名程序员愿意与谁一起工作时,我更多地考虑的是使某人成为好同事的非技术技能,而不是技术技能。事实上,这篇文章中的所有技能都有助于编写改进技术项目的好代码。它们中的大多数对编程以外的职业也很有帮助,但我将重点说明为什么它们对程序员特别有用。

要打造伟大的产品,您必须设身处地为用户着想。他们将如何使用您的产品?哪些功能会对他们有帮助?您的计划如何帮助他们或改善他们的生活?反过来,这又怎么会伤害他们或对他们的生活产生负面影响呢?您的申请有哪些伦理影响?

同理心对于你的许多程序来说都是必不可少的--如果它们不安全,那么你的用户信息可能会被第三方负面利用。如果他们无法访问,那么您就是在限制可以使用您的项目的人数。如果它们运行缓慢或需要大量带宽才能运行,那么用户将会离开,而互联网或移动用户速度较慢的地区的人将无法运行它们。似乎每天都会有一篇文章发布一家公司实施的一些有害算法,比如让另类右翼激进的YouTube算法,亚马逊创建的性别歧视招聘算法(他们最终没有使用),或者人工智能让黑人女性性别不同。当您编写代码时,请考虑每个人!

此外,移情有助于成为团队成员和导师。设身处地为你的经理或其他开发人员着想。他们为什么要做决定呢?你能做些什么来帮助他们?有同理心肯定会提高你成为一个有效队友的能力。如果你是雇主,你可以更长时间地留住你的员工,如果你表现出同理心(Src),他们将成为更有效率的员工。

对其他程序员要有耐心,特别是那些正在学习新事物的程序员。提醒自己一些对你来说真的很难学到的东西,以及那是什么感觉。他们可能有类似的感受。对他们粗鲁,贬低他们的进步,或者学究,只会有害,并使这一过程对他们来说更加困难。

你的言行会产生真正的后果--你可以用它来实施积极的改变或伤害别人。这并不局限于面对面的交流--在线交流也很重要。你可能认为你在搞笑或者只是在发泄情绪,但实际上你可能会对某人的生活造成非常负面的影响。如果你伤害了某人,你可以决定如何行动,如何道歉来消除一些伤害,这是由你自己决定的。

当我教人们编程时,我看到更多的人在为解决问题而苦苦挣扎,而不是代码本身。将问题分解成较小的问题,然后解决所有这些较小的问题的能力需要大量的练习。善于解决问题可以帮助你成为一名更强大的程序员。

此外,对于大多数问题,将会有不止一种解决方案。作为软件开发人员,我们的很大一部分工作是考虑这些不同的解决方案,并选择最好的解决方案。是不是实现起来更快一些呢?或者它的运行效率更高?还是会便宜一些呢?所有这些都是重要的问题,选择正确的解决方案是软件开发中具有挑战性但很重要的部分。

作为程序员,你和其他人在一起的机会非常高。即使您是自由职业者或企业家,您也必须与其他开发人员、业务人员、经理、开源贡献者、利益相关者以及无数其他人一起工作。学习如何与不同的人和他们的个性很好地合作是至关重要的。

有如此多的东西有助于良好的协作。第一个是要知道,一个人不可能事事都能做,或者至少不能把每件事都做好。不同的人有不同的技能、观点和生活经历,结合起来比孤立更有力量。不要觉得你总是需要把团队放在你的背上,或者成为每个人的一切。如果你允许其他人也做出贡献,你可以做得更好。

向别人寻求帮助,并愿意帮助别人作为回报。你不需要事事都是专家,不同的人会在不同的事情上成为专家。依赖他人,如果你在某事上陷入困境,一定要寻求帮助,这样你就不会停留太长时间。当有人向你求助时,要乐于帮助他们。通过很好的解释,你可以学到很多东西,你将能够巩固你对这个主题的知识。如果你在管理岗位上,一定要给员工时间进行指导和有效的协作!

同样的道理,不要和别人说三道四,也不要马上驳斥他们的观点。如果他们的意见得不到重视或考虑,他们将来做出贡献的可能性可能会小得多。当人们分享他们的想法时,积极倾听--与其在他们交谈时思考你的反应或者为什么你的想法更好,不如试着想想为什么他们的方法也是好的,或者它可以如何实施。

然后,一旦你实施了他们的绝妙想法,就把这些想法归功于他们。在一个团队里,我的想法被团队中的其他人忽视、低估和否定,这让我作为一名员工的工作效率最低。

当你与其他人一起工作时,无论这些人是同事、客户、使用你的项目的人、经理还是你管理的人,良好的沟通都是至关重要的。诚实地更新事情的进展情况,项目目前的进展情况,以及你对事情的看法,诚实而友好地。如果你粗鲁或缺乏建设性,人们就不太愿意接受反馈。但是,如果你不诚实或粉饰事实,那么你可能看不到积极的变化。这里绝对有一条微妙的界线。

我生活中的一个真实例子是:有人读了我的一篇博客文章,写了一封很长的信,说因为我的语气,我听起来有多笨。我通常在我的帖子中使用很多感叹号,试图让自己听起来很刺激--这是非常有意的,目的是让那些可能令人生畏或乏味的话题变得更有趣。在这封电子邮件中,这个人变得相当性别歧视,说了一些非常伤人的话。话虽如此,我可能可以缩减感叹号,同时仍然让人们对编程感到兴奋。如果这个人更有建设性地提出批评,我会更容易接受这一点。

如果事情进展不顺利,一定要说出来。诚实地承认需要推迟截止日期,或者工作中有些事情进展不顺利。如果你直言不讳,你会有更好的机会去改变它,让环境变得更好。

我曾经在夏令营做过攀岩教练和顾问,和我一起工作的年龄段最多的是中学女生。他们是我共事过的最喜欢的人中的一些人,但也就是说,中学生通常不是最能接受不同或反对派系的人。我们过去常常在一个很大的圈子里运行游戏,然后一名顾问会告诉人们,他们不在圈子里,他们将不得不根据他们不知情、无法控制的某些特征离开游戏。(这句话的意思是:“我们曾经在一个很大的圈子里运行游戏,然后一个辅导员告诉别人他们不在圈子里,然后他们就必须离开游戏,因为他们不知道这些特点,也不能控制这些特点)。”还在圈内的人玩游戏,圈外的人被排除在外,只能远远地看着。

这项活动非常有效地向这些女孩展示了因为你无法控制的原因而被排除在外的感觉,我仍然经常回想起这件事。作为成年人,我们仍然将人们排除在圈子之外,基于他们无法控制的某些特征将他们排除在外,但如果我们让他们回到圈子里,允许他们做出贡献,那么我们的产品就会吸收更多样化的体验,变得更好。有很多关于更多样化的团队表现更好的研究,但从个人的角度来看,想一想被排除在圈子之外是什么感觉,试着把你的圈子扩大,而不是缩小。很有可能,你的很多用户可能是那些传统上被排除在科技圈之外的人。根据我自己的经验,我可以告诉你,作为一个团队中唯一像你这样的人,作为一个在我编程职业生涯中与另一名女性在一个团队中度过约5%时间的人,真的很难做到。

这也与同理心有关--确保你的节目是为各种各样的用户制作的。不仅仅是那些身体健全的人,或者那些拥有尖端互联网或技术的人。您将能够接触到更多的人。

当你编程时,你需要耐心对待的第一个人就是你自己。编程是很难的,有时您会有错误或困难的问题需要克服。如果总是很容易,那么你就不是在挑战自己,你也没有成长为一名程序员。要有坚韧不拔的毅力,坚持解决问题,遇到困难时不放弃。但是,也要知道,你可以休息一下,过一会儿再回到问题上来。也许休息会帮助你更有效地解决问题,或者当你回来时用不同的方式看待问题。

另外,对其他人也要有耐心。事情可能需要一段时间才能学会,人也不是十全十美的。犯错和失败可能是学习过程中一些最重要的经历,所以要考虑到这一点,而不是创造一个冒险或成长都不安全的环境。要明白,不同的人做不同的事情会更容易,而且要知道学习可能需要一段时间。

作为一名程序员,我最喜欢的一件事是,我可以用我的创造性能量来构建其他人可以从中受益的东西。你可以跳出框框去思考,去创造真正酷的东西。

对于开发新的功能、界面和应用程序来说,具有创造性的想法非常重要。我让人为我为一家公司建造的一个产品购买了许可证,这在很大程度上是因为它的创意界面,而我的投资组合网站也因为它的创意而获得了吸引力。

除此之外,很多问题都需要创造力来解决。几乎每个编程问题都有不止一种解决方案,想出创造性的方法来解决它们通常会导致优化的解决方案。

您可以从其他程序员那里学到很多东西--在代码界,一个人不可能知道所有事情或任何与之相近的事情。接受建设性的批评,而不是防御性的批评。您可以从反馈中改进您的代码和您自己,而固步自封并不会带来增长。你并不总是正确的,你应该接受别人的想法。

另一方面,也要有信心。我承认,作为一个有很多冒名顶替者综合症的人,这可能是对我来说最困难的一次,而且在我职业生涯中的每一次绩效评估中都要改进,这一直是我的头等大事。我可以(很可能会)写一整篇关于这个话题的博客文章,但相信自己和对自己的能力充满信心真的很重要。

首先,要有信心能够承担项目。当你被分配到一些困难的事情时,不要将自己降级到更容易的项目中,也不要怀疑自己。试着尽可能多地解决问题,然后寻求帮助来度过最困难的部分。

此外,不要觉得有必要把所有东西都研究作为第一选择。在用谷歌搜索答案之前,相信自己会尝试几件事。或者谷歌搜索部分问题,而不是整个问题。如果您做的每件事都是正确的,那么在开发过程中尝试几个功能并查看它们是否有效,并不会有什么坏处。你可能会惊讶于你知道的如此之多。

我做的另一件事是记录我的胜利。我的电脑上有一份文档,里面有我做过的很酷的事情,还有人们对我的好评。当我度过艰难的一天或怀疑自己的时候,我会回到过去,通常会对我正在做的事情感到更有信心。

编程仍然是一个新的世界,而且它正在以超快的速度发展。当事情发生变化时能够适应是至关重要的。当一个新的框架、库或语言被取代时,能够学习它是很重要的(当然是在合理的情况下)。如果我们都还在用Fortran编写代码,我们的行业看起来会有很大的不同;我们需要能够在事情发生变化时发展和适应。

此外,项目的目标帖子和功能也会经常改变,特别是在客户工作的情况下。当这种情况发生时,我们必须调整并合并这些请求(同样,在合理范围内)。

社区对于编程是如此重要--会议、博客文章、社交媒体和会议对于学习和成长都很重要。此外,开源软件及其周围的社区是这个行业的命脉。能够与人建立网络和联系对于教育、联系你的经历和寻找新的机会是非常重要的。

即使你是一个内向的人,或者不喜欢面对面的社交,也有很多很棒的在线社区可以让你学到很多东西。而且,即使在公司内部,拥有一支凝聚力很强的团队也会帮助人们更好地合作。

这些技能通常被称为软技能,但我觉得这是一种还原性的技能。这些技能对编写代码和成为好同事都有很大帮助。它们比了解特定的语言、库或框架重要得多,甚至远远超出了技术范畴。

作为程序员和普通人,所有这些技能都非常重要。话虽如此--人无完人,每个人都有成长的空间。所以,保持成长,并努力在这些非编程技能上做得更好,我也会这样做的!