It strikes me that learning to code combines a large number of skills at the same time. Each is quite specific and separate, and yet the magic of coding comes from employing them all. That’s great, but you cannot learn them that way. you need some focus and separation.
Learning to code (in any language) means that you have to learn the specifics of your unique language: Its syntax, it’s style, how to achieve particular tasks with it. Then there are the more advanced features and nuances of that language, concepts and aspects that require you to adopt a certain approach to solving problems in that language. In Javascript for example, I have learned to recreate the kind of basic code building blocks I need to implement algorithms or functional jobs, but the asynchronous, event based tendency, and its implementations of objects, prototypes and (shudder) closures are taking me a good deal longer to get to grips with. But the list of skills does not stop there.
All languages have libraries and frameworks designed to accelerate and structure your code so that you can write the least code to achieve the most, keep it fast, flexible, maintainable, and reusable. That’s great, but these often have logical and syntax rules of their own, often not aligned to the core language itself. When you are learning, it can be hard to recognise that a particular feature in an example or tutorial is not in fact part of the core language, even if it is common practise. The issue is that these libraries are written to help people familiar with the pitfalls and weaknesses of the language. if you are not familiar then there is no clear entry point. You just have to do it the hard way. There is no shortage of helpful blogposts or stack-overflow posts about any problem, but you have to recognise you have a problem before you can find a solution. Examples of this are JQuery and JSON littered around your JS examples, or Sass or other pre-processors for CSS. You wouldn’t really want to write JS for the web pr large CSS stylesheets without these but when you are first learning, they are like little alien footprints that throw you off your original trail. And there is something to be said for learning the fundamental languages in their raw state, otherwise you will not understand what the extensions are there to achieve. These languages and their ecosystems are constantly evolving, and libraries and frameworks are essential. Whatever you point of entry, it will be when something is the flavour of the month, with lots of community support and documentation, but all written for those already on the inside.
My solution? Just keep an open mind, and try to recognise these things, and keep a ring fence around what I am trying to learn at any one time. There is nothing wrong with employing some snippets of a library from somewhere to make your code work, even if you do not, yet understand how it does it. Sometimes the understanding comes from this inside out approach, and it is easier to find answers to specific blind spots than it is to find a well articulated tutorial to get from where I am uniquely, to a high level of understanding.
And there is yet more to learn…
There is the translation of a real-world problem or desired outcome into code able chunks, or it might even be a little more architectural than that. You have to think about how to breakdown the problem, not as a human might tackle it, but according to the strengths and limitations of your language and framework, and the way that technologies work. Thinking about how different parts of the problem would be assigned to back-end, front-end, different apps, concurrent processes, then down to objects , state, integrity, data models, and some chunks of code of course.
Then you have the challenges of solving individual logical problems, regardless of language. What mathematical techniques to calculate the distance and the angle between two objects. You can work out the maths, and then you still have to work within the language and its libraries to implement it. How do you use that angle to rotate an object, in the current library you are employing, what are its concepts and rules?
And all this ignores good practice, coding efficiency, knowing the best logical insight to structure your HTML, CSS, code, use of libraries, how to minimise load times, make it all readable, modular code. You need to consider your use of MVC or other established or emerging techniques to improve maintainability. What about scaling beyond one browser and a Pseudo LAMP server? What about security, performance, testing.
We still have not even spoken about the user’s experience of your creation: good User Experience ( UX), great styling and use of design regardless of functionality. Are you exhausted just reading this?
I am just beyond the hello world stage, and do you know what? I just try to keep a little focus on atomic aspects, and let the whole build up slowly. By practising something I have learned I may come across, or feel the need for one of these many, many skills, and maybe I’ll go and read about that for a while. I just don’t think there is any one path to enlightenment.
No comments yet.