Github 上 1.6W 星的「黑魔法」,非常实用啊

2023-12-22 19:59

本文主要是介绍Github 上 1.6W 星的「黑魔法」,非常实用啊,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“Github中文社区”,关注

看遍Github,每天提升

转自 | 新智元

大家好,我是huber
当程序员谈论开发设计时,常常会聊到非常多的定律,而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

OK!到这就是这期分享

如果觉得文章有用,请点在看,收藏,分享。

历史分享

★ 阿里又一开源力作!FlutterGo App :140+ 组件的demo 演示与中文文档

★ 蚂蚁金服开源了一款研发框架!还是增强版的

★ 一款在 GitHub 上 Star 高达 72K 的项目遭官方下架!

★ 一位来自国内的开发者的项目 在GitHub超级火:任意爬取,超全开源爬虫工具箱

点个在看呗!

这篇关于Github 上 1.6W 星的「黑魔法」,非常实用啊的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525276

相关文章

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避