本节书摘来自异步社区出版社《Oracle PL/SQL程序设计(第5版)》一书中的第1章,第1.6节,作者:【美】Steven Feuerstein , Bill Pribyl,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.6 一些建议

Oracle PL/SQL程序设计(第5版)
自从本书1995年第一版出版以来,我有机会培训、帮助、与上千名PL/SQL开发人员合作过。在这个过程中,我从学生和读者中学到的许多,也深刻的理解了在PL/SQL世界中我们是如何工作的。我要给你一些如何让这个强大的编程语言更有效的工作的建议,你可不要不耐烦。

1.6.1 不要太着急

我们的工作时间总是很紧迫,记者解决一个个的问题。我们不能浪费时间,有太多的代码要写。因此马上开始吧——对吗?

错误。如果太快地深入到代码构建中,盲目地把用户需求转化成成百上千甚至上万行代码,最终我们得到是一大堆乱七八糟的、基本不可能调试和维护的垃圾。不要对即将到来的最后期限太过恐慌;如果我们能够做一些仔细的计划,就能够保证最后期限。

我强烈地建议你一定要抵制住这些时间压力,确保在开始开发新应用,甚至应用中的一个程序之前都有完成下面这些事情:

在开始编写代码之前构建测试用例和测试脚本
就算我们的程序只有一行代码,我们也需要先确定如何才能验证这个实现方式是成功的。只有这样,我们才能保证程序接口的正确性,也才能更透彻地知道我们的程序到底要做些什么事情。

就开发人员该如何编写SQL语句制定一个清晰的规则
一般来说,我建议每个开发人员都不要写太多的SQL。相反,那些单行结果的查询和插入、更新操作都应该“藏在”一个预建的、经过彻底测试的过程和函数的背后(这种方法也叫做数据封装)。这些程序可以比那些散布在代码中到处都是的SQL语句(很多语句都是重复的)更有效的优化、测试以及维护。
**
就开发人员如何处理应用中的异常指点一个清晰的规则**
一个开发团队中的所有开发人员都应该用相同的方式抛出、处理、记录错误。要想这么做,做好的方法就是创建一个单独的错误处理包,报所有关于保留错误日志、确定异常如何抛出、以及如何传播出嵌套块的细节都隐藏起来。一定要确保团队中的所有开发人员都要使用这个包,而不是自己又写一套复杂的、浪费时间的、还容易出错的错误处理代码。

使用“逐步细化”(也叫做自顶向下的设计)的方法,避免任何时间我们必须处理的需求过于复杂
如果我们采用这种方法,就会发现模块中的执行单元变得很短而且更容易理解,这也能保证我们的代码更易于维护和改进。局部或者嵌套模块在这个设计原则中起着关键角色。

这些只是我们开始代码编写之前必须要注意事项的一部分。记住:在软件开发世界里,仓促上马不仅意味着浪费资源,肯定会有大量的bug,周末也没了。

1.6.2 不要怕寻求帮助

如果你是一个软件专业人士,你很可能是一个相当聪明的人。你学习刻苦、勤学苦练,为了良好生活而写代码。你差不多可以解决任何交给你的问题,这让你很骄傲。不幸的是,你的成功也让你自负、自大、遇到困难也不愿意寻求帮助,对于软件开发来说这是最危险也是最有破坏性的方面之一。

软件都是由人编写的;因此,很重要的一点就是,要认识到人类心理在软件开发中扮演了一个关键的角色。下面就是例子。

Joe,是一个6人开发团队中的高级开发人员,编程中遇到了一个问题。他花了数个小时研究这个问题,只有越来越多的挫折,可还是不能指出问题的来源。他不想向他的组员寻求版主因为他们的经验比他少。不过,最后他还是无计可施只能“放弃了”。叹了口气,他拿起了电话按了个键:“Sandra,你能过来看看我的程序吗?我有个问题无法解决。”Sandra过来了,很快地看了下Joe的程序,指出了很早之前就应该发现的问题。万岁!程序解决了,Joe感谢万分,但实际上私底下他还是很尴尬的。

类似于“我怎么就没看到呢?”以及“只要我肯在花上5分钟时间调试,我自己就能解决了”的想法不断地出现在Joe的脑海中。这很容易理解不过也很愚蠢。因为我们和代码太近了,以至于发现不了问题。有时,我们所需要的就是一个全新的角度,没有任何关系的人的相对客观的看法。这和资历、专业或者能力没有任何关系。

我强烈建议你应该在你的机构内建立下面这些指导原则:

奖励那些承认自己不知道的
明明不了解某个应用程序或者其代码又不说,这是很危险的。培养一种欢迎别人质疑以及求助的文化氛围。
**
寻求帮助**
如果我们无法在30分钟内找出问题所在,立即请别人帮忙。我们甚至可以建立一套“互助系统”,给每个人都分配一个他可以需求帮助的人。不要自己(或者小组中的其他人)徒劳地花费数小时却没有任何结果。
**
设置一个正式的同行代码评审程序**
当我们的代码还没有小组其他成员阅读或者评论(以一种积极的、建设性的方式)之前,不要把代码提交给QA或者生产线上。

1.6.3 采用一种创建新的甚至激进的方法

我们在生活中总是重蹈覆辙。人是一种习惯性的生物:我们学习用一种方式编写代码;我们承认产品有一些局限;我们不做任何严格的检查就排除可能的解决办法,仅仅因为我们以为不能。开发人员逐渐对他们自己的程序偏信,经常是肯定的一面。总会听到他们这么说:

“不可能跑得更快了;它只是只猪啊”。

“我没法让它按照用户需要的那样工作,我们必须要等到下一个版本。”

“如果我用X或者Y或者Z,就易如反掌。不过要是用这个,那就像打仗一样了。”

但事实上,我们的程序总是可以更快一点。事实上屏幕也可以像用户希望的那样工作。尽管每个产品都有自己的局限性、优势和弱势,我们也不能够等着下一版。如果能告诉医生正确的面对问题,不接受任何借口,精心设计一个方案是不是会很爽?

我们该怎么做呢?打破那些已经僵化的意见的限制,重新看看世界(或者只是你的办公室)。重新评估我们已经养成的编程习惯。要有创造性——逐步地摆脱传统方法,逐步摆脱那些在我们日常工作中不断强化的局限的、机械的方法。

做些新的尝试:试试那些看起来离经叛道的方法。你会惊奇地发现,作为一个程序员乃至问题解决员你会学到多少东西。这么多年来,我一次又一次惊异地发现,一旦我不再说“你不能这么做”,而只是静静地点头,默默地对自己说“现在,如果我这么做……”,也真的就实现了。

《Oracle PL/SQL程序设计(第5版)》一一1.6 一些建议相关推荐

  1. 《Oracle PL/SQL程序设计(第5版)》一一2.5 编辑PL/SQL的环境

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第2章,第2.5节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  2. 《Oracle PL/SQL程序设计(第5版)》一一2.4 执行必要的PL/SQL任务

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第2章,第2.4节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  3. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  4. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

    Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 7.1 程序数据的命名 PL/SQL要求在给数据结构命名的时候应 ...

  5. Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理

    Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理 ACID原则:即一个事务具有原子性.一致性. ...

  6. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  7. oracle 12c sql图形化,Oracle 12c PL/SQL程序设计终极指南

    Oracle 12c PL/SQL程序设计终极指南 作者:孙风栋;王澜;郭晓惠 出版日期:2015年06月 文件大小:11.73M 支持设备: ¥60.00在线试读 适用客户端: 言商书局 iPad/ ...

  8. Oracle PL/SQL语言初级教程(自学)

    Oracle PL/SQL语言初级教程 PL/SQL 语言基础 PL/SQL 是一种高性能的基于事务处理的语言,能运行在任何 ORACLE 环境中,支持所有数据处理命令. 通过使用 PL/SQL 程序 ...

  9. PL/SQL Developer(解压版)连接64位的Oracle11g

    PL/SQL Developer(解压版)连接64位的Oracle11g 在Windows 64位系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时要用P ...

最新文章

  1. 整理第十六届全国大学智能车竞赛比赛数据
  2. 再发些CSS常用技巧和兼容方案
  3. asp.net mvc连接mysql_ASP.Net MVC连接MySQL和Code First的使用
  4. C++用库 jsoncpp 解析 JSON
  5. python3循环遍历嵌套字典替换指定值
  6. ### 学习《C++ Primer》- 8
  7. Nginx For Windows 关于 worker_connections 不生效问题
  8. maven自带clean_maven之clean、install命令
  9. java流数据base64,Base64数据的流解码
  10. 易乐游无盘服务器缓存设置,易乐游缓存设置图文教程
  11. 【ElasticSearch】Es 源码之 SettingsModule 源码解读
  12. 改变自己就是改变世界的开始
  13. (6)二进制文件方式部署Kubernetes高可用集群----------安装Docker Engine
  14. 领域驱动模型设计(一)
  15. python str转换成float
  16. Python 四大名著词频画图
  17. 云服务器忘记密码怎么设置?云服务器BCC实例重置密码方法【附视频】
  18. oracle时间相减得到天_oracle中计算两个日期之间得天数、月数、年数
  19. 新手如何Reverces(基础ctf教程篇)
  20. 如何在 Windows 环境下配置 PHP 开发运行环境

热门文章

  1. asp.net全球化——让你的网站在中英文中自由切换
  2. java模板方法模式_JAVA 设计模式 模板方法模式
  3. 网络扫描与网络侦察-实验一
  4. [redhat 6.7+Mysql5.7] root权限丢失、降权恢复菜鸟教程
  5. 用原生JS判断页面是否滑动到底部
  6. 【Windows 应用程序开发详解】四.Windows开发基本概念和相关术语(一)
  7. 河北专接本微机原理知识点01
  8. wemos D1 arduino项目实战1-Tlink平台创建一个产品
  9. 线程的 run()和 start()有什么区别?
  10. 配置python查看网易模拟器app反编译函数hook