Bearing in mind I have, so far in UoD, only had to complete online code challenges and smallish take-home exercises from online courses that were largely based on work done in class, it is a big ask to suddenly try to take a new concept and code it from scratch.
The thing is there are so many elements to juggle when coding. The end result has a high dependency on accuracy and precision (for the dumb but fast computer), and yet the act of getting code goes through a number of creative and engineering processes (by the smart but highly fallible human). At any (or many) stage(s) it can go horribly wrong.
I am sure there are books and websites devoted to this, but just from my own experience so far there are at least the following stages:
- You have a problem or idea
- You articulate the problem so that you can determine the elements that need to happen to solve it (and there may be many approaches)
- for each element, you work out a solution. Some of these may be quite complex, some apparently simple. Some may have documented algorithms and solutions that you can find on the internet.
- then you attempt to code each element, maybe to test your thinking and prove the concept and the precise coding.
- Along the way you may be using features of the language or a library that you have not used in this way before and have to research the way to do it, and errors that occur.
- When you have each working, you need to try to bring it together with other elements you have tested. This now needs some common framework. Maybe you have some global variables, or you define some of the solutions as objects that can be called elsewhere. This takes time and introduces new areas for errors.
- Some errors will simple bail out with reasonably meaningful errors at a specific line. others may simply work, but generate unexpected results. the location and nature of the cause can be a pig to track down and require putting in watch variables, or debugging lines of code to show you what is going on.
Honestly, it is a miracle that any casually written software works at all. And perhaps this is my window into why so few pieces of software work well, or are easily cracked, even with all the engineering and testing discipline that can be employed.
Like I say, coding is tough. So why am I still smiling?
I expect to look at this post in a year, from a more highly skilled view-point, smile at my own naivety, and realise that I am still up against all the same challenges.