26

提高新老码农生产率的6点可行性建议

 3 years ago
source link: http://developer.51cto.com/art/202009/627367.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【51CTO.com快译】有人认为:无论是新手程序员、还是编程老司机,说到底并非代码的创造者,而是程序的“搬运工”。在项目开发中,他们希望自己能够高效、且颇有成就感地交付出完美的代码,但是现实却往往事与愿违。本文将从一名深耕编程领域多年的资深码农的角度出发,和您分享六个方面的经验总结,希望能够帮助您最大限度地提高生产率、并加快产品的交付速度。

1.使用恰当的编程语言

2aqY3uA.jpg!mobile

俗话说:“工欲善其事,必先利其器。”如果您的团队能够为应用程序选用合适的编码语言,势必会对开发任务的高效完成产生积极的正面影响。例如:

  • Python 能够“扎根”于科学计算,因此那些重视程序稳定性、以及问题解决一致性的开发人员,会时常选择Python。
  • Ruby 非常适合网站的表达性代码,并且Ruby社区可以为同一问题提供多种解决方法。
  • PHP 是针对快速服务器端应用的绝佳选择。它几乎可以在任何地方被部署。由于社区中拥有大量的PHP开发人员,因此它形成了一套生态系统,并能够对您手头的项目及时提供帮助。
  • Node.js 虽然稍许复杂,但是它允许Web开发人员在服务器端使用与客户端相同的语言。如果您需要提供高度交互性的客户端体验,那么就可以选择Node.js来进行优化。

不过,无论如何,请尽量不要让最新的编程时尚影响您的语言选择。最新的不一定是最适合您手头项目的语言。就我个人而言:十年前,我们会用一些JavaScript在服务器端呈现页面。五年前,我们会用REST或GraphQL API进行客户端的数据渲染。而在2020年初,我们在应用程序中使用了TypeScript,来呈现服务器端数据。

2.不要自行实施身份验证

b8b97df65c03ed00dd8b6801c393f362.jpg

我参与过多个项目,其中有些是在应用程序中实现了自定义的身份验证,并且将加盐(salted)的密码哈希值保存到数据库中。实际上,这完全没有需要。由于我们拥有将身份验证委派给活动目录(Active Directory)的基础架构,因此用户完全可以使用与Windows登录名相同的密码。如今,我们已经拥有了 Auth0 及其类似产品,完全可以将身份验证委托给Auth0。据此,我们不但可以降低自行设计与实现身份验证所带来的潜在风险,而且能够为应用程序提供更好的安全性。

3.首先编写单元测试

Zfaaee3.png!mobile

没有测试驱动的设计,就像只知道编写代码,而不开展测试一样,您最终会发现各种无法解决的长方法、长参数列表等问题,而且这些代码也会变得难以维护和改进。有时候,您需要手动去执行“git reset”,或直接转入代码重构( https://www.refactoring.com/ )。

jEVrQbI.png!mobile

为了成功地进行单元测试,我们可以将某些功能分解为如上图所示的“红色、绿色、重构”,这样的微循环。其中:

  • 红色 - 直接从那些失败的单元处开始编写测试,通过排除真实运行环境中的干扰因素,以便随时运行单元测试。
  • 绿色 - 编写使该单元能够测试通过的代码。
  • 重构 — 清理代码,重构并再次运行单元测试。

如此往复循环下去,以提高代码的质量,并增强团队对于软件产品的交付信心。

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来分析代码

jamMZ3.png!mobile

一些常用的、广受欢迎的IDE(集成开发环境,如:Eclipse、IntelliJ、Visual Studio、以及VS Code等),要么过于复杂,要么只能发现case块中没有最终默认子句之类的问题。我们在实际项目中使用到了linter这一套开发工具(生态系统)。它能够集成IDE或编辑器的各种内置功能,方便我们开展各种调试。其中, SonarLint 不但能够支持前面提到的各种IDE,还可以提供针对程序中安全问题、细微错误、以及不规范编码的各种建议。此外,您还可以使用 SonarQube 来衡量代码的质量,修正IDE中的错误建议,最终交付安全且易于维护的代码。

6.快速构建

j6JvEv.png!mobile

作为独立的开发人员,您可能会选择在本地的开发环境中,运行测试和部署代码,并据此得到快速的反馈。但是,当您在进行团队协作时,程序代码就可能需要在CI/CD管道中运行了。为了按时完成任务,我们往往会用到 MakefileGradle 、或其他适合编程语言与运行时环境的构建工具,以便实现数据库的迁移、打包、部署、以及分发等过程自动化,并保证代码能够顺利地运行在生产环境中。

在任何新的项目开启时,我们都需要对其进行一些基础性的探索与研究。而在开发的生命周期中,我们的重点除了编写代码,还应当兼顾实施构建,搭建IDE,配置运行环境,部署生产环境,以及顺畅地与外部进行各种调用和交互。

小结

当然,在实际开发程序的过程中,我们可能会碰到许多影响到生产率和交货时间的因素。希望上面介绍的六种提高生产率的可行性技术建议,能够对您的项目实践提供帮助,让您事半功倍。

原标题:6 Productivity Practices for New (or Old) Developers ,作者: Michael Bogan

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【责任编辑:庞桂玉 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK