【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

SCNA 2011 的主题——软件匠艺

  • 2012-01-10
  • 本文字数:2795 字

    阅读完需:约 9 分钟

多位知名专家在北美软件匠艺大会(Software Craftsmanship North America,SCNA) 2011 上做了演讲,其中包括 Corey Haines、Chad Fowlers、Bob 大叔、Michael Feathers 等等。我们对会议上提出的观点以及参与者分享的内容做了简要的总结。

SCNA 是由 8th Light Optiva 组织召开的,InfoQ 是此次会议的媒体赞助商,会议专注于提升软件匠艺在开发者之中的价值。以下是一些参会者博文的摘要,其中分享了 SCNA 上提出的观点,从而让本想参会却未能成行的人从中受益。

Zachary Spencer 为多场演讲绘制了详细的思维导图,其中包含了知名演讲者的主要观点。以下是对其内容的摘录:

Corey Haines 的主题演讲

可能在 24 小时内学会 C++ 吗? 可能会吧。那么能在 24 小时内学会软件开发吗? 不可能。

具备编写代码技能的人会被放到或邀请到创业公司中,期望他们能够做出高质量的程序。

软件开发很难。我已经做了很多年,但还是会犯大量错误。

TDD: 如果仅仅重写应用程序会更快,你还需要做 TDD 吗? TDD 是个好伙伴,它会帮助我编写出优质代码。

我很喜欢编写精良的软件,因为它会给业务带来价值。它达到了业务的目的。它没有过度设计。它还会存在很长时间。

业务之所以雇用我们,是因为我们可以为其提供帮助。我们期望成为他们的搭档, 而不仅仅是承包商。我们期望可以理解业务。

Chad Fowlers 的主题演讲:

对于最新的软件开发来说,哪些实践是必须的呢?

  1. 编写垃圾代码
  2. 真正编写出垃圾代码
  3. 了解与编码相关的第一件事
  4. 参见第一条

你会做出东西,你会编写软件。事实上你是在为别人服务。我们从事的都是服务性工作。世界上的每个人都一样。我们提供的是体验。

要谦逊。要透明。要一致。要感恩。

Spencer 还为 Michael Feather 的演讲绘制了思维导图。

Eric Meyer 把整个大会总结为一句话——“好好干活”:

"玩世不恭就是懒惰的表现。“——Chad Fowler

简而言之: 要积极主动! 不仅仅玩世不恭是懒惰,破坏关系也同样。你永远都不应该说客户的坏话。越来越多的坏话就是无礼。不管你有多聪明,都是可以替代的。总有人和你一样聪明,甚至比你还聪明。如果人们不喜欢和你一起工作,那么就会找人来取代你。

“你的用户界面就是你的应用程序。”——Billy Whited

你需要对工作给予全面的关注。你要编写可维护的代码。你应该对代码进行测试。这种关注应该是全方位的,你需要注意用户是如何与应用程序交互的。如果你的应用程序外观很差,不管它的功能如何,用户就会认为应用程序很差。

“如果有人请求帮助,你应该总是说好。”——Bob 大叔

最重要的是,你应该关注客户的问题。本质上,你的工作就是要持续地交付能够工作的软件。

“每行代码都是债务。” ——Corey Haines

代码只是达到某种目的的方式。系统的用户不会直接关心代码。他们只关心应用程序是否能工作。你写的大多数代码都会被删除,特别是你花些时间重构代码的时候。另一个你不要过分关注代码的原因在于它会发生变化。当有人修改你的代码时,不要感到不安,而应该试着从中学习。

Bobby Johnson 报道了 Corey Haines 的主题演讲,其中讲述了对当今编写的代码质量的担心。

Corey Haines 在会议开始就表示了担心。我们是否正在重复上世纪九十年代的错误? 在创业公司中满是未准备好的开发者,认为可以在“24 小时内学习编码”吗?而他们会编写遗留到将来的代码。他建议应该阅读在十年内学会编程。业务迫切需要能够编码的人。如果他们迫切需要能够盖房子的人,那么两年后我们会看到到处都是倒塌的房屋吗? 然后他指出 GirlDevelopIt 匠艺学院(Craftsmanship Academy)还有一线希望;这些专业社区和初学者接触,有助于指导他们避免过去犯过的错误。我们为公司带来了价值,价值的一部分就是可持续性。

Johnson 还提到了 Michael Feathers 关于功能性概念(functional concepts)的演讲:

Michael Feathers 是一位个人英雄,他对我们提出挑战,看我们是否能够付出精力学习功能性概念。他把功能性技术描述为针对广泛领域的 DSL,现在是时候把这些技术整合到对编程语言的理解中,从而和大家分享。传统的 OOP(面向对象编程)开发者最初对于功能性技术会有“什么是 WTF?”之类的反应,认为那不够清晰。但是 Feathers 先生指出,尽管阿拉伯语对于他来说根本就是胡言乱语,但是每天都有上百万人使用它进行有效地沟通。这让我们想到了今年 Rich Hickey 在 Strange Loop 大会上的简单让你轻松(Simple Made Easy)的主题演讲。有些东西你不熟悉,但并不意味着它很复杂。它可能非常简单,只是在你当前的情况下不简单。可读和“聪明”之间的界限和共享词汇表相关。请看关于 Chris Powers 演讲非常好的思维导图

Dave Mosher 参加了 Gary Bernhardt 名为“扩张和收缩(Expansion & Contraction)”的主题演讲:

我认为他应该把标题改为“适用性 vs 功能(Suitability vs Capability)”,但是这个演讲非常棒,我认为是本次会议中最棒的一个。在此我尽可能来转述一下:

编程语言和技术总是一直随着时间有时扩张,有时收缩。在扩展的时候,这些解决方案是“功能(Capability)”解决方案,也就是说,它们能够解决问题,但并不是最合适的。最终就会发生收缩的情况,合并成为“合适”的解决方案。

在后 C/C++ 时代,Java 先是在扩张期成为一种功能解决方案。时过境迁,到了收缩期,Java 逐渐成熟,成为开发软件合适的解决方案。

Gary 在演讲中提到,JavaScript 和 NodeJS 当前正处于“功能解决方案”的阶段。起初我误会了他的意思,但是我想那是因为没有真正 _ 客观地 _ 聆听他的观点。NodeJS 现在肯定是处于“功能”阶段而不是“适用性”阶段,但那并不意味着你无法使用它来创建有用的内容。

Mosher 还记录了 Zed Shaw 的演讲中最有趣的想法:

可能从事软件匠艺运动的人们对于邀请 Zed Shaw 发表演讲比较奇怪,但是他关于“宣传,灌输,盲从和教育(Propaganda, Indoctrination, Fanbois, and Education)”的演讲是 SCNA 2011 上最引人深思的演讲。以下是我的转述:

如果有人告诉你他们找到构建软件的一种“真正的方式”,实际上他是要向你兜售东西。

如果你不编写代码,那么就不是程序员。程序员构建软件,其它都是市场行为。

当你确信思考是唯一的方式,那么就是在灌输。教育会告诉你各种方案,让你从中选择。不要接受灌输,而应该接受教育。

会上有人问他:

“那么你对单元测试、持续集成之类的东西怎么看?”

他的回答非常实际:

我在过去曾经在大型咨询公司中工作过,做过各种各样的事情。我编写过测试,做过 TDD,使用过 pivotal tracker 或者诸如此类的工具。这些东西都不错,但是所有人都在试图告诉你,这是构建软件的“正确方式”,他们实际在向你兜售工具。如果你相信他们,你的头脑就中毒了。你肯定不希望那样。

考虑到 Shaw 的“反敏捷”立场,可能是说没有一种所有软件开发者都需要遵循以产出高质量软件的“真正方式”,肯定还有比那更好的方式。

查看英文原文: Software Craftsmanship Was Once Again the Main Topic at SCNA 2011

2012-01-10 21:241602
用户头像

发布了 340 篇内容, 共 125.7 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

像用户一样测试:不妨犯傻

QualityFocus

软件测试 体验 可用性 用户体验

架构师训练营 1 期第 10 周:模块分解 - 作业

灵霄

极客大学架构师训练营

架构师训练营 1 期第 12 周:数据应用(一) - 作业

灵霄

极客大学架构师训练营

也谈“中年焦虑”

程序员架构进阶

方法论 职业规划 中年危机

智慧警务平台搭建,大数据时代下的警务模式

t13823115967

大数据

架构师训练营 1 期第 9 周:性能优化(三)

灵霄

极客大学架构师训练营

京东将上线社区团购“京喜拼拼”:社区团购是否是一次泡沫大战

石头IT视角

架构师训练营 1 期第 8 周:性能优化(二)- 作业

灵霄

极客大学架构师训练营

【Java并发编程】面试必备之线程池

java金融

线程池

IDEA插件:多线程文件下载插件开发

Silently9527

Java 多线程 idea插件 文件传输

一代版本一代神:利用Docker在Win10系统极速体验Django3.1真实异步(Async)任务

刘悦的技术博客

django python3.x 异步 异步任务

LeetCode题解:剑指 Offer 40. 最小的k个数,二叉堆,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

生产环境全链路压测建设历程 22:FAQ 1&2

数列科技杨德华

全链路压测 七日更

博睿数据支持腾讯云函数监控,Serverless时代已来临

博睿数据

Serverless APM 监控

咨询师的诱惑

escray

程序员 面试 面经

架构师训练营第五周”技术选型一“总结

随秋

极客大学架构师训练营

架构师训练营 1 期第 13 周:数据应用(二) - 作业

灵霄

极客大学架构师训练营

简明设计模式—创建型

2970

设计模式 Go 语言

架构师训练营第六周总结

Geek_xq

太平金科助力“开局之战”顺利启动,博睿数据“A+N”一体化解决方案全力护航

博睿数据

APM npm AIOPS

网易有道 iOS二面经验分享

iOSer

ios 面试 网易

架构师训练营 1 期第 11 周:安全稳定 - 作业

灵霄

极客大学架构师训练营

即构低延迟直播产品L3,打造更优质的实时互动体验

ZEGO即构

面试官:我问的是Java内存模型,你回答堆栈方法区干嘛?

Java鱼仔

Java 程序员 JMM 多线程 并发

【Java并发编程】阿里最喜欢问的几道线程池的面试题?

java金融

Java 面试 线程池

智慧公安情报研判大数据系统分析平台搭建

t13823115967

智慧公安

AI技术在音视频领域的发展

anyRTC开发者

人工智能 ios android AI WebRTC

架构师训练营第六周作业

Geek_xq

如何给团队制定合理的季度绩效?

Alan

团队管理 绩效 七日更 28天写作

Devil Fruit恶魔果实APP系统软件开发

系统开发

数字资产钱包系统开发及介绍

SCNA 2011的主题——软件匠艺_研发效能_Abel Avram_InfoQ精选文章