| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

低级程序员和高级程序员的区别

 

低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略.

所以, 我们来听听高级程序认为自己与低级程序员的区别是什么. 高级程序员之所以高级, 在于他们认识到代码 bug 是不可避免的, 有千万种理由可以导致 bug, 但他们可以在设计和逻辑上保证(追求)滴水不漏, 并用逻辑的百分之百准确性还减少代码 bug. 没错, 严谨的逻辑能力是高级程序员区别于低级程序员的最主要原因.

可以举一个简单常见例子: 网络购票终端的开发. 当然, 比低级程序员还低级的程序员做不出来. 我们先看看低级程序员是怎么做:

order = Db::new_order();  ret = Network::place_order(order);  if(ret == TRUE){      order.finish();  }else{      order.cancel();  }

你看到的没错, 这段代码逻辑清晰, 一般 90% 的情况都能正常工作, 有的甚至能达到 99%, 在某些特定的时间段, 这样的系统 100% 能正常工作(几乎是完美的系统).

你可能发现了问题: 网络是不可靠的, 网络请求可能发出去了, 也可能没发出去; 对方可能收到了, 也可能没收到; 响应可能由对方发出去了, 也可能没发出去; 你可能收到了响应, 也可能没收到.

但是, 低级的程序员会这样解释: 我用的是 TCP 协议, "TCP 是一种可靠的传输协议", 哈! 可笑的照本宣科. 这种低级程序员, 不仅在于他们写出了逻辑上不完备的系统, 而且还恶劣地引经据典来做错误的辩护. 但他们引用的经典是不合时宜的(不能支撑他们的结论).

正确的做法应该是假设上面的每一行代码都可能中断执行, 然后进行相应的对策. 正如狭义上的网络协议其实是广义上的交互协议, 我们可能把 TCP/IP 协议上的许多思想和机制应用到系统间的交互上来.

简单来讲, 可以加上就是重试(超时重传)和对账(请求确认). 所以, 逻辑上更准确的代码应该是这样:

Process_0{    order = Db::new_order();  }  Process_1{    order = Db::find_new_order();    ret = Network::query_order_result(order);    if(ret == NOT_FOUND){      ret = Network::place_order(order);      if(ret == TRUE){        order.finish();      }else{        order.cancel();      }    }  }

Process_0 和 Process_1 是相互独立的处理逻辑.

  • Process_0 即处理用户交互, 接受订单.
  • Process_1 请求服务提供商进行对账. 进行采购下单(补单), 更新订单状态.

上面的代码逻辑实现了重试(超时重传), 对账(请求确认). 但上面的代码在逻辑上还不是 100% 准确的, 例如, 如果对方系统误报呢? 但其它的异常情况可以根据实际情况来忽略. 如果你发现这段代码还有重要的逻辑上缺陷, 欢迎告诉我.

记住, 低级程序员和高级程序员的区别在于逻辑和抽象.