成为巨大程序员的 10 个关键

本文由vwin德赢网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参加咱们的付费投稿方案

最近我在承受采访时被问到我关于成为一名巨大程序员的见地。这是一个风趣的问题,我以为咱们都可所以巨大的程序员,不管咱们的天分怎样,假如咱们遵从一些规矩的话——我信任——这应该是知识。实践上,这些规矩并不只适用于VWIN首页领域,也合适任何专业。

当然,这10个关键中的全部内容并不都是彻底正儿八经的,有些作业仅仅我的观点,你的状况或许会有所不同,所以假如呈现对立的话,不要耿耿于怀。

这些关键是:

1.学习怎样发问

发问题的程序员底子上有这些类型:

  • 完美主义者:特别是在问询关于某些开源东西的问题时,他们或许现已经过代码进行了调试,发现了问题的真实原因。可是即使没有发现真实原因,完美主义者也会讲了解这个问题,重现进程,主张或许行得通的处理办法,或许乃至是,主张或许行得通的修正途径。事实上,完美主义者没有问题。只需答案。
  • 话匣子:这个人实践上没有问问题。他们标明他们的主意,有时会处处放置虚浮的问号。关于问题,他们给出的是他们的思路流程,假如你揣着答案等的话,他们要么自己找到了答案,要么在多封电子邮件之后才问出真实的问题。“哦,对了,我发现这个需求是彻底过错的,我用一些其他的技能处理了这个问题。实践上,我彻底改变了库。”呵呵。只期望他们别再问问题了。
  • 白痴:代码在这。我不知道哪里犯错了?请帮帮我。
  • 司理:关于这种类型的人,时刻便是金钱。问题必定很短,答案越快越好。令人令人啼笑皆非的是,由于坚持问题简略(意即:不完整,不简练),大多数状况下,会丢掉许多重要的细节,然后为了答复问题,程序员只能恳求更多细节。所以,司理(自然会绝望,由于他得到的并非是一个答案而是一个新的问题)会再次发送一个短的消息,而且更紧急地要求答案。循环往复。终究或许需求1-2周的时刻才干答复。
  • 诉苦者:这类人不问问题。他们一向一向诉苦,直到问题消失。假如状况没有变好,那就有了更多的理由诉苦。

现在应该清楚的是,一个精心预备的问题(短小精悍,简略,简略,但有满足的细节)将会发生更佳的答案。假如你切当知道关于该问题你需求学习什么,那么更有或许得偿所愿。

2.学习怎样不提出问题

实践上,最好尽量避免发问。或许你能够自己弄清楚呢?当然状况并不总是如此。许多作业你底子无法知道,经过问询领域专家,有助于找到抵达成功最快和最有用的途径。可是,常常自己去测验处理问题有许多长处:

  • 经过这种艰苦的办法学到的东西能够更好地保存到回忆中——咱们将牢牢记住所学到东西。
  • 自己去寻觅答案更有价值。
  • 你不会制作“噪音”。还记得前面所说的“话匣子”吗?除非你问询的人有职责答复问题(然后推延他们的作业),不然他们或许会在不了解你的思想进程的状况下,来测验答复每一个不完整的“问题”。这对任何人都没有协助。
  • 经过推延问问题(至少一段时刻),你能够搜集更多的相关信息,然后供给给或许能够答复问题的人。想想“完美主义者”,他们首要花更多时刻寻觅细节,然后自己答复问题。
  • 经过操练你能够更擅于发问。这需求时刻。

3.不要留传破碎的窗户

最近有一篇十分风趣的文章,是关于不要留下破窗户的。文章的实质是永久不要退让于质量。永久不要成为逃兵。永久不要留传…破碎的窗户。以下引证自这篇文章:

“当咱们采纳一些捷径在最短的时刻内供给一些东西时,反映了咱们的粗枝大叶的代码会让咱们之后的开发人员(来自同一个团队,未来的团队,乃至咱们自己!)得出一个重要的结论:对咱们所出产的代码支付满足的重视并不重要。运用程序逐渐开端恶化将是一个不行阻挠的进程。”

其实,这并非意味着要成为一个完美主义者。有时,修正破碎的窗户是能够推延的。可是,通常状况下,关于答应窗户被打破和坚持打破状况,没有人会觉得高兴。咱们程序员不高兴,咱们的客户不高兴,咱们的用户不高兴,咱们的项目司理也不高兴。这是一种情绪,是作为专业人士的中心内容。Benjamin Franklin怎样看呢?

“贱价格的甜美被忘记之后,低质量的苦涩将回味悠长。”

全部都是如此。“贱价”是咱们用一种草率的办法来完结某些东西而取得的快速成功。

4.软件应该是确认性的。这便是要瞄准的方针!

在理想化的国际中,软件中的全部都应该是“确认性的”。咱们都应该是函数式程序员,编写没有副作用的朴实的函数。如String.contains()。不管履行以下操作多少次:

assertTrue("abcde".contains("bc"));

…成果总是相同的,都是预期的成果。哪怕国际爆破对这一核算也没有影响。这是确认性的。

咱们也能够在咱们自己的程序中,而不仅仅是在规范库中做到这一方针。咱们能够测验尽或许多地编写无副作用确实定性模块。这真的与咱们挑选什么技能无关。确认性VWIN首页能够用任何言语完结——即使函数言语有更多东西也能够经过更杂乱的类型体系来避免意外的副作用。可是我所示的比如是一个Java示例。目标方向答应确认性。对的,像PL / SQL这样的程序言语答应确认性。假如要在索引中运用函数,那么需求恳求确认性的函数:

CREATE INDEX upper_first_name ON customer (upper (first_name));
-- Deterministic function here: -----------^^^^^^^^^^^^^^^^^^

这又是一个规矩问题。有副作用的进程/办法/“函数”是为“破窗户”。有副作用或许会更简略保护,当然期望终究能够消除副作用。但这通常是自己骗自己。当将来的某一天意外突现的时分,便是你支付贵重价值的时分。别不信任,说曹操曹操就到。

5.承受意料之外的作业

程序员一直应该恪守墨菲规律。全部都或许被打破。而且它行将被打破。作为软件工程师,咱们应该谨记它是会破掉的。由于咱们的国际是不确认的,所以咱们正在完结的事务需求也是不确认的。咱们只需在总算能够确认的时分,才干完结技巧#4(确认论)。不然,咱们将不行避免地进入不确认论的国际(也便是“实践国际”),即一个将会犯错的国际。所以,要以此为根底。承受意料之外的作业。操练你心里的洪荒之力,从活跃的视点预见各种费事。

当然,怎样以简练的办法写代码来预见各种费事便是另一个故事了。怎样从那些或许会失利的东西(因而不需求处理)中区分那些将会失利的东西(因而需求处理),仍是需求经过一些实践滴。

6.不要货品崇拜。不要教条主义。一直详细状况详细对待。

全部教给你的内容都存在潜在的过错。即使是那些盛行语。引证一句很不错的话:

“我的作业生涯至少有50%是为了协助或脱节由教条主义引发的一个个灾祸。

咱们的作业充满了虚伪。咱们喜爱把自己当作数学家,坚持最朴实的思想,以为它们必定是正确的。

那是一条岔路。咱们的作业构建在数学的根底之上,但除非你进入领域论或联系代数的时尚国际(即使你真的进入,我也置疑全部是否是“正确的”),不然你就得面对实践国际务实的事务需求。好吧,坦率地说,这离完美还有十万八千里。让咱们来看看一些最盛行的VWIN首页言语:

  • C
  • Java
  • SQL

你真的觉得这些言语一点都不像数学吗?行,不如咱们先来谈论段过错,Java泛型和SQL三值逻辑。这些言语是由有用主义者树立的渠道。全部这些都有一些十分酷的理论布景,但终究,仍是有了这些东西。

关于树立在言语之上的全部东西也是如此:库,结构,规划形式,乃至架构。没有什么是对的或是错的。全部都是为某些上下文规划的东西。想想在其上下文中的东西。永久不要把这个东西当成一个独立的理由。咱们不是“为艺术而艺术”。

所以对这些质疑说不:

  • XML
  • JSON
  • 功用VWIN首页
  • 面向目标VWIN首页
  • 规划形式
  • 微服务
  • 三层架构
  • DDD
  • TDD
  • 实践上:*DD
  • 不乏其人

全部这些都是某些给定上下文的好东西,但并不总是如此,要学会详细状况详细对待。坚持好奇心,开发创造力,知道何时才需求运用这些东西,将有助于你成为一个更优异的程序员。

7.便是干

这是真理。话说,总有一些牛人鹤立鸡群,能够傲视群雄,让人力所不及。

但大多数程序员只到达“好”的等级,或是有潜力到达“好”的程度。那么怎样才干成为一名好的程序员呢?正如罗马不是一天建成的,巨大的软件也不是一天能够写成的,受欢迎的人并非咱们这个年代仅有的英豪。我遇到过许多默默无闻但巨大的程序员,他们孜孜不倦地霸占软件难题,处理了许多小公司荫蔽的问题。

巨大的程序员都有一个共同点:遇到问题便是干。操练,实践。每天都致力于作业与学习,然后变得越来越优异。

想要更拿手SQL?那就干吧!每天都测验用一些新功用编写一个SQL句子。运用window functions。分组。递归。分区的外衔接。MODEL和/或MATCH_RECOGNIZE子句。不需求每次都交支付产,便是为了实践。这些都是有价值的。

8.专心一个主题(从久远的视点)

或许只需很少一部分“优异的”全栈开发人员独领风骚。事实上,大多数全栈开发人员都将坐落中心水平。当然,一个小团队或许只需求几个全栈开发人员,就能够包括许多事务逻辑,快速推出一个新的软件。可是,软件将十分蠢笨,“敷衍了事能作业”。或许这关于只需可行即可的产品阶段来说就已满足,但从久远来看,会导致全栈开发人员将没有时刻来正确剖析(或预见!)更杂乱的问题。

首要专心一个主题,并真实拿手这个方面。真金不怕火来炼,只需你有本事,那么走到哪里都需求。所以,致力于你的作业生涯,做一些真实好的东西,而不是“差不多就行”。

9.涉猎广泛

尽管你应该首要重视一个主题,但不应该彻底忘记其他方面。你永久不能立刻真实拿手SQL、扩展、扩展、初级功能、CSS、面向目标、需求工程、架构等等的全部内容(见技巧#8)。这是不或许的。

但你至少应该了解它们每一个的实质。你需求了解何时SQL是正确挑选(以及何时不是)。何时低等级功能的调整很重要(何时不是)。CSS原则上怎样作业。面向目标、FP长处。等等。

你应该花一些时刻涉猎这些(以及更多)概念和技能,以便更好地了解它们的重要性。知道何时运用它们,然后再找专业人士来实践履行作业。

涉猎新的范式和技能,有助于你用全然不同的思想办法考虑,或许你会在今后的日常作业中不自觉地以某种办法用到它们。

10.坚持简略,傻瓜式

爱因斯坦曾说:

“Everything should be made as simple as possible, but no simpler.”
(“任何作业都应该尽或许简化,直到无法再简化停止。”)

没有人能够处理巨大的杂乱性。在软件中不能,在日子的任何其他方面也不能。杂乱性是好软件的杀手,因而简略性是使能者。易于了解。难于完结。你需求很多时刻和实践才干辨认和出产出简略。当然,你能够遵从许多规矩来完结简略化。

最简略的规矩之一便是运用只需几个参数的办法/函数。让咱们来看看吧。前面说到的String.contains()办法便是如此。咱们能够写”abcde”.contains(“bcd”),不阅览任何文档,每个人都能当即了解这做什么以及为什么。该办法做了一件作业,而且只做这一件。没有杂乱的上下文/设置/其他传递给该办法的参数。没有“特殊状况”,也没有任何正告。

此外,在库中简化比在事务逻辑中要简略得多。那么咱们能完结吗?或许吧。经过实践。经过重构。但像巨大的软件相同,简略性也不是一天能够搞定的。

(高档技巧:运用康威规律。在一个事务超级杂乱的环境中编写又好又简略的软件是彻底不或许的。要么你挑选杂乱性和丑恶,要么你最好脱节那个事务)。

译文链接:http://www.jf68bumn.com/article/10-tips-be-great-programmer.html
英文原文:10 Tips on How to Be a Great Programmer
翻译作者:vwin德赢网 – 小峰
转载必须在正文中标示并保存原文链接、译文链接和译者等信息。]

宣布我的谈论

撤销谈论
表情 插代码

Hi,您需求填写昵称和邮箱!

  • 必填项
  • 必填项