解析码农成长的自我修炼

标签: 产品经理 | 发表时间:2014-04-17 17:16 | 作者:博士
出处:http://www.techxue.com/forum.php

 软件开发是个挑战,尤其是对于那些完美主义的程序员。他们需要制定大量的决策以及许多问题的解决方案,这对于有些人来说会感到很难。当然,你可以在线搜索到最佳实践方案或在StackOverflow上提问。但即便你找到了想要的答案,也未必能让你感到满意。你怀疑这个设计是否完美,事实上,真正完美的设计几乎为零。

  设计难题接踵而来

  想彻底解决设计难题是不可能的。这是因为每个需求都会浮现在你的脑海里,你会遇到设计领域里最大的挑战,比如选择数据还是表示层。我是使用MVC还是MVVM?哪种OPM工具适合我?我该如何处理多个数据库?等等。每个问题都会让你不知所措,并且所遇到的设计问题也在日益增长。每走一步都会使你觉得像是有座大山摆在你的面前。不堪负重的感觉让你想要逃避或者拖延解决问题的时间。但拖延并不能解决问题。

  解决类似这样的问题最好的办法就是(Divide & Conquer)拆分 & 克服。你必须暂停思考脑海中的所有系统问题,试着将设计拆分成细小的模块,并且一个一个的查看可以做哪些简单的模块。如果可能的话,选择迭代开发方法。这样你就可以将思维专注在设计障碍上 ,那么你就能看到多个小山丘而不是整座大山浮现在你的脑海中。

  此外,不要花费太多的时间来选择工具或者API或者规则引擎。这些工具仅仅是为了让我们工作起来更加轻松。相反地,把更多的 时间放在设计原理上,比如关注分离(Separation of Concerns)。SoC(系统芯片)会允许你改变任意软件层或者不影响其他系统的软件工具。

  TDD(软件测试驱动开发)会让你鼓足勇气,让你在软件行业发生质的改变。不要忘了,在设计上花费的时间是远远不够的,正如Steve McConnell 在Code Complete这本书中所说:

  “When are you done [designing]? Since design is open-ended, the most common answer to that question is “When you’re out of time.”

  需求变更

  为了生存,你的客户或者公司必须适应变化。而这就意味着需求将发生变化。你不可能只编写一款软件就能满足未来所有的需求。总会有些新的需求时不时的跳出脑海中。所以,不要试图掩盖未来的需求,尝试去编写满足目前需求的软件。

  不要过量设计

  如果你花费数天时间来开发某个特别的功能,而这个功能一年里为你的客户只减少五分钟,那么实际上你的工作是无用的。我能理解,有时我们无法阻止自己做出一些特别的改变,因为它似乎使我们觉得像是一个更好的程序员或者只是为了好玩而已,但是考虑到成本/效益,时间是宝贵的,把时间花费在其他方面或许会更好。

  简洁原则

  简化,当你需要存储某个对象到系统文件时,没有密集型的工作或者特别需求,编写一个自定义对象序列化是毫无意义的。我看到有些设计从工程学角度来看,它们像是杰作,但它们过于复杂。你不应该让你的设计过于复杂。有时,最好的解决方法就是简单。因此,请保持 KISS原则。

  相信自己,鼓足勇气

  设计其实是为了检验程序员成果的好坏。不同的程序员可拿出不同的设计思路。因为没有单一的解决方案,这可能会导致你为某个特性搜索所有的最佳方案, 但这并不意味着你应该停止学习或聆听他人的想法。在设计过程中,不是学习所有最佳实践就能适合你的问题。相信自己,做最好的设计,实施自己的设计思路。

  重构是个非常好的做法。当出现坏代码时,试着用重构的方式来解决。从错误中学习,它将有助于你未来设计。

  没有完美的设计

  无论你做什么,最终都会以一款无法令你满意的软件而告终。正如 Hunt and Thomas在《The Pragmatic Programmer》中写道的:

  “完美的软件是不存在的。在计算机历史上,没人设计出完美的软件。这是不可能的,也许你是第一个,除非你不接受这个事实,而浪费时间或者精力去追逐一个不可能实现的梦想。”

  我很抱歉,但他们是对的。不要去追逐一个不可能实现的梦想,试着让你的软件“足够好”就好!

  本文作者夏梦竹、英语原文

相关 [解析 码农 成长] 推荐:

解析码农成长的自我修炼

- - 互联网分析沙龙
 软件开发是个挑战,尤其是对于那些完美主义的程序员. 他们需要制定大量的决策以及许多问题的解决方案,这对于有些人来说会感到很难. 当然,你可以在线搜索到最佳实践方案或在StackOverflow上提问. 但即便你找到了想要的答案,也未必能让你感到满意. 你怀疑这个设计是否完美,事实上,真正完美的设计几乎为零.

我的码农原则

- - 钛媒体TMTpost—把脉科技资本论
这篇文章只是体现我以前写代码和做代码审查时候的一些原则. 正确性 (Correctness). 结构 (Code Structure). 第一步,第二步;需要什么数据,需要做什么处理,处理完了结果到那里去,都应该在结构中被很好的体现出来. 我的经验来看,一般来说,在design chart上面的每个component都对应着自己的class,然后之间或class内部的通信通过member function来完成.

清醒地成长

- ChrisDing - 蒋方舟博客
            清醒地成长            ......>>点击查看新浪博客原文.

解析DynamoDB

- - 技术改变世界 创新驱动中国 - 《程序员》官网
DynamoDB是Amazon最新发布的NoSQL产品. 本文在介绍DynamoDB特性的基础上,将其与SimpleDB、Cassandra和MongoDB进行了分析和比较. 在NoSQL概念日益火爆的今天,市场上又增加了一个重量级的NoSQL产品—DynamoDB,它是Amazon AWS于2012年1月18日发布的.

xml sax解析

- - 移动开发 - ITeye博客
最近一直在做接口,主要用对xml的解析用的是sax,下面我对sax的几种写法做了一个测试:. System.out.println("耗时:"+(end-start));. System.out.println("当前 Java 虚拟机中的使用内存量:" + (freeMemory01-freeMemory02) + " 字节");.

mysql explain 解析

- - SQL - 编程语言 - ITeye博客
Mysql Explain 详解. 例如: explain select * from t3 where id=3952602;. 二.explain输出解释. | id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra |.

java解析APK

- - Linux - 操作系统 - ITeye博客
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息. 2、利用相关jar包里的集成方法解析apk. 这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果. // 将解压文件对象转列举对象. // 获得名为AndroidManifest.xml的文件.

sql 解析器

- - zzm
// parser得到AST. // 将AST通过visitor输出. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

老码农:如何写出让自己满意的代码

- - 博客园_知识库
  今天有位朋友在微博上问我这样一个问题:.   “ @老码农的自留地 ,最近出于学习目的写一个管理系统,越到后边,越觉得自己前边的代码写得烂. 前辈,我想让代码写得更好一点,能不能谈谈你的经验,给我指点一下.   我在回复里刚写了几句,就意识到140个字很难把我的想法说清楚,本着知无不言言无不尽的好为人师精神,我决定把我的回答写成一篇博文.

年过50,还能继续当码农吗?

- - GetFreeware.Net
背景:我30出头,但我周围却有一批比我老得多的程序员. 以下是我的个人观点,不代表雇主. 关键不在于年龄,而在于雇主的年龄观念. 当你40、50、60岁时,雇主会认为你想当项目主管、架构师、首席软件工程师之类的职位. 他们还会认为,过去二三十年,你的薪水每年都提升了5%至10%,所以与只有3年工作经验的25岁年轻人相比,你的市价可能高出50%至100%.