学习代码前的灵魂拷问

发布于:2022-12-29 ⋅ 阅读:(256) ⋅ 点赞:(0)

避免把写代码当成目标,而要学会解决问题.

扫码关注《Java学研大本营》,加入读者群,分享更多精彩

是否有人记得几年前,纽约市长决定学习编程?那是一个令人振奋的时刻,因为不仅仅是他。我记得这些超现实的广告,迈阿密热火队的前锋克里斯-波什鼓励孩子们为了人类的利益或其他什么而学习编程。有这样一种突然的、压倒性的情绪,即人类应该放弃任何非编程的愚蠢追求,并学习他们的一些红宝石或其他东西。

安迪-沃霍尔,如果他在2012年还活着,无疑会说,"在未来,每个人都会写15分钟的代码。"

杰夫-阿特伍德(Jeff Atwood)写了一篇有趣的反驳文章,题为 "请不要学习代码",对这一时代潮流进行了反驳。这篇文章涵盖了很多内容,提出了一些有趣的观点,但最主要的论点似乎是:"避免把写代码当成目标,而要学会解决问题。" 我认为这是一个很好的哲学观点,但我想补充一点细微之处。

我过去曾写过关于我认为成为一个问题解决者是多么重要,以至于我写了一篇关于喜欢 "问题解决者 "这个称号的文章。所以,请不要以为我不同意他的观点,即很多程序员都过于纠结于代码的具体细节。我不同意--我认为这是一个非常普遍的问题。但是,与此同时,我认为纽约市长和克里斯-波什以及其他人有一个观点,而杰夫本身并没有真正解决。具体来说,世界正变得越来越技术化,这意味着很多追求正在被自动化淘汰,而其他追求则需要越来越多的技术知识。我的未婚妻是一名专业的文字编辑,她发现如果她懂得一点HTML和CSS,她的工作就会更容易。

因此,虽然我和杰夫一样,一想到人们随意学习编程语言,因为他们认为这会让他们发财,或者因为他们想成为一个写很多代码的人,我不认为我们可以简单地说,"除非你是认真的,并且愿意花几年时间来获得好成绩,否则就不要学。" 快速发展的技术环境已经创造了这个技术知识的黑洞,甚至把已经过了事件视界的人也吸了进去。

我在这个问题上提供的建议创造了一个相当精细的区别。我不认为每个人都需要学习代码。我认为每个人都需要开始学习和了解的是如何实现自动化。或者说,如果不是自己做,至少也要认识到可以自动化的东西,并对这种努力是否值得进行有意义的讨论。

现实生活中的自动化

在这里,也许最好是提供一个例子。今晚,我和一个朋友一起做一些通过Power Point交流的课程材料。我们制作的幻灯片主要是图片,这里和那里散布着一些大字体的文字。我们把图片粘贴到幻灯片中,调整一下大小,然后用Mac的触控板费力地把图片放在中间。有一次,他说:"Power Point中应该有一些快捷键,你可以按一下,它就会自动将东西垂直和水平居中。"

我的朋友们,这是在构思时的自动化。在Power Point上将某样东西居中,正是那种无脑的、令人抓狂的、耗费时间的任务,是自动化的好候选者。你知道我在说什么,你用尽可能微小的动作把东西拖来拖去,希望能看到那条表示它在中间的线出现。它是如此难以找到,你必须去这样--等等,那里! 糟糕! 错过了。退回去,再试一次。

当然,无论如何,对话并没有在这里结束。我所倡导的人才--精明的自动化人才--涉及像下面这样的评估,以及最后的潜在自动化。

Power Point是否已经提供了这种能力,只是我们不知道?

在快速搜索了一下之后,似乎没有。如果有的话,一篇关于Power Point秘密的博客可能只需要两行字来描述它:"第1步:按神奇的键序。第二步:没有第二步"。但是,它仍然可能存在。

它值得做更多的研究吗?

现在不值得。我们几乎已经完成了幻灯片的制作。在更广泛的范围内,它可能值得做。

从长远来看,这对我们是否值得?

很难说。我不完全确定我的生活中有多少时间被浪费在这个问题上。可能有一些,但我不是最热衷于使用Power Point的人,所以你想一下,这可能需要几年的时间才能把我的时间加起来。谁知道解决这个问题要花多长时间?

从长远来看,这对人类是否值得?

嗯......几乎可以肯定。即使我在使用Power Point多年后才浪费了几个小时的时间,人类可能在几秒钟后就浪费了几个小时。很多人就在这一瞬间对Power Point破口大骂。

如果我们做了它,我们能卖掉它吗?

嗯,值得怀疑。但也许可以在这里和那里卖点小钱。或者,我们可以直接做,把它捐给更大的利益,并获得声誉上的好处。

好吧,那么下一步的行动是什么?

让我们留出一个小时的时间框,在低优先级任务的好时机研究这个问题,比如坐在机场里。一个很好的临时目标可能是看看我们是否能在有限的场景中得到它。仅仅在一张空白的幻灯片上,"ctrl-E "这个快捷键是否能完成水平居中的工作?如果是的话,我们能不能找到一种方法来进行垂直居中,然后以某种方式将这些快捷键连接起来?如果是的话,那么,砰,问题就解决了,只需进行一下配置。当我们可以点击一个快捷键,在一张空白的幻灯片上实现一张图片的水平和垂直居中时,我们就知道我们已经成功了。如果这个小测试成功了,我们就可以写一篇博文,享受一下胜利的喜悦,然后继续进行更多的方案。

可怜人的编码?

好吧,这有点虚张声势,但我想在这里指出一些事情。首先是识别一个蹩脚的任务和识别一个自动化候选人。计算出某物中心的准确坐标是计算机的最佳工作。之后是一连串的问题,考虑到可能有一个现有的解决方案,想出一个新的解决方案可能不值得,或者想出一个新的解决方案可能要耗费足够的时间来抵消任何收益。在软件开发的世界里,这有各种名称,如 "发现"、"需求分析 "和 "冲刺0"。

之后是一个暂定的行动计划,以及一些风险缓解。让我们投入一些努力,看看我们能做什么,但让我们限制努力的数量,这样我们就不会在风车上乱跑。然后,还有一个具体的策略,就是把更大的潜在努力分成最小的片断,可能提供一些增量价值。这在软件开发领域被称为软件项目的敏捷(或者,如果你愿意,"精益")方法。最后,尽管没有编写实际的代码,但也有了实施和对成功的清晰、可验证的描述。在商业领域,这被称为 "验收测试驱动的开发"(ATDD)。

但是,忘掉这些术语和与程序员商店谈话的相似之处吧。更重要的一点是,成功的软件开发项目--涉及代码、IDE和编译器之类的项目--只是成功的自动化项目的一个特例。你可以将所有的事情自动化,甚至是一些非常不重要的事情,而不需要实际写任何代码。在这一点上,Jeff的观点是绝对正确的。编纂者喜欢写代码,但当有问题需要解决时,写代码不应该是首要目标。

纵观人类历史,有一种 "痛并快乐着 "的重复性方法。埋头苦干,进入节奏,在琐碎的任务中努力工作是有价值的。但在人类历史的大部分时间里,我们没有计算机。事实证明,计算机真的非常擅长做重复性的琐碎工作--涉及精确而非判断的任务。他们在这方面比我们强得多,所以让计算机做这些事是有意义的。

假设未来每项工作的先决条件都是实现复杂、专门的计算机应用的能力,这是愚蠢的。但是,考虑到计算的普遍性,假设未来每项工作的先决条件是能够识别哪些任务更适合人类,哪些更适合计算机,这一点也不愚蠢。

至少要学会识别你的工作中哪些部分是对你的时间的糟糕利用。之后,也许要学会利用你的聪明才智和创造力,利用你所知道的工具(如在谷歌上寻找解决方案,利用应用程序等)实现自动化。

而且,如果你已经走到了这一步,也许是时候卷起你的袖子,投身于学习代码,以帮助你前进。因为,虽然纽约市长没有必要写任何代码,但如果城市的IT部门出现了什么问题,准备好跳槽也无妨。

推荐书单

《Java编程讲义》

购买链接:https://item.jd.com/13495830.html

《Java编程讲义》根据目前Java开发领域的实际需求,从初学者角度出发,详细讲解了Java技术的基础知识。

全书共15章,包括Java开发入门,Java语言基础,Java控制结构,数组,面向对象编程,继承和多态,抽象类、接口和内部类,异常处理,Java常用类库,集合与泛型,Lambda表达式,输入-输出流,多线程,JDBC数据库技术,网络编程等内容。内容全面覆盖.1ava开发必备的基础知识点,结合生活化案例展开讲解,程序代码给出了详细的注释,能够使初学者轻松领会Java技术精髓,快速掌握Java开发技能。

《Java编程讲义》适合作为高等院校相关专业的教材及教学参考书,也适合作为Java开发入门者的自学用书,还可供开发人员查阅、参考。

精彩回顾

想要代码干净又整洁?这里有十大原则

扫码关注《Java学研大本营》,加入读者群,分享更多精彩

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到