写点什么

成为软件工匠

  • 2014-11-23
  • 本文字数:1840 字

    阅读完需:约 6 分钟

软件工艺活动探讨了把实践作为开发编程技能以成为软件工匠的一种方式。大家都认为技术实践非常重要,它值得花时间去学习,以成为更好的程序员。

软件工艺宣言是这样说的:

作为有追求的软件工匠,我们正在通过实践不断地提升专业软件开发水平,并帮助其他人学习这门工艺。在工作过程中我们总结了以下的价值观:

不仅要让软件工作,更要精益求精。

不仅可以响应变化,更要稳步增加价值。

不仅要有个体与交互,更要形成专业人员的社区。

不仅要与客户合作,更要建立卓有成效的伙伴关系。

也就是说,左项固然值得追求,右项同样不可或缺。

Chris ODell 在博客上发表了一篇名为 the codesmith (代码匠)的文章,分享了他对工匠定义的看法:

“按照我的理解,工匠不仅仅是拿选定的材料从无到有地创造出一些什么东西,而是通常会把属于他们自己的一些什么东西融入进去。一名好的工匠会花时间和精力去做些优秀的东西,它们值得我们这样去做,在精心打造出来产品之后有些方法仍然可以传承下去。优良的工艺就是高质量产品的代名词。”

仿照金匠和铁匠,Chris 杜撰了一个名词叫作代码匠,他说“这代表工艺达到了一定的水准,代表着从学徒走向大师之旅中的一种进展。”他后续又在博客中发表了一篇名为任何人都可以成为代码匠的文章,他说明了代码匠可以如何自我提升以成为代码巨匠:

“成为代码匠的门槛应该要低一些。这也就是为什么我说无论以什么形式写代码的人都可以称之为代码匠的原因。我们应该追求工艺的理想,并具有适度的实用主义,花时间去学习技能并且进行实操练习以成为好的编码者。”

今年早些时候,InfoQ 就《敏捷技术实践的重要性》发表了一篇新闻,在这篇新闻中参与工艺运动的几个人强调了技术实践的重要性:

Matt Badgley:“我们需要重申敏捷工程良好实践的重要性,并且拥抱工艺的理念——没有这个,就不可能实现敏捷。”

Robert Martin:“如果你们不使用极限编程的 13 个初中,那么你们最好使用一些别的好实践甚至是更好的实践。你们使用的实践定义了你们的文化,表现了你们的价值。”

Ruud Wijnands:“很多公司应用敏捷时采用了所有有价值的、已实现的技术实践,我看到了他们在这一方面取得的成功。不这么做的公司很少有成功的。”

程序员如何开发他们的技能以成为一个软件工匠呢? John Sonmez 写了一篇名为为什么我不使用编码招式的博客,在这篇文章中,他说程序员重复做同样的事情无法提升他们的技能。你要去学些什么,水平必须要持续地提升:

反复不断地重复写代码去解决同样的编程问题,这就是在做完全相同的事,除非新的约束和变化给你带来了新的挑战,你只能从第一次的经验中有所收获,而从第二次开始基本就是简单地重复了。

(……)如果你想要做得更优秀,重复实践是远远不够的。你必须在实践中增加更多的难度和挑战。

按照 John 的说法,实操是提升技能的好方法。程序员必须去写程序才能成为软件工匠:

我收到了很多邮件,他们咨询我学习编程的最佳方式是什么,或者如何提升他们的技能。最近,我收到很多邮件询问我如何学习安卓开发。你知道我是如何回复这些好奇的心灵的吗?

去做安卓应用。

但是,嗯,我应该去看什么书呢?

不需要看什么书,只需要迸发一个想法然后去尝试实现它。一步步实践,解决过程中遇到的问题。当你卡壳时,就去找找答案或者寻求帮助。

Steve Ropa 写了一篇关于培养软件工匠的文章。大学传授了软件开发的理论。为成为程序员工匠需要增加“现实世界的经验和知识的应用实践”,Steve 说。学徒工计划能够为此做出准备:

我的建议是让时间倒流,我们穿越回一百年前,把你们的工作间变成一个车间。我们需要把工匠安置到车间中。开始的时候我们可是没有这么多工匠,所以我们需要培训和锻炼他们。应用学徒工计划并且使用针对未来职业生涯的工匠模型就可以做到这一点。

如何从软件开发学徒成为工匠呢,Steve 在他的博客中谈了五个方面:

  • 代码工艺——使用一个或多个程序设计语言的艺术去创建清晰的、构造良好的代码。(……)
  • 实用的原则——(……)一个学徒需要理解类似于 SOLID 这样的原则,并且知道如何去应用它们。
  • 技术和工具——虽然程序员需要有能力去实践像手工重构这样的做法,但是他们也需要了解如何使用专门的工具,如何针对特定的任务去选择适当的工具。
  • 工作习惯——(……)我们需要围绕某些活动培养肌肉记忆,比如 TDD、持续集成等等。
  • 软技能——(……)软件学徒需要学习如何在团队中开展工作,如何与其他人进行交流,以及一些其他的软技能,在传统学习环境中这些软技能渐渐地都被忽略掉了。

查看英文原文: Becoming Software Craftsmen

2014-11-23 07:063663

评论

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

Javaweb核心响应对象

楠羽

笔记 Java核心笔记 9月月更

2022-09-25:给定一个二维数组matrix,数组中的每个元素代表一棵树的高度。 你可以选定连续的若干行组成防风带,防风带每一列的防风高度为这一列的最大值 防风带整体的防风高度为,所有列防风高度

福大大架构师每日一题

算法 rust 福大大

总结了一下前端高频面试题的答案

loveX001

JavaScript 前端

Chrome操作指南——入门篇(十四)drawer

Augus

Chrome开发者工具 9月月更

全网首次公开!阿里巴巴1685页Java面试突击核心讲(基础到高级足足涵盖19个Java核心技术)

Java永远的神

数据库 spring 程序员 程序人生 java面试

如何准备vue相关的知识点

bb_xiaxia1998

Vue 前端

20道常被问到的JavaScript题目

helloworld1024fd

JavaScript 前端

这些js手写题你能回答上来几道

helloworld1024fd

JavaScript 前端

Chrome操作指南——入门篇(十五)monitor

Augus

Chrome开发者工具 9月月更

Vue入门指北——modifier

Augus

Chrome开发者工具 9月月更

前端动效讲解与实战

vivo互联网技术

前端 SVG 动效

微信业务架构图与学生管理系统架构图

冷夫冲

架构实战营 #架构实战营 架构师实战营 「架构实战营」

Python语法之字典

芯动大师

字典 9月月更 Python语法

数据中台架构概述

穿过生命散发芬芳

数据中台 9月月更

React Context源码是怎么实现的呢

flyzz177

React

2022年企业Java面试前复习的正确姿势(已助力512人入职大厂)

收到请回复

Java 程序员 微服务 语言 & 开发

【算法实践】手把手带你简单实现希尔排序

迷彩

算法 排序算法 希尔排序 算法实践 9月月更

大数据ELK(四):Lucene的美文搜索案例

Lansonli

9月月更 EKL

2022前端面试官经常会考什么

beifeng1996

前端 React

MFC|实现自定义复选框效果

中国好公民st

c++ 控件 9月月更

【云原生 | 从零开始学Kubernetes】九、k8s的node节点选择器与node节点亲和性

泡泡

Docker 云计算 云原生 k8s 9月月更

面试突击86:SpringBoot 事务不回滚?怎么解决?

王磊

Java 面试

react面试应该准备哪些题目

beifeng1996

前端 React

监控平台SkyWalking9入门实践

Java 架构 Skywalking

阿里P8大牛总结的Java锁机制入门笔记,堪称教科书式天花板

收到请回复

多线程 语言 & 开发

docker的/var/run/docker.sock参数

程序员欣宸

Docker Docker 镜像 9月月更

故障转移和恢复

源字节1号

软件开发 后端开发

【云原生 | 从零开始学Kubernetes】八、命名空间资源配额以及标签

泡泡

Docker 云计算 云原生 k8s 9月月更

第九期-模块一

wuli洋

Linux安装minikube指南

程序员欣宸

Kubernetes minikube 9月月更

大厂前端面试考什么?

loveX001

JavaScript 前端

成为软件工匠_研发效能_Ben Linders_InfoQ精选文章