最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

使用 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:393790
用户头像

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

关注

评论

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

百度荣获 “2021年中国网络安全产业联盟数据安全工作委员会突出贡献奖”

百度开发者中心

盘点近期虎符交易所上线的项目

区块链前沿News

虎符交易所

大咖说|阿里巴巴副总裁陈龙:数字技术将在绿色低碳转型中发挥关键作用

大咖说

阿里巴巴 数字化 碳中和

Docker 实战教程之从入门到提高(一)

Jerry Wang

Docker Kubernetes 容器 镜像 4月月更

“囤菜新宠”预制菜,会是生鲜电商的破局点吗?

易观分析

如何设计帮助中心才能真正地帮助客户解决问题?

小炮

帮助中心

24小时无人洗车加盟!就自助洗车加盟

共享电单车厂家

自助洗车机多少钱 自助洗车加盟 24小时无人洗车加盟

模块二作业

Dean.Zhang

架构实战营

Tapdata PDK 生态共建计划启动!MongoDB、Doris、OceanBase、PolarDB等十余家厂商首批加入

MongoDB中文社区

如何通过Password Vault的XSS漏洞窃取用户密码信息

喀拉峻

网络安全 XSS

首届物联网数据基础设施案例大赛结果出炉,与 EMQ 和英特尔共同见证物联网的无限可能

EMQ映云科技

物联网 IoT intel emq

华为与OpenInfra基金会十年共筑开源基础设施平台

科技热闻

ETL 和数仓建模的设计思路!

五分钟学大数据

4月月更

零信任访问控制下企业ABAC的实施问题

Geek_2d6073

俄乌战争下的国产数据库替换思考-墨天轮

墨天轮

数据库 oracle 达梦 gbase8a

自助洗车设备全套多少钱?有了解的吗

共享电单车厂家

自助洗车机价格 自助洗车加盟 自助洗车设备多少钱

AliPLC 智能丢包补偿算法,提升弱网环境的通话质量

阿里云视频云

音视频 音频 视频云 音频算法 丢包补偿

6元自助洗车怎么样?想加盟自助洗车

共享电单车厂家

自助洗车加盟 6元自助洗车 自助洗车怎么样

想开一家24小时的自助洗车店要多少钱

共享电单车厂家

自助洗车机多少钱 24小时自助洗车店 开自助洗车店多少钱

云效多云视角团队协作方式,让团队协作更高效

阿里云云效

阿里云 项目管理 运维 研发管理 团队协作

为什么领导不喜欢提拔老实人?

方云AI研发绩效

团队管理 研发管理 数字化转型 职场 PUA 职场发展

为什么要选择Web3?它有什么好处?

CECBC

重磅!百度安全参编的国家标准《信息安全技术 术语》正式发布

百度开发者中心

在Rainbond上部署高可用Apollo集群

北京好雨科技有限公司

SAE 联合乘云至达与谱尼测试携手共同抗疫

阿里巴巴云原生

在Linux环境下安装SQLserver2017

春风十里

数据库 Linux SqlServer

远程代码执行漏洞复现分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

易周金融观点 | 数字人民币试点扩大带动增量场景需求

易观分析

金融 数字化人民币

“转型·破局” 看数字化会员如何重塑企业竞争力

科技热闻

无人自助洗车机多少钱一台?不是自动

共享电单车厂家

自助洗车机多少钱 自助洗车加盟 无人自助洗车机

我们两周岁啦!InfoQ写作平台正式升级为InfoQ写作社区

InfoQ写作社区官方

热门活动 InfoQ写作社区2周年

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