PHP Manual
/
来自实践的经验

异步的世界观

15. 10. 2022

我已经注意到相当长一段时间,我们的世界有一个异步和分散的性质。当你意识到这一点,并开始思考如何将其用于你的优势,一个关于如何看待解决复杂问题的整体宏大概念就很容易出现了。在这篇文章中,我想解释一下我已经在使用的一些想法。我没有从任何特定的来源得到它们,它更多的是多种经验和我自己的想法的结合。这些原则并不是对所有情况都有效。

界定环境和目标

几乎所有我曾经处理过的项目(无论是单独还是作为团队的一部分)都有一个相当明确的目标。这种方法很有意义,因为知道我们想要什么很重要。另一方面,我认为在复杂的环境中,定义一个具体的目标是不可能的,而且在实施过程中,我们经常发现我们实际上想去别的地方。

因此,我没有一个具体的目标,而是建立了一个由不同的目标组成的区域,在这个区域里有替代方案,甚至一个全新的孤立的独立目标也可以是正确的目标,如果它有意义的话。

实践中的例子。

  • 我需要逐步扩大到其他市场。我在实施过程中发现的一个子目标可能是网络的机器翻译。
  • 我需要在布拉格周围的不同地点提取6批货物,我不知道最短的路线。我不想用复杂的方式去寻找它,所以我只是朝最远的地方走去,沿途朝其他路线改变我的计划。例如,当我在Anděl换车时,我决定乘坐最先到达的电车,这将动态地影响下一个路线计划。
  • 我需要写这个帖子,但我没有一小时的时间。因此,我可以在乘坐地铁时将其作为单独的章节分部分写。然后我将在未来做最后的合并到这个表格中。
  • 我不知道为我的客户计算商品赎回的算法是如何进行的,我需要重新编程。因此,我会同时向多人提出询问,并在做这件事时解决其他问题。在2天内异步进行,会有多个不同的答案出现,我只会在以后根据这些答案做出决定。
  • 我需要长期摆脱服务器上的PHP,所以我正在逐步将一个个页面改写成React。我正在逐步将网站转移到云端,并在静态生成的Nect上构建它们。

所有的目的地都不是最终的目的地。如果你的工作对象是一个表面而不是一个点,你就更有可能击中它。同时,激励在这里也很有效,因为最糟糕的事情是达到目标后,未来却没有什么可期待的了。

很多东西也必须说,要有类似的心态,你需要有一个相当稳定的环境,你可以犯错误。这种方法不能保证在特定的期限内解决特定的单一任务。另一方面,它可以在尽可能短的时间内优化解决尽可能多的并行任务,尽管不一定按照它们到达队列的顺序。

例如,该原理可与并行编程中的计算工作方式相比较。简而言之,你把任务分解成单独的线程,一次解决不同的子任务,一旦你得到所有的答案,你就可以组成解决方案。

部署新的软件版本

我在任何地方都经常为这个问题纠结。

软件开发通常的处理方式是,你有一些稳定的版本,为用户运行生产,然后你有一些测试环境,在那里进行新的开发,过一段时间你把新闻从测试环境中移到生产中,这被称为发布。这个过程是相对安全和缓慢的。

由于我已经逐渐转向微前端架构,即应用程序的前端(用户看到的东西)与后端(计算和数据处理发生的地方)完全分离,所以发布过程可以以不同的方式工作。

我仍然有一个生产环境一直在工作。从中,为每个任务创建一个新的分支,以解决一个特定的功能。因为我使用Vercel(一个非常好的云供应商)来托管前端,我可以为每个开发分支设置一个自定义的URL。

一旦一个新的功能被测试,它就会立即被合并,并在一个异步的过程中部署到生产中。因此,通常会出现每天可能有15个新版本部署的情况。

这在很大程度上与LMC向我传达的一个观点有关--"你明天提供给客户的功能,即使是在不完美的状态下,对他们来说也比一个经过完美调试但要到一年后才能使用的功能价值高得多。但这只有在你有办法快速发布新闻的情况下才能奏效--通常是网络开发。

我非常喜欢Next.js框架(建立在Recto上)和Vercel的原则是,你可以将你的GitHub仓库直接连接到Vercel,每次提交都会有一个自动构建、测试,然后在一切正常的情况下部署到生产。因此,开发人员不必担心任何事情,应用程序每小时部署一次,不费吹灰之力。将常规的事情正规化,然后将其自动化,这是非常重要的。

内容发布

我在苹果笔记中与我分解了更高的几十个主题和帖子。对于每个主题,我不断地想出新的想法来记下,并按标签分类。当一个主题产生多个笔记时,我把它们转换成章节,然后把章节组转换成文章和FB帖子。

这一原则的特点。

  • 我事先不知道我将会发表多少文章。
  • 但话说回来,我知道可能有很多。
  • 我能够确保每篇文章都充满了信息、见解和随着时间推移而成熟的想法(这篇文章大约花了3个月时间才成熟)。
  • 它是可持续的,而且我会享受它,因为我不必在一个点上写一大堆的文字,并冒着忘记东西的风险。

然后是出版过程。

我先在网上悄悄地发布很多内容,这样谷歌就会首先注意到它,页面就会被索引。当它有很好的关键词覆盖率,并且我对它总体上感到满意时,这个话题就会在社交媒体上进行,例如。

对于很多话题,我知道它们不会引起你的兴趣,更可能让你感到厌烦。但与此同时,我想把它们放在网上,因为将来有人可能会搜索它们。在这种情况下,文章只停留在网上。这些文章的一个例子是各种叠加文章,它们将整个主题区联系起来,以便我在网站上尽可能多地覆盖一些主题。封面文章往往更具技术性和枯燥性。或者它们是机器生成的类别,我只是将多篇文章组织成主题,从而涵盖尽可能多的关键词,然后有人可能想要搜索这些词。

知识、教育、测试

我喜欢玩那些从一开始就不清楚有一天会有什么用的技术。

比如机器翻译。乍一看,把几十篇文章翻译成外语给我不接触的读者,这没有意义。另一方面,它可能是未来做出决定的步骤之一,为此需要满足先决条件。

一般来说,没有人知道未来会是什么样子。因此,对我来说,涵盖尽可能多的可能性是非常有意义的,你想了解这些可能性,至少是表面上的,也许将来会解决。不仅仅把步骤看作是一项已解决的任务,而且看作是一个没有最终目的地的永无止境的进化过程,这是好事。

这种方法是否适用于交付定制项目?

大多数时候,没有。

你需要有一个客户,他是你的合作伙伴,你们都想提供最好的解决方案,即使你事先知道直到最后才会发现它是什么。

在我们的业务中,它被称为敏捷开发,而这些原则是建立在这个基础上的。另一方面,我观察到,我所知道的敏捷开发并不直接适合我,我喜欢想出弯曲的替代方案。

在敏捷性方面,我看到很多承诺的原则是谁在特定的冲刺阶段解决了什么。对我来说,更有意义的是建立一个环境,让你有一个巨大的积压任务,根据现在最需要的,或我有心理能力做的,来解决这些任务。例如,当我在路上时,我倾向于处理更多的发展性思维任务,这些任务我可以在没有电脑的情况下在外面完成。当我再次在办公室时,我处理更多的算法和数学密集型任务,因为我可以完全集中精力,投入大量的精神能量。

如果你正在建立一个全新的电子商店,或者你的生意即将破产,我不建议采用这一原则。你需要一个稳定的环境,让它自己运行,你就会成为珠宝。但同时,你也知道,如果你什么都不做,你的稳定环境总有一天会结束。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
8.
Status:
All systems normal.
2024