惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
P
Proofpoint News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
Jina AI
Jina AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
博客园_首页
F
Fortinet All Blogs
博客园 - Franky
Latest news
Latest news
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
D
Docker
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
Cisco Talos Blog
Cisco Talos Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
H
Help Net Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
Cloudbric
Cloudbric
V
Visual Studio Blog
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
关于抽象
2014-08-03 · via 夜行人

文章目录

最近捡起《CODE COMPLETE》,从头开始读。
虽然在校期间读过一些,再次捡起来的时候,依然是被各种惊艳到,酣畅淋漓。
近1000页的纯技术砖头能写得这般生动,也实属罕见。
难怪有读者在亚马逊评论道:这是程序员可以带到荒岛的唯一一本书。
简直是可以就着咖啡看月色的好书。

《CODE COMPLETE》第五章谈论软件构建中的设计时谈到抽象。

精妙之极。

作者说道:

抽象是一种能让你在关注某一概念的同时可以放心忽略其中一些细节的能力–在不同的层次处理不同的细节。任何时候当你在对一个聚合物品工作时,你就在用抽象了。当你把一个东西称为“房子”而不是由玻璃,木材和钉子构成的组合体时,你就在用抽象了。当你把一组房屋称为“城镇”时,你还是在用抽象。

我在阅读edX源码前,其实没有怎么认真阅读过大型项目,虽然也在github上翻阅过一些项目,不过基本凭借笔记和记忆可以就弄清大多细节。

初次面对edX的时候,就像你一贯打小兵打得顺手,前头来了个大boss,手足无措。

阅读的过程颇有捡了籽麻,丢了西瓜的感觉。

前不着村,后不着店的。

问题的症结在于,一直抓着细节不妨,基于这样一个错误观念–“它们是相互关联的”。

这正是20世纪软件工程面临的危机之一,软件工程的复杂度越来越高,而我们的智力却有局限。

如何降解复杂度?

抽象。

抽象让我们可以放心地忽略其中一些细节,这样我们就能将注意力每时每刻只关注某一方面。

可为何忽视细节却不会带来麻烦呢,这便是20世纪的软件工程致力于解决的为题。

为了降解复杂度,人们折腾出了许多的抽象工具,面向对象技术便是其中之一。

有些概念虽然常常与面向对象纠缠不清,诸如封装,诸如信息隐藏,我觉得它们实际上很独立,不局限于某种编程范式内。

他们更像一种启发式思维,而不是具体的方法论。

抽象这东西实际是一种思维工具。

它独立于语言,甚至独立于编程,它是一种思维方式,几乎对处理一切事物都能起到降解复杂度的作用,有一种掉入山洞,偶得秘籍的感觉。

今天上班的时候,试着用这种思路去理解edx,面对这个盘然大物,之前束手无策,在代码丛林里,其实颇有盲人摸象的感觉,一直不见森林。

在大胆抛开细节后,居然可以理出头绪了。

其实之前何曾不想抛开,可是抓不准什么是可以丢弃的信息。

而在了解了 设计人员在设计时,其实也用了这些思维工具,剩下的细节就是了解隐藏信息和封装之类具体的技巧了,如此一来可以很快理解设计人员的思路。

这样,我们可以穿梭于各个层面。分析系统架构时,站在高层(只看接口),而深入细节时,才进入代码。

站在高层分析时,使用图示,而深入代码时,记录出入口数据。

第一次感觉到你能用你的思维本身来对抗复杂度。它是实实在在的工具啊!简直削铁如泥一般,虽然看不见摸不着。

文章作者 种瓜

上次更新 2014-08-03