Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

「基于巧合的编程」

  写出一坨奇怪的代码,测试能跑通就算是完成了,最后甚至自己都说不清整个程序的逻辑。这种神奇的开发方式被称为「基于巧合的编程」。这种事情听上去有点蠢,但确实大家都或多或少地这么做了。只是越有经验的开发者在开发上基于运气的成分越少而已。
  看了手上几个项目别人写的 Grunt 配置,发现完全看不懂。usemin、rev 什么的,这一个个 task 是如何关联上的?我想当时写这份配置的人一定是跑通了程序后就再也不管了。逻辑?呵呵,以后谁改到谁倒霉就是了。
  有时候一些程序改个变量名都要出错,结果发现后面是各种字符串拼接来取的变量名(其实这也算是 JavaScript 的坑吧)。这样的程序总是让我有重构的冲动(虽然大部分时候还是忍了下来)。
  之前面试过几个人吧,会使用 jQuery 的 live,但却完全不懂其实现原理,只是觉得会自动给选中的元素绑定上事件很方便。这么写出来的程序也许第一次开发时碰巧能跑通,以后别人要是改到了就会出现各种坑。
  还看过一堆函数之间使用全局变量通信的程序,乍一看都觉得神奇,完全无法理解两个程序是如何平白无故地被关联起来的。传个参数会怀孕么!?只是因为这个全局变量名没被使用以及函数是同步调用的,所以碰巧能跑过测试。这样挖坑,以后的程序维护就苦逼了。
  对于不熟悉的东西,大家总是会挖下许多坑,我自己也不例外。刚开始用 Angular 的时候会在 Controller 里使用选择器之类的东西。因为 View 是自己写的,所以「碰巧」程序能跑。后来有个小女孩把 View 给改了程序就跑不动了。从此我就再也不在 Controller 里使用选择器了。
  以前在贴吧混的时候看到有人问过「耦合」是什么,当时我不知道如何做具体的解释。其实「基于巧合的编程」就是大量制造「耦合」,制造出别人甚至自己都驾驭不了的「耦合」,最后程序就等着重构了。其实「耦合」本身是稀疏平常的东西,就像黄太吉煎饼店卖的「藕盒」一样,有人会造出来,有人会吃掉。挖坑和踩坑总是在所难免的。好好记住每一个自己挖过和踩过的坑就好,这就是所谓「开发经验」。
  我的建议是尽可能地避免写出「稍微的改动就跑不动」的程序。或者为了性能优化的考虑,必须写出高耦合的程序时也应该加以详细注释,避免以后踩坑。如果是接手一个逻辑高度复杂的程序,建议先把结构梳理清楚,写好文档再开始写代码。避免写到最后自己都驾驭不了这么复杂的逻辑,最终变成「基于巧合的编程」。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^