学习如何学习

作为一个有效的学习者至少与成为一名高效的编码人员一样重要。

当你是一名开发人员时,你的工作要求你每天都要学习 - 尽管像黑客新闻,Twitter,Reddit和Facebook一样引起了分心。

您经常遇到新的代码库和工作中的新技术挑战。当你处理开源回购和个人项目时,家庭并不是更好,每个项目都有自己的流程和挑战。

技术世界变化很快,它可以感觉像是一份全职工作,只需跟上最新的工具,语言和框架。

长话短说:学习很难。然而,我们需要能够快速有效地学习才能茁壮成长。

在过去的一年里,我从不知道如何使用Chrome调试器到为一家领先的加密货币公司担任软件工程师。在这个过程中,我迅速学会了一项新技能(编码)。

也就是说,学习对我来说并不容易。

老实说,每一个新概念都是一场斗争。有太多的未知数和太多的不确定性。

“这个世界怎么可持续?”我心想。

“如果这是学习编码应该感觉像每天,我会很痛苦。这真的是我的热情吗?“

“如果这是我的热情,对我来说这不容易吗?艺术家难以创作艺术吗?作家难以写一本好书吗?运动员在比赛中努力做得好吗?当我们追求激情时,我们是否应该挣扎?“

“我不应该对此感到高兴吗?”

它变得容易了吗?

是的,它确实。一年后,在需要纪律和努力工作的意义上,解决新的编程概念仍然是“困难的”。

但它也成为一个令人愉快的过程,而不是压倒性的过程。

去年发生了什么让这种转变成为可能?

简单:我改变了对学习的看法。曾经让我感到“困难”的东西变得“迷人”。

在帖子的其余部分,我将解释这种转变是如何发生的。

刚刚开始

学习编码在开始时是最难的。

例如,考虑一下您必须学习的第一种编程语言。你想要解决语法和风格等小问题。但首先,您必须理解困难的核心概念,如值,类型,运算符,控制流,函数,高阶函数,范围,闭包,递归等等。

感觉就像学习玩杂耍一样 - 但是从十八个引脚而不是两个引脚开始。

当我第一次了解关闭时,我花了好几周才真正理解这个概念。当我读到它时,我以为我明白了。但是当我尝试在实践中识别和使用闭包时,我发现自己很难过。

这并不罕见。我也把这个过程视为老师:新概念通常不会在第一时间点击。或者第二个。甚至是第十个。

但对于那些坚持不懈的人来说,会有一个“突破点”,事情突然变得有意义。在我的例子中,我读了每篇博文,Stack Overflow帖子,以及关于闭包的互联网规范。

我阅读和试验过的所有内容都给了我一个新的视角,直到最终,我对封闭的工作方式进行了360度的心理描绘。闭包“点击”。

我觉得这种对闭包的理解是非常重要的,因为它是有益的,并且鼓励我去做更多 - 包括编写我自己的博客文章解释这个概念。

学习是一个过程,而不是目标
如果我们将学习视为我们“必须”做的事情,那么我们就会急于完成它,这样我们就可以花更多的时间做一些更“有趣”的事情 - 我们“想要的”去做。

问题在于,无法了解任何事情,因此将学习视为一场比赛会导致倦怠和失望。

相反,如果你将学习视为一个过程,你将会欣赏沿途的小胜利和见解。这将推动你不断前进。

你可以将它与运动进行比较。锻炼受伤,然后一旦锻炼结束疼痛就会结束。但它永远不会消失。下次锻炼时它正等着你。除了每次,疼痛变得不那么刺耳了。你学会应付它。你熟悉疼痛,它只是成为常规的一部分。你会得到更好的健康和更好的体质的奖励,并被激励继续前进。

练习创造了一个积极的反馈循环

学习也是如此。

将学习转变为引人入胜的过程

想象一下构建您的第一个Web应用程序。

首先,你所拥有的只是一个令人生畏的空白文本编辑器。构建应用程序的任务似乎几乎无法克服。你什么都不知道,在你能做到这一点之前还有很多东西需要学习。

谢天谢地,无论如何你决定去做吧。

从那时起,您的主要关注点就是一次只做一小步。

首先,你创造一个想法。你会建造什么?谁是最终用户?有什么限制?

其次,您可以根据自己的想象制作原型或草图。您可以向您的朋友或互联网寻求反馈,并进行迭代以使其更好。

第三,您研究最符合您要求的语言,工具和框架。

一步一步地训练你的思想,将所有的精力都用于实现这一目标。

有时你正在编写代码。

通常情况下,你会因某些错误或错误而停滞不前。

有时你太累了,不能做任何工作,所以你休息一下。

其他时候,你不喜欢编写代码。没关系。您花时间研究或阅读与项目相关的主题。

最后,经过几周的努力,你已经建立了一个可以处理你的重大创意的基础。突然之间,处理你的应用并不会感到痛苦。你看到了最初的努力工作的回报,现在它只是你需要编写的另一段代码或者你需要做的其他一些重构 - 你已经做了100次,没问题。

你把曾经令人生畏或可怕的活动变成了复杂而迷人的活动。

这就是我们成长的方式。这就是我们变得更好的方式。无论是编程,跳舞,跑步还是阅读:这都不容易,当你“完成”学习时,永远不会有时间或地点。

相反,享受将精力投入到某些事物中的过程,并享受随之而来的痛苦。你会开始注意到你不再将它描述为“痛苦” - 因为曾经痛苦的东西会成为下一步的象征:个人成就感和自我满足感。

换句话说,斗争和享受将开始意味着同一件事。记住周期:

学习技术主题的一种方法

让我告诉你一些我遵循的学习过程。这不是所有学习风格的全部,所以如果不同的东西适合你,请在评论中分享!万一你不能说,我是这个东西的书呆子:)

我们以学习React.js库的过程为例。

学习这个的动机是什么?
第一步:我从谷歌搜索React.js文档开始,并阅读一些关于库的背景和动机。

了解任何主题背后的“原因”对于构建学习过程非常有帮助。它回答如下问题:

这与其他解决方案有何不同?

这对我有用吗?

这个解决方案有哪些问题需要解决?

这只是一个新的闪亮工具,它只会在几个月内有用,还是会从根本上改变我的想法和编码方式?

阅读和理解核心概念

其次,我会阅读文档中提供的任何介绍文章或示例。

请注意,我还没有触及任何代码。在动手实验之前,阅读和沉没核心概念。这样做非常重要,因为它为我的其余学习奠定了基础。

即使我可以在不学习核心概念的情况下盲目地使用React.js,但是当我遇到一个bug时,它最终会赶上我。

第一次编码

花了一些时间在上面的步骤后,我开始了解正在发生的事情,或者甚至觉得我完全得到它。然后是时候跳进一些代码了。

我通常会尝试使用任何新工具构建一些非常小的东西,方法是在进入自定义项目之前遵循视频教程(例如,在egghead.io上)或书面教程。

当你卡住了

......然后,我不可避免地陷入困境。

阅读文档看起来像小菜一碟,但实际上在实践中使用它让我意识到我不知道发生了什么。

这是我开始觉得可怕的“放弃”的感觉。但是当我变得艰难时,我不会放弃,而是提醒自己痛苦= =获得。回头会很懦弱。

这是我做的事情:

我首先缩小并弄清楚我实际上遇到了什么 - 即定义问题。然后我想出了我认为可能是问题的根本原因或原因的假设。即使我不知道,我只是猜一猜。

然后我离开问题和我的电脑,做一些放松我的事情。当我对我坚持的问题感到不安时,这是非常难以做到的,但放下这个问题会产生奇迹。(有没有注意到淋浴时总是有多好的想法?)

现在我尝试用我的假设进行调试。在没有在网上寻找答案的情况下,我尽可能地得到了我的假设 - 当你试图通过自己首先真正深入思考问题来解决问题时会发生一些美好的事情。即使你走的是错误的道路,你做出努力的事实会教会你很多,而且下次遇到问题时你会更好地记住问题空间。

如果我的假设得出答案,万岁!我受够了。如果没有,我谷歌搜索文档,博客文章或Stack Overflow帖子,可以帮助我更接近答案。

在阅读时,我会记录可能有用的任何和所有信息。

仍然没有解决方案 没关系。我确信通过阅读所有这些来学习有价值的东西,即使它没有直接帮助我解决手头的问题。谁知道这些知识何时可能在下次派上用场?

此时,如果我真的陷入困境,我会在Stack Overflow上发布一个问题,或者询问我认识的同事或开发人员。

否则,我冲洗并重复,直到我接近最终的解决方案。在某些时候,答案总会来临。

有时这个过程需要几秒钟,有时需要几个小时(或几天)。无论哪种方式,该过程本身对您作为开发人员的技能都非常有益。

卡在一个虫子上感觉就像在黑暗的隧道中寻找一缕光线一样磕磕绊绊。你最终会找到它,但是沿途你发现了很多关于隧道的知识 - 而且它对“隧道”的了解使你成为一名强大的编码员。

将调试视为探索的机会,而不是绕道而行,并且变得更有趣。

冲洗并重复

到目前为止,在学习过程中,我已经建立了一些小的东西,并在此过程中解决了一些小障碍。正如你所看到的,这是一场斗争 - 显然,我需要使用新工具进行更多练习。

所以,我再次尝试自己构建一些东西。而不是直接跳到一个大的自定义项目,我会寻找一个基于我的应用程序的回购。

例如,如果有一个使用React.js的在线CRUD todos示例(当然),也许我将构建一个不同类型的CRUD应用程序。只是不同,足以让我保持参与,但没有那么不同,如果出现问题,我会气馁。

征服

掌握需要重复,所以我一直在构建更多的小项目,直到我觉得我已经掌握了核心概念。

最终,我开始能够自己拼凑一些东西,而不必经常引用文档或示例。只有这样,我终于冒险出去,自己从头开始构建一些东西。

在整个过程中,我的目标是让这个过程变得有趣和吸引人。我不断地推动自己去做一些比我现在所能做的更难的事情,但不要把自己投入到深层,这样我才会气馁,永远不会完成。

最后,一旦我发现自己太沮丧而无法享受这个项目,我一定会离开。

学习很有趣

通过一些努力和结构,学习编程变得异常有趣。起初它非常复杂,在我看来,这就是为什么这么多人会被吓跑 - 不是因为它“无聊”,而是因为它“很难”。

在您完成这个学习过程几次后,处理新信息就成了肌肉记忆。你真的没有想过。你只是学会驾驭痛苦的浪潮,并在奖励中找到快乐。

像魔术一样,它变得“更容易”学习。

转载于:https://www.cnblogs.com/klsfct/p/9531215.html

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

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

相关文章

Python reload() 函数

Python reload() 函数 描述 reload() 用于重新载入之前载入的模块。 语法 reload() 函数语法: reload(module) 参数 • module – 模块对象。 返回值 返回模块对象。 实例 以下实例展示了 reload() 的使用方法: 重新载入 sys 模块,并设置默认…

java快速排序直观演示代码,排序算法总结(含动图演示和Java代码实现)

本文将围绕冒泡排序、桶排序、计数排序、堆排序、插入排序、并归排序、快速排序和选择排序,按照描述、时间复杂度(最坏情况)、动态图展示和代码实现来讲解。本文默认排序为从小到大。本文相关代码已上传至github,欢迎关注https://github.com/zhuzhenke/c…

python ssh脚本_ssh爆破(python脚本)

最近在乌云看到一份端口详解:为了锻炼自己,按照端口详解写脚本#!/usr/local/bin/ python# -*- coding: UTF-8 -*-__author__ yangxiaodifrom multiprocessing import Poolfrom pexpect import pxsshimport sysreload(sys)sys.setdefaultencoding( "…

SVG_text.动态创建换行显示(横)

1、我的测试代码 1.1、 <?xml version"1.0" encoding"UTF-8"?> <svg width"1000" height"800" viewBox"-500 -200 1000 800" xmlns"http://www.w3.org/2000/svg" xmlns:xlink"http://www.w3.org/…

python之sys

python版本: Python 2.7.6 1: sys是python自带模块. 利用 import 语句输入sys 模块。 当执行import sys后, python在 sys.path 变量中所列目录中寻找 sys 模块文件。然后运行这个模块的主块中的语句进行初始化&#xff0c;然后就可以使用模块了 。 2: sys模块常见函数 可以通过…

php在html中生成option,使用PHP可以将HTML SELECT/OPTION值设为NULL吗?

以下是我的HTML表单中的片段&#xff0c;从相应的表行中提取选项。我想要做的是将第一个选项值设置为NULL&#xff0c;因此当没有选择时&#xff0c;将表单提交到数据库时输入NULL。Type:$sql mysql_query("SELECT type_id, type FROM $tbl_add_type") or die(mysql…

scrapy ip地址 tcp time out_TCP的运作流程(一)——“三次握手”

前言看过前面有关两篇HTTP的文章的同学&#xff0c;想必对HTTP已经有了一定的了解。在HTTP初始(一)中提到过TCP/IP四层网络模型&#xff0c;这次我们就来详细了解一下TCP传输。因为时间和篇幅所限&#xff0c;本篇讲分为两章&#xff0c;本章讲TCP的三次握手&#xff0c;下章讲…

超级强大的socket工具ss,替代netstat

1、结论&#xff1a;ss 命令比netstat 更强大&#xff0c;提供功能更多&#xff0c;并且性能更高。 2、显示当前系统的socket占用总体宏观情况。 ss -s 当已创建的socket数过多时&#xff0c;已经说明系统配置存在问题。 3、显示tcp的socket情况 ss -a -t 显示udp的socket情况…

c++,c.c#区别

C则一般看作是对C语言的扩展。 Java语言是一种完全的面向对象语言&#xff0c;虽然它的底层&#xff08;运行时库&#xff09;是用C语言开发的&#xff0c;可是并不依赖于C。 C#是微软开发的一种编程语言&#xff0c;语法类似Java&#xff0c;几乎就是从Java的翻版。 &#xff…

php.ini 老薛,出现Allowed memory size of 134217728 bytes exhausted怎么办?

有站长在交流群内说到使用 ZBlogPHP 建站在发布文章的时候总是出现以下错误&#xff1a;Allowed memory size of 134217728 bytes exhausted(tried to allocate 12288 bytes)允许耗尽内存大小为 134217728 字节(试图分配 12288 字节)具体如下图所示&#xff1a;134217728 bytes…

python歌曲_python抓取并下载音乐歌曲

import requestsimport jsonimport osclass My_Music():def __init__(self):print("*"*25"音乐抓取器""*"*25)key_name input(*请输入你要查找的歌曲名称*&#xff1a;)num input(*请输入你要查看歌曲列表第几页*&#xff1a;)self.headers {…

UVA 1645 - Count(简单DP)

题目链接 https://cn.vjudge.net/problem/UVA-1645 【题意】 输入n&#xff08;n<1000&#xff09;统计有多少个n个结点的有根树&#xff0c;使得每个深度中所有结点的子结点数相同 【思路】 设答案为dp[n]&#xff0c;肯定要拿一个结点作为根&#xff08;第0层&#xff0…

winform窗体

WinForm是Net开发平台中对Windows Form的一种称谓。 中文名 Winform 特 点 功能强大 操作方便 新的数据提供程序管理 使用安全 利用公共语言运行库的安全特性 特点 Windows窗体的一些重要特点如下&#xff1a; 功能强大 Windows窗体可用于设计窗体和可视控件&#xff0c;以创建…

win8配置mysql5.6,win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装

Mysql5&period;5升级到5&period;7后MySQLdb不能正常使用的问题解决ubuntu系统 报错信息1 Type "help", "copyright", "credits" or "license&qu ...Python学习笔记之Beautiful Soup如何在Python3.x中使用Beautiful Soup 1.Beau…

python词频统计结果写入csv_Python词频对比并导入CSV文件

需要用到的停用词库我上传到我的资源了&#xff0c;大家也可以自己去网上找&#xff01;本来是想把两个词频统计放入一个CSV文件中&#xff0c;但是无奈向已经存在的CSV文件中追加写入数据只能在已经存在的数据下面追加&#xff0c;也就是在同一列追加&#xff0c;不能另起一列…

计算公式

公式&#xff1a; 1 网段数2^可变的网络ID位数 2 一个网段中主机数2^主机ID位数&#xff08;32-网络ID位数&#xff09;-2 3 CIDR无类域名路由:网络ID位数不确定&#xff0c;CIDR表示法&#xff1a;IP/网络ID位数 10.0.0.100/8 255.0.0.0 4 网络IDIP与netmask 5 判断目标主机是…

实例3:python

#一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少&#xff1f; #假设该数为 x。 #1、则&#xff1a;x 100 n2, x 100 168 m2 #2、计算等式&#xff1a;m2 - n2 (m n)(m - n) 168 #3、设置&…

php word excel,PHP 生成word 和 excel 文档

xmlns"http://www.w3.org/TR/REC-html40">word 中要显示的内容&#xff0c; 由于word支持html格式, 所以中间这一部分使用html文档就可以.?如果做文件下载:?header("Content-type:application/vnd.ms-word");header("Content-Disposition:filena…

实例4:python

#输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff1f; #!/usr/bin/python -- coding: UTF-8 -- #!/usr/bin/python -- coding: UTF-8 -- yearint(2019) monthint(8) dayint(13) months1[0,31,60,91,121,152,182,213,244,274,305,335,366] #闰年 months2[…

堆排序python代码实现_python实现堆排序

首先理解堆排序&#xff1a;堆&#xff1a;堆栈是计算机的两种最基本的数据结构。堆的特点就是FIFO(first in first out)先进先出&#xff0c;这里的话我觉得可以理解成树的结构。堆在接收数据的时候先接收的数据会被先弹出。栈的特性正好与堆相反&#xff0c;是属于FILO(first…