Posted on Sun 13 March 2016
When you don’t know how to do anything, everything is hard.
When you don’t know what is possible, everything is impossible.
Other people show you how to do small jobs, easy jobs. They say that the jobs are easy and small, but they start out hard and difficult, because there is no underlying pattern. You just do them. Learn by rote. When event A happens, follow checklist 3.
You read the documentation. You ask questions. There is an underlying pattern, but it wasn’t what you were expecting. You learn the pattern, you ask questions, and you discover that you have a model inside your head. The model of a complex system is less complete than the system itself, but you know that pushing on it in these ways produces those changes.
You move along. You learn another system, read new documentation, build models in your head. When you know which questions you’ll need to ask as soon as you hear a description of the system, you have graduated into competence.
More systems, more models, and now you know how to do lots of things.
Some things are still hard, but that’s because they involve organizing lots of sub-tasks, making sure all the parts are available to build the scaffold around the site where you will build the system. You have a model in your head before the system is built.
Now you have a theory of models. You can consider a possible result – a failure, let’s say – and describe some of the prerequsites which would cause that. You can think about causes and figure out some of the effects without having to try them out.
You make systems which work in ways that have worked for you in the past. You put more of your effort into designing the systems so that fixing the inevitable problems becomes easier. Investing the effort at the beginning saves embarrassment later on. You know that many things are possible – and you avoid doing things which are complex if you can avoid it, because simple is easier to think about then complex, and so simple is easier to fix than complex.
People will ask you to build things by telling you what they want the system to do, and you will have heard this enough times that you will stop them, and ask what results they want from the system. You will hear about new methods, and you will learn some of them because they seem to be more efficient. You will discard some of them because they solve problems that you do not have. And you will laugh at some of them because the designers of that system designed badly.
You will have discovered that you have reasoning skills, experience, judgement, and taste.
But there’s always something more to learn.