Lazily Evaluated Learning

综合编程 2018-03-04

One of the things you'll often hear as a programmer is that to be successful, you need to be constantly learning. Sometimes that's learning about a new technology, or learning a technology you use more in depth. It feels to me that this is getting harder and harder - there are always more frameworks, more programming languages, more tools to learn. Keeping up is difficult, especially if you have other people or things that demand your time. I have a little trick I've been using for some time, and I'd like to share my secret with you, dear reader. I call it lazily evaluated learning

If you know what lazy evaluation is already, you may see where I'm going with this, and you can skip this explanation. Put simply, lazy evaluation is a technique that some programming languages, such as Haskell, use where a piece of code isn't actually run until its result is needed. It looks something like this:

let result = reallyExpensiveComputation();
if(userShouldSeeResult) {

In the example above, reallyExpensiveComputation
is only run if userShouldSeeResult
is true. So, how do you apply this to learning?

The idea behind lazily evaluated learning is to defer learning until you need to know something, but keep enough information on what
you need to know. For example, there is a lot of information on writing Haskell out there, such as this overview by Alexis King
. I'm not actively learning Haskell right now, but if I start someday, whether for fun or for a project, I have a list of articles in mypersonal wiki tagged with “improve haskell” that I can fall back on.

All you need to do this is have a good source of articles (I like
, but whatever works for you!) and some sort of personal archive, preferably with tagging, whether that be something like TiddlyWiki or Evernote. Another tool you can use, which especially helps when it's a skill you use too rare to remember effectively, but you stil use semi-regularly (for me, this is R), is to use a spaced repetition flashcard program like Anki
. This allows you to load a skill into your brain very quickly.

I actually have cashed in on this technique in the past: when I started at my current job at Threadless (a Python shop), I had dabbled in, but never seriously used, Python. Having a list of Python resoures to review when I started really helped me to skill up quickly and hit the ground running. This idea has helped me manage the fatigue that comes with trying to keep up, and hopefully it can do the same for you!


Typo3 extremely slow which could be a reason API design: Can I prevent users from making extremely slow requests? I'm building an API for a GeoDjango app, bui...
Stream & Go: News feeds for over 300 million u... ByThierry Schellenbach, CEO,Stream. Stream is an API that enables developers to build news feeds and activity ...
Python 进程线程协程 GIL 闭包 与高阶函数(五)... Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程. 对于io密集型任务,pyt...
迭代器模式入门 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露结构的底层表示和细节。 在以下情形,考虑使用迭代器模式: 需要访问组合对象的内容,而又不暴露其内部表示 需要通过多种方式遍历组合对象 需要提供一个统一的接口,用来遍历各种类型的组合对象 迭代器模式...
Python3入门机器学习(七)- PCA 1.PCA简介 PCA(Principal Component Analysis):也是一个梯度分析的应用,不仅是机器学习的算法,也是统计学的经典算法 1-1 1.1 举个栗子 例如下面一个两个特征的一个训练集,我们可以选择一个特征,扔掉...