需求着急上线,是写烂代码的理由吗?

【CSDN 编者按】软件开发大师Martin Fowler说过 , “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”翻译过来就是:“任何傻瓜都能写计算机能理解的代码 , 优秀的程序员编写人类能够理解的代码 。 ”
整理 | 于轩
出品 | 程序人生 (ID:coder _life)
除了编程语言之争 , 代码质量好坏也是程序员们津津热议的话题之一 。 近日微博原创视频博主@蛋疼的axb发表了一个关于烂代码的话题 , 一时间引起了不少开发者的关注与讨论 。
需求着急上线,是写烂代码的理由吗?
文章图片

截图自蛋疼的axb微博
他在微博中写到 , 大多数人一提到代码质量就摆“需求着急上线”之类的理由 。 经过他多年的实践 , 想要写出高质量的代码 , 远比“明天晚上下班之前上线老板今天提的需求”难得的多 。
令他不解的是 , 需求真的紧急时 , 程序员往往会通过加班来赶进度;而代码质量下降时 , 却鲜少有人做出努力 。
在他看来 , 真正影响产出代码质量的 , 往往涉及两方面原因 。 一方面是需要在合格理论指导下的进行长期实践 , 另一方面则是要有足够的心理抗压能力 。 能写出高质量代码的人 , 日常只会比赶需求时更加忙碌 。
烂代码是如何产生的?
程序员写出烂代码的原因有很多 , 最常见莫过于以下几种:1.为了按时完成紧急的项目;2.没意识到代码质量和最佳编码实践的重要性;3.粗心大意 , 想走捷径 , 不考虑未来的变化……
关于烂代码是如何产生的 , 网友说:

  • 刚毕业入行 , 苦于无人指点 , 不知道什么是高质量代码 。
  • 不是因为时间赶 , 而是人太菜了 , 平时琢磨的少 , 经验少 。
  • 思维的差距大 , 水平区分度也不同 , 不是所有人都能写出所谓的高质量代码 。
  • 需求不确定的情况下 , 来回改动调整结构设计 , 代码就会越改越臃肿 , 最后变成烂代码 。
  • 没有准备应对紧急情况的预案 , 实践经验不丰富才会导致为赶进度忽略代码质量 。
  • 本质上是需求管理问题 , 缺乏专业能力的管理会盲目扩大需求范围 , 也就是力求「多快好省」的多和快 , 不管好和省了 。
烂代码“长”什么样?
为了快速交差而产生的烂代码 , 不会过多考虑未来的变化 , 更别提代码的后期维护了 。 它们通常会具备以下这些问题:
  • 难以阅读和理解: 烂代码最显著的特征就是没有人能够快速理解它 。 这意味着如果有开发者想更新这些代码 , 就必须要投入额外的时间先理解这些代码 , 然而理解烂代码后 , 他们就很难添加新代码了 。 这就导致很多新开发人员因为不理解旧代码而失业 , 老开发人员面对现有混乱和糟糕的烂代码选择离职 。
示例:
system.whenTerminated.onComplete( result=> session.close)implicit val materializer: Materializer = Materializer.matFromSystem(system)val dataPath = args( 0)varbatchSize = 512 if(args.length > 1) {batchSize = Integer.valueOf(args( 1))} varskip = 0 if(args.length > 2) {skip = Integer.valueOf(args( 2))}val lines = scala.io.Source.fromFile(dataPath) try{importsession.profile.api._val parallels = Runtime.getRuntime.availableProcessorsval source = Source.fromIterator( => lines.getLines)val action = source .map({ line: String=>val number= counter.incrementAndGet( number, line)}) .drop(skip) .mapAsync(parallels)( tuple=> Future(decode(tuple._1, tuple._2))).filter(_.isDefined).map(_.get) .grouped(batchSize) .mapAsync( 1)({ articles=>val max = articles.map(_.line).max val min = articles.map(_.line).min println(f "group of articles ${articles.size} [$min, $max]")Future.sequence(articles.map( a=> nonExists(db, a))).map( articles=> articles.flatten).recover({ caseerr: Exception=>println(f "unexpect error $err when check in [$min, $max]")

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。