凤凰大厅源码代理每个程序员都该知道的 5 个定律

定律或称法则,可以指导我们并让我们在同伴的错误中学习。凤凰大厅源码代理(h5.hxforum.com)联系方式170618633533企鹅2952777280 (http://yhgj8004.com) 源码出售 房卡出售 后台出租有意者私聊扣扣

这篇文章中,我将介绍我每次设计或实现软件时出现在我脑海的 5 个定律。其中有些和开发有关,有些和系统组织有关。它们可以帮助你成为合格的软件工程师。

墨菲定律

“凡事可能出错,就一定出错。”
这条定律来源于 Edward Murphy —— 一名航天工程师在 50 年代初对火箭测试失败的回应。这条定律给我们的启示是永远在系统关键地方使用防御性设计,因为系统某些地方总会出错!

这条定律很容易引入软件工程领域。当你将软件暴露给终端用户,他们会创造性地输入一些出人意料的内容,使系统宕机。所以你需要让你的软件足够健壮,能够检测并警告非预期行为。

当你在机器上运行软件时,任何地方都有可能发生问题 —— 从硬盘上的系统到数据中心的电力供应。所以你必须确保你设计的架构在每个层级都可以应对故障。

我曾经有机会领略过几次墨菲定律。 举个例子,我曾经在一个批处理框架中使用字符串 null 来表示空值,我并不认为这有问题,直到有个名字叫 Null 的用户提交了一个交易订单,我们的报表流程中断了几个小时…… 还有一次,在另一个项目中。当所有东西都准备好部署到生产环境了,突然 Azure 基础设施故障导致我们运行自动化脚本的服务器宕机了。

现实世界中的经验教训提醒着我生活的艰难 —— “凡事可能出错,就一定出错”。 所以,心中牢记墨菲定律,设计健壮的软件。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Knuth定律

“在(至少大部分)编程中,过早优化是万恶之源。”
这条定律也是 Donald Knuth 的经典语录之一,它告诫我们不要过早优化应用程序中的代码,直到必须优化时再优化。

的确,简单易读的源码可以满足 99% 的性能需要,并能提高应用的可维护性。最开始使用简单的解决方案也让后期性能出现问题时更容易迭代和改进。

垃圾自动回收的编程语言中,字符串的连接常常是过早优化的例子。在 Java 或 C# 中,String 对象是不可变的,我们学会使用其他结构动态创建字符串,比如 StringBuilder。但事实上直到你分析完个应用程序前,你并不知道 String 对象创建了多少次并对性能的产生多大影响。所以首先编写尽可能整洁的代码,之后在必须的时候再优化,往往这样做更有意义。

然而,这条规则并不应该阻止你去学习编程语言的性能权衡和正确的数据结构。并且,正如所有其他性能问题,你在优化前要测量开销。

640?wx_fmt=jpeg

North定律

“每一个决定都是一次权衡”
好吧,我承认这是取自 Dan North 的演讲 Decisions,Decisions,它目前还不是公认的定律。 但这条语录影响了我做的每个决定,所以我把它放在这。

开发者日复一日的生活中,我们每天都做无数个大大小小的决定。从命名变量到自动化(手动)任务,再到定义平台架构。

这条语录强调无论你做的选择是什么,你总会放弃一个或多个选项

但这不是最重要的。 最重要的是理智地做出决定,了解其他选项,清楚你为什么不选择它们。你要始终根据当前你掌握的信息来权衡并做出决定。

但是如果后来你了解到新的信息,并发现之前的决定是错误的,这也没关系。关键是记清楚你为什么做出那个决定,重新评估新的选项之后再做出新的理智的决定。

重复一遍

“每一个决定都是一次权衡”
所以,做出选择并对所有选项心知肚明。

640?wx_fmt=png

Conway定律

“系统设计的架构受限于生产设计,反映出公司组织的沟通架构”
在 60 年代,一位名叫 Melvin Conway 的工程师注意到公司组织结构影响到他们开发的系统的设计。他用一篇论文描述了这个观点,并命名为“Conway定律”。

这条定律很适用于软件开发领域,甚至体现到代码层面上。交付软件组件的各个团队组织结构直接影响到组件的设计。

举个例子,一个集中式的开发者团队会开发出各组件耦合的整体应用。另一方面,分布式的团队会开发出单独的(微)服务,每一部分关注点分离清晰。

这些设计没有好坏之分,但它们都是受到团队沟通方式的影响。在全球有大量独立开发者的开源项目,通常是模块化和可重用库,这就是很有说服力的例子。

如今,将大的集成应用解耦成微服务已成趋势。这很棒,因为这可以加速交付使用项目。但你也应该牢记 Conway 定律,在公司组织构建中投入与技术开发同样多的工作。

640?wx_fmt=png

琐碎定律(帕金森琐碎定律)

“组织成员投入大量精力到琐碎的事情上。”
这条定律论点是在会议中花费的时间与事情的价值成反比。的确是这样,人们更愿意把注意力和观点放在他们熟悉的事物上,而不是复杂的问题上。

帕金森给出一个例子,一场会议中,成员们讨论两件事:为公司建核反应堆和为员工建车棚。建反应堆是一件巨大而复杂的任务,没有人能完全掌控全局。他们完全信赖流程和系统专家,并很快接受了项目。

另一边,建车棚是一般人都可以做的,每个人都可以对颜色有意见。事实上,每个会议成员都会表达自己的意见,使得建车棚的决议所花费的时间远远超过建反应堆的。

这条定律在软件行业十分出名,这个故事随后也被称为车棚效应

举个例子,开发者会花费更多时间到讨论正确缩进或函数命名,而不是讨论类的职责或应用架构。这是因为每个人都能认知几个字符的变动,但项目架构的变动则需要巨大的认知负载

你能注意到的车棚效应的另一个例子是 Scrum 演示。不要误会我,我喜欢演示,我认为这是一个很好的机会来面对用户并获得对应用程序的反馈。但通常 Scrum 演示过程中的讨论会转向琐碎问题,而不是审视全局。这些讨论也很重要,但你应该注意权衡更重要更复杂的问题。

一旦你了解这种规律,你将在会议和交流中发觉这种行为。 我并不是让你在每次讨论中避免“小”问题,提高你的意识可以帮助你关注真正的问题,并为这些会议做好准备。

640?wx_fmt=jpeg

结论

这五条定律只是我们行业中总结出的教训中一些例子。随着软件开发经验的增长,我们将会学会更多。 尽管其中某些定律现在看起来是常识,我始终坚信了解这些原则可以帮助你识别这些模式并做出反应。

原文地址:http://blog.51cto.com/13586757/2065155

时间: 2024-11-04 01:53:05

凤凰大厅源码代理每个程序员都该知道的 5 个定律的相关文章

每个程序员都该知道的10大编程格言

每个程序员都该知道的10大编程格言 编程格言1:无风不起浪 (There is no smoke without fire) 编程格言2:预防为主,治疗为辅(An ounce of prevention is worth a pound of cure:) 编程格言3:不要把鸡蛋都放在一个篮子(Don't put all your eggs in one basket) 编程格言4:种瓜得瓜,种豆得豆(As you sow,so shoul you reap) 编程格言5:欲速则不达(Great

极速彩源码搭建步骤 Java 开发者都应该知道的 5 个注解

自 JDK5 推出以来,注解已成为Java生态系统不可缺少的一部分.虽然开发者为Java框架(例如Spring的@Autowired)开发了无数的自定义注解,但编译器认可的一些注解非常重要. 在本文中,极速彩源码搭建bbs.yasewl.com我们将看到5个Java编译器支持的注解,并了解其期望用途.顺便,我们将探索其创建背后的基本原理,围绕其用途的一些特质,以及正确应用的一些例子.虽然其中有些注解比其他注解更为常见,但非初学Java开发人员都应该消化了解每个注解. 首先,我们将深入研究Java

每个程序员都该知道的10大编码原则

回顾我的职业生涯,我曾自己单枪匹马地干过,也和一些特别有才能的人一起共事过,曾解决过一些非常严重的技术难题,也见识过一些鼎鼎大名的技术公司.近期我和我的团队偶然聊起我的这些经历,谈论的成果是我们在编码时应该知道一些原则.这不是规矩,也不是指导方针.它们只是我在编写和运行代码时总结出来的一些需要注意的原则. 1.偏执 这一点与我而言几乎是天生的.我几乎是靠自学才成为了程序员. 我从不相信电脑,也不相信我刚刚修复的bug真的已经修复好了,总之我不相信任何东西.我甚至连自己都不相信.除非多次检验之后,

每个程序员都应该知道的 16个最佳 PHP 库

PHP是一种功能强大的web站点脚本语言,通过PHP,web网站开发者可以更容易地创建动态的引人入胜的web页面.开发人员可以使用PHP代码与一些网站模板和框架来提升功能和特性.然而,编写PHP代码是一个繁琐又耗时的过程.为了缩短开发时间,开发人员可以用PHP库替代编写代码来为站点添加功能. 使用PHP库来取代编写代码,可以显着地降低网站的开发时间,从而开发人员可以将时间投入到网站设计等重要环节. 今天我们要介绍的就是16个最佳的PHP库,它们将帮助网站开发人员轻松提高网站的功能,优化PHP的开

每个php程序员都应该知道的15个最佳PHP库

PHP是一种功能强大的web站点脚本语言,通过PHP,web网站开发者可以更容易地创建动态的引人入胜的web页面.开发人员可以使用PHP代码与一些网站模板和框架来提升功能和特性.然而,编写PHP代码是一个繁琐又耗时的过程.为了缩短开发时间,开发人员可以用PHP库替代编写代码来为站点添加功能. 使用PHP库来取代编写代码,可以显着地降低网站的开发时间,从而开发人员可以将时间投入到网站设计等重要环节. 今天我们要介绍的就是15个最佳的PHP库,它们将帮助网站开发人员轻松提高网站的功能,优化PHP的开

每个JavaScript程序员都需要知道的5个数组方法

Array.forEach() .forEach() 方法能够方便的让你 遍历数组里的每个元素,你可以在回调函数里对每个元素进行操作..forEach()方法没有返回值,你不需要在回调函数里写return,这是无意义的. var animals = ['dog', 'cat', 'mouse']; animals.forEach(function(item){ console.log(item); }); Array.map() .map() 方法能够遍历整个数组,然后 返回一个新数组,这个新数

程序员最应该知道的20件事

摘要:有人推崇产品,有人推崇运营,也有人推崇战略-到底该推崇什么?李智勇系统地分析了这三者之间的思路,并引用黑格尔的一句话,给出了自己的看法:在尺度中已经蕴含本质,这在产品.运营.战略的侧重上体现的非常好. 视野不拉升或者认知不深入时,就容易在盲人摸象层面上反复,看到微信火了,那就产品最重要,看到阿里火了,那就平台最重要.实际上一个比较显然的事实是,没有锥子一样的产品,那你就火不起来:不能从产品升级为平台,那就很可能活不下去.当然,有些人会说平台也是一种产品,但就和人与猴子都是灵长目,实际上仍是

每个程序员都必读的12篇文章

英文原文:10 Articles Every Programmer Must Read 作为一名 Java 程序员和软件开发人员,那些每个程序员都应该知道的 XXX 的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到.在我学习的过程中我读到过许多非常有用的文章,我把它们添加到了书签里,方便以后阅读或者引用.我个人认为所有开发人员都能从这些文章中受益,因此我也写了篇"每个程序员都应该了解的"文章,准备分享给你们.这是我的个人收藏.在这篇文章中

每个程序员都必读的10篇文章

作为一名Java程序员和软件开发人员,那些每个程序员都应该知道的XXX的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到.在我学习的过程中我读到过许多非常有用的文章,我把它们添加到了书签里,方便以后阅读或者引用.我个人认为所有开发人员都能从这些文章中受益,因此我也写了篇“每个程序员都应该了解的”文章,准备分享给你们.这是我的个人收藏.在这篇文章中,你会看到每个程序员都应该了解的一些经典文章,涵盖了内存,unicode,浮点数,网络,面向对象设计,时间