编程的乐趣

昨天,我正与幻灯片一起工作,这是我将来有关Java和面向对象编程的演讲之一,并且一直坚持为逻辑透明性寻找令人信服的论点。 我要说的是,对于程序员而言,即使他们看不到它或从不希望看到它,也必须了解他们所做的一切如何工作,这一点很重要。 但是后来我意识到也许不是每个人都这么想。 也许某些程序员宁愿对大多数事情保持沉默,只要它们前面的代码“行之有效”。 因此,本博客文章将询问您在哪方面。

特伦斯·温特(Terence Winter)的浮桥帝国(Boardwalk Empire)(2010–2014)

许多年前,我曾作为候选人参加工作面试。 他们正在寻找一名Web架构师,而我正在与他们的CTO交流。 他让我解释一下,当我们在网络浏览器中输入新的URL并点击“ Enter”时,幕后发生了什么。 我画了一个小图,中间有一个域名注册商,一些DNS服务器,一个负载平衡器,一些HTTP服务器,一些数据库和一些IP中继。 我相信他的答案给他留下了深刻的印象(即使当时他们没有雇用我),并告诉我大多数Web开发人员都不了解这张照片的大部分内容。 据他介绍,他们只知道HTTP服务器是如何工作的,而对其余服务器则很少关心。 只要PHP代码达到了预期的目的,大多数人甚至都不知道HTTP是什么。

我记得那次采访,并开始向后来采访的人问类似的问题,这是我自己公司的CTO,也是其他一些项目的架构师。 他的结论得到证实。 的确,大多数程序员都不了解DNS的工作原理或用途。 而且,没有这些信息,他们会感觉很好。 这是否意味着他们是不好的程序员?

让我告诉您另一个故事,这是几天前发生的事。 我正在解决一个非常复杂的技术问题,试图将以前没有机会使用的软件与以前从未见过的另一软件进行集成。 花了整整三天的时间。 现在,我回顾了这段短暂的旅程,并意识到我经历了一些特定的阶段,当我开始使用新的东西时,这些阶段对我来说总是一样的:

  • 热情 在这里,我通常从我将要使用的新库的快速入门一页开始快速入门。 我浏览了整个文档,忽略了大部分文档,因为它没有任何意义,然后快速复制粘贴他们的建议。 一切似乎都很简单,我希望代码能在几分钟内生效。 通常是这样。
  • 猜猜 。 我开始对刚刚复制粘贴的简单代码进行更改,并对它背后的逻辑做一些假设。 我不知道我使用的产品是如何设计的,但是我需要依靠一些东西。 因此,我依靠我能猜到的东西
  • 无奈 。 显然,我的大多数假设都是错误的。 我开始谷歌搜索和stackoverflowing。 根据我从随机来源获得的建议,我所得到的答案(如果有的话)并没有多大帮助,因为仍然缺少全局,并且我能做的最好的事情就是修补我的代码以使其起作用。 但是我一直处于黑暗之中,总体设计概念仍然不清楚。 而且我仍然希望在不阅读完整的《开发人员手册》手稿的情况下解决所有问题。
  • 抑郁症 。 很快,我意识到我只是试图开飞机的猴子。 也许它会飞,也许我甚至会设法降落。 但是我仍然是猴子,非常令人沮丧。 我没有这样做的喜悦。 我讨厌自己愚蠢。 我讨厌那些图书馆创建者使它变得不那么明显。 而且我讨厌我的工作。

我相信这四个阶段对于我们所有人的软件工程师来说都是非常普遍的。 但是,之后发生的事情将好的程序员与坏的程序员区分开。 老实说,根据情况,我属于这两个类别。 当我是一个糟糕的程序员该怎么办? 我将其全部工作并称之为一天,但仍然不知道内部发生了什么,也不知道为什么它会以这种方式正常工作,而又不像我以前尝试过的那样工作。 我的沮丧无处可去。 它只会升级。 我仍然讨厌自己,但是我的软件有效。 我继续下一个问题,等待周末到来。

当我是一名优秀的程序员时该怎么办? 我将深入研究该问题,学习所使用的软件,下载其源代码,阅读其文档,直到了解发生了什么。 然后,我回到我的代码部分,在完全理解的情况下对其进行修复,并称之为一天。 我有时甚至写一篇关于它的博客文章,比如Nutch的这篇博客Liquibase的一篇博客 ,或者CasperJS的一篇博客 。 我的抑郁完全消失了。 我不再讨厌自己,不再讨厌自己的工作,也不再讨厌那些“愚蠢”的库的开发人员。 我甚至通过我的博客文章帮助他们的项目。

我该如何决定选择哪种方式:表现得像一个坏的程序员还是一个好的程序员? 您可能认为这取决于我手头的工作时间/预算,但是您会错的。 这完全取决于我是否愿意生活在抑郁之中。

前段时间,我告诉自己,我不再这样做了。 我不想成为飞行飞机的猴子 。 我想当飞行员 。 当然,学习曲线会更长,但是结果是……快乐。 当我清楚,透明地看到所编写的每一行代码的逻辑时,我都很喜欢我的工作。 我确切地知道为什么写它们,它们做什么以及如果我更改它们会发生什么。 我不知道所有细节,当然,我知道在哪里可以找到这些细节。 这就是使我的工作变得有趣的原因:我的编码逻辑透明。

我真的很喜欢负责我的代码所做的一切。 我喜欢感觉它确实可以实现我想要的功能。 您可能会说我是个控制狂-也许是。 但这是过去30年来我从中获得最大乐趣的地方:看到计算机可以完成我想要的事情。 如果某些图书馆试图将其从我身边带走,让我坐在乘客座位上,我将竭尽所能,回到驾驶座上。 我想知道发生了什么,并且我希望按照我的意愿进行。 我想享受我的工作。

现在,回到我的会议演讲。 我将在我的一张幻灯片中展示这段代码(这就是应该使用Spring Framework的方式):

然后,我将问一个问题:您知道谁在制作HelloController类的实例以及如何使用该实例吗? 谁在调用它的方法,为什么以及何时调用? 此外,您知道如何修改该行为吗? 我在会议上的观点是,一个好的框架必须使用户更容易理解其内部 。 因为优秀的程序员确实想知道里面有什么。 另一方面,糟糕的程序员也可以当猴子。

你呢?

翻译自: https://www.javacodegeeks.com/2019/08/joy-programming.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值