What I've learned since I was a kid is how to work toward goals that are neither clearly defined nor externally imposed. You'll probably have to learn both if you want to do really great things.
The most basic level of which is simply to feel you should be working without anyone telling you to. Now, when I'm not working hard, alarm bells go off. I can't be sure I'm getting anywhere when I'm working hard, but I can be sure I'm getting nowhere when I'm not, and it feels awful.
But as I learned the shape of real work, I found that my desire to do it slotted into it as if they'd been made for each other.
Many problems have a hard core at the center, surrounded by easier stuff at the edges. Working hard means aiming toward the center to the extent you can. Some days you may not be able to; some days you'll only be able to work on the easier, peripheral stuff. But you should always be aiming as close to the center as you can without stalling.
Learning hard things
Learning hard things is as much about managing our psychology as grasping the content.
Setting goals involve psychology. Do I feel excited about achieving these goals or feel pressured by them? Debugging involves psychology. Am I examining an error message with curiosity or am I lamenting “why tf does it break on me again?” And when I fix a bug, do I dread running into more bugs or do I feel satisfied that I learned something from the problem?
My psychology not only influences my productivity, but also whether I want to do anything at all. I had two main goals this week, and I almost gave up on both of them.
I completely underestimated the difficulty of implementing Convolutional Neural Network from scratch when I decided to do it. Yesterday, I spent 3 hours alone understanding a particular matrix transformation called im2col
that speeds up the process. That is probably 10 out of hundreds of lines that I need to write. Even the Stanford grad course on computer vision abstracts away from the immense complexity and provides their students with most of the implementation. The few blogs I found that explains the math behind it are insane. I’m pretty sure 99% of people who work in ML would never need to know how to write CNN from scratch. only ever need to know how to train on TensorFlow or PyTorch’s CNN implementation.