热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

不用苦敲代码也能提高编程能力?月薪百万老程序员的方法

如果你想提高编码的能力,最容易想到的一个方法就是多敲代码。每个人都知道这点。然而,另外一种我认为绝对也能提高的方法:阅读别人的代码能让你的编码能力得到明显的提升!这样

  如果你想提高编码的能力,最容易想到的一个方法就是多敲代码。每个人都知道这点。然而,另外一种我认为绝对也能提高的方法:

  阅读别人的代码能让你的编码能力得到明显的提升!

  这样说,可能很多人都抱有怀疑的态度,但是我觉得你应该相信。如果你愿意尝试,我相信你将会得到巨大的回报!

  这篇文章将告诉你如何阅读代码,阅读什么样的代码最有效。如果你已经很擅长阅读别人的代码了,那读完此篇文章,你可能会发现新的方法。

  应该阅读什么代码?

  这是一个很重要的决定,很难给出具体的建议。我无法简单的告诉你应该阅读这个代码还是那个代码,只能将一些指导方针,基本的原则告诉你。

  阅读那些你用得着的代码

  这一步最好从阅读那些你已经在使用的插件或者库文件开始。

  你非常喜欢的WordPress插件你觉得很有用的Ruby gem工具包你可能还会使用到的jQuery 插件

  这些都是你可以学习的非常好的例子。你已熟悉了它们的公共API,了解它们内部工作原理的障碍是较低的。此外,作为代码的用户,你有机会添加文档、实现新的功能,或者通常以某种方式给项目做贡献。

  阅读那些你印象深刻的代码

  我记得第一次看到280 Slides幻灯片网站时,我心里想:“这太让人印象深刻了。”我很快了解到,该网站的代码就是基于的Cappuccino开源项目。我把这些知识塞进了大脑的深处,当我最终遇到另一个令人印象深刻但同样是基于Cappuccino 的应用程序时,我知道我有一个项目,我可以从中学到很多东西。你最近对什么项目印象深刻?是开源的吗?如果是这样的话,这是一个很好的阅读选择,因为代码很可能会给你留下深刻的印象。

  阅读那些让你尊敬的大师写出来的代码

  如果你已经用开源软件编码了一段时间,可能已经有其他程序员赢得了你的尊重。在我的脑海中我能想到一些开发人员,他们写的代码简直令人羡慕。

  如果目前你脑海里面没有一个受人尊敬的开发者,想找到一个并不是什么难事。他/她可能已经在前两部分(你能用到的代码,或者给你印象深刻的代码)中授权了一些代码。

  阅读那些能给你带来灵感的代码

  如果你属于冒险型,那么可以考虑投身于一些大型项目,如Ruby on Rails框架,Drupal或jQuery。但是我建议暂时别接触这样的项目,除非你是一个有经验的而且已经很会阅读别人代码的开发者了。

  大型项目有更多的活动部件,你可能最终会因为这些概念而陷入困境,无法学到任何有价值的东西。困惑会导致沮丧,而更大的项目更有可能让你在阅读中感到困惑和气馁。选择一个小项目阅读的好处是可以一次将整个程序逻辑放在脑子里。这样你就可以关注细节,从而学习到很多知识。

  如何阅读?

  既然你已经选择了一些代码来阅读,那么最好的阅读方式是什么呢?下面提供一些方法来最大化你的投资回报率,也就是读的少,但是收获多。

  先看大框架

  假设你至少在宏观层面上知道你所读的代码是如何实现的。如果没有,我建议先阅读项目的网站、教程、文档,以及除了代码之外你可以掌握的其他任何东西。

  好了,如果上面的步骤完成了,那我建议你第一步就是先大致浏览一下项目的架构。这个阶段的工作量根据你选择的代码库大小的不同也不一样,但是还是需要一点时间的。

  首先,注意文件结构。这一步可以使用一些具有文件夹层次结构视图的编辑器提供帮助,比如TextMate。例如,这里有一个关于Twitter Ruby gem的很好的概述。

  这一步的目标是熟悉源代码。找出哪些文件包含/请求/加载其他文件,其中大部分代码在哪里,如果有的话,使用的命名空间是什么,以及这些性质。一旦你掌握了大局,你就可以深入挖掘细节了。

  记录阅读心得

  阅读代码不应该是一种被动的行为。当你开始理解程序流时,我鼓励你在开始时添加注释,记录你的假设和结论。当你第一次开始的时候,你的记录大概会是这样的:

  随着你的理解进展,你可以删除你当时留下的无关紧要的一些评论,也许还可以写一些有意义的、权威的评论,这些评论可能会被提交给你的项目。

  边阅读边测试,例如Luke

  希望你所选择的项目有一个测试套件。如果没有,您可以完全跳过这部分(或者找到一个)。

  当你阅读别人的代码时,测试是一个很好的起点,因为他们记录了代码应该完成的任务。有些测试比其他测试更有意义,但是不管编写得多么好,你经常会发现程序员在测试中的意图比在实现中发现的要容易得多。在阅读时,试着让测试套件成功运行。这将确保您的开发环境得到适当的配置,并使您在进行更改时更加自信。

  亲自动手做

  谁说阅读代码时双手就得闲着?只有当你把所有的东西都打乱了,然后自己试着重新拼装好时,才能在这个过程中真正理解。还记得那些通过的测试吗?想办法让它们失败,添加更多,或者尝试更改实现的逻辑而不破坏它们。尝试添加一个你认为很酷的小功能,或者设置项目范围的日志记录,这样就可以在代码的不同阶段打印输出。这还是在阅读吗?当然,但在这一点上,就得取决于自己的选择了,看你是把它当作冒险来看,还是把他当作一本神秘的小说来看了。这是一件好事!

  清除再重复

  一旦读完了一个代码库,再选一个,然后重新开始这个过程。代码读的越多,你就能从阅读中获取更好的信息,你花的时间就越少。我认为你会发现投资回报增长很快,而且这是一种非常有趣的学习方式。

  从哪里入手呢?

  哪里的代码质量最高,我想给程序员带来最大影响的就是GitHub。这个网站让你很容易找到新的项目和优秀的程序员,如果你还没有利用它,我觉得你就是在伤害自己。建议先从GitHub开始,然后直到找到一个你认为可以从中学习的项目,再转移到其它网站阅读。接下来可以先从git clone入手开始阅读!




推荐阅读
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 解决php错误信息不显示在浏览器上的方法
    本文介绍了解决php错误信息不显示在浏览器上的方法。作者发现php中的各种错误信息并不显示在浏览器上,而是需要在日志文件中查看。为了解决这个问题,作者提供了一种解决方式:通过修改php.ini文件中的display_errors参数为On,并重启服务。这样就可以在浏览器上直接显示php错误信息了。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
author-avatar
骑蜗牛找-矿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有