有人认为:无论是新手程序员、还是编程老司机,说到底并非代码的创造者,而是程序的“搬运工”。在项目开发中,他们希望自己能够高效、且颇有成就感地交付出完美的代码,但是现实却往往事与愿违。本文将从一名深耕编程领域多年的资深码农的角度出发,和您分享六个方面的经验总结,希望能够帮助您最大限度地提高生产率、并加快产品的交付速度。
1.使用恰当的编程语言
俗话说:“工欲善其事,必先利其器。”如果您的团队能够为应用程序选用合适的编码语言,势必会对开发任务的高效完成产生积极的正面影响。例如:
Python能够“扎根”于科学计算,因此那些重视程序稳定性、以及问题解决一致性的开发人员,会时常选择Python。
Ruby非常适合网站的表达性代码,并且Ruby社区可以为同一问题提供多种解决方法。
PHP是针对快速服务器端应用的绝佳选择。它几乎可以在任何地方被部署。由于社区中拥有大量的PHP开发人员,因此它形成了一套生态系统,并能够对您手头的项目及时提供帮助。
Node.js虽然稍许复杂,但是它允许Web开发人员在服务器端使用与客户端相同的语言。如果您需要提供高度交互性的客户端体验,那么就可以选择Node.js来进行优化。
不过,无论如何,请尽量不要让最新的编程时尚影响您的语言选择。最新的不一定是最适合您手头项目的语言。就我个人而言:十年前,我们会用一些JavaScript在服务器端呈现页面。五年前,我们会用REST或GraphQL API进行客户端的数据渲染。而在2020年初,我们在应用程序中使用了TypeScript,来呈现服务器端数据。
2.不要自行实施身份验证
我参与过多个项目,其中有些是在应用程序中实现了自定义的身份验证,并且将加盐(salted)的密码哈希值保存到数据库中。实际上,这完全没有需要。由于我们拥有将身份验证委派给活动目录(Active Directory)的基础架构,因此用户完全可以使用与Windows登录名相同的密码。如今,我们已经拥有了Auth0及其类似产品,完全可以将身份验证委托给Auth0。据此,我们不但可以降低自行设计与实现身份验证所带来的潜在风险,而且能够为应用程序提供更好的安全性。
3.首先编写单元测试
没有测试驱动的设计,就像只知道编写代码,而不开展测试一样,您最终会发现各种无法解决的长方法、长参数列表等问题,而且这些代码也会变得难以维护和改进。有时候,您需要手动去执行“git reset”,或直接转入代码重构(https://www.refactoring.com/)。
为了成功地进行单元测试,我们可以将某些功能分解为如上图所示的“红色、绿色、重构”,这样的微循环。其中:
红色 - 直接从那些失败的单元处开始编写测试,通过排除真实运行环境中的干扰因素,以便随时运行单元测试。
绿色 - 编写使该单元能够测试通过的代码。
重构 — 清理代码,重构并再次运行单元测试。
如此往复循环下去,以提高代码的质量,并增强团队对于软件产品的交付信心。
4.利用SaaS、IaaS和PaaS
如今,开发人员需要将更多的时间投入到那些非代码性的任务上,其中包括:基础架构、DevOps、以及集成等方面。实际上,您完全可以通过简单的git push,这类SaaS服务与工具,来部署应用的新版本,且无需与DBA、系统管理员等抢夺内网资源。SaaS、IaaS和PaaS等服务供应商可以帮助我们打理各种有关软件项目开发的基本琐事。例如,您不需要自行配置Logstash和ElasticSearch的复制,第三方服务公司会从您的应用中检索并提取相关日志,同时在保存了90天后再删除掉,以满足GDPR(欧洲《通用数据保护条例》,https://www.ctrl.blog/entry/gdpr-web-server-logs.html)的要求。当然,您既需要花时间去找到能够提供此类服务的可靠提供商,又要充分衡量将客户的信用卡、短信、邮件等信息,存放到第三方平台所带来的安全性问题。
此外,像Heroku之类的平台即服务(PaaS)提供商,不仅能够实现应用程序的外包托管,而且可以通过各种技术栈的预配置安装,提供基础架构和平台的日常运维。据此,您可以更加专注于软件产品的交付时间。
5.使用IDE来分析代码
一些常用的、广受欢迎的IDE(集成开发环境,如:Eclipse、IntelliJ、Visual Studio、以及VS Code等),要么过于复杂,要么只能发现case块中没有最终默认子句之类的问题。我们在实际项目中使用到了linter这一套开发工具(生态系统)。它能够集成IDE或编辑器的各种内置功能,方便我们开展各种调试。其中,SonarLint不但能够支持前面提到的各种IDE,还可以提供针对程序中安全问题、细微错误、以及不规范编码的各种建议。此外,您还可以使用SonarQube来衡量代码的质量,修正IDE中的错误建议,最终交付安全且易于维护的代码。
6.快速构建
作为独立的开发人员,您可能会选择在本地的开发环境中,运行测试和部署代码,并据此得到快速的反馈。但是,当您在进行团队协作时,程序代码就可能需要在CI/CD管道中运行了。为了按时完成任务,我们往往会用到Makefile、Gradle、或其他适合编程语言与运行时环境的构建工具,以便实现数据库的迁移、打包、部署、以及分发等过程自动化,并保证代码能够顺利地运行在生产环境中。
在任何新的项目开启时,我们都需要对其进行一些基础性的探索与研究。而在开发的生命周期中,我们的重点除了编写代码,还应当兼顾实施构建,搭建IDE,配置运行环境,部署生产环境,以及顺畅地与外部进行各种调用和交互。
小结
当然,在实际开发程序的过程中,我们可能会碰到许多影响到生产率和交货时间的因素。希望上面介绍的六种提高生产率的可行性技术建议,能够对您的项目实践提供帮助,让您事半功倍。
原标题:6 Productivity Practices for New (or Old) Developers ,作者: Michael Bogan