大约2年前,我开始了我的企业家之旅,并在我的创业公司担任"技术主管"的角色。这意味着我必须开始学习一些较新的技术,如React和NextJs。特别是如果我希望提供人们愿意支付的任何类型的软件。
"那肯定不会太难?"—— 这是非常困难的,就像在地狱的第二层航行一样。
在此之前,我积累的3年以上的Python经验是没有用的。
编程很容易,但软件开发很难。
软件开发很难,因为大多数人通常倾向于跳过基本步骤,即学习创建程序,做其他人想要支付的事情,以及随之而来的所有困难。
我的竞争性编码的背景(主要是Python)没有教会我任何关于开发具有正确用户体验和设计选择的软件产品,最多是为集成几个复杂的API或为基于角色的授权逻辑编写代码。
当我开始开发我们的第一个软件产品(广告分析平台)时,我感觉自己就像一个期望在学习字母表后立即写一篇文章的孩子。
此外,由于我已经承诺了最后期限,因此我没有奢侈地从我的业务中休息几个月来掌握这些技术,因此我只剩下一个选择 - 在旅途中学习和实施所有这些技术。我花了大约4个月的时间才交付这个产品。在那段时间里,我了解到软件开发是一个非常复杂的过程,不能仅仅通过遵循教程来学习。为了成为一名成功的软件开发人员,我不仅需要编写代码,还需要了解代码的工作原理以及与系统其余部分的交互方式。虽然这听起来很容易,但我可以向你保证,YouTube上只有少数视频可以教你这项技能。因为了解不同技术/框架如何协同工作的细微差别是观看教程视频无法学习的 - 这是必须通过"做"来学习的东西。这需要我熟悉新的概念和术语/框架。我花了更多的时间阅读文档,或者观看视频解释,以试图填补我的知识空白,而不是编写实际的代码行!
在花了所有时间学习之后,我意识到大多数教程在解释软件开发的实际过程方面都很糟糕。
大多数教程和课程都通过只教我基础内容来抽象软件开发的复杂性。
他们让学习和掌握一门语言或框架看起来非常容易——以至于这让我想知道大惊小怪的是什么。教程、博客、课程中显示的内容与企业级应用程序中实际使用的内容之间存在巨大的脱节。而且,在我看来,这似乎是人们需要数月甚至数年才能达到软件开发周期结束的最大原因。
例如,大多数 react 教程都教你如何从外部 REST API 读取数据,但很少有视频讨论使用 React Query 的重要性 — React Query 是一个钩子库,消除了重复的代码,并介绍了生产就绪的数据提取和缓存实践,可以开箱即用。
几乎每个现实世界的应用程序都需要你构建数据获取的逻辑,在大多数情况下,需要使用类似 React Query 的东西。
当我意识到这一点时,我不得不回过头来在一个应用程序内重写近2000行代码,否则这些代码就可以在一个月内启动 - 要么是这样,要么我必须花费数周的时间在交付后调试和优化我的应用程序/服务器,这将非常耗时。
软件开发的过程是十几个重要决策的组合,在编写哪怕是一行代码之前,人们都需要做出这些决策。你必须考虑你的架构,数据库设计,技术堆栈,云托管,缓存,甚至这些都只是触及表面。
软件开发是一个复杂的过程,需要您了解各种特定领域的概念,规范,测试,扩展,设置时间表,设计架构,最重要的是选择您的"技术堆栈",如云服务提供商。由于我之前没有开发软件,考虑架构或选择正确的技术堆栈的经验;我的旅程有点坎坷。
经过大约4个月的来回奔波,编写了近2万行代码,软件开发终于完成了......虽然,旅程还远未结束。
我现在面临着一系列新的挑战——维护。
维护软件是一个世界上有经验的开发人员很少关注的话题。如果您曾经尝试更新或修复其他人编写的一段代码,您就会知道它会变得多么令人沮丧。
维护代码可能很困难的原因有很多,但最常见的一些原因是:
- 代码难以理解或写得很差。
- 代码组织不善,很难找到所需的代码。
- 代码被修改了很多次,以至于很难找到原始源代码。
- 原作者或拥有代码的公司不再支持该代码。
代码维护的复杂性是软件项目失败率高的主要原因之一。
为了保持软件系统的平稳运行,必须不断更新和调整代码,以应对业务环境的变化,新的要求和技术进步。这是一项艰巨的任务,通常很难找到时间和资源来正确地完成它。因此,许多软件系统陷入了难以更新和维护的遗留代码的困境。最终,这将导致性能问题和安全漏洞。
在开发过程中,我们很早就解决了这些问题,将精力集中在模块中编写代码(将其分解为更小的、可重用的组件),并重用它们以减少每次业务环境或系统要求发生变化时需要重写或更新的代码量。
提前规划我们的模块有助于我们解决与代码维护相关的问题,并使该过程更轻松,更高效。它为我们节省了大量的时间和金钱,也有助于确保我们的代码更加可靠和安全。
总之,软件开发和维护是严重误解的话题。没有经验的开发人员无法理解它们的复杂性,因为它们通常缺乏所需的专业知识深度。一旦你深入研究了软件开发和交付的深处,你就会学到它。