It’s 10:10 AM, and I just brewed a second cup of coffee, even though I usually limit myself to one. I need the second cup because I didn’t get enough sleep last night and I’m trying to learn how Unity converts between world space and screen space.
I have a plan for what I want to do, but I’m sure there has to be a better way, so I’m reading about clip planes and render paths and screen coordinates. I don’t know the best way to do this yet, and it’s making my head spin. I deserve this second cup of coffee.
This is a blog post about the stuff I don’t know. And I’m a little bit shy about writing it, because –
We don’t usually talk about the stuff we don’t know.
That’s funny, isn’t it? Because the world is full of stuff we don’t know. I don’t know anything about cricket strategy, or the economics of farming, or the math behind origami, or how to fix a broken toaster. (Although I’m pretty sure wires are involved. With the toaster, that is.)
Of course, I don’t claim to be a cricket player, economist, origami expert, or toaster-repair-service. I do claim to be a game dev – I am a game dev – but I’m a game dev who doesn’t know how to convert Unity coordinates. And I’m calling out my lack of knowledge. That’s weird.
It makes sense that it’s weird. We want to look competent and impressive, and we want to be authorities. We talk about the stuff we do know (once we know it), and we lay out signposts to help people behind us.
I don’t have any useful signposts about Unity coordinate conversions. I’m just learning this stuff, and I’m learning it by searching for the signposts that other people left.
But I do have useful signposts to give about learning. And that’s why I’m writing about the stuff I don’t know.
Learning is easy sometimes. It’s that breathlessly smooth moment of picking up a new skill like you always had it, like you learned it fifteen years ago and just have to dust off the rust. Ten years ago, I was studying to become an American Sign Language interpreter, and I learned ASL that way – like something I’d always known and had just forgotten along the way. When learning is easy, it’s a ridiculous amount of fun.
When learning is hard, it feels horrible. Learning something hard is like moving to a new city, when all the maps don’t make sense and you can’t even find the grocery store and oh my broken toasters, haven’t you people ever heard of grids, I’m going to be lost forever.
I don’t have signposts to share about Unity yet. But here are some signposts about learning.
1) Tailor your learning experience to your own learning style.
Biometrics was the second-hardest class at my college, by unofficial student consensus. (Genetics was the hardest.) It was a lecture class; I breezed through.
The science class I dropped? Chemistry 101 – one of the easiest science classes, by most accounts, but not by mine. During my time at Beloit, all sections of Chemistry 101 were taught as pure lab courses. I fled before the week was out.
Make it easy on yourself! Not everyone learns the same way. Regardless of what you’re trying to learn, it will be easier if the techniques fit your own learning style.
If you’re directing your own learning, survey the resources available and choose options that will make it easiest for you to learn. If you’re taking a class, make that same survey and see if you need to harness resources outside the classroom.
http://unity3d.com/learn has a fantastic set of tutorials – if video tutorials fit your learning style. I slogged through Project: Roll-a-Ball and half of Project: Space Shooter before admitting to myself that this wasn’t going to work for me.
2) Have a project to help you learn.
The learning theory of constructionism holds that students learn best by making things. It’s the theory behind the Logo programming language, among other things. (Seymour Papert, one of Logo’s inventors, was an education researcher who originally proposed the theory of constructionism.)
This absolutely matches my experience of programming. Once I have a couple solid tools in hand, I’ll learn much faster by leveraging those tools toward my own goals than by walking through pretend goals.
Right now, I’m building a project for Flying Toast With Jam. This event is basically a screensaver jam, as submitted projects are supposed to entertain the viewer without the need for player input. I’m going to keep it simple and build a little project where a cartoon dog wanders among randomly-generated objects.
If I were just using tutorials, I would learn exactly what the tutorial author wanted me to learn, and make the considerations that the tutorial author already made. But here, I’m asking my own questions and trying to come up with my own answers, which takes me into corners of Unity that I wouldn’t have otherwise explored. And later, when I ask the same questions on different projects, I’ll remember the experience of finding these answers, and have an inner library of answers to draw on.
3) Reward learning for its own sake.
There’s an excellent essay by Salman Khan (the founder of Khan Academy) about praising people for persevering rather than for their innate traits or talents. He encourages people to approach new learning tasks with an open growth mindset, rather than a fixed trait mindset.
This is still important when the trainer and the student are both me.
I can be proud of myself just because I’m trying. I don’t have to go from 0 to 60 instantly all the time – maybe I can only go from 0 to 20, or 10, or 5. But as long as I’m going somewhere, the distance will get covered, so I concentrate on being proud of myself for trying. It makes everything a lot easier.
4) Remember that it will get better.
I spent the summer of 2013 on an intensive, self-guided crash course in C. As a result, I can pinpoint the hardest thing I’ve ever learned, which is how to use pointers.
Pointers are a programming language concept. They’re like variables, but they refer to stored values by their memory addresses rather than storing the values directly. And they are awful when you’re first learning them. (Or they were for me – your mileage may vary, and I hope it does.)
I hated pointers.
I read and reread Head First C on pointers. I repeated the pointer tutorials, I diagrammed pointers on the office whiteboard, I talked endless pointers with my fiancee the software architect. They still didn’t make sense.
I remember one afternoon when I worked on pointers for an hour, went downstairs to cry on the couch because I felt stupid, and then came back up and sat down to do it all over again, maybe two or three times that afternoon. (Maybe three or four.)
But I was determined to learn C, and I had a project that needed pointers.
So I forced myself to use pointers again. And again. And again and again and again and again and again and again. (Imagine you’re hearing this in the tone of the narrator from The Horribly Slow Murderer with the Extremely Inefficient Weapon.) And by the end of the week, I had internalized pointers.
That experience was awful, but it gave me a special edge. Now I can always tell myself: no matter how confusing Unity is, it won’t be worse than pointers. And I mastered pointers, so I can master this.
(Signpost for Inform 7 experts learning pointers: The difference between a pointer and a value is like the difference between an I7 “object that varies” and the object itself.)
5) Be kind to yourself.
It’s hard to admit that things are hard. And learning hard things is hard.
If I were planning to run a marathon, I wouldn’t do it by running 26 miles on day 1. I also wouldn’t do it without eating breakfast, or without enough sleep, or without a decent pair of running shoes. I’d make careful preparations over an extended period of time to set myself up for success.
In a similar vein, if I’m in the process of learning something hard, I try to stack my priorities in a way that will set me up for success. I take extra care to ensure that I’m getting enough sleep and eating a variety of foods that will give my brain protein and vitamins. I don’t try to learn at times when I feel hungry or sleep-deprived or socially deprived, because first off, it’s no fun, and second off, studies show there’s only so much willpower to go around. I alternate between focusing on my learning project and taking breaks to do other things (such as writing this blog post!)
And I ask the people around me to recognize that I’m working on something hard, and to be kind to me, and to celebrate my successes with me. Because learning something new is worth celebrating.
And the stuff I don’t know… becomes stuff I do know
I took a break from Unity today and sat down to write about the stuff I don’t know.
It’s hard and scary to not know stuff. It’s even harder and scarier to admit that I don’t know stuff.
But I can only write about that now, because it won’t last. I don’t know Unity now, but I’m turning the stuff I don’t know into stuff I do know.
And by this time next year, I’ll be an expert – not in all aspects of Unity (let’s be fair, it’s a big system!), but in the places where I’ve focused and worked and learned. I’ll be ready to tell you about the blind paths I took and the better techniques I learned and the refactoring I did and the amazing things you can make with Unity, if you just want to give it a try.
I’ll have signposts to show you Unity, not as someone coming from ignorance, but through experience. And I’ll look back here to when I was lost, and I’ll smile, because all the hard work will have paid off.