自学编程的六点技巧

有一天,我的一个在学编程的朋友问我:“我想快速学习编程,你有什么好的推荐吗?我曾在上大学的时候自学过编程,这么多年过去了,我意识到我或许是在用最困难的方式去学习和了解编程。本来我完全可以用更快的速度学习。因此,在回顾了过去之后,我写下了这些年来我渐渐掌握到的关于如何学习编程的一些事情。

4418040-ee7ad0ff468ad548

“快速”

对于“如何快速学习编程”这个问题,其实我真的不知道何谓“快速”。我觉得,通过遵循以下建议,你将很快地学习编程(至少你的成长/进步会快)。但你真的不应该眼中只有“快速”。只追求速度反而会拖你的后腿,让你自食其果。“快速”学习的唯一可持续方法或许是采用浸泡式教学法。找到一种方法让自己沉浸在编程中很长一段时间(几个月?)。为了让它奏效,你需要不断推动自己去学习新的东西,并迅速抽身离开。这是编码训练营的一个优点。当你出来时,尽管你还不是专家,但你会学得更快。这也可以通过专门的导师教导或与专门的初学者一起学习来实现。

01、读>写代码>读>写代码(日复一日)

关于如何高效学习编程我要给出的第一条建议是在阅读代码和编写代码之间循环往复。阅读代码(书籍,博客文章,开源代码)将帮助你查看解决方案,了解最佳做法,并大致了解语言或系统。但是在你这样做之后,你需要自己实际去写代码。可以是任何东西。可以是小的编码练习或业余项目,但确保你能将之付诸于实践,并用某种方式使用你学到的东西。如果你不这样做,那么你会发现自己面对编辑器会无所适从无从下手。

这方面的诀窍是让自己感到不舒服。这是相当痛苦的,但就应该这样。编码遵循80/20规则。花80%的时间在20%的代码或20%你所学的东西上。习惯于这种不舒服的感觉并克服它是关键。

这个迭代周期不应该以周为周期或以月为周期发生,而是应该以日为周期。知识等待使用的时间越久,知识这把斧头就越钝。等待学习新知识的时间越长,你就越难以将其融入到代码中。

我推荐阅读关于通用编程主题的网站是lobste.rs。上面有许多关于许多编程主题的文章。另一个好的网站是Hacker News,但网站时常偏离话题。

02、不要陷入僵局,必要时去请教大神

我最大的错误是在学习编程陷入僵局的时候用了太长时间。在被卡住时,我会花很多时间在一些愚蠢的东西或一些我根本上不明白的东西上。有时候我需要花费好几天时间才能完成这些工作,而原本我可以用这些时间做更多的事情和学习更多的东西,如果我能找到更好的解决方法的话。卡在一个东西上面超过一个小时基本上就是在浪费时间了。

我推荐三件事情以避免僵局。第一是试着总是关于你使用的技术,并总体掌握正在发生什么。通常,当你陷入困境时,意味着你对需要澄清的事情做出了不正确的假设。第二是咨询互联网。这一点很显然,但依然值得一提。在网上查找并询问有过这个问题的人是一个非常重要的技能。Stackoverflow可以说是互联网上最好的网站。不要害怕在那里问自己的问题。通常,只要尽力正确地阐述你的问题就OK了。我真的希望以前我能多问些问题,但总是因为害怕会显得愚蠢而止步。我的第三个建议是向你认识的人请求帮助。通常,你或许已经理解了技术,而且有了问题,但是你可能需要更高层次的上下文才能真正解开谜团。不要胆怯,大着胆子上前去问吧。

例如,当学习Docker时,我花费了大量的时间从头开始重新构建图像。我从根本上不明白docker缓存,并用20分钟时间来等待单个更改到Dockerfile通过。我可能花了8个小时就用在等待构建上。如果我读过更多关于Docker或问一个知道的人,那么可能我早就搞明白了,还可以在更短的时间内学到更多。

03、为项目而工作

在我的经验中,没有什么可以与工作于自己的项目以学习编程更有用的了。除了一些例外,我所知道的所有真正优秀的程序员都有一个习惯就是工作于业余项目(这也可能发生在工作中!)。有了一个点子并试图实现这个点子是非常具有挑战性的。它需要很强的自律心。但是,通过尝试实际做一件事情,你可以学到如何分解问题并应用技术。你面对的各种问题,以及你如何解决它们才真正是所谓的编程。知道编程语言的每一个古怪细节的确是有帮助的,但它只会让你越来越落伍。此外,想要完成项目的驱动力是继续学习的动力。从业余项目获得的满足感远远超过你在抽象中学习东西的满足感。

我对于选择业余项目的建议是,选择你感兴趣同时你也有想法如何实现的东西。能够在开始之前表达实现总是有助于保持我的动力。在此旅途之中你一定会学到很多!

04、多钻研技术,不要总是复制粘贴

有两种类型的程序员:完美主义者和搬运工。有些人希望一切都是正确的,他们希望完美,他们希望遵循所有的最佳实践,并写出漂亮的优雅代码。他们想要理解每一行代码。有别于那些不管三七二十一,只要自己的代码能工作即可,即使对代码库有损害的人。平衡这两种技能是非常重要的。有时你应该深入钻研一个问题或项目,看看发生了什么。有时你应该让它工作即可,即使你不知道发生了什么。

每当你花费太多时间在某个东西上时,那就问问自己:我应该采取哪种方法?在大多数情况下,你会想取中间值。你想提供一个好的、坚实的解决方案,同时你可以自信地理解和修改,但没有耗费荒谬的时间。随着你作为开发人员的成长,你会更好地明白什么时候就此离开就可以,以及什么时候需要以某些方式完成。

就个人而言,我喜欢我的项目80%完美。如果你的项目是绝对100%完美,没有一行代码让你觉得尴尬,那么很有可能你已经花了太多的时间。

05、多和别的程序员进行沟通交流

学习编程的一个很好的方法就是和其他的程序员交谈。不必谈论任何特定的内容。可以是你正在学习的东西,可以是你认为很酷的东西,可以是你正在工作的东西,皆可。你会发现很多程序员并不喜欢只是聊编程。这样做可能会让你学到很多关于库,服务,编程语言和模式方面的知识。但是,最重要的是,你将了解到其他人是如何看待编程的。你会发现,你认为理所当然或从来没有考虑的事情在人与人之间是非常不同的。

如果你没有什么可谈的,那就回到编辑器战争或tab vs space的话题。

06、尝试一切。如果搞不懂的话,那就等6个月。

最后,我要说的是,一直以来在我身上发生着这样的事,我尝试过很多东西,但我就是不理解。在用30分钟尝试新的东西后,我会停下来。我想这在起步时是很正常的。但是,我记得很多次,在6个月后(或3个月或9个月),我会回到同样的问题或技术上,弄清楚如何使用它。这是因为我又掌握了一些我以前不具备的知识,或者因为它只是另一种方式的框架。等待一段时间,然后回去,总是一种最有用的方法。

这方面的一个例子是学习如何使用终端。我记得很长一段时间我都害怕碰到终端,因为我不知道如何使用。我花了一段时间并按照步骤定期地使用它和理解它。当然,如果我认识可以向我解答的人,或者找到一个好的资源来学习,这样的事情就不会发生!

结语:

这些事情可以帮助新手在他们漫长的旅程中学习编程。我知道我还有更多东西需要学习,并将继续学习如何永远地学习。最重要的事情说三遍,请继续,不要放弃,不要放弃,不要放弃。当然,说说容易,因为学习编程有时可能会令人非常沮丧!不要担心。这是正常的。每个人都经历过这样的心情。

欢迎关注我的公众号(同步更新文章)DoNet技术分享平台

阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AngularJs $anchorScroll、$controller、$document

$anchorScroll 根据HTML5的规则,当调用这个函数时,它检查当前的url的hash值并且滚动到相应的元素。 监听$location.hash()并且滚动到url指定的锚点的地方。可以通过$anchorScrollProvider.disableAutoScrolling()禁用。 依赖:$window $loca…

Jquery操作复选框总结

1、获取单个checkbox选中项(三种写法)$("input:checkbox:checked").val()或者$("input:[typecheckbox]:checked").val();或者$("input:[nameck]:checked").val();2、 获取多个checkbox选中项$(input:checkbox).each(function() {if ($(this).att…

java对五排六列考生随机排座,Java入门第三季6-5扩展练习-随机字符串排序

原课程地址https://www.imooc.com/video/4254* 扩展练习要求* 利用Collections.sort()方法对泛型为String的List进行排序版本2* 1.创建完List之后,往其中添加10条随机字符串* 2.每条字符串的长度为10以内的随机整数* 3.每条字符串的每个字符都是随机生成的&#xff…

信息安全系统设计基础第十周学习总结

第八章 异常控制流 (1)控制流:控制转移序列。 控制转移:从一条指令到下一条指令。 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。 (2&#xff09…

MVC、 MVP、 MVVM之间的区别

一、 简介三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试。二、MVC/MVP1 、MVC1、View接受用户的交互请求2、View将请求转交给Controller3、Controller操作Model进行数据更新4、数据更…

java散列法的运用实例,Java HashMap compute() 使用方法及示例

Java HashMap compute() 使用方法及示例Java HashMap compute()方法计算一个新值,并将其与哈希映射中的指定键相关联。compute()方法的语法为:hashmap.compute(K key, BiFunction remappingFunction)compute()参数compute()方法有两个参数:ke…

team geek

1. 转载自http://book.douban.com/review/6007037/,版权归丸子(^.^)v所有。 New Google employees (we call “Nooglers”) often ask me what makes me effective at what I do. I tell them only half-jokingly that it’s very simple: I do the Right Thing for…

程序员经典语录

1.A good programmer is someone who always looks both ways before crossing a one-way street. (Doug Linder)好的程序员即使在过单行道时也总是会环顾两边。2.Don’t worry if it doesn’t work right. If everything did, you’d be out of a job. (Mosher’s Law of Soft…

数字图像处理应用matlab,数字图像处理与应用(MATLAB版)

第 1章 绪论 1n1.1 图像的概念 1n1.2 图像的分类 2n1.3 图像的表示 2n1.3.1 图像信号的表示 2n1.3.2 数字图像的表示 3n1.3.3 颜色模型 4n1.4 …

HDU 3948 不同回文子串个数

集训队论文中有求不同子串个数的做法,就是扫一遍height数组,过程中根据height数组进行去重。对于本题也是雷同的,只是每一次不是根据与排名在上一位的LCP去重,而是与上一次统计对答案有贡献的后缀进行比较去重。 几组数据 abacaba…

如何成为一名优秀的程序员?

1、理解技术债务技术债务就像信用卡一样,会有很高的利息率,时间越长,修复所花的代价就越大,程序员对这个要有深刻的认识。同时团队应该培养一种保证设计质量的文化,应当鼓励重构、同时也应当鼓励其它有关代码质量的实践…

php 发邮件附件pdf,php – 使用TCPDF发送电子邮件附件 | 码农网

我有一个简单的课程申请表,填写完成后,会向申请人发送一封电子邮件,并附上他选择作为pdf附件的课程的费用报价.我正在使用TCPDF并使用会话变量将数据从表单传递到库.内容采用 html 格式.生成PDF并根据需要作为附件发送.问题是它是空白的..只有页眉和页脚在文档中.在 linux 中尤…

数据库同步传输软件

Navicat转载于:https://www.cnblogs.com/jizl/p/4995959.html

DoNet 高效开发必备开发工具

工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为 ASP.NET 开发者介绍一些高效实用的工具,包括 SQL 管理,VS插件,内存管理,诊断工具等,涉及…

php eval 语法错误,PHP eval和捕获错误(尽可能多)

我找到了一个很好的替代方案/答案 .首先,让我首先说当我设置error_reporting(E_ALL)时,nikic的建议有效;通知显示在PHP输出中,并且由于OB,它们可以被捕获 .接下来,我发现了这个非常有用的代码:/*** Check t…

防止表单重复提交的解决方案整理

用户在操作表单Post数据时往往会出现表单数据重复提交的问题,尤其在Web开发中此类问题比较常见。刷新页面,后退操作以前的页面,单机多次按钮都会导致数据重复提交。此类问题是因为浏览器重复提交HTTP请求导致。下面列出了四种比较常用的解决方…

免费字典api ,查询汉字完整信息

最大最全的新华汉语词典,字典api根据接口列表返回的汉字id,查询汉字完整信息。 接口名称:字典api 接口平台:第三方api 接口地址:http://v.juhe.cn/xhzd/queryid 支持格式:json/xml 请求方式:htt…

python正则去除换行符,关于python:用于删除换行符的正则表达式

我是Python的新手,我遇到了正则表达式问题。 我正在尝试删除文本文件中每行末尾的换行符,但前提是它跟在小写字母后面,即[a-z]。 如果该行的结尾以小写字母结尾,我想用空格替换换行符/换行符。这是我到目前为止所得到的&#xff1…

收集一些程序员励志经典名言

1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。2、程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇…

Android develop 国际化

转自别人的一片文章,出处以找不到了,觉得写得不错,记录一下 一、概念 1.Internationalization(I18N) 国际化 使得App在不改的源码、资源文件的情况下,能够适应各国、各文化、各语言 是L10N的基础 2.Localization(L10N) 本地化 为A…