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

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

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

阅读代码能让你变得更优秀 我在编程生涯的早期就明白我阅读的代码越多,我的代码就能变得更好。我知道,当我不得不维护其他人的代码时,简单和干净的代码几乎总是比花哨或复杂的代码好—— 即使有注释。然而另一方面,当我花足够的时间去理解复杂代码的时候,我常常能够学到新的技巧。不论怎么样,都能让我有所提高。 这使得我在那些没有代码审查的地方一再争取。而当没有足够的时间来正式执行“代码审查”的时候,我会自己浏览存储库和阅读代码。当然,那时我还被受限于来自于小团队的公司资源。 超越语法 在你不得不全力对付任意编程语言的语法时,也就是学习如何充分利用该语言最琐碎的时刻。一门语言的语法往往是非常静态的,并且如果你出错了,你的编译器会向你控诉。更深层次的课程涉及到什么语言最适合解决什么样的问题(“合适的工具做合适的工作”),以及如何用那种语言编写代码以便于使它高效和可维护。 学习新语言有许多方法:课程,教程,导师,书籍以及等等。我通常会结合这些选项来学习一门新的语言。我注意到,当涉及到非语法元素的时候,这些方法常常非常相似。 阅读来自于其他人的实际部署代码会让你收获更多。不仅仅是常规的结构化学习,你还需要学习模式和实践方法。语言中所谓“正确”的做事方式并不总是效果最佳的方式。你会经历边缘情况,一次性事务以及意想不到的集成。你也会找到这些问题的解决方案,有好有坏,但如果你认真思考的话,那么这正是出来“推荐做法”的地方。今天的模式就是就是明天的反面模式。 你可能对有些事情,例如“总是注释”,“逗号放到最后”,“缩进x个空格”有着自己的想法,当然你是对的。我对提到的这些及编码的其他方面也有着自己的感受。 有时候当我阅读其他人的代码时,如果看到他们做错了,我会生气。但是随着我代码阅读量的增加,我开始懂得,总会有一些情形常见于别人的代码,但我在我自己的代码中却未曾遇到过的,并且我的方法没有必要那样执拗。我不仅改变了我的一些观点,而且懂得更加灵活。 开源无处不在 随着开源运动的发展,可供阅读和学习的代码数量也大幅度增长。例如Gitlab,GitHub和到BitBucket这些网站就允许我们获取全功能的应用程序,不仅可以阅读代码,还可以摆弄。很少有我想要学习的东西是不能在开源代码中获取的。 我以前学习新的编程语言,会把重点放在诸如目录结构和命名约定这些简单的事情上。但是,现在,我会找一些不同的开源项目,然后可以开始拼凑常用的方法。我很少强调以前那些类型的东西了。 可用的代码是如此之多,但质量却良莠不齐。当我们想要学习的时候,常常搞不清楚哪个好哪个不好。那就保持阅读代码吧,慢慢地你会学会如何区分。阅读“坏”的代码可以帮助你理解为什么它是“坏”的。关键是不要害怕尝试任何你觉得看上去正确的东西,并且当你走错路的时候能够承认错误,并改正问题,然后继续前行。 坏的代码就坏的,是这样的吗? 有人会说“坏的代码比好的代码要更多更明显”。sub-reddit致力于坏的代码。 在这些年里,我写了很多好的代码和坏的代码。当我看到我以前写的代码时,我的第一想法就是我怎么会写这样的垃圾代码。这实际上意味着我还在学习中。如果我看到我以前的代码,觉得它看上去非常伟大,那么说明我并没有提高。 那么,我们怎么才能从坏的代码中学到东西呢? 你阅读的坏代码越多,那么你就越擅长发现坏的代码 当你在学习和搜索例子的时候,你会发现和使用大量不能工作的代码。请记住,仅仅因为它不适合你的情况,并不能说明它就是坏的代码。学习如何让它工作能够使得你变得更优秀。 你怎么知道它是坏的代码? 人们喜欢批评。阅读评论,如果你看到很多“WTF(什么玩意)”,那么可能你看到的正是坏的代码,试着指出为什么不好的原因。不要只留下“这代码真烂”这样的评论。不要装得你好像懂得坏代码的所有需求,要知道,总有一个它之所以被这样写的正当理由。如果你知道它为什么是坏代码的原因,那么不妨留下一个有建设性的评论。或者…… 让它变成好的代码 放一个能让代码变得更好的pull请求。修正语法,使用更好的方法,添加注释或修改缩进:这些都是改进代码的伟大方式。加一个为什么你推荐改变代码的解释。 我发现当我帮助别人学习的时候能学到更多。如果我认为我理解了一个新的主题,那么我会找个人来试着向他解释,这能让我更深刻地理解和记住它,并且让我快速发现我是否写了坏的代码。 回报 记住开放源代码在你参与进去的时候效果最佳。代码更改在大多数项目中都是受欢迎的,但是有很多出力的方法。 测试开源代码和文件错误报告;帮助完成文档集;写教程和如何做的例子;参加对话——或者仅仅只是帮助传播。每一件事都能带来改变,并且越多的人参与进来越好! 资源 这里有一些可以帮助你开始的链接。有些我自己用过,有些我还没来得及深入了解。如果你发现一些有用的东西——或者这篇文章中有什么需要改正的地方,请不要犹豫和我们分享。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2016-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

以朋友圈为例,腾讯资深架构师揭秘鹅厂大数据平台是怎样运营的

导读:本文将从构成运营成本的主要运营资源(设备资源、带宽资源、专线资源)出发,以实际案例分别阐述精细化技术运营实施的要点。

4665
来自专栏Java学习网

10+年程序员总结的20+条经验教训学习

10+年程序员总结的20+条经验教训学习 开发 1.从小事做起,然后再扩展 无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任...

2407
来自专栏WeTest质量开放平台团队的专栏

数风流人物之《游龙英雄》--说说如何脱颖而出

在2014年的腾讯游戏嘉年华盛会上,由银汉游戏开发,腾讯游戏独家代理的横板格斗手游大作《游龙英雄》重磅首发,并在之后一发不可收拾,一跃成为一代动作类手游的巅峰之...

1153
来自专栏互扯程序

千万级规模高性能、高并发的网络架构经验分享

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

2006
来自专栏前端小栈

每日阅读2017.5.7-12

git commit message 是什么? 用git的人都知道,但是估计很多人不会在意它,利用好它,对公司,对项目,对你都会有很好的辅助作用:

1042
来自专栏EAWorld

你适合微服务么:实施微服务的4个先决条件和重点工作

“Mesh App and Service Architecture”作为Gartner2016 十大战略技术趋势中之一,里面大量提到微服务的概念。微服务(Mi...

4166
来自专栏刘望舒

App开发,怎样又快又稳又清晰

开发者的价值,是通过技术和产品体现的,对于App开发来说,除了实现业务之外,最重要的莫过于开发的速度、质量和可维护性,速度决定你能否支撑公司抢占市场,质量决定你...

1091
来自专栏云计算D1net

函数云”即将崛起?

工具始终为其用途所塑造。当云计算首次出现时,是一种虚拟化托管的形式,其目标是看起来和裸机服务器一样。 基础架构即服务(IaaS)形成了最早的云服务,它仍然主导公...

3547
来自专栏SDNLAB

命令行界面(CLI)消亡史

IT行业正在向所有的一切都采用应用程序编程接口(API)演进,这使得企业能够自动执行重复性任务,提高效率并减少错误的系统。但是,这引出了新的问题:在IT系统中A...

3494
来自专栏WeTest质量开放平台团队的专栏

月活8.89亿背后:微信工程师细数兼容测试经验

微信团队通过自动化、云端化测试,在兼容性和功能测试方面效率提升了1倍多,更快速、精准地定位解决问题,累计发现并解决的问题数达数千个,覆盖亿级用户,提供了流畅稳定...

2K0

扫码关注云+社区

领取腾讯云代金券