【外刊IT评论网】一个程序员怎么能做出这样的事情?

标签: 批评评论 Robert C | 发表时间:2011-08-05 00:50 | 作者:Aqee 上善若水
出处:http://www.aqee.net
本文是从 Why On Earth Would A Developer Do This? 这篇文章翻译而来。

我正好看到了下面的一段代码:

        public void Execute()

        {

            ArrayList empIds = PayrollDatabase.GetAllEmployeeIds();

            foreach (int empId in empIds)

            {

                Employee employee = PayrollDatabase.GetEmployee(empId);

                if (employee.IsPayDate(payDate))

                {

                    DateTime startDate = employee.GetPayPeriodStartDate(payDate);

                    Paycheck pc = new Paycheck(startDate, payDate);

                    paychecks[empId] = pc;

                    employee.Payday(pc);

                }

            }

        }

这段代码有点老,是用.NET 2.0之前版本写的。可是,并不是里面ArrayList的用法让我苦恼。首先他从数据库里取出所有员工的Id。然后他遍历这个Id集合,从数据库这取出每个员工的信息。每当我看到这样的代码,我都想踹写这个程序的人一脚。

如果你还不明白这样的写法有什么问题,请这样想想:你第一次把select语句发送给数据库查询员工Id,查询出5条员工记录。然后你需要向数据库请求另外5条查询语句,分别查出这几个员工的信息。这还好,6次查询并不是一个多大的事情,不是吗?可是你为什么不能把所有需要的数据一次性的全部查询出来呢(这样只有一次开销大的查询)!想象一下,如果你要计算的是100个员工的工资呢,而不是5个?如果是1000个员工的呢?

让我不可理解的是,这样的代码天天都会产生。难道这些人真的不在乎、或真的不知道这样的代码有多糟吗?如果他们真的不知道,那真是很悲哀。如果他们不在意,那更糟糕,因为如果一个程序员明知这样写有问题还是要这样写,很显然,他不认为他的工作有价值,他不关心他的程序,他的团队,他的公司,以及他的客户。

如果你奇怪我是从哪里找到这段代码的…是在Robert C(敏捷软件开发理论的创始人)那里。他的《敏捷软件开发:原则、模式与实践(C#版)》这边书里。是的,是 Robert C。Martin,也就是Uncle Bob。我也许不该批评面向对象领域里如此著名的人物,可是,说真的,Bob,你脑袋进水了吗?你的整本书的目的都是在教育人如何写出优质的代码,里面可以找到大量很有价值的教导。但把这样的代码当作例子实在是不可宽恕。


本文来自外刊IT评论网(www.aqee.net),原始地址:一个程序员怎么能做出这样的事情?

相关 [it 程序员] 推荐:

普通程序员、文艺程序员、2B程序员

- 可可 - 宇宙的心弦
希望能引起广大苦逼的正在学或者已经学过c++人的共鸣和会心一笑吧. 如何辨别自己在现实还是虚拟世界.

如何面试程序员?

- bluesnail - 阮一峰的网络日志
你要面试一个程序员,应该问他什么问题. 有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人. 众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章. 首先,最重要的是,你自己一开始就应该想清楚:. 哪些途径和方法可以发现这样的人. 只有明确这些根本性的问题,才能正确高效地完成面试.

程序员的本质

- Allen - 译言-电脑/网络/数码科技
来源What do programmers really do?.   很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员. 另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题. 甚至不少程序员对他们是做什么的都没有清晰的概念.   在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:.

程序员人生之路

- myartings - 博客园-首页原创精华区
   程序员人生之路(强烈推荐,分析的透彻. ),某程序达人的人生感悟,估计没有半个甲子的时间,是绝对不可能感悟出来的.    相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心. 在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人.

程序员装B指南

- Qing-Run - 博客园-首页原创精华区
1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好. 一个用来查资料,一个用来写代码. 总之要显得信息量很大,效率很高. 2.椅子不一定要舒服,但是一定要可以半躺着. 3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善. 沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子.

程序员收入报告

- diaoxsh - cnBeta.COM
最近,波兰的程序员Chris(也叫KreCi)公布了他的第十四期程序员收入报告. 数据显示,上月是目前为止他收入最多的一个月. Chris的收入并不是指他的工资或薪水,Chris是一个自由职业者. 他的收入也不是来自个人承包软件工程的收入,他更像是一个果农,种了优良的果树,只要不断的给这些果树施肥浇水,这些果树会给他带来源源不断的财富.

程序员的利器-SourceInsight

- Alex - 博客园-首页原创精华区
作为程序员,大部分时间是在已有的代码上代码工作. 要对已有的代码进行调整,首先就要搞清楚当前代码中蕴含的逻辑关系. 所以常常有程序员调侃说花了大半天时间看代码,最后写代码的时间只有几分钟. 所以,对已有代码的分析质量将影响(甚至会决定)最终代码修改的质量. SourceInsight在代码分析上给予程序员极大的帮助.

程序员?还是小丑?

- Vingel - cnBeta.COM
和你从不认识的人坐在一起,试图弄清楚他是个程序员还是个小丑. 我没有想侮辱任何人的意思,而且,我是第一个要感谢这么多年的教育和努力终于把我变成一个专业小丑的人. 对于程序员新手,我充满怜悯,为了和缓的帮他热热身,我给了他一道温和的问题来消解我们之间的陌生. 我让Ada写一段程序,在纸上,打印出“hello“这个词10次.

程序员必读经典

- - 搜索引擎技术博客
你面试微软前必须要读的十本书:. Code: The Hidden Language of Computer Hardware and Software (《编码的奥秘》). Computer System: A Programmer’s Perspective (《深入理解计算机系统》) /Windows via C/C++ (《Windows核心编程》 / 《程序员的自我修养》.