GitHub 热榜:标星 1.6w,黑客必看的黑魔法开发指南!

软件体系结构七大设计原则 软件体系结构七大设计原则,开闭原则 里氏代换原则 依赖倒转原则 迪米特法则 迪米特法则 立即下载
点击上方“Github爱好者社区”,选择星标
回复“资料”,获取小编整理的一份资料

来自新智元

【导读】当程序员谈论开发设计时,常常会聊到非常多的定律,而Github上的一个名为「hacker-laws」的仓库收录了一些最常见的定律、原则等,获得了16.3k的Star。

还记得所有AI教程必提的「奥卡姆剃刀原则」吗?即:如无必要,勿增实体。这条原则也被收藏,还有一些不太常见的费茨法则、盖尔定律、康威定律等,都被一一收入囊中。

 

写代码累了困了?这些法则让工作事半功倍

 

90-9-1法则(1%法则)

 

90-9-1 法则表明,在诸如维基这样的互联网社区中,90% 的用户只看内容并不参与互动,9% 的用户会参与讨论,而只有 1% 的用户会创造内容。

        

现实世界的例子:2014 年,对四个健康的数字社交网络进行的一项研究发现,排名前 1% 的人创造了 73% 的帖子,紧随其后的 9% 平均占 25%,其余的 90% 的人平均占 2%。

 

类似的,帕累托法则也指出:生活中大多数事情不是均匀分布的。这个原则也被称为二八法则,重要的少数法则和因素稀疏原则。

 

技术成熟度曲线法则

 

技术成熟度曲线是高德纳咨询公司对技术最初兴起和发展的视觉展现。一图胜千言:

               

 简而言之,这个曲线表明,新技术及其潜在影响通常会引发一轮浪潮。团队快速使用这些新技术,但有时会对结果感到失望,这可能是因为该技术还不够成熟,或者现实应用还没有完全实现。

 

经过一段时间后,技术的能力提高了,使用它的实际机会会增加,最终团队也可以提高工作效率。

罗伊·阿马拉简洁地总结了这一点:我们倾向于高估技术短期内的影响,并低估其长期效应。

 

破窗效应

 

在破窗理论中认为,一些明显的犯罪迹象(或缺乏环保意识)会导致进一步的、更严重的犯罪(或环境的进一步恶化)。

 

破窗理论已应用于软件开发中,它表明劣质代码可能会影响后续优化的效率,从而进一步造成代码劣化;随着时间的推移,这种效应将会导致代码质量大幅下降。

 

没那么常见的法则,但也暗藏工作秘诀

 

阿姆达尔定律

 

阿姆达尔定律是一个显示计算任务潜在加速能力的公式。这种能力可以通过增加系统资源来实现,通常用于并行计算中。

它可以预测增加处理器数量的实际好处,然而增加处理器数量会受到程序并行性的限制。

 

举例说明:如果程序由两部分组成,A部分必须由单个处理器执行,B部分可以并行运行。那么向执行程序的系统添加多个处理器只能获得有限的好处。

它可以极大地提升部分 B 的运行速度,但部分 A 的运行速度将保持不变。

 

下图展示了一些运行速度的提升潜能的例子:

               

可以看出,50% 并行化的程序在使用大于 10 个处理单元之后的速度提升收效甚微,而 95% 并行化的程序在使用超过一千个处理单元之后仍然可以显著提升速度。

 

随着摩尔定律逐渐失效,单个处理器的速度增加缓慢,并行化是提高性能的关键。

图形编程是一个极好的例子,现代着色器可以并行渲染单个像素或片段。这也是现代显卡通常具有数千个处理核心(GPU 单元)的原因。

 

德墨忒尔定律

 

得墨忒耳定律又称最少知识原则,是一条与面向对象语言有关的软件设计原则。

 

该定律表明,软件的一个单元应该只与其直接合作者交谈。

 

比如对象 A 引用了对象 B,对象 B 引用了对象 C,则 A 可以直接调用 B 的方法,但不应直接调用 C 的方法。所以如果 C 有一个 dothing() 的方法,A 不应该直接调用,而是用 B.getC().doThis()。

遵循这一定律可以限制代码更改的范围,使其以后更容易维护、更安全。

 

坎宁汉姆定律

 

在网络上想得到正确答案的最好方法不是提问题,而是发布一个错误的答案。

 

除了以上的这些法则,该仓库还给出了很多的原则。

 

职场相关原则

  

死海效应原则:在任何一个组织中,工程师的技能、才华和效能往往与他们在公司的时间呈反比。

能力强的人更有可能离开,能力差的人反而会留下。

 

呆伯特原则:公司会倾向于系统地将工作能力差的员工提升到管理层,以使他们脱离工作流程。

               

技术相关的原则:

 

单一功能原则:每个模块或者类只应该有一项功能。

 

开闭原则:实体应开放扩展并关闭修改。

 

里氏替换原则:可以在不破坏系统的情况下,用子类型替换类型。

 

接口隔离原则:不应强制任何客户端依赖于它不使用的方法。

 

依赖翻转原则:高级模块不应该依赖于低级实现。

 

还有一些具有哲学意味的原则:

 

鲁棒性原则:在自己所做的事情上要保守, 在接受别人的事情上要自由。

 

你不需要它法则:只有当你需要某些东西的时候,才去实现它们,而不是在你预见的时候。

 

KISS原则:保持简单和直白。

 

还有很多的法则和原则没有一一指出,需要的小伙伴请点击下面的链接打开查看。

参考链接:

https://github.com/nusr/hacker-laws-zh

好啦,今天的分享就到这儿啦,我们下次见啦~



GitHub原创推荐•  还在买爱奇艺,腾讯会员?GitHub这个神器标星12.2K,强势开源,支持多个视频网站片源下载 !!•  太骚了!GitHub上重磅开源爬虫工具箱,竟然可以爬小电影!•  尼玛,Github上最邪恶的开源项目了!未满18或者女孩子勿进哦~•  GitHub标星4K+,前字节跳动工程师开源的刷题笔记,霸屏GitHub热榜...关注「Github爱好者社区」加星标,每天带你逛Github好玩的项目
Python连接高斯数据库踩坑实录:从SASL报错到SSL安全连接的完整指南 本文详细记录了Python连接高斯数据库时遇到的SASL authentication报错及其解决方法。通过剖析SASL认证机制,对比了修改数据库配置、使用官方驱动等方案的利弊,并重点提供了通过自动化脚本生成SSL证书,实现安全、免密连接的完整指南,帮助开发者彻底解决连接难题。 阅读详情

相关推荐

手把手教你用TL431设计反激电源补偿器(附波特图调试技巧)

本文详细介绍了如何使用TL431设计反激电源补偿器,并提供了波特图调试技巧。通过实战经验分享,帮助工程师快速掌握补偿网络设计、分压电阻计算和稳定性判据,避免常见设计误区,提升电源稳定性与效率。

weixin_29201859的博客 378

设计模式之里氏替换原则

里氏替换原则(Liskov Substitution Principle,简称LSP):子类可以替换父类 承有一些优点: 1. 提高代码的重用性,子类拥有父类的方法和属性; 2. 提高代码的可扩展性,子类可形似于父类,但异于父类,保留自我的特性; 缺点:侵入性、不够灵活、高耦合 1. 继承是侵入性的,只要继承就必须拥有父类的所有方法和属性,在一定程度上约束了子类,降低了代码的灵活性; 2. 增加了耦合,当父类的常量、变量或者方法被修改了,需要考虑子类..

CarloPan的博客 551

记二开金蝶云星空动态表单艰辛历程

整个过程,开发接近一周,期间也有做其他事,遇到不会的第一时间也是找金蝶社区,搜索有无相关的解决问题经历。再就是问同事,最终还不能解决就提工单给供应商。响应一般都要大半天(我们公司是有vip,相对大半天能够响应是算好了),虽然有时候有响应,但是会转到其他研发老师,期间可能会是几天!如果是经常开发云星空的二开功能,熟练了速度回很快,但是对于接触不多的,或者刚入门的,会是个漫长的折磨过程。1、重新生产模块的dll.2、退出客户端3、重启iis4、等待五六分钟5、附加到进程6、登录客户端进去操作。

修炼中 3939

开发者必备!Github 上 1.6W 星的「黑魔法」,早知道就不会秃头了

转自 | 新智元来源 | Facebook编辑 | QJP当程序员谈论开发设计时,常常会聊到非常多的定律,而Github上的一个名为「hacker-laws」的仓库收录了一些最...

zandaoguang的博客 499

win11禁止更新,草履虫教程

本文介绍了彻底禁止Windows 11系统更新的组合方法,包括禁用核心服务、修改注册表、关闭计划任务和使用组策略(专业版适用)。作者特别提醒,禁止更新会影响系统安全性,建议实体机保持更新,仅虚拟机等特殊情况下使用这些方法。同时强调即使禁用更新,也应定期手动检查重要安全补丁。文章最后附上了作者的个人网站信息。

testwzc1的博客 561

SNAP实战:哨兵1 SLC数据预处理全流程详解(附避坑指南)

本文详细解析了使用SNAP软件处理哨兵1号SLC数据的完整预处理流程。从轨道精校正、辐射定标到多视与斑点滤波,再到地理编码,文章提供了清晰的操作步骤与核心逻辑,并重点分享了实践中的常见“坑”与解决方案,旨在帮助用户高效、准确地完成SAR数据预处理。

7up55的博客 1027

在GitHub上学黑客 --- 黑客成长技术清单

这个开源项目是黑客的多合一工具包,包含了各种黑客工具,比如逆向工程、老鼠工具、SQL注入工具等等。声明:该开源项目仅限学习使用,勿用与从事违法活动。开源地址:https://github.com/Z4nzu/hackingtool这个开源项目是教程序员如何优雅地挣零花钱,本开源项目是一本电子书,从副业的重要性、到程序员可能得副业路径,以及知识付费、课程录制等实战案例为基础,打磨的一本程序员副业指南。开源地址:https://github.com/easychen/lean-side-bussiness“Aw

LoveSummer 3万+

51单片机超声波测距数码管显示并报警(Proteus 仿真)

HC-SR04超声波 实物图 使用方法 1、给TRIG端口至少10us 的高电平信号 2、模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回 3、有信号返回,ECHO端口会输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间 计算的话这里就不考虑温度的影响直接用声速340m/s Proteus仿真 HC-SR04可以用Proteus中的SRF04代替 下面附上代码 ...

m0_46254883的博客 1万+

软件架构设计原则

一开闭原则 开闭原则(Open-ClosedPrinciple,OCP)是指一个软件实体(如类、模块和函数)应该对扩展开放,对修改关闭。所谓关闭,也正是对扩展和修改两个行为的一个原则。它强调的是用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性及可维护性。开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定、灵活的系统。例如版本更新,我们尽可能不修改源代码,但是可以增加新...

实践求真知 336

STM32开发 -- GPS模块开发详解

一、了解硬件 我使用的GPS模块型号为UBX-M8030 参看:UBX-M8030 系列 查看一下它的特性: 多用途 GNSS 芯片,提供三种产品等级 最多可并发接收 3 个 GNSS(GPS、伽利略、GLONASS、北斗) 行业领先的 -167 dBm 导航灵敏度 业界最低电流消耗 在城市峡谷中具有绝佳的定位精度 安全性和完整性保护 支持所有的卫星增强系统 车载级芯片的工作...

不积跬步,无以至千里 3万+

火焰烟雾识别系统【数据集+源码+UI界面】

数据集准备:收集并标注火焰与烟雾数据。YOLOv10训练:训练YOLOv10模型来识别火焰和烟雾。实时检测:通过摄像头视频流进行实时检测,并显示检测结果。UI界面设计:用Tkinter设计简易界面,显示检测结果。完成以上步骤后,可以实现一个完整的火焰烟雾识别系统,具备实时检测与友好的用户界面。

2201_76125393的博客 1135

七大软件架构设计原则详解

七大软件设计原则包括开闭原则、依赖倒置原则、 单一职责原则、接口隔离原则、迪米特法则、里氏替换原则、合成复用原则:在软件开发中,为了提高软件系统的可维护性与可复用性,增加软件系统的可扩展性与灵活性,程序员要尽量遵循这七条原则去开发程序。遵循设计原则的开发,可以很好地提高软件开发效率、节约软件开发与维护成本。这七种设计原则的侧重点不同。其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;

yeq2014的专栏 1784

嵌入式工程师成长之路(0)----认识元件

在电子设计与维修中,认识元件是成功的关键!面对琳琅满目的电阻、电容、电感与二极管,样子形式千奇百怪,你是否也曾陷入困难? 本文基于行业权威分类标准,结合十年工程师实战经验,深度解析4大类、30+子类电子元件的核心特性、应用场景与避坑指南,助你从“小白”秒变“电子高手”!

云轩阁 11万+

如何发现 GitHub 上那些有趣好玩的项目?

如果你是一名开发者,相信你对 GitHub 一定不会感到陌生,这个创建自 2008 的源码托管平台,现如今已成长为全球最大的开发者社区。来自世界各地的开发者每天都会在 GitHub 上面...

fengdu78的博客 750

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

GitHub周报:热榜项目实战笔记与端侧AI新趋势解析

开源社区是技术创新的重要来源,GitHub趋势榜则成为开发者追踪前沿项目的重要窗口。理解免费API的聚合价值、端侧AI的部署逻辑以及自动化工具的边界,是高效利用开源资源的关键。免费API能加速原型验证,但需关注鉴权、限流与稳定性;端侧AI部署通过量化与内存优化,使模型在本地设备运行成为可能,兼顾隐私与响应速度;短视频自动化工具则串联生成链路,提升内容生产效率。实际应用中,开发者需掌握下载、配置、运行GitHub项目的基本流程,并注意数据合规。本文以2026年W34趋势榜为线索,梳理典型项目与通用经验,帮助读

weixin_31286719的博客 185

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

腾讯发布最新开源 jdk!

点击上方“Github中文社区”,关注看遍Github好玩的项目大家好,我是hub哥!腾讯发布了最新开源 jdk。Kona 是由腾讯专业 JVM 技术团队维护开发的,基于 OpenJDK...

Github中文社区 4007

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Reading Notes】(7)Favorite Articles from 2024

我可以毫不犹豫地告诉你们,你们所做的每一个决定、每一项努力、每一次招聘、取得的每一个成就,以及你们所塑造的公司文化,都将在接下来的30天内决定公司的命运——是充满活力、持续成功,还是走向破产。这种需要,具体而言,就是客户在模型上的选择,毕竟“没有一个模型可以一统天下”,每个模型都有自己所擅长的领域。这次,OpenAI着重介绍了Sora的几项功能:Remix(重混)、Re-cut(重新剪辑)、Storyboard(故事板)、Loop(循环)、Blend(混合)以及Style presets(风格预设)。

bryant_meng 9855

1.6W Star 的「黑魔法」,非常实用!

1.6W Star 的「黑魔法」,非常实用! 转载:https://mp.weixin.qq.com/s/WAIvuaN1owiC0hFFn0ZWtg 转载理由:学点装逼术语

Object的博客 1387

软件架构设计的七大原则

软件架构设计的七大原则

Charge8的博客 2009

软件设计原则

了解设计模式的朋友们,想必都听说过“六大设计原则”吧。其实最经典的 23 种设计模式中或多或少地都在使用这些设计原则,也就是说,设计模式是站在设计原则的基础之上的。所以在学习设计模式之前,很有必要对这些设计原则先做一下了解。 GoF(四人帮),传说中的四位大神们,他们联手搞出了一套设计模式,堪称 OOD(面向对象设计)的经典之作!震惊了整个软件开发领域。但这四个老家伙非常怪异,总是喜欢...

456
上一篇: GitHub 热榜:标星 7.2w 的视频下载神器惨遭下架!
下一篇: GitHub标星1.4k+,IDEA 中相见恨晚的技巧,让你的编程效率飞起来!
公众号:【GitHub爱好者社区】
博客等级 码龄6年 353粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值