0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

程序员除了要会写代码,还要懂得职场的15大定律和7大原则

DPVg_AI_era 来源:lq 2019-05-19 09:59 次阅读

作一个优秀的程序员,除了要会写代码,还要懂得职场的15大定律和7大原则。昨日,GitHub趋势榜第一的项目便总结了这些定律和原则。总有一款适合你。

总有一款适合你。

作为程序员,你除了会敲代码,还得知晓属于你的定律。今日GitHub便有一个项目总结了与开发人员相关的15大定律和7大原则。

项目地址:

https://github.com/dwmkerr/hacker-laws

该项目目录如下:

简介

定律

阿姆达尔定律(Amdahl's Law)

布鲁克定律(Brooks's Law)

康威定律(Conway's Law)

侯世达定律(Hofstadter's Law)

阿玛拉定律的“炒作周期”(The Hype Cycle & Amara's Law)

海勒姆定律(Hyrum's Law)

摩尔定律(Moore's Law)

帕金森定律(Parkinson's Law)

普特定律(Putt's Law)

泰斯勒定律(复杂性守恒定律,Tesler's Law)

抽象化漏洞定律(The Law of Leaky Abstractions)

琐碎定律(The Law of Triviality)

Unix哲学(The Unix Philosophy)

Spotify模型(The Spotify Model)

Wadler定律(Wadler's Law)

原则

鲁棒性原则(The Robustness Principle,Postel's Law)

SOLID

单一职责原则(The Single Responsibility Principle)

开放封闭原则(The Open/Closed Principle)

李氏替换原则(The Liskov Substitution Principle)

接口分离原则(The Interface Segregation Principle)

依赖倒置原则(The Dependency Inversion Principle)

TODO

那么接下来,我们就对这些定律和原则进行一一解读。

开发人员需知的15大定律

阿姆达尔定律(Amdahl's Law)

维基百科中对此定律的解读是:

阿姆达尔定律,一个计算机科学界的经验法则,因吉恩·阿姆达尔而得名。它代表了处理器并行运算之后效率提升的能力。并行计算中的加速比是用并行前的执行速度和并行后的执行速度之比来表示的,它表示了在并行化之后的效率提升情况。阿姆达尔定律是固定负载(计算总量不变时)时的量化标准。

此处举个例子来说明:如果一个程序由两部分组成,一部分A(必须由一个处理器执行)和一部分B(可以并行执行),那么我们可以看到,向执行程序的系统添加多个处理器只能带来有限的好处。它可以极大地提高B部分的速度,但是A部分的速度将保持不变。

下图显示了速度可能改进的一些示例:

可以看出,即使是一个50%可并行的程序,在超过10个处理单元的情况下也几乎没有什么好处,而一个95%可并行的程序,在超过1000个处理单元的情况下,仍然可以显著提高速度。

随着摩尔定律(Moore’s Law)的放缓,以及单个处理器速度的加速放缓,并行化是提高性能的关键。图形编程是一个很好的例子(使用现代基于着色器的计算,单个像素或片段可以并行呈现),这就是为什么现代显卡通常有成千上万的处理核心(gpu或着色器单元)。

布鲁克定律(Brooks's Law)

维基百科中对此定律的解读是:

将人力资源添加到一个后期软件开发项目中会使它更晚。

这条定律表明,在许多情况下,试图通过增加更多的人来加速已经晚了的项目,将使交付日期更晚。该定律楚地表明这是一种过度简化,但一般的推理是,鉴于新资源的增加时间和通信开销,在短期内的速度会降低。而且,许多任务可能不是可分的,即容易在更多资源之间分配,这意味着潜在的速度增长也更低。

交付工作中常见的一句话,“九个女人不能在一个月内生孩子”是与布鲁克斯定律有关,特别是某些工作不可分割或平行的事实。

康威定律(Conway's Law)

维基百科中对此定律的解读是:

这条法律表明,一个系统的技术边界将反映组织的结构。

设计系统的组织受限于设计这些组织的通信结构的副本。

这条定律表明,一个系统的技术边界将反映组织的结构。康威定律表明,如果一个组织是由许多小的、不相连的单元组成的,那么它所生产的软件将是如此。如果一个组织更多地围绕功能或服务的“垂直领域”构建,软件系统也会反映出这一点。

侯世达定律(Hofstadter's Law)

维基百科中对此定律的解读是:

即使考虑了侯世达定律,它也总是比你想象的要花更长的时间。

当你在估计某件事需要多长时间的时候,你可能听说过这个定律。在软件开发中,我们往往不擅长准确地估计某个东西需要多长时间才能交付,这似乎是一个老生常谈的事实。

阿玛拉定律的“炒作周期”(The Hype Cycle & Amara's Law)

维基百科中对此定律的解读是:

我们倾向于过高估计技术在短期内的影响,并低估长期效应。

Hype Cycle(炒作周期)是技术随着时间的推移而产生的兴奋和发展的直观表现,最初由Gartner开发。最好用视觉效果来表现:

简而言之,这一周期表明,人们通常对新技术及其潜在影响感到兴奋。团队经常快速地投入到这些技术中,有时会对结果感到失望。这可能是因为技术还不够成熟,或者现实世界的应用还没有完全实现。经过一段时间,技术的能力和使用它的实际机会都会增加,团队最终会变得富有成效。罗伊•阿马拉(Roy Amara)的名言最简洁地概括了这一点——“我们往往高估了一项技术的短期效果,而低估了长期效果。”

海勒姆定律(Hyrum's Law)

维基百科中对此定律的解读是:

有足够数量的API用户,您在公约中承诺的并不重要:系统的所有可观察行为都将取决于某人。

Hyrum定律指出,当一个API有足够多的消费者时,这个API的所有行为(甚至那些没有被定义为公约的一部分的行为)最终都会被某人所依赖。一个简单的例子可能是非功能元素,比如API的响应时间。一个更微妙的例子可能是依赖于对错误消息应用正则表达式来确定API错误类型的消费者。

即使API的公约没有声明关于消息内容的任何内容,表明用户应该使用相关的错误代码,一些用户也可能使用消息,更改消息实际上会破坏这些用户的API。

摩尔定律(Moore's Law)

维基百科中对此定律的解读是:

集成电路中的晶体管数量大约每两年翻一番。

摩尔的预测经常被用来说明半导体芯片技术进步的绝对速度。事实证明,从上世纪70年代到本世纪头十年末,摩尔的预测是非常准确的。近年来,这一趋势发生了轻微的变化,部分原因是对组件小型化程度的物理限制。然而,并行化的进步,以及半导体技术和量子计算领域潜在的革命性变化,可能意味着摩尔定律在未来几十年仍将适用。

帕金森定律(Parkinson's Law)

维基百科中对此定律的解读是:

工作量不断增大,以填补满足工作所需的截止时间。

在其最初的背景下,这个定律是基于对官僚机构的研究。它可能被"悲观"地应用于软件开发计划,理论是团队在截止日期之前效率低下,然后在截止日期前赶紧完成工作,从而使得实际截止日期变得有些随意。

如果将这一定律与侯世达定律结合起来,就会得出一个更加悲观的观点——工作量将会增大,以填补完成它所需要的时间,而且仍然比预期的要长。

普特定律(Putt's Law)

维基百科中对此定律的解读是:

技术由两类人主导,一类人懂他们不并需要管理的事务,另一类人管理者他们不懂的事务。

普特定律往往遵循普特推理(Putt's Corollary):

随着时间的推移,每一个技术层次都会发展出一种能力倒置。

这些陈述表明,由于各种选择标准和群体组织方式的趋势,技术组织的工作层面将有一些技术人员,以及一些不了解复杂性和挑战的管理角色的人员。

然而需要强调的是,此类定律是广泛的概括,可能适用于某些类型的组织,而不适用于其他类型的组织。

泰斯勒定律(复杂性守恒定律,Tesler's Law)

维基百科中对此定律的解读是:

这条定律表明,一个系统中有一定程度的复杂性是无法降低的。

系统中的某些复杂性是“无意的”。 这是由于结构不良、错误或者只是解决问题的糟糕建模造成的。 可以减少(或消除)这种“无意”的复杂性。然而,一些复杂性是“内在的”,这是所解决问题内在复杂性的结果。这种复杂性可以转移,但不能消除。

这个定律中一个有趣的点,即使简化了整个系统,内在的复杂性也没有减少,而是转移到了用户身上,用户必须以更复杂的方式行事。

抽象化漏洞定律(The Law of Leaky Abstractions)

维基百科中对此定律的解读是:

在某种程度上,所有非平凡(non-trivial)抽象都是有漏洞的。

该定律指出,抽象化(通常用于计算以简化复杂系统的工作)在某些情况下会“泄漏”底层系统的元素,这使得抽象化的行为方式出人意料。

加载文件并读取其内容就是一个例子。文件系统API是较低层内核系统的抽象,内核系统本身是与更改磁盘片(或SSD的闪存)上的数据相关的物理进程的抽象。在大多数情况下,将文件处理为二进制数据流的抽象是可行的。然而,对于磁驱动器,顺序读取数据的速度将明显快于随机访问(由于页面错误的开销增加),但是对于SSD驱动器,不会出现这种开销。处理这种情况需要了解底层细节(例如,数据库索引文件的结构是为了减少随机访问的开销),开发人员可能需要了解抽象的“泄漏”实现细节。

当引入更多抽象时,上面的示例可能会变得更加复杂。Linux操作系统允许通过网络访问文件,但在本地表示为“普通”文件。如果存在网络故障,这个抽象将会“泄漏”。如果开发人员将这些文件视为“正常”文件,而没有考虑到它们可能会受到网络延迟和故障的影响,那么解决方案就会有bug。

琐碎定律(The Law of Triviality)

维基百科中对此定律的解读是:

这一定律表明,团体将把更多的时间和精力放在琐碎或表面现象上,而不是严肃和实质性的问题。

Unix哲学(The Unix Philosophy)

维基百科中对此定律的解读是:

Unix哲学是软件组件应该很小,并且专注于做好一件特定的事情。通过将小的、简单的、定义良好的单元组合在一起,而不是使用大型的、复杂的、多用途的程序,可以更容易地构建系统。

像“微服务体系结构”这样的现代实践可以被看作是这条定律的一个应用,此处,服务是小的、集中的,并且只做一件特定的事情,允许由简单的构建块组成复杂的行为。

Spotify模型(The Spotify Model)

维基百科中对此定律的解读是:

Spotify模型是团队和组织结构的一种方法,已被“Spotify”推广。在这个模型中,团队是围绕功能而不是技术来组织的。

Spotify模型还普及了部落、公会、分会等组织结构的其它组成部分。

Wadler定律(Wadler's Law)

维基百科中对此定律的解读是:

在任何语言设计中,讨论这个列表中某个特性所花费的总时间与它位置的幂成正比。

0.语义

1.语法

2.词汇语法

3.注释的词汇语法

类似于“琐碎定律”,Wadler定律指出,在设计一种语言时,与这些特征的重要性相比,花在语言结构上的时间是不成比例的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 摩尔定律
    +关注

    关注

    4

    文章

    622

    浏览量

    78520
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66746
  • 程序员
    +关注

    关注

    4

    文章

    931

    浏览量

    29571

原文标题:【GitHub金牌】程序员必读职场15大定律和7大原则

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式存储系统的七大原则之二:区分环境数据与业务数据

    在之前讨论的分布式存储系统七大原则的第一原则中,我们了解了容灾切换和数据备份的差异。现在,我们继续探索第二原则:区分环境数据与业务数据。这一原则强调了两种类型数据在变化频率、价值以及数
    的头像 发表于 03-11 09:42 128次阅读

    薪资高、青春饭,是不是程序员=青楼?

    花期太短。技术迭代快,年龄大容易失业。 就这几年的互联网环境而言,不管是前端、Java、Android开发等等行业。已经感受到程序员不是太卷就是工作难找,薪资过低。以前高工现在拿着中低程序员薪资
    发表于 03-06 21:32

    感觉我国的程序员前景一片灰暗,是这样吗?

    公司倒闭,或者裁员维持运转。 那么在这种经济大萧条的市场下,程序员如何找到相对比较有前景的的发展方向呢?只有出现新的技术或者能够带动市场需求的情况下,开发者的岗位才会增多薪资水平才会提高。 在目前
    发表于 02-20 20:52

    软件测试的7大原则,你漏了几条?

    软件测试报告最需要注意的就是测试思考,而非测试执行。而对软件测试菜鸟来说,初入行,首先要知道软件测试的7原则,了解这些可以让你事倍功半。 1测试的不可穷尽原则 是的!任何产品不可能被穷尽测试。我们
    发表于 01-18 09:39

    1月18号“纯鸿蒙”千帆启航,程序员预备!

    。 如何正确看待鸿蒙? 我作为程序员来说,首先是看鸿蒙的发展、市场开发岗位、薪资以及前景。 这几年对鸿蒙的发展情况来分析,从2019年开始鸿蒙的出来今天,华为鸿蒙取得了很大的成就。从“不兼容
    发表于 01-16 22:13

    热电偶四大定律及其应用

    热电偶四大定律及其应用  热电偶是一种用于测量温度的传感器,它基于"热电效应"原理工作。热电偶材料由两种不同的金属合金组成,当两个不同金属合金的接合处形成温度差异时,会产生一种电动势,从而测量温度
    的头像 发表于 12-19 14:03 1444次阅读

    程序员的10条基本编程原则

    编写代码容易,但编写优秀代码却是一项挑战。采纳基本编程原则是确保编写高质量代码的稳妥途径,无论软件项目规模大小,都能保证代码高效、易读、可靠
    的头像 发表于 12-05 11:28 377次阅读
    <b class='flag-5'>程序员</b>的10条基本编程<b class='flag-5'>原则</b>

    电路布线的七大原则

    电路布线的七大原则  电路布线是电子设计中非常重要的一环,它直接影响着电路的性能和稳定性。因此,在进行电路布线的时候,需要遵循七大原则,这些原则包括电磁兼容性、信号传输、电源噪声、热管理、机械可靠性
    的头像 发表于 10-27 10:26 657次阅读

    移植ARM DHCP服务器版本1程序员指南

    这本书由ARM DHCP服务器服务器软件提供, 假定ARM DHCP服务器移植源可以作为参考, 也假设您可以访问程序员的 C 和 ARM 组装语言指南。 本程序员指南是为有经验的内嵌系统程序员编写
    发表于 08-18 06:46

    霓虹灯程序员指南

    如果您对ARM技术完全陌生,请阅读Cortex-A系列程序员指南,了解有关ARM架构配置文件和一般编程指南的信息。 ·霓虹灯技术是ARM高级单指令多数据(SIMD)扩展的实现。 ·霓虹灯单元是执行
    发表于 08-17 06:32

    ARMv8-A霓虹灯程序员指南

    程序员,如固件、设备驱动程序或android内核开发人员•希望为基于Arm的目标设备优化库或应用程序程序员•非常热衷于Raspberry Pi爱好者本指南涵盖了如何开始使用Neon,
    发表于 08-08 07:25

    ARM系统跟踪Macrocell程序员模型架构规范1.1版

    ARM 系统跟踪大型电池程序员示范建筑规格V1.1 建筑规格
    发表于 08-02 10:11

    61.[程序员小飞]如何在3分钟内安装好数据库MySql和Navicat,简单又易懂

    程序员
    充八万
    发布于 :2023年07月20日 09:16:19

    5款程序员最佳的代码比较工具

     正文    俗话说:三句不离本行,对于程序员这个可爱的群体来说也是一样,即使面对无休无止的编程工作,程序员们依旧任劳任怨的埋头苦干,梦想着用自己码下的代码改变世界。工欲善其事,必先利其器,每一位
    的头像 发表于 05-23 10:35 4643次阅读
    5款<b class='flag-5'>程序员</b>最佳的<b class='flag-5'>代码</b>比较工具