我的故事,一个Real™程序员?

我个人编程史的进一步附录

我的故事,一个Real™程序员?

土拨鼠卡盘能装多少木料

让我向您介绍我最近为一位朋友所做的编程工作。

他问我是否可以创建一个使用名称列表并将每个名称发送到第三方Web服务的Web应用程序,该Web服务返回可以导入电子表格的结果列表。 值得一提的是,他已经拥有执行此操作的应用程序,但是使用起来非常困难(另一个失败的企业IT项目),以至于他要求我提供帮助以创建替代产品 这是最佳影子IT的经典示例。

(来自他的IT部门)要求使用Python编程语言编写,并且我自己未编写的任何库或代码段都使用MIT许可证(一种开放源代码许可证)。

我不是图形设计师,因此确保该应用程序美观的最好方法是搜索Google和Github并找到MIT许可的UI模板。 在大约一个小时内,我有了一个自己喜欢的应用程序,到了一天结束时,我有了一个外观漂亮的网络应用程序,它什么也没做。 所有的按钮和输入字段都在那里,它们只是没有连接任何东西。

因为我朋友的IT部门要求用Python编写“完成工作的代码”,所以我无法在使用JavaScript的浏览器中做到这一点(坦白地说)。 我在Github上搜索了一个Python Web服务器,发现了一个非常漂亮的名为Bottle的服务器。 我使用修改后的UI模板作为Web内容,第二天结束时,我有了一个功能齐全的基于Python的Web服务器,带有一个很小的UI,该UI承诺了所有内容,但不提供任何内容。

那是一件好事。 因为它使我能够基于实际的屏幕UI与朋友进行讨论。 在我为它们编写任何代码之前,这迫使我们研究他的一些假设和期望,并弄清了一些要求。

为了管理结果表(在将结果表导出到电子表格之前),我使用了可能是Web UI中表使用最广泛的开源库:一个名为datatables.js的库。 这就是乐趣的开始。

我使用的datatables.js和UI模板都依赖于一些CSS和JavaScript代码库(Bootstrap和JQuery)。 只是不一样。

可以预见,datatables.js不能与我已经为UI模板设置的Bootstrap和JQuery一起使用,当我使用DataTables中的Bootstrap和JQuery时,UI陷入困境。 我花了一天的大部分时间来整理依赖性,并导入Bootstrap和JQuery的版本,并以正确的顺序导入其他CSS和JavaScript,以便一切正常进行。 现在已经三天了,只花了大约两三个小时就完成了实现UI的创造性工作(输入字段,按钮等的内容以及如何布置它们才能使用)。 其余的主要是使不同的“运动部件”相互配合。

我的堆栈

到目前为止,我一直在移动零件:

  • 用于CSS样式的Bootstrap CSS库
  • Blackrock Digital LLC提供的startbootstrap-landing-page模板
  • 用于DOM操作和事件处理的HTML的jQuery JavaScript库,使用低版本来保证与DataTables的兼容性
  • jQuery的DataTables插件,用于向HTML表添加高级交互控件
  • 用于服务器端脚本的Python
  • Bottle,基于Python的WSGI Web框架

接下来,我必须决定执行以下步骤的最佳方法:

  • 将一行从列表发送到Web服务
  • 获取结果并将其添加到表中
  • 将表数据加载到datatables.js中

至少有六种方法可以做到这一点。 关键的挑战或决定是将数据从Python虚拟机(完成从Web服务获取响应的工作)传递到Web浏览器中的JavaScript解释器(完成显示Web服务的工作)的最佳方法。数据表)。

我是否要先在Python中收集所有结果并将其保存为文件,然后将文件读入数据表?

我是否要在JavaScript中逐行构建数据表,而JavaScript会一遍又一遍地调用Python,直到没有任何结果(列表结尾)?

还是让datatables.js调用手写JavaScript函数再调用Python函数,该Python函数返回返回到链上的JSON对象,这是否更好?

尽管datatables.js是世界上使用最广泛的JavaScript库之一,但其许多功能的文档还是有点粗略,而且还有些不一致。 遵循文档之后,即使过了几天我也无法使它正常工作(正如我不断告诉您的那样:我不是一个出色的程序员)。 我求助于程序员最好的朋友:StackExchange。 这是一个程序员相互寻求帮助的网站。 我的问题很普遍,很快我发现了一个已有的问题和答案,这使我能够正常工作。 与往常一样,这是在正确的位置加上引号,逗号和分号的问题。 真。

我现在已经花了整整一个星期的时间。 除了三个小时的UI外,我还添加了两个小时的实际编程(弄清楚如何将列表分为不同的请求类别并以不同方式处理每种类型的请求)。

整整一周的工作:像梅尔一样,只花了五个小时来“编写代码”。 花费了35个小时来使不同的库相互配合,而钳工²的工作方式与以前归档来使零件适合的方法相同。

我花了另外五个小时将代码打包并附带说明,以确保IT团队可以毫无问题地安装它,并且IT部门将花费数十个(即使不是数百个)小时来对其进行操作监视以及应用升级和安全补丁。

我花了最多5%的时间来编写代码

在我的美好时光

我实际上了解我要包含的代码。 几天前,我只是**它,直到它没有任何(明显的)错误为止。

我知道我并不孤单。 实际上,我是规则,不是例外。 现实情况是:框架已经变得比其所基于的语言更重要。 在我的下一篇文章中,我将从PHP-Nuke和Swing开始追踪这种趋势的演变。

<-上一篇文章系列

[1]在此之前的1950的制造将不适合在一起“开箱即用”中使用的大多数部件,并通过归档器在各部分来创建平滑配合被单独装配到彼此。 Fitter是提出申请的人的职称。

本文是我即将出版的《混沌工厂》一书的节选,该书解释了为什么大多数公司和政府无法编写“有效”的软件,以及如何对其进行修复。

From: https://hackernoon.com/the-story-of-me-a-real-programmer-ba37a720395b