学习编程有很多东西可以说,要使用什么语言,要在大学或在训练营学习它,但我认为在所有这些情况下都有一件事:强烈关注创建代码,通常是“绿色字段”代码,从规范或一组测试开始。这导致了程序员通常具有读取代码,即使是他们自己的代码的规范,尤其是由他人编写的代码。
开始重新开始将更容易,我自己也不例外,经常如果我需要一段代码,而不是重新使用开源代码才能自己编写代码,因为“这将不那么工作”,这是一个比特就像一个自我实现的预言:因为我没有读取代码,我不会在阅读代码上变得更好,我会永远写自己的东西。
如何编写代码?写代码时,即使是一个非常棘手的问题,我知道该怎么办;我有一套我可以雇用的策略。我可以通过写作测试TDD样式,我可以开始写下要求和规范,我可以绘制架构图或绘制用户界面。这些过程中的每一个都在书籍和博客中描述,更重要的是:当我在大学时,我在大学时练习这些东西,然后我在编写代码时保留它们,我也学到了新技术。
如何阅读代码?但是,如何阅读代码?坦率地......我也不知道。如何开始?有一些研究专业程序员如何阅读代码;例如uwano等人。观察到程序员扫描'代码以了解程序的内容。他们发现,在花费的前30%的时间内看到了70%的线。显然,扫描代码是我们所做的事情,但为什么?我们是如何学习这样做的?我不是说它没有意义这样做,这是很多意义,但我们如何知道?可能有一些来自自然语言或开发人员可能会从看到别人那里学到这一点吗?虽然从自然语言阅读技能转移肯定会在那里,但它并不完全相同。 Busjahn等人。观察到程序员比自然语言不那么线性读取代码;他们遵循呼叫堆栈而不是从上到下读取。我们如何知道这是一个聪明的事情?也许再次观察人们做到,或者通过模仿你的写作代码?
然而,我们知道该怎么做,无论如何,代码阅读技能不会立即到新的程序员。 Busjahn等人。还发现了(同样的论文),新格镜头比专家程序员更线性地阅读代码。学习遵循呼叫堆栈它有一件经验的东西。但是这是事情,就像我知道这种做法一样的事情,与写作代码的做法不同,不是故意的实践。它发生在其他事情的副产品(如代码写作技巧?)这是一个问题,首先因为它导致认为“写作重新写作比学习现有代码更容易”,而且我也担心它可能会让人们留出来项目?
故意阅读回到与自然语言相比,我在语言中谈论并写了很多,学习者练习很多!不仅仅是技术阅读,还要仔细阅读:仔细解释文本的做法。我一直在研究近距离阅读实践(我会推荐Boyles作为一种简单实用的介绍)和我读的越多,我越来越乐于诱惑的想法,即所有这一切都是用于编程的想法!
这些判决鼓励并培训“扫描”行为,我们知道是程序员所做的事情。关于这种技术的美丽事情是在阅读代码时为我提供“要做”的东西。而不是盲目地滚动了这个代码,或者通过调试器踩到一个笨拙的笨蛋的调试器,我现在可以做一件事,这使得任务如此艰巨!
还有更多的句法技术来编程。 Greenham的书籍关闭阅读:基础知识(如果你想潜入其中的话题,我会推荐的话)描述了6个密切阅读的上下文,其中一个是句法。在这种情况下,您研究单词,以及它们如何彼此相关。一个简单的练习来研究语法是常用的圈出在文本中出现的单词,看看出现了哪些模式以及如何将单词连接到类似的模式。
这也是一个练习,我看到了编程很多。在盘旋变量及其用途中,或课程及其实例给出了很多洞察力,对一个未知的代码库,并且再次是我可以* do *的东西。事实上,当我向我的高中教授变量时,即使在我深入阅读之前,我也在使用类似的技术!
在IZU等人的迭代工作组论文中还描述了类似的技术:
我认为这些技术肯定可以在学习程序时增加价值,我将继续将它们应用在我的课程中。
代码阅读俱乐部为程序员,但是该做什么你已经是专业人士?在我去年在斯特兰克努谈话之后,我还提出了这个想法,我接近了Katja Mordaunt,他很高兴在她的诺特里韦公司尝试这一点。她真的很高兴在专业环境中练习代码阅读,并且在过去的5个月里,她一直在运行代码俱乐部。
在所有诚实中,我都希望这个想法很快消失,似乎是一个很好的想法当然,但人们真的想每周花一小时阅读代码吗?事实证明,他们做了!该倡议非常成功,而且在平均时间,3个新俱乐部已经脱离了Katja的第一个俱乐部!参与者分享了他们离开这些会议的价值,例如:
“让我的评论越来越嘈杂 - 不是新的,而是一种可视化的提醒,可以对码比来做什么”
我也喜欢俱乐部对没有代码阅读的事情的影响,就像人们改善了与共享阅读练习的采访而不是白板锻炼! 我绝不会想到这一点,但我认为这也很有意义,可能会减少创建代码的令人生畏。 总之,我认为我们都同意阅读阅读代码是一个很好的技能,我认为我的具体运动可能有助于练习这一点,为学习者和专家们潜行这一点! 在GitHub上,您可以找到代码阅读俱乐部的所有信息,包括我的练习,每周笔记和回顾。 如果您正在考虑开始俱乐部,我很乐意听到它,有时候坐在! 喜欢阅读对此主题的工作。 感谢您分享和开放源您的研究和您的工作,以建立社区。