过去一年,莫名其妙成了全职的编程培训师。大概是天注定,唉。最常遇到的新手问题就是,请问如何入门 XXX 技术。当然,对我来说,写 Rails 都快十年了。这这个领域东西还真难不倒我,抄了家伙就干已经是我这几年的风格。 不过我一向蛮有实验精神的。为了要能够回答这个问题,我特地去重学了新的编程语言( Ruby Motion ),来近距离观察重新拆解我十年以来的学习反射性动作到底是什么,来写一份给新手的参考指南。 Step 1 : 建造时光机我在学习新技术时,会用到两个东西。第一个是 Git,第二个是 Redmine。 Gitgit 是新手的时光机。我认为如果一般人学习任何编程语言,甚至写任何笔记,都应该上个 git 版本控制。起码看你上一次写了什么东西。其实 git 一开始也不用学太多指令,练习以下几个就够:
主要是将做过的东西,“每一个 interaction 都做一次备份”,让自己知道当初为什么做了这些变动。 RedmineRedmine 是一套专案管理系统。不过在这里我是利用它的“树状 ticket 系统”去规划我的练习。 我运用的方法如下:
我的 redmine ticket 记这些东西,每张非常的详尽。(不是指笔记做得好,而是指这当中的过程,我把每一步几乎都录下来) 这样做的好处是:
Step 2:挑选合适的主题,熟悉基本工具在无数篇自我的学习部落格我都曾经提到过,在自学过程中保持一定的“成就感”是很重要的。最近,我把我多年来练习题目做了一个总结,找到了一个模式。 超级新手:
完整做完一轮,搞懂怎么样让这个专案会动的基本因素与语法。 (注意,这个系统内只有“自己”这个用户) 新手:以下按照顺序
(这个最实际的例子就是 TODO + 使用者注册 + 套版 + deploy)。这一系列做出来,起码可以让一个人至少可以熟练这个系统的最基本工具,而不太容易绊倒。 中手:
之所以会建议这样做的原因。是我发现每当建议新手自己找题目练习后,他们自己想的题目反而变成了灾难。 说灾难的原因是因为他们挑选的题目带给了他们浓厚的挫折感。而这当中最核心的原因在于失控的 scope。 而 scope 的最主要的控制变因在于“这个系统里面有几个?操作角色”。很多人会忽略掉一个重要的事实,开发系统里面多“引入一个使用者角色”,这个系统的复杂度就会成“等比级数上升”。 举个例子来说好了:
这四个例子的功能数量是“等比级数的上升”。而一旦新手挑的题目,系统内角色多于 1 人,基本上就注定“打挑战级难度被王打死”。 而我一向的学习方式,都是会尽量让难度可以控制在自己“开开心心学习”的程度上(每次逐步加重,而不是一开始就被灭好玩)。我知道唯有己有成就感地学习,学一门技术才不容易中途而废。 Step 3:将 Redmine 的笔记整理成技术文章在学完这整套技术后,我会在适当时机,把过去的笔记写成一篇技术文件。视情节发布给同事或给部落格读者。
因为 redmine 上当初的笔记非常得详细,在看这些笔记与 git 的时候,我当时的记忆就会被唤醒。甚至上面有现成的 code example 可以直接拿来改编。 而把这些笔记整理成技术文件与指南非常有帮助,因为“写作”这件事可以帮助我从此把这门新技术“想通”,而且烙印到大脑里面。 总结以上的步骤,最后可以总结成三个重点:
分享给大家。 |