IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:软件设计

共 12 篇相关文章

IT 累计浏览 40

如何做决策 - 从 Go 的一个 issue 说起

本文由Go语言开源项目中一个重复提交提案的争议性issue切入,深入探讨了技术团队如何进行有效决策。文章引述了斯坦福教授John Ousterhout的“开放式决策”框架,其核心原则是:当试图推翻已定决策时,必须回答“你掌握了什么新的信息?”,若无则不予重新讨论。该框架将决策过程系统化为四个步骤:广泛收集意见、推动达成共识、清晰地宣布决定、以及基于新信息进行审慎的重新审议。文章强调,广泛收集意见需在“能改变结果”的阶段进行,并应尽早引入关键反对者。达成共识并非追求完全一致,而是通过透明投票获取多数认同,管理者应慎用否决权。决策的宣布必须明确且有据可查。文章还通过正反案例对比,分析了“害怕反馈”、“暗箱操作”和“草率收场”等常见误区,并讨论了该方法在鼓励建设性分歧、目标一致的中小型组织中尤为有效。最后,文章将其与“独裁者”式决策风格对比,指出后者依赖非凡直觉,难以复制。全文旨在为开发者和技术管理者提供一套可实践、可复制的工程决策流程,强调管理过程优于管理结果。

IT 累计浏览 2,413

那些害人的编码“神谕”

这篇讲的是编程世界里那些被奉为圭臬、却常常断章取义的“神谕”,如何反过来成为技术债和团队协作的障碍。 文章以两句广为流传的名言为靶子:一句是 Donald Knuth 的“过早优化是万恶之源”,另一句是 Steve McConnell 的“好代码本身就是最好的文档”。作者指出,大家往往只记住了前半句的教诲,却忽略了其完整的、带有条件的上下文。这导致这些名言在实践中被异化成了逃避责任的借口。 比如,在“过早优化”的庇护下,一些工程师对明显的资源浪费视而不见。作者列举了公司内部的真实案例:一个模块因自建内存池管理不当,导致服务器周期性内存泄漏宕机;一个仅加载几KB配置的代码,竟因使用了巨大的固定数组而占用超过1GB内存;甚至一个公共日志库,无论是否开启日志,都会无谓地执行系统调用。在这些基础性问题面前,谈论“避免过早优化”显然为时过早。 而对于“代码即文档”的断章取义,则助长了不写注释的风气。作者犀利地指出,多数人的代码清晰度远未达到能自我解释的程度。当接手那些传说中的“大神”留下的、成百上千行无注释的代码时,带来的不是敬仰,而是维护的噩梦。因此,作者在团队中旗帜鲜明地主张:注释是不可省略的,甚至是应该强制执行的。 这些被简化的“神谕”,反而让开发者忽视了最基础的编码规范和资源意识。文章提醒我们,在引用任何原则之前,都需理解其全貌,否则它们可能从指引明灯,变成阻碍进步的绊脚石。

IT 累计浏览 4,379

程序员如何保持优秀

这篇观点类文章从程序员的长期成长出发,提炼了20条保持优秀的核心准则。作者强调的并非追逐最新工具,而是扎实掌握少数关键技术并深刻理解其底层原理。 文章认为,优秀超越了单纯的代码优化,更在于对数据结构和算法设计的深刻洞察。它鼓励程序员跳出日常编码,去真正理解用户需求,并将分析与编程这两个不同性质的工作在时间上分开处理。其中一些具体建议极具实践性,比如坚持正确的命名规范以提升代码可读性,永远不为图省事而写重复代码,以及通过亲自构建框架和重构他人“神奇但混乱”的代码来学习。 作者的核心观点是,数据永远比理论更重要,而持续学习的最佳方式之一,就是将所知教授给他人。这些建议最终都指向一个目标:帮助程序员建立扎实、清晰且面向长期价值的技术习惯,从而在职业生涯中持续精进。

IT 累计浏览 4,913

用Unix的设计思想来应对多变的需求

这篇文章的核心观点挺有意思的:作者认为无论Unix设计、面向对象还是其他架构模式,本质上都在做一件事——解耦。 作者从Unix设计哲学出发,探讨如何让软件设计更好地应对频繁变更的需求。文章提到,需求变更本身难以完全避免,但好的设计可以极大减轻它带来的痛苦。关键在于让模块之间的依赖尽可能少。这不仅呼应了Unix“做一件事并做好它”、“组合小工具”的经典思想,也点明了许多现代架构模式的共同内核。 文中还串联了之前相关的讨论与推荐阅读,比如《The Art of Unix Programming》和《一些软件设计的原则》,让整个思考的脉络更加完整。作者强调,技术手段无法解决所有不合理的需求,但可以通过扎实的解耦设计,让系统更具弹性,让开发者更从容。对于常与需求变更打交道的开发和架构人员来说,这提供了一个回归本源的思考视角。

IT 累计浏览 3,281

JavaScript与设计模式

这篇讲的是设计模式在JavaScript中的实际运用与微妙差异。作者从JavaScript独特的动态性和函数式特性出发,对比了传统面向对象语言(如Java)中的经典实现,揭示了几个核心模式在JS中更为灵活甚至迥异的写法。 文章重点剖析了工厂模式、单例模式与观察者模式。比如,工厂模式在JS中常利用闭包或直接返回对象字面量来实现,无需复杂的类继承结构;而观察者模式则与JS天生的事件驱动机制高度契合,文章通过一个自定义事件调度器的实现示例,展示了其核心逻辑——维护一个订阅者列表并在状态变更时触发通知。 作者不仅梳理了“怎么做”,更阐明了“为何在JS中常常选择A而非B”。例如,在需要创建复杂对象时,JS的灵活性可能让工厂模式变得轻盈;但在管理全局状态时,单例模式的实现则需警惕对模块系统的依赖。这些基于语言特性的分析,能帮助开发者在前端组件通信、状态管理或Node.js服务架构设计时,做出更贴合场景的技术选型。

IT 累计浏览 4,854

多些时间能少写些代码

这篇讲的是作者从自身在微博上提出的一个观点出发,试图更系统地论证“时间与代码量”之间的关系。作者可能观察到,许多开发者习惯于用“写更多代码”来衡量产出,但事实上,花时间做好前期设计、明确需求或优化流程,反而能在后期大幅减少编码工作量。 文章的核心观点或许是:有效的时间投入(用于思考、规划和决策)能够换取更低的代码实现成本。这触及了软件工程中一个深层的效率问题——我们究竟是在“制造代码”,还是在“解决问题”?作者的阐述很可能包含具体场景的对比,比如匆忙编码导致的反复修改,与前期充分思考带来的稳定实现。 对读者而言,这篇文章的价值在于提供了一种重新审视自己开发习惯的视角。它鼓励我们跳出“代码行数”的陷阱,将注意力放在创造真正价值的思考与设计上,从而在整体上提升工程效率和质量。

IT 累计浏览 2,445

“差点的更好”设计理念的兴起

这篇讲的是一个经典软件设计思想——“Worse is Better”的提出与影响。作者从上古时期的软件设计争论讲起,核心观点是:在早期Unix和C语言的设计中,一种看似“更差”(Worse)的方案,即追求极致的简洁性、一致性和可移植性,即使它在理论上不够完备或“正确”(Better),但因其简单易行,反而获得了巨大的成功并得以广泛传播。 文章对比了两种典型路径:以MIT/Common Lisp为代表的“正确性优先”路径,与以Unix/C为代表的“简洁性优先”路径。前者试图构建一个理论上完美的系统,实现复杂;后者则从一个核心概念出发快速构建,在传播和实践中迭代完善。结论看似反直觉:那个“差点”的,反而因其简单和易于实现而战胜了“更好”的。 这对今天的开发者依然有很强的启发:在工程实践中,一个能快速上线、易于理解并允许后续演进的“足够好”的方案,其长期价值和生命力,常常超过一个追求理论完美却实现复杂、推广困难的方案。平衡完美与实用,是设计中永恒的艺术。

IT 累计浏览 5,538

MVC演化史

Martin Fowler在《企业应用架构模式》中感慨,MVC(Model-View-Controller)可能是被误用得最普遍的设计模式。这篇文章正是从这句经典的“吐槽”切入,带我们回溯了MVC模式的演进历史。 文章的核心观点是,MVC的混乱很大程度上源于其不同变体之间的概念混淆。它并非一个固定僵化的结构,而是在不同技术栈和场景下演化出了多种实现。作者梳理了从最初的Smalltalk MVC,到后来Web开发中常见的MVC框架变体,清晰地展现了这一模式如何为了适应不同的交互模型(如桌面应用与Web请求-响应)而发生形态变化。 对于开发者而言,理解这些变体的关键差异至关重要——比如,传统MVC中View与Model的直接通信,与Web MVC中Controller作为唯一入口、View通过模板引擎获取数据的模式就有本质不同。搞清楚这一点,就能明白为什么有些框架的设计看似“违背”MVC原意,其实是其特定场景下的合理演化。 这篇内容并非要给出一个“标准答案”,而是帮助读者厘清脉络,避免在架构选型时陷入盲目套用的误区。它让你看清,MVC的精神是职责分离,而其形态则需服务于具体的技术约束。

IT 累计浏览 2,730

那些炒作过度的技术和概念

这篇讲的是技术圈里那些曾被炒得沸沸扬扬、如今看来却未必名副其实的概念。作者从 StackExchange 上一篇热议帖出发,从近20年“最被过度炒作的软件工程技术”榜单里,精心挑选了10个例子进行讨论。 有意思的是,作者特意排除了广受认可的 Java “一次编写,到处运行”理念和 TDD(测试驱动开发)。他认为这两项技术实质上是成功的,炒作并未超出其真实价值。这种筛选本身,就体现了一种清醒的判断:炒作的泡沫之下,有些技术依然坚实,有些则可能被过度包装。 文章并非简单罗列技术名词,而是通过作者的个人评注和社区讨论,勾勒出技术热潮中的集体记忆与反思。它提醒我们,在追逐新技术浪潮时,不妨多一分审视:哪些是真正解决了痛点的核心创新,哪些又只是被舆论放大的光环?对于开发者而言,这种辨识力或许比盲目跟进更重要。

IT 累计浏览 2,166

设计可以是一种垄断

这篇讲的是国内软件行业普遍存在的一种现象:设计环节的“弱中之弱”。作者从当前软件产品的开发现状切入,指出许多公司创始人是编程技术出身,因此资源与重心严重偏向代码实现与系统稳定性。而真正关乎用户体验与产品形象的UI设计,往往被狭隘地理解为后期“美化”,只在界面遭到用户非议后才被草草补上。 这种敷衍式的处理,导致设计无法发挥其根本价值。文章尖锐地指出,设计绝非简单的美化工作,它应当是产品与用户交互的核心,更是产品思想性的直观体现。长期忽视设计,不仅损害用户体验,也可能让产品在市场竞争中失去一个关键维度——作者甚至将有效的设计提升到了“形成垄断”的可能性高度,强调其战略意义。 这篇文章为技术团队敲响了警钟:产品的成功不能仅靠“跑得快”和“跑得稳”,让用户“愿意用”和“喜欢用”同样至关重要。它提醒我们,将设计视为贯穿开发始终的竞争力,而非事后补救的装饰,才是构建优秀产品的正途。

IT 累计浏览 4,480

周末闲谈:C and C++, why use c++?

这篇周末闲谈从开发者经常被问到的问题入手:C和C++之间究竟有何不同?为什么在现代编程中,越来越多的项目选择C++?作者指出,常见的回答往往停留在语法层面,比如简单地说“C++是带类的C”,但更本质的差异在于设计哲学和语言能力的演进。C++在C的基础上引入了面向对象设计,通过类、封装、继承和多态等特性,让代码结构更清晰、更易扩展;同时,范型编程(如模板)的加入,使得编写与类型无关的通用代码成为可能,大大提升了