50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

使用 Exercism.io 提升编程技巧

  • 2014-12-30
  • 本文字数:2748 字

    阅读完需:约 9 分钟

Exercism.io 通过提供反馈和讨论,帮助开发者提升某种语言的编程匠艺。它是一个社区,也是一种工具,在那里开发者可以编写代码并对其加以讨论,从而加强解决问题的技能。

InfoQ 采访了 Exercism 的创始人 Katrina Owen 以及 Exercism 中 C++ 部分的贡献者 Richard Thomson。

InfoQ:请你们向读者们简单介绍一下 Exercism.io。

Richard:Exercism 是一个可以实践并提升软件技能的地方。对于软件来说,有两大要素会对其创建有比较大的影响:功能和匠艺。功能的方面是显而易见的;它要么可以实现声称的功能,要么无法实现。大多数讲授编程课程的重点都在于完成软件的功能方面。可以正常运行吗?足够健壮吗?我们如何修复这个错误?

软件的匠艺方面更模糊一些。软件匠艺只能通过体验以及把自己的工作呈现给他人来获得。当你第一次在没有人关注软件的匠艺方面的代码库中工作时,你会深深感到需要它。代码中满是长方法、起得很差的名称、混乱不清的职责以及大量重复代码。

随着时间的推移,业界已经创建出一些术语,通过像 SOLID DRY 迪米特法则等设计模式来定义匠艺正确的方面。当代码缺少匠艺的时候,就叫做代码有各种各样的坏味道:重复代码、长方法、大型类等等。

Exercism 假设你已经知道如何达成编程的功能部分,但期望提升你的编程匠艺。提升你的匠艺意味着与其他程序员交流,并对一些代码进行讨论,你已经理解了那些代码中的问题,并且可以将其用于评估那种问题的特定解决方案。

Katrina:Exercism 在开始的时候,会让人们做简单的编程练习,从而对目标语言中的简单性、样式和惯用语做一些讨论。尽管人们通常是来做练习的,但一般都会做很多讨论。

InfoQ:Exercism 支持哪些编程语言,提供哪些类型的练习呢?

Katrina:现在 Exercism 拥有 19 种可用的语言。按照字母排序分别是:Clojure、CoffeeScript、Common Lisp、C++、C#、Elixir、Erlang、F#、Go、Haskell、JavaScript、Lua、Objective-C、OCaml、Perl (5)、Python、Ruby、Scala 和 Swift.

我们也正在安排最终的细节,以添加 PHP 和 Java 语言。

对练习本身来说,本质上都是一些玩具问题。格式是一个 README 文件以及一个测试套件,你可以获取到本地并在常用的环境下使用常用的工具来练习。测试套件为人们提供了很好的停靠点,问题有趣的部分在于迭代解决方案,试验不同的方法,并从其他程序员那里获得评论。

Richard:我们有一个概要页面,显示了当前在 Exercism 提供的语言,以及在每个语言的练习中提供的问题。

InfoQ:Exercism 的目标是帮助开发者产出更好的代码。但什么样的是更好的,我们真的知道吗?

Katrina:大多时候我觉得“更好”是一种直觉。

直觉一般是基于经验得到的。你的“更好”会和我的“更好”有很大区别,只是因为我们在不同类型的代码库中工作,解决的问题类型也有很大差别。你很熟悉的东西我可能完全没有概念。

我们可以对代码做静态分析,从而让讨论具有事实基础,但实话说,在 Exercism 上这些情况并没有太多出现。对话更多倾向于代码坏味道和可读性。

尽管我们所说的“更好”完全是主观的,但也是非常有用的讨论。

Richard:和 Katrina 一样,我认为代码的某些方面是主观的。通常这些问题会围绕选择的名称,当然还有关于空格和格式这个永久的的话题。

然而,我认为随着时间的推移,业界已经逐渐得出一些让代码变得更好的客观标准。类似于循环复杂度的代码标准会为一些简单的问题提供答案,比方说:什么时候一个函数或方法过于复杂?像“任何函数都不应该拥有超过五个参数“之类的经验法则可以告诉我们代码的某个版本要比另一个版本更好。

软件是可以无限延展的,而 Exercism 会引领人们讨论的方向,他们会讨论拥有相通功能的不同形式但其他人编写的更易于理解的代码。讨论的更深方面是经验规则背后的原则,以及对与像复杂度标准之类的客观数据的使用。这些都更扎根于经验之中,但当前的开发属于认知科学,提供了一种科学的基础,支持那些通过经验所获得的直觉。最近由 Steve Halladay 撰写的的一本书“基于原则的重构”识别出作者直觉背后的原则,当建议学生如何产出更好的代码时,他就会使用那些原则。

InfoQ:之前 InfoQ 发表过关于培养编程技能以成为软件工匠的文章。Exercism 会对此做出什么贡献?

Richard:有了 Exercism,你就拥有了测试,然后你可以编写实现让测试通过。那会让你更容易引入测试驱动开发,不需要同时考虑测试和实现。对于你针对问题的解决方案来说,拥有测试只是一个开端。讨论才是真正会出现好点子的地方。

我学习了一些新方式来提升我的 Python 和 JavaScript 水平,仅仅是借助于解决每种语言的第一个练习。我的解决方案可以工作,但并不漂亮,对于我在 JavaScript 的第一个问题中编写的大量正则表达式也不是特别满意。在这些语言中提交了我的解决方案之后,我可以浏览其他人的解决方案,从而学到如何以更简单的方式来做同样的事。即便没有来自于他人的特别反馈,只是浏览已经完成的解决方案就教会我如何改善自己的代码,并使其对于那些语言来说更加“中立”。

Katrina:我认为 Exercism 能够帮助你提升技能的最强大的方式就是,他给了你一种专注的方式来查看其他人的代码,以及清晰的能够改善它的方式。这会强迫你阅读和理解你没有编写的代码,并且系统且挑剔地对其进行思考。你开始意识到其中的模式和代码坏味道,并且会产生对可读性的非常实用的感觉。

更重要的是,你需要以一种合理的方式来表达这种意见。只是说“这样做吧”是不够的。得出直觉的理由,会让你在非常近的距离来检查你的偏见,有时你会对你自己的深刻见解感到惊奇。

InfoQ:hack.pledge() 是程序员在世界范围内的一项运动,目的是为了把大家集合起来相互指导。你对其看法如何?

Katrina:我觉得像hack.pledge()、#pairwithme、CodeNewBies 都棒极了。它们都非常重视人的因素,而我们经常会在改进编程技巧的大量博客中迷失自己。

Richard:我认为 Exercism 是 hack.pledge() 一种有力的补充。

InfoQ:假设现在已经是 2015 年 12 月份,Exercism 在一年之后会变成什么样子,你们在一年间会做出什么成果?

Katrina:首先,我非常乐意看到在所有语言的部分讨论的质量都能够保持良好。当有些部分比其他部分更活跃的时候,在某些语言中你会持续获得非凡的反馈(我想到了 Haskell),而在其他语言中会有很多人提交解决方案,但很少人提供反馈,或者提供的反馈质量良莠不齐。

其次,我希望提高站点的易用性,特别是它要可以搜索和过滤现有的问题和解决方案,并可以得到所关注的感兴趣的人和问题的通知。

Richard:在一年之后,我期望看到更多的语言部分,我期望看到在各种语言中有更多问题。我还期望有更多针对特定语言的问题。我期望有更多用户和共享者参与到 Exercism 项目中,使得它对所有人都变得更好。

查看英文原文: Improve Your Programming Skills with Exercism.io

2014-12-30 07:394391
用户头像

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

关注

评论

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

第十八章 获得大量免费流量的核心:关键词

溪抱鱼

SEO

浙大“卓越中心”发布两项成果突破,为航空航天科学计算注入新动能

极客天地

中昊芯英全自研 TPU 架构 AI 芯片与计算集群重磅亮相2025WAIC

科技热闻

程序员专属秋日养生指南(Coding版),文内有秋天第一杯奶茶

Comate编码助手

程序员 文心快码 秋天的第一杯奶茶 程序员养生

如何结构化日志记录增强网络安全性?

运维有小邓

网络安全 日志分析 日志管理 日志审计

ROT混淆技术入门指南

qife122

安全开发 编码混淆

从数据感知到精准决策:舆情监测的全流程价值解析

沃观Wovision

舆情监测 沃观Wovision 舆情监测系统

03.接口vs抽象类比较

杨充

星云低代码:低代码不再是平台,而是“中间件”

星云低代码中间件

低代码 中间件 企业应用 可视化开发

AI口语APP开发的技术框架

北京木奇移动技术有限公司

AI教育 软件外包公司 AI口语

镜舟科技受邀出席开源赋能金融创新论坛,共同推动金融行业开源技术规范发展

镜舟科技

金融创新 分析型数据库 开源治理 镜舟科技 MPP 架构

使用 Apache DolphinScheduler 构建和部署大数据平台,将任务提交至 AWS 的实践经验

白鲸开源

云计算 AWS Apache DolphinScheduler 思科 EKS

三天接入,零重构:低代码中间件的快速集成机制全解析

星云低代码中间件

ide 低代码 企业应用 可视化编程

AI Compass趣味AI应用分享:Quin-AI塔罗占卜、FateTellAI命理分析、爱宠信箱宠物情绪陪伴应用

汀丶人工智能

LAS平台Vibe Data Processing:AI驱动的数据处理新范式

字节跳动数据平台

大数据 数据处理 多模态数据湖

品牌出海的隐形风险:海外舆情监测你真的会用吗?

沃观Wovision

数据分析 出海企业 沃观Wovision 舆情监测系统

决策树训练速度提升99%的新方法

qife122

机器学习 特征选择

数据治理平台如何选?深度解析国产化全栈方案与行业落地实践

百分点科技技术团队

LazyLLM教程 | 第3讲:大模型怎么玩:用LazyLLM带你理解调用逻辑与Prompt魔法!

商汤万象开发者

Apache DolphinScheduler DataX 数据集成:新手入门全攻略

白鲸开源

大数据 Apache DolphinScheduler 数据集成 DataX 数据调度

日均处理 PB 级数据,基于 DolphinScheduler 的离线数据治理平台实现精准血缘追踪

白鲸开源

大数据 开源 数据治理 Apache DolphinScheduler 血缘分析

硅空位中心实现量子网络化的新突破

qife122

量子技术 硅空位中心

从《中国开源年度报告》看中国开源力量的十年变迁中,Apache SeaTunnel 的跃迁

白鲸开源

大数据 开源 Apache SeaTunnel Apache软件基金会 OpenRank

文生绘动 Agent:从词语到动态影像,言出即成,你的AI动画创作伙伴

汀丶人工智能

教师如何规划教学与科研协同发展|北京理工大学医工交叉教学实践分享(5)

ModelWhale

AI教育 科研 北京理工大学

深入底层:如何优雅部署 SeaTunnel 分离集群到 Kubernetes

白鲸开源

大数据 开源 Kubernetes 部署 Apache SeaTunnel

管家级教程:在 Windows 上配置 WSL2、CUDA 及 VLLM,开源音频克隆项目

溪抱鱼

人工智能 前端 语音

ModelArts Versatile -AI原生应用引擎,聚焦企业级Agent平台,最新核心能力一文速览

华为云开发者联盟

NineData 新增支持 AWS ElastiCache 复制链路

NineData

AWS 数据库迁移 NineData 无停机数据库迁移 ElastiCache

天猫商品详情API响应数据解析

tbapi

天猫商品详情接口 天猫API 天猫数据采集 天猫商品详情api

Apache Flink:从实时数据分析到实时AI

Apache Flink

flink AI 实时计算

使用Exercism.io提升编程技巧_Java_Ben Linders_InfoQ精选文章