最少的代码,最好的框架

作者:森与淵
链接:https://zhuanlan.zhihu.com/p/23984086
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最少的代码,是易读的

神话传说中,人类集全族之力,欲修建一座巴别之塔,与天齐高,上帝畏惧,便乱了人们的语言,使人们无法互相沟通、通力合作,终是四散流去,唯留一座废墟在大地上。

可见语言对于合作的意义重大,而所谓工程,正是人与人之间协力完成目的的指称。

但作为软件工程,人们却往往忽略了合作的基础,语言,亦既是代码的可读性。

从常见的mv*系列,到新颖的flux架构,用意之一都是更好的组织代码,对代码进行分类,提高其可读性。它们各有各的思路和理念,但唯一颠扑不破、用之四方而皆准的道理就是:越少的代码,越好理解。

当一句很冗长很冗长的英文长句放在面前,你需要消化一会。

当一段很冗长很冗长的代码放在面前,你很可能就无法理解了!

最少的代码,是易维护的

维护一段代码,尤其是别人的代码时,大脑是需要对其最表层的抽象代码进行缓存的,而无需时刻谨记其底层的琐碎细节。这也就意味着,对于一个应用完善框架的程序,至少框架内的代码我们无需理会,从而能够掌握更多的产品机能。

但同时也意味着,即使是最优秀的程序员,所能维护的代码数量也是有限的。

因此更少的代码,更多的语义,更多的机能,才是正确的出路。

你说四个字“天狗食日”,就远远胜过“神异的猛犬飞跃过天际,将火红的太阳一口一口地吃掉……”等废话无数。

最少的代码,是稳健的

富有经验的程序员比新人写出来的代码要少很多bug,除却技能的不足之外,更多的是逻辑性的、没想到的、思虑不周的错误。

难道老程序员的逻辑能力就比新程序员要好吗?

其实是个熟练度的问题,因为其中种种陷阱,都有对应的“较正确的”、“不成文”的代码模式或是习惯,可以避免问题的发生。这些并非语言自身特性所赋予的技巧,更类似于最佳实践之类的经验之谈,是不成体系和琐碎的,自然也是难以面面俱到的。

更何况,要知道,凡是系统,必有bug。越是精密的系统,也越是会有漏洞存在,只是潜藏的和显露的区分罢了。

用那么多技巧去避免bug的产生,远远不如简单粗暴的只用少量代码实现功能来得好,就像是最简单的陈述句一样,主谓宾三个词,一眼看过去就明白意义,出错的可能性自然很少很少。

最少的代码,是灵活的

实现起来容易,对于需求的更改自然也就容易接受。

复杂度隐于不可见的背面

二人持斧,于林伐木,长者教导青年说:力发乎脚,提于腰身,终于手腕,落于树木,寻其纹路,不深不浅,端正不斜……洋洋洒洒千言,其技巧非三年不可得,长者伐二木,而青年一木未毕。

但若是手提电锯,技巧自然也是有的,但即使是一窍不通者,也可于疏忽间伐数木。长者不屑,愤愤然。

那么,作为斧头帮伐木者的我们,就该对“毫无技巧”的电锯工作者表示不屑吗?

其实不然。我们看见的只是最终的结果,而在此之前,为了制造好用的电锯,其背后的整个产业链,所需的技术含量不知超过用斧技巧多少。

业务的复杂度并没有消失,而是转移到事物不可见的暗面,我们用精心设计工具这一行为,取代了同样精心却大量重复地直接生产产品的行为。

——这亦是一种抽象。

概念自身只是一个节点,当我们提起这个节点的时候,带动地是背后一整张意义网络。类比于编程,具体琐碎的代码本身是一个混沌的整体,而提供给我们人类的API才是节点所在,亦是抽象的最终产物和应用的直接物。

API就是概念。

从某种角度说,设计语言就是设计API;设计框架亦如是。

零碎的小概念,交织成宽泛的、更高层次的概念;琐碎的、细节的代码,暴露为意义明确的API。

工欲善其事,必先利其器

所以我说,最好的框架,用起来一定是最少的代码。

至于你问怎样才能写最少的代码呢?我想,

DSL(领域特定语言)是目前不错的道路。

详情请期待《领域特定语言·DSL概述》吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,796评论 25 707
  • 先说项目开发过程中团队人员的分工协作。 一 人员安排 毕业至今的大部分项目都是独立完成,虽然也有和其他同事协作的时...
    SnowflakeCloud阅读 10,756评论 3 59
  • 创建数组及修改 类型检测 转换方法 Array栈操作 Array队列操作 Array的反转和排序 数组的连接与截取...
    togeek阅读 368评论 0 2
  • (一) 8月14日一早我开始阅读美国作家温斯顿.葛鲁姆的《阿甘正传》。我不知道如何形容这些文字,我找不到一个合适的...
    汪宠喵匠阅读 1,186评论 9 11