您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 开发技术 > 正文

资深码农应采纳的九种好习惯

发表于:2020-05-09 作者:陈峻译 来源:51cto

常言道:台上一分钟,台下十年功。如果您想在实际的软件项目中,能够得心应手地开发出令客户满意、且愿意为之买单的应用产品,那么您就有必要通过刻意练习和反复实践,来养成一些良好的编程习惯。据此,您在“实战”中,只需投入较少的精力,便可完成简洁易读,且易于维护的程序代码。下面,我们来一起讨论九种值得资深码农采用的编程习惯吧!

1.编写友好的代码

请永远记住:您不仅仅是在为机器编写代码,而且也是在为自己将来的“读者”编写代码。因此,编写出具有可读性的代码是尤为重要的。有人曾经把编程比喻成撰写出一首好诗,我们除了要在格式上应保持一致,还应当让代码段在缩进,以及命名规则等方面保持井井有条。以下是一些方便您能够快速领会的小技巧:

遵循一致性的命名规则(naming conventions)

如果您使用下划线作为首字母来命名各种私有变量的话,那么就请您在代码的其余部分继续遵循此类命名规则。而如果您正在开展的是团队协作式编程活动,则您请在让任何人接触此类代码之前,事先讨论好这样的命名规则。

值得注意的是,大多数编程语言可能已经具备了由其核心语言本身、或是相应的社区所定义的(如:PHP-FIG,请参见-- https://www.php-fig.org/psr/psr-12/)标准化命名规则。因此,在大多数情况下,您不必自行创建另一套命名规则了。

您可以使用所谓的linter或代码嗅探器(code sniffer)来协助执行代码的规范化与修正,以使其更符合业界的常用标准。以下是在各类编程语言中常见的主流linter:

描述性变量/方法名称

无论是变量也好,还是方法也罢,它们的名称都应当能够准确地描述其代码的用途。例如,Sort_PT()之类不常用的缩写就很可能会造成混淆,人们往往不知道PT为何意。因此,为了避免歧义,我们需要将该名称优化为:Sort_PostType(),这样显然更容易被理解。

当然,这里也有一个例外。大多数程序员已经对使用“ID”来代表身份标识比较熟悉了,因此我们完全可以直接使用“ID”的缩写形式来定义变量。

缩进和换行符

缩进的神奇之处在于:您只需要使用一些简单的Tab键,便可以展现代码的整个结构,以便后续接手人员能够在清晰地了解其功能,并继续进行程序代码的续写。

换行符的主要用途是:当同一行上的2条代码执行的是不同的操作时,那么我们就可以使用到它了。例如:为了避免复杂性,请最好不要将不同的CSS属性链接在同一行之中。

2.思考组织结构

除了代码的整洁性,良好的组织结构也有助于我们解决可读性的相关问题。如果我们需要频繁地上下滚动多次,才能找到需要修改的代码部分的话,那么就有必要通过将代码分为不同的段与块,以方便快速定位和按需修改。

此外,请不要将所有的代码都放置在一个脚本里。虽然单个文件原则上可以包含8000行以上的代码,但是这种“一站式”的组织方式对于撤回某些频繁出现的方法名称来说,完全是一场噩梦。毕竟,我们需要把“易于调整代码”作为首要考虑的因素之一。

通常,我们可以借鉴的最佳实践是:

  • 根据代码的主要功能(例如:管理器、界面、动画、扩展名等),将代码分成不同的文件。
  • 只要有可能,请确保将特定的编程语言用于特定功能目的。例如:除非您有足够充分的理由,否则请避免编写jQuery的动画效果,而采用CSS3来编写动画。而且,就算您使用了jQuery,也请在CSS文件中注明此类非常规的原因。

3.先计划后编程

在为手头的项目敲下第一个字母之前,您最好已经想好了一定的编程思路和计划。例如:编写出一个固定在页面上的导航菜单纵然非常容易,但是如果用户要求在向下滚动页面时,菜单能够自适应地最小化到边框上的话,那就需要从长计议了。

可见,为了避免由于盲目动手写代码而造成的无休止的返工,甚至是“死循环”,我们需要在如下方面提前规划:

事先准备流程

与其“边做边想”式地既要编程又要兼顾解决问题,不如事先设定好代码将要解决的问题和达到的目的,再列出实现的过程和方案。我们以上面提到的菜单为例,梳理一个典型的流程:

  1. 使用Bootstrap作为响应式的框架(请参见--https://www.hongkiat.com/blog/tag/rwd/)。
  2. 创建导航菜单。
  3. 将.navbar-fixed-top添加到菜单中。
  4. 当用户在页面上向下滚动超过200px时,创建一个jQuery脚本以调整菜单的大小。
  5. 如果用户回滚动到页面顶部时,再次调整菜单的大小。

答疑解惑

完成流程的梳理之后,您一定会发现各种潜在的问题。例如:我们该如何根据菜单的大小,来调整网站的logo和菜单标题的大小呢?是否需要调整下拉菜单的大小?是否需要动态检测而不是静态检测?一旦扫清了这些“雷和坑”,我们就可以撸起袖子,动手编写菜单的相关代码了。

4.编写可控的代码

您一定不想逐行手动修改数百个变量吧?我当年不但经历过此类悲催的过程,而且持续了一年。从那时起,我就发誓一定要学会了编写出尽少需要手动修改的代码。

那么我们该如何实现这个目的呢?答案是:请使用数组(Array,请参见--https://www.w3schools.com/js/js_arrays.asp)。数组非常适合于存储多个变量,而且我们可以使用便捷的for循环、或for each的方法,来访问这些变量。

当然,目前也有各种编程语言的动态方法可以实现对于数据的添加、排列和检索,其中包括:List(请参见--http://www.dotnetperls.com/list)和LINQ for C#(请参见--http://www.dotnetperls.com/linq)。因此,请您对各种新的功能函数、库或插件保持密切的关注,以实现高效的数据管理。

此外,为避免反复修改代码中的某些内容,我们可以编写一些高度独立的代码。当其他代码段的内容被修改或更新时,这些代码既不会受到影响,也不会破坏整个系统。这就是所谓的松耦合(Loose Coupling,请参见--http://social.msdn.microsoft.com/Forums/en-US/c747f40a-7091-4f59-98b1-c637814d275b/cnet-what-is-the-exact-meaning-of-loose-coupling?forum=netfxbcl)。

5.不要过度开发

随着技能的成熟和水平的提高,我们会逐渐接手开发一些更为复杂的软件产品,以满足更广泛的用户需求。不过值得注意的是,我们要避免陷入另一个陷阱--过度开发项目的某个完全不需要的功能。也就是说,在开发的过程中,我们应定期提醒自己关注项目的主要目标,并仅添加那些满足该目标的基本功能。例如:如果您知道集合的确切大小,就请使用数组类型;如果List的功能函数能够按需检索数据,就不要使用高级的LINQ。

套用一句富有哲理的名言:“您可以并不意味着您应该”。也就是说,请不要浪费时间去开发那些在本软件产品中几乎用不着的插件或功能。毕竟,您不是在预研或探索创新阶段,您需要交付的是成熟的产品。其中最值得您花时间去实现的是项目的主要功能和目标。

6.学习调试

正如“有人的地方就有江湖”那样,有代码的地方就会有bug。为了尽量减少代码中的缺陷,我们应当不断学习和提高针对程序的调试技能,并且需要通过掌握各种既有的调试工具,来节约交付的时间并提高效率。

目前,各种浏览器都普遍配备了功能强大的开发者工具(Developer Tools简称为DevTools,请参见--https://developers.google.com/web/tools/chrome-devtools)。它们通常具有错误检测、断点设置、表达式跟踪、性能检查等便利的调试功能。

同时,诸如Aptana Studio 3(请参见--https://developers.google.com/web/tools/chrome-devtools)和Xamarin Studio(请参见--https://visualstudio.microsoft.com/vs/mac/xamarin/)之类的IDE甚至会自带有强大的内置调试器,方面您随时调用。

当然,调试器不可能做到对您的代码完全了解,因此我们也需要将console.log的日志类函数放入代码中,以确保它能够与变量进行良好的集成。只要您留心搜索,就能在网上找到针对不同编程语言的高级、特定的调试方法(请参见--https://developer.mozilla.org/en/docs/Debugging_JavaScript)。

7.寻找更强大的编辑器

俗话说:“工欲善其事,必先利其器”。好的程序编辑器不但能帮助我们提高编程的技能,还能加快项目完成的速度。因此,无论您在编程方面有多么的熟练,我都强烈建议您选择一款具有代码自动完成功能的编辑器,例如:Sublime Text(请参见--https://www.sublimetext.com/3)、Visual Studio Code(请参见--https://code.visualstudio.com/)和Aptana Studio 3。

此类工具不仅能够帮助初学者识别和学习编程语言的语法,而且可以向专业人员提供更好的代码建议和解决方案。值得注意的是,大多数IDE仅支持某一部分语言代码的自动完成,因此您需要事先了解它们所支持的开发语言种类。

例如,我非常喜欢MonoDevelop(请参见--http://monodevelop.com/)的代码模板功能。通过自定义的快捷键,我可以将自定义的代码模板从通用的switch语句中输出到成熟的管理器脚本中。该功能对于大型项目来说十分实用。此外,您可能还会用到如下方面的基本功能:

  • 调试器
  • 正则表达式替换
  • 版本控制支持
  • 数据库支持
  • 分割编辑
  • 布局定制器
  • 所见即所得(WYSIWYG)编辑器

8.版本控制

有时候,您会因为当前程序的某个严重错误,而需要回滚早期版本的代码。设想一下:如果该错误涉及到代码库中的多个文件,而且这些文件是在几天、甚至几个月前被修改过的,我们该怎么办呢?想必,您已经意识到了版本控制系统的重要性。

在业界常见的版本控制软件中,当属Git(请参见--http://git-scm.com/)最为流行。它拥有大量的线上资源。通过Git,您可以按需保留各种修订版本,将文件进行“分支(branch)”以用于代码实验,跟踪上一次更改过的代码部分,并能够按需恢复原来的版本。

9.总是学习新东西

如果您是一名资深码农,那么您一定见证了在过去的10年间,许多种开发方法和编程语言早已被淘汰的历史。就算是那些从软件开发领域的顶尖公司跳槽出来的程序员,也不一定能马上胜任新的开发领域和任务。

既然程序员注定需要紧跟最新的开发技术,那么学习就成为了必要的职业生存和发展之道。我在此处所说的学习,不仅仅是单纯的阅读例程与编程练习,更重要的是通过一些富有挑战的实际项目去不断地实践。只有在游泳中学会游泳,您才能学得更扎实,运用得更灵活。

原标题:10 Programming Habits Developers Should Adopt ,作者:lvaris Falcon