forked from lxy0xff/the-craft-of-selfteaching
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d60d228
commit 9f018a1
Showing
1 changed file
with
35 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# 一个野生程序员的自学之路 | ||
|
||
作者:陈俊鸿(PRESSone 前端工程师) | ||
|
||
我大学专业是电子工程,主要是研究电路。但毕业之后我并没有从事这方面的工作。最主要的原因是我觉得这个行业很难自学成才。而且这也不是我喜欢的行业。后来有个朋友推荐我学习编程,他让我从前端(写网页界面)入门,因为这样会比较容易。于是我把自己关在房间里面,上网找了一堆教程资料,然后跟着教程写代码,一边看着浏览器运行的结果。当我看到自己的代码在浏览器中实现各种效果,就觉得很有成就感。虽然当时的我对于眼前的代码,还是有很多不懂的地方,但也觉得有意思,好玩。就这样学习了三个月。 | ||
|
||
在这个过程中,我觉得最有意思的是,电脑里面的所有事情,都是我能控制的。只要思路和做法正确,就一定能得到自己想要的结果。我开始喜欢上这个过程。当我能够从头到尾控制一件事情时,我会觉得非常爽。 | ||
|
||
当然了,一开始,磕磕巴巴总是难免的。我总是会遇到一些我解决不了的问题。绞尽脑汁,反复尝试也都是错的。内心很烦躁。于是我学会了一个非常重要的技能:「通过某种方式,使用谷歌搜索」。我学会了如何根据自己的问题,搜索答案。后来我发现,我遇到的大部分问题,别人都有遇到过,网上都有现成的答案。我在这个时刻真正感觉到了互联网是一个神奇的地方。 | ||
|
||
在这个过程中,我也深深体会到英语的重要性。在计算机领域,大部分有价值的信息都是英文的,不会英文将吃大亏。对于英文的要求,也不是很高,够用就行,因为我是一个连四级英语都没考过的同学,现在也能无障碍地用英语,并且还在不断地用,不断地学。有人说:「英语是一个程序员的天花板」,我非常认同。 | ||
|
||
后来,我自学三个月之后,找到了第一份工作。当时的工资很低,但我还是心怀感激,毕竟这为我开启了通往编程世界的大门。这时候我有了新的感悟:在工作中运用知识,和自己私底下练习是很不一样的。因为需要考虑的因素更多,遇到的问题也千奇百怪。在这段工作经历中,我的编程水平成长迅速,我开始觉得:做中学(Learning by doing)是效率最高的学习方式,也是最用有趣的方式。 | ||
|
||
我对于工作的态度就是打怪升级。不断遇到新问题,思考问题,解决问题。不断重复这个过程。于是我慢慢地发现了编程的本质。 | ||
|
||
编程在我看来,其实就是通过计算机解决问题。慢慢地你会发现,你大部分时间不是花在写代码上,而是思考如何解决问题。编程语言就是工具,在开始解决问题之前,我们需要先打磨好工具,所以要先学习语法,学完基础知识之后,就可以开始解决问题。这时候我发现一个很重要的技能 — 分解问题。当遇到复杂的问题时,不要慌,把它分解成一个个小问题,颗粒度越小越好。然后每次只解决一个小问题。最终把所有答案组合起来,就是一段一段代码。我发现这个解决问题的模式,对我的工作和学习帮助非常大。对于处理生活中的事情,也可以遵循这个模式。非常好用。 | ||
|
||
每一个新技术都是为了解决问题而诞生的。所以我在学新技术的时候,会围绕这几个方面: | ||
|
||
1. 这个技术解决了什么问题? | ||
2. 它的优势是什么? | ||
3. 它的劣势是什么? | ||
4. 它和 xx 技术有什么不一样? | ||
5. 在什么场景下可以使用它? | ||
6. 如何正确地使用它? | ||
7. 它的实现原理是什么? | ||
|
||
学习每个技术,我都会尝试去解答这些问题。有了答案之后,这个技术就可以为我所用。我就知道应该在什么时候,从我的工具箱中把它拿出来用。 | ||
|
||
在学习的过程中,我不太喜欢单纯地啃书看资料。我更喜欢可以立刻看到结果的学习方式。所以我喜欢的教程有如下特点:手把手教程,互动学习,可以做出一个具体作品。因为这样的学习方式,我会觉得更有趣。还是那句话:做中学(Learning by doing)是效率最高的学习方式,也是最用有趣的方式。 | ||
|
||
这些年,还有一个方法,让我获益良多 — 阅读别人的代码。在我看来,阅读别人的代码,就是在研究别人解决问题的思路。他是怎么做到的?他为什么要这么做?哪里是值得我学习的地方?在计算机领域,很多代码是开源的,我可以看到不同国家的人写的代码,免费从他们的代码中学习。有时候学到了就马上能用在实际工作中,进而提升自己的价值和能力,这种成就感是非常愉悦的。 | ||
|
||
随着时间的积累,我解决了很多问题,学了很多知识,犯了很多错误。我会使用印象笔记,把这些知识全部都记录下来。好记性不如烂笔头,把有价值的知识整理成体系,让今天花费的学习时间,在将来可以换回对应的价值。学了就忘实在是一种浪费。踏踏实实地把知识记录下来,让自己的努力可积累。现在我可以随手查到自己几年前的学习笔记和总结,这就是一笔财富。我依旧在不断地学习,慢慢地成为一个更厉害的 Problem Solver。 |