几条软件设计哲学

TPU架构深度解析:从ASIC设计哲学到芯片逆向工程 专用集成电路(ASIC)是为特定任务量身定制的芯片,通过牺牲通用性换取在目标领域极致的性能与能效。其核心设计哲学在于软硬件协同,将算法中最关键、最规整的计算模式(如神经网络中的大规模矩阵乘法)固化为高效的硬件原语。这种设计带来了突破性的技术价值:它从根本上缓解了“内存墙”问题,通过脉动阵列等创新架构最大化数据复用率,并将功耗几乎全部集中于有效计算。在人工智能推理、数据中心加速等对算力和能效有严苛要求的场景中,ASIC已成为不可或缺的基石。本文以谷歌TPU为具体案例,深入拆解其从需求定义、架构探索、前端验证到 阅读详情

广告靠左。文字在右

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

这里有一些UNIX下的编程哲学,对自己相当的有冲击力,把我觉得有用并且有道理的,收藏之

“编程的核心是数据结构,而不是算法”,即使最简单的程序逻辑人类来验证也很困难,但就算复杂的数据,对人类来说也相对容易推导和建模。五十个节点的指针树要比五十行程序的流程图更清楚。

“编程的本质是控制复杂度”,而流程图、过程化、结构化、面向对象以及其它方法论恰好“成功”将复杂度提升到人脑不能处理的地步。所以,降低整体复杂度的方法是用清晰的接口把若干简单模块组合成一个复杂软件。

“简洁最美”,最错综复杂的美妙设计,常常使我们的设计能力超出排错能力,结果是代价高昂的废品。

“接口和引擎分离”,把复杂的GUI界面与后台处理分做两端,中间用简单协议架桥。

“可见才可掌控”,软件系统的透明性就是说,你能一眼看出它在干什么,要能监视到内部状态。

“撑不下去,马上退出”,出现异常,补救措施明明又没成功,还挺在那里,很久才发现是最坏的一种情况。要么“响亮的倒塌,要么为工作链下一环程序输出一个严谨干净的正确数据”。

“过早的优化是万恶之源”,先要求运行,再求正确,最后再求快。还不知道瓶颈就匆忙优化,是唯一一个比乱加功能更损害设计的错误。“最强大的优化工具是DELETE键”。

“善用工具”,教会电脑生成一些简单的代码;一旦有人解决了某个问题,就直接拿过来用,尽可能一切都自动化。

“宁花机器一分,不花程序员一秒”。有的程序员写程序是“为机器写”,过份追求效率。想方设法让机器“少做些事”,因此耽误大量时间精力。与此相对地,我 们可以使用一些简单直接的,即使是相对费时的算法,浪费了一些“机器的时间”,但节省了程序员的精力。又比如,有的语言,将程序员从内存释放中解脱出来, 可以更高效的开发,这也是一种珍惜程序员精力,让机器多做事的例子。
BTW:我其实一直以来都是做C++的,从前总觉得这才是最“高效”的语言,一向对JAVA和脚本语言不感冒,但渐渐才明白,一把钥匙开一扇门,有时候,甚至是大多数时候,选择后者才是“高效”的做法。机器只不过是通了电一堆晶体管,让它费点力没什么。

综上所述,4个字母:KISS--Keep It Simple, Stupid!


最后,还是把UNIX哲学的17个原则完整列一下:
1、 模块性原则:写简单的,通过干净的接口可被连接的部件。
2、 清楚原则:清楚要比小聪明好。
3、 合并原则:设计能被其它程序连接的程序。
4、 分离原则:从机制分离从策略,从实现分离出接口。
5、 简单原则:设计要简单;只有当你需要的时候,增加复杂性。
6、 节俭原则:只有当被证实是清晰,其它什么也不做的时候,才写大的程序。
7、 透明原则:为使检查和调试明显更容易而设计。
8、 健壮性原则:健壮性是透明和简单的追随者。
9、 表现原则:把知识整理成资料,于是程序逻辑能变得易理解和精力充沛的。
10、最小意外原则:在接口设计中,总是做最小意外事情。
11、沉默原则:当一个程序令人吃惊什么也不说的时候,他应该就是什么也不说。
12、修补补救:当你必须失败的时候,尽可能快的吵闹地失败。
13、经济原则:程序员的时间是宝贵的;优先机器时间节约它。
14、产生原则:避免手工堆砌;当你可能的时候,编写可以写程序的程序。
15、优化原则:在雕琢之前先有原型;在你优化它之前,先让他可以运行。
16、差异原则:怀疑所有声称的“唯一真理“。
17、可扩展原则:为将来做设计,因为它可能比你认为来的要快。

A.Philosophy.of.Software.Design.2018.4 (1).pdf This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then discusses philosophical issues about how to approach the software design process, and it presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems. You can apply the ideas in this book to minimize the complexity of large software systems, so that you can write software more quickly 立即下载

相关推荐

A-Philosophy-Of-Software-Design-:软件设计哲学电子译本

A-Philosophy-Of-Software-Design 架构设计哲学电子译本 简单的几句话: 经历了疫情,断断续续的持续了大约1年半的时间,阅读+翻译了本书,本书完美诠释了软件设计的本质--如何解决复杂性?围绕这个核心不断的抽丝剥茧,深入浅出。 通过阅读本书你将充分认识和理解什么是软件的设计,怎么做设计? 因为个人水平有限,专业述语较多,语言篇幅较大,可能翻译的不够准确,大家可以多多提供建议 To:(mail: );感谢互联网的一些参考资料和英语大辞典~ 本翻译读本不以任何商业为目的,只作为学习之用。 目录 前言 1 介绍 1.1 怎样使用本书 2 复杂性的本质 2.1 复杂性的定义 2.2 复杂性的症状 2.3 复杂性的原因 2.4 复杂性是递增的 2.5 结论 3 工作中的代码是不充分的(瀑布/敏捷) 3.1 战术编程 3.2 战略编程 3.3 投入多少? 3.4 创业与投资

太优雅了,6个设计原则带你如何优雅的写代码

优雅的代码,犹如亭亭玉立的美女,让人赏心悦目。而糟糕的代码,却犹如屎山,让人避而远之。如何写出优雅的代码,应该都要理解并熟悉应用这6个设计原则:开闭原则、单一职责原则、接口隔离原则 、迪米特法则、里氏替换原则、依赖倒置原则。本文呢,将通过代码例子,让大家轻松理解这6个代码设计原则1. 开闭原则开闭原则,即对扩展开放,对修改关闭。对于扩展和修改,我们怎么去理解它呢?扩展开放表示,未来业务需求是变化万千,代码应该保持灵活的应变能力。修改关闭表示不允许在原来类修改,保持稳定性。

Java技术攻略的博客 682

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

五:设计模式哲学:六大原则

设计模式是软件开发中的经典解决方案,指导我们如何设计更优雅、灵活和可维护的代码。为了理解设计模式的核心思想,让我们从这六大原则出发,看看它们如何应用于日常编程中。在这篇文章中,我将为你揭示这些原则的精髓,并通过幽默、有趣的例子和Java代码来展示它们的应用。

IT18810289203的博客 285

RK3588开发板量产前必做:24小时DDR压力测试到底在测什么?(附ArmSoM-W3测试脚本解析)

本文深入解析RK3588开发板量产前的24小时DDR压力测试,揭示其核心价值与技术原理。通过memtester、stressapptest和变频测试的组合使用,全面验证DDR内存稳定性。特别介绍ArmSoM-W3测试脚本的创新设计,包括并行测试架构和异常熔断机制,为开发者提供可靠的量产测试方案。

weixin_30325487的博客 454

联邦学习模型投毒研究进展

在联邦学习中,多个设备(如移动设备、IoT设备等)本地训练模型,然后将更新的模型参数上传到服务器进行聚合。

2401_82375734的博客 1267

IT软件设计-PDF

下载地址1:http://pan.baidu.com/s/1i4fc05n 下载地址2:关注wx公众号feixueteam

yangxiong1924的博客 795

Windows10下MATLAB2017a安装与破解实战:手把手教你搞定双镜像加载

本文详细介绍了在Windows 10系统下安装和破解MATLAB 2017a的完整步骤,包括双镜像加载、许可证配置及常见问题解决方案。通过手把手教程,帮助用户顺利完成安装并优化性能,特别适合工程计算领域的初学者和专业人士。

weixin_29053383的博客 419

编程哲学

前言看过很多学生不知为何学编程,也不知道自己是否真的有兴趣。只有麻木的被时代潮流推着走。思想1.生活从来不只是写代码,还有看代码! 看代码从来不止于细节,要从大局看。如看一个房间,你不可能只专注于某个凳子的细节,这些细节你不可能复用,你不知道为什么这个凳子要弯曲。只有居高临下,才能审视代码之美 2.无欲无为 很多人功利性太重,都怀着目的去做某事,当这个目的没有达到时则陷入痛苦。人世间大多数的

u011747152的博客 662

材料带隙预测(图神经网络)(⭐⭐)—— 用晶体图网络预测钙钛矿材料的能带隙,加速光伏材料筛选。技术栈:CGCNN、MEGNet、Materials Project数据集

钙钛矿太阳能电池以其高效率、低成本的优势迅速崛起,但传统“试错法”材料筛选效率极低,严重制约了光伏技术的迭代速度。近年来,基于图神经网络的材料带隙预测方法,特别是晶体图神经网络(CGCNN)和材料图网络(MEGNet),为这一问题提供了革命性的解决方案。本文系统梳理了材料带隙预测从传统计算到深度学习的演进历程,深入剖析了CGCNN与MEGNet的架构设计、数学原理及创新机制,详细阐述了Materials Project数据集的构建、特征工程与处理策略。

2201_76125393的博客 48

uniapp+coze制作app智能体

使用 UniApp 配合 Coze 平台来开发一个具备 AI 智能体的 App,是一个高效且实用的选择。其核心思路主要有两种:一种是通过,另一种则是通过实现更自主的集成。下面的流程图可以帮你快速了解这两种方案的全貌。下面,我们来详细看看这两种方案分别如何操作。

suny8的专栏 573

墨菲定律、二八法则等13条是左右人生的金科玉律

墨菲定律、二八法则、马太效应、手表定理、“不值得”定律、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原理、钱的问题、奥卡姆剃刀等13条是左右人生的金科玉律   一、墨菲定律     1949年,一位名叫墨菲的空军上尉工程师,认为他的某位同事是个倒霉蛋,不经意间开了句玩笑:“如果一件事情有可能被弄糟,让他去做就一定会弄糟。” 这句话

记录,总结,成长 2674

机器学习(十九):梯度提升回归(GBR)

机器学习中的梯度提升回归算法原理与案例实战。

全栈川川 5157

产品设计&软件设计的哲学

张小龙的产品设计哲学–软件设计可以借鉴 产品设计语录:http://www.chinaz.com/manage/2011/1209/225461.shtml

findaway123的专栏 1047

TensorRT的安装:一步一步教会你如何安装TensorRT

TensorRT(Tensor Runtime)是由NVIDIA开发的一个用于深度学习推理(inference)优化的库,它可以在NVIDIA的GPU上加速神经网络模型的推理过程,从而提高模型的性能和效率。安装完成后,需要将CUDA的安装路径添加到系统环境变量中,以便系统能够找到CUDA的库文件。根据你安装的CUDA版本,将CUDNN的库文件复制到CUDA的安装目录中。要使用TensorRT,首先需要安装NVIDIA的CUDA和cuDNN库,并根据NVIDIA官方文档安装TensorRT。

Science prince的博客 2373

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

软件设计的思想与哲学

   以下是从比较经典的书籍中摘录了的几条跟软件设计相关的原则和思想,这些思想不仅可以帮助你在设计软件、编写代码时有用,而且正如Mike Gancarz的《Linux/Unix设计思想》的译者序的作者漆犇所说“如果用“武侠”来作一个类比,这本书就好像是一部教你修炼内功的秘笈,无论新手老手,修炼基本内功都是一件必须持之以恒甚至可以毕生研习的事情,而同时我们也要知道,有时候优秀程序员和普通程序员水平...

weixin_33937913的博客 310

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Unix设计哲学概述

Unix哲学的几条准则看似简单。事实上,它们简单到会容易使人们忽略其重要性。这就是它们颇具欺骗性的地方。其实,简单的外表下掩盖着一个事实:如果人们能够始终如一的贯彻它们,这些准则可是非常行之有效的。以下这份清单会让你对Unix哲学的准则有初步的认识。(1)小即是美。相对于同类庞然大物,小巧的事物有着其无可比拟的巨大优势。其中一点就是它们能够以独特有效的方式结合其他小事务,而且这种方式往往是最初的设...

qw_xingzhe的专栏 1024

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

几条软件架构设计箴言理解

今天和师弟聊天聊到他们项目开发,有些同事总是提前考虑性能优化,需求变更又是一大堆的重写,让我想起了Donald Knuth 提到的:对软件的过早地优化是万恶的根源。这里就简单的说几条重要的软件名人哲学。 1:软件中唯一不变的就是变化。 在软件开发过程中需求是不停的变化,随着客户对系统的认识,和现有开发功能和软件的认识,也许以开始他提出的需求就是背离的。...

weixin_33973609的博客 63

《Linux/Unix设计思想》随笔 ——Linux/Unix哲学概述...

Standing on Shoulders of Giants “布道者”指的是那些坚定地信仰某一宗教,并且不遗余力地向人们传播此宗教的修道者。 Unix哲学概述 Unix哲学的几条准则看似简单。事实上,它们简单到会容易使人们忽略其重要性。这就是它们颇具欺骗性的地方。其实,简单的外表下掩盖着一个事实:如果人们能够始终如一的贯彻它们,这些准则可是非常行之有效的。 以下这份清单会让你对Unix...

weixin_30755709的博客 269

软件设计概论

任何技能,都是由很多细节组成。我们学习一种技能,最好能先对整个技能及框架有一个大概的把握,然后再学习他的细节。软件设计同样如此。 我们将整个软件设计的体系(框架)看成一棵树,首先我们需要对整个体系的树干从上到下有一个较为清晰地轮廓,进而熟悉树枝、树叶等细节信息。 网络 应用(主要) 驱动 操作系统 CPU-内存-外存(硬盘,I/O设备(USB,鼠标,键盘等)) 我们知道,计算机是由硬...

混沌的博客 1183

【js设计模式】SOLID五大设计原则

一、用Promise来说明单一职责原则、开放封闭原则。 function loadImg(src){ var promise = new Promise(function(resolve,reject){ var img = document.createElement('img') img.onload = function(){ ...

yujie的博客 647

《Linux/Unix设计思想》随笔

Unix 哲学的几条准则看似简单。事实上,它们简单到会容易使人们忽略其 重要性。这就是它们颇具欺骗性的地方。其实,简单的外表下掩盖着一个事实: 如果人们能够始终如一地贯彻它们,这些准则可是非常行之有效的。 以下这份清单会让你对 Unix 哲学的准则有初步的认识。本书其余部分则会 帮助你理解它们的重要性。 (1) 小即是美。相对于同类庞然大物,小巧的事物有着无可比拟的巨大优势。 其中一点就是它...

花神的博客 1019

为什么Go项目的代码看起来都很整齐?详解命名规范背后的设计哲学

本文深入解析了Go语言项目代码保持高度一致性与整洁性的核心原因,重点阐述了其命名规范背后“少即是多”的设计哲学。通过分析简洁性、可读性、一致性三大原则,揭示了Go如何通过单字母接收器、包命名空间、工具链强制格式化(gofmt)等独特设计,降低认知负荷,提升团队协作与工程效率。

n7o8p的博客 183
上一篇: 技术出身,如何做好项目经理(系列专题)
下一篇: 获取JAVA路径,包括CLASSPATH外的路径
GOALSTAR
博客等级 码龄24年 108粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值