The “Obvious” Problem
Smart people aren’t always the best teachers.
I want you to imagine something for me: pretend that you’ve just met someone who has never seen or heard of an everyday object. For our purposes, lets say a bicycle. The concept of how it works makes no sense to them and they have never seen one. How would you explain that object to them? What if you had to explain, say, how it stays upright when in motion on only two thin wheels but falls over when it stands still? What if this person wanted a detailed explanation of the crank and chain? What if you had to explain the purpose of the bike in a larger sense and how it fits into the transportation system at large? As you explain these concepts to our fictional person, they ask more questions. Each one more simple and “obvious” to you than the last. The more simple the question, the harder it becomes to describe. You, who can’t understand why this is so difficult to grasp, get frustrated and angry. Our fictional student gets intimidated and begins to feel that any questions are unwelcome and stops asking even though they don’t understand why you would use air in the tires instead of metal or concrete…
Teaching them how to fish (but we forgot the boat)
Now lets take the above (slightly ridiculous) scenario and replace bicycle with code. How do experienced developers explain abstract concepts like strings, arrays, and objects? How do we explain setting up a development environment? Databases? To a person just starting out, all of this coding business is indistinguishable from magic. Try explaining how a http request works to someone for the first time and you’ll see what I mean. At its core, code is a bunch of text files with very very specific rules and words. A misplaced comma can blow everything up or worse, return no error, break silently, and waste hours of ones time hunting things down. None of that stuff makes any sense to someone who has never seen it and we are frankly doing a terrible job of helping beginners walk through this mess.
Generally when I see someone ask about learning to code, they get immediately inundated by well meaning, if opinionated, developers (and God help them if there is more than one in the room at the time). The conversation will usually start with some recommendations that are way over this persons head “check out X framework and then you’ll want to learn about Y Hot New Database and then look at Z Obscure Server Language”. Then the conversation generally goes towards some sort of literature that is again way over this persons head. “Check out JavaScript: The Good Parts and The Pragmatic Programmer”. Finally it ends with some online resources such as CodeAcademy.com or the like. By the time the conversation is over, our would be coder is overwhelmed and even more confused than ever as to where to start.
Lets assume our fictional newbie managed to get past the introduction phase and we, the more experienced developer have taken this person under our wing. Over and over again we drill the concepts of software development into this person. We describe at length when to use strings and integers, why arrays and loops are useful and how functions and objects help us encapsulate complexity. Yet, our newbie can’t understand how to apply any of this knowledge because they don’t know how to organize a project or link to script assets or set up a local development server. We, in our mentor role, completely skipped over that part since its second nature to us. When obvious questions like this rise up, we usually react in one of two ways: 1) we take over and set something up quickly for them without spending any time explaining how it works or fits together. 2) we get frustrated and rebuke them for not knowing something so simple.
Conclusion
We need to remember that learning to code is hard. If it wasn’t then everyone would be doing it. We in our capacity as mentors need to be on the lookout for assumptions about what our student does and does not know. We have to remember, especially in the beginning, that they don’t even know what they don’t know and help them learn to ask the right questions. Igniting that curiosity and stubborn need to solve a problem is the most valuable skill we can impart. I am convinced a more empathetic, compassionate approach will get us there.