为什么开源可以提高程序员的编程技能?

简介:

我已经写了很多年的软件。最近我意识到,我越涉及(致力于,结合于等)开源技术,我写出来的代码就更好。这不由地让我疑惑起来:难道里面有什么相关性或因果关系吗?
image

阅读代码能让你变得更优秀

我在编程生涯的早期就明白我阅读的代码越多,我的代码就能变得更好。我知道,当我不得不维护其他人的代码时,简单和干净的代码几乎总是比花哨或复杂 的代码好—— 即使有注释。然而另一方面,当我花足够的时间去理解复杂代码的时候,我常常能够学到新的技巧。不论怎么样,都能让我有所提高。

这使得我在那些没有代码审查的地方一再争取。而当没有足够的时间来正式执行“代码审查”的时候,我会自己浏览存储库和阅读代码。当然,那时我还被受限于来自于小团队的公司资源。

超越语法

在你不得不全力对付任意编程语言的语法时,也就是学习如何充分利用该语言最琐碎的时刻。一门语言的语法往往是非常静态的,并且如果你出错了,你的编 译器会向你控诉。更深层次的课程涉及到什么语言最适合解决什么样的问题(“合适的工具做合适的工作”),以及如何用那种语言编写代码以便于使它高效和可维 护。

学习新语言有许多方法:课程,教程,导师,书籍以及等等。我通常会结合这些选项来学习一门新的语言。我注意到,当涉及到非语法元素的时候,这些方法常常非常相似。

阅读来自于其他人的实际部署代码会让你收获更多。不仅仅是常规的结构化学习,你还需要学习模式和实践方法。语言中所谓“正确”的做事方式并不总是效 果最佳的方式。你会经历边缘情况,一次性事务以及意想不到的集成。你也会找到这些问题的解决方案,有好有坏,但如果你认真思考的话,那么这正是出来“推荐 做法”的地方。今天的模式就是就是明天的反面模式。

你可能对有些事情,例如“总是注释”,“逗号放到最后”,“缩进x个空格”有着自己的想法,当然你是对的。我对提到的这些及编码的其他方面也有着自己的感受。

有时候当我阅读其他人的代码时,如果看到他们做错了,我会生气。但是随着我代码阅读量的增加,我开始懂得,总会有一些情形常见于别人的代码,但我在我自己的代码中却未曾遇到过的,并且我的方法没有必要那样执拗。我不仅改变了我的一些观点,而且懂得更加灵活。

开源无处不在

随着开源运动的发展,可供阅读和学习的代码数量也大幅度增长。例如Gitlab,GitHub和到BitBucket这些网站就允许我们获取全功能的应用程序,不仅可以阅读代码,还可以摆弄。很少有我想要学习的东西是不能在开源代码中获取的。

我以前学习新的编程语言,会把重点放在诸如目录结构和命名约定这些简单的事情上。但是,现在,我会找一些不同的开源项目,然后可以开始拼凑常用的方法。我很少强调以前那些类型的东西了。

可用的代码是如此之多,但质量却良莠不齐。当我们想要学习的时候,常常搞不清楚哪个好哪个不好。那就保持阅读代码吧,慢慢地你会学会如何区分。阅读 “坏”的代码可以帮助你理解为什么它是“坏”的。关键是不要害怕尝试任何你觉得看上去正确的东西,并且当你走错路的时候能够承认错误,并改正问题,然后继 续前行。

坏的代码就坏的,是这样的吗?

有人会说“坏的代码比好的代码要更多更明显”。sub-reddit致力于坏的代码。

在这些年里,我写了很多好的代码和坏的代码。当我看到我以前写的代码时,我的第一想法就是我怎么会写这样的垃圾代码。这实际上意味着我还在学习中。如果我看到我以前的代码,觉得它看上去非常伟大,那么说明我并没有提高。

那么,我们怎么才能从坏的代码中学到东西呢?

你阅读的坏代码越多,那么你就越擅长发现坏的代码

当你在学习和搜索例子的时候,你会发现和使用大量不能工作的代码。请记住,仅仅因为它不适合你的情况,并不能说明它就是坏的代码。学习如何让它工作能够使得你变得更优秀。

你怎么知道它是坏的代码?

人们喜欢批评。阅读评论,如果你看到很多“WTF(什么玩意)”,那么可能你看到的正是坏的代码,试着指出为什么不好的原因。不要只留下“这代码真 烂”这样的评论。不要装得你好像懂得坏代码的所有需求,要知道,总有一个它之所以被这样写的正当理由。如果你知道它为什么是坏代码的原因,那么不妨留下一 个有建设性的评论。或者……

让它变成好的代码

放一个能让代码变得更好的pull请求。修正语法,使用更好的方法,添加注释或修改缩进:这些都是改进代码的伟大方式。加一个为什么你推荐改变代码的解释。

我发现当我帮助别人学习的时候能学到更多。如果我认为我理解了一个新的主题,那么我会找个人来试着向他解释,这能让我更深刻地理解和记住它,并且让我快速发现我是否写了坏的代码。

回报

记住开放源代码在你参与进去的时候效果最佳。代码更改在大多数项目中都是受欢迎的,但是有很多出力的方法。

测试开源代码和文件错误报告;帮助完成文档集;写教程和如何做的例子;参加对话——或者仅仅只是帮助传播。每一件事都能带来改变,并且越多的人参与进来越好!

资源

这里有一些可以帮助你开始的链接。有些我自己用过,有些我还没来得及深入了解。如果你发现一些有用的东西——或者这篇文章中有什么需要改正的地方,请不要犹豫和我们分享。

DinoDate

LiveSQL

Open Source Society University

Free Code Camp

opensource.com

Getting Started With GitLab

GitHub Guides

moodle.org

PL/SQL Challenge
**
文章转载自 开源中国社区[http://www.oschina.net]**

相关文章
|
5月前
|
存储 Java Android开发
探索安卓应用开发:从初学者到专家的旅程
【8月更文挑战第24天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入到安卓应用开发的世界。通过简单易懂的语言和实际的代码示例,我们将解锁创建精美安卓应用的秘密。无论你是编程新手还是希望提升现有技能的开发者,这篇文章都将为你提供宝贵的知识和灵感。让我们一起构建你的第一个安卓应用吧!
|
1月前
编程之路:从代码到哲学的思考之旅
在数字世界的编织中,每一行代码都是我们与机器对话的语言。本文将带领读者穿梭于编程的世界,探索技术背后的深层意义,以及如何通过代码实现个人成长和对世界的理解。我们将一起走进编程的内在逻辑,解锁那些隐藏在键盘敲击声中的哲理,并分享一些实用的编程技巧。
31 3
|
5月前
|
存储 Java 关系型数据库
探索后端开发的奥秘:从新手到专家的旅程
【8月更文挑战第23天】在数字化时代的浪潮中,后端开发作为构建强大软件系统的基石,其重要性不言而喻。本文将深入浅出地探讨后端开发的各个方面,包括基础概念、关键技术、行业趋势以及职业发展等,旨在为初学者提供一个全面的入门指南,同时也为有经验的开发者提供一些深入的思考和启示。让我们一起踏上这段探索后端开发奥秘的旅程吧!
|
3月前
|
设计模式 前端开发 数据库
探索安卓开发之旅——从初学者到专家
在数字时代的浪潮中,安卓应用开发成为了众多开发者的热门选择。本篇文章旨在为初入安卓开发的新手提供一个清晰的学习路径,从基础概念到高级技巧,逐步引导读者掌握安卓开发的核心知识。我们将通过实际代码示例,展示如何从零开始构建一个安卓应用,并介绍一些提升开发效率的工具和库。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往安卓开发世界的大门。
|
5月前
|
测试技术 Linux Android开发
探索安卓开发之旅:从初学者到专家
【8月更文挑战第29天】本文是一篇为初学者和有一定经验的开发者准备的安卓开发指南。我们将从基础概念开始,逐步深入到高级主题,如自定义视图、性能优化等。无论你是刚刚入门,还是希望提升自己的技能,这篇文章都将为你提供有价值的信息和建议。让我们一起踏上这段激动人心的旅程吧!
|
5月前
|
人工智能 JavaScript Java
深入浅出后端开发:从新手到专家的旅程
在数字时代的浪潮中,后端开发如同宇宙中的暗物质,虽不为人所见,却支撑着整个互联网的运行。本文将带你探索后端开发的奥秘,从基础概念到技术栈选择,再到实战应用,我们将一起构建知识的桥梁,连接起初学者与资深开发者之间的鸿沟。你将了解到,如何通过不断学习和实践,像乔布斯所预见的那样,让生命中的每一个点在未来某个时刻连接起来,最终成为你希望在世界上看到的改变。
|
5月前
|
存储 Java 数据库连接
Java编程之旅:从基础到高级,探索面向对象的力量
【8月更文挑战第31天】本文是一篇深入浅出的Java编程指南,旨在通过生动的例子和实际代码演示,带领读者从Java的基础语法起步,逐步深入到面向对象的核心概念,最后探讨如何在实际项目中应用这些知识。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
|
7月前
|
算法 程序员 C#
程序员必知:UsbKey开发
程序员必知:UsbKey开发
157 0
|
架构师 Cloud Native Java
程序员学习进阶提升必备技能(从零基础到P8架构师,20W到120W)
程序员学习进阶提升必备技术栈(20W-120W年薪,从零基础到P8架构师)致力于帮助java程序员快速成为架构师。 访谈数十位一线大厂架构师,了解他们的成长历程,了解最新的企业技术,抽象出了架构师的成长模型,实战贯穿,制定了本套程序员学习进阶提升必备技术栈,于是分享出来让大家好好学习学习。
|
算法 搜索推荐 JavaScript
如何提高自己的编程技能
当你学习编程时,这一刻所有的事情都改变了。在 Firehose,我们习惯称之为编码的拐点。在这个阶段之后,你作为开发人员的编程能力将大不相同,建立起编码的拐点是非常重要的,到达拐点也就意味着你不再需要别人手把手的帮助,这是一个非常重要的过程,但是如果你达不到这个拐点的话,那么你就很难提高编程技能。
如何提高自己的编程技能