Infosec professional in permanent beta.
Learning how to code can be invaluable, coding skills are more in demand than ever before so now is a great opportunity for you to get involved and reach those top paying jobs. Learning the fundamentals of coding can appear quite daunting but as you learn your knowledge will begin to piece together and work in tandem towards a final objective.
With so many programming languages on offer it can be easy to fall into the trap of juggling your plates, each language offers different ways to code your projects as they each have their benefits. However, sticking to only one and getting significantly good at it before moving on to the next will ensure you have no gaps in your knowledge and can put your skills to their full advantage.
Let us look at some mistakes that can be made when developing your coding skills or starting your coding education from scratch, to ensure you can be confident in your approach and get the results you need.
Teachers and mentors are an especially important part of your learning experience, especially if you are not comfortable in being self-taught. Selecting the first teacher or mentor that crosses your path may not work to your advantage, they each hold their own experience and will be more familiar with certain programming languages or best general programming practises.
The number of resources online for learning to code has seen exponential growth, with some good quality content on offer it can be easy to fall into traps online. If you are opting for online courses then you must question its quality. Do your research, see if you can try the course before you commit to anything. With such a lucrative marketplace there are online sellers who will promise to deliver excellent results with courses designed only to be a waste of both time and money.
Technology is always evolving and selecting who you learn from is one of the most important criteria in you succeeding. Finally, there is no single mentor or course that can teach you everything. It is well worth consulting with multiple mentors so that you consider different points of view and expertise.
Finding a starting point with coding is relatively straightforward, pick a programming language and learn the fundamentals first, before jumping into the deep end. When it comes to programming knowledge depth is more important than breadth, employers are looking for a detailed understanding of a language rather than a brief understanding of many. Go through multiple resources to get different angles, methods, and points of view to expand your understanding of different ways of solving one problem. Remember that the objective is to practise and iterate your knowledge in order to be able to build a final project without guidance, without falling into the trap of tutorial purgatory.
Whilst the majority of your knowledge will derive from education, mentors, or resources, you will particularly gain generous knowledge from working in real-work environments with colleagues who also understand your chosen language. Working in tandem with colleagues on real projects will assist in filling in the gaps of your coding knowledge and develop your skills further.
I cannot stress how important it is to learn about how computers work at least at a basic level before you dive into code. Learning how and why computers and programs talk to each other is critically important in understanding why there are so many languages and how each one can individually benefit a real-world project.
We need to first start with the fundamental principles (i.e. the “why” of something) before we dive deep into computer tech stacks. Those come and go but the underlying technology of how programs operate under the hood has vastly changed in the last couple of decades. We live in a world where knowledge is constantly being updated and changed. When we start learning the fundamental principles, those are the things that actually last a long time over your career, versus skipping what today’s and tomorrow’s ‘hot technologies’ are built on.
By learning the underlying roots and structure that lie underneath all programming languages, such as variables, scopes, functions, loops, conditions, arrays, data types, etc. we are quickly able to transition into a new programming language at any given time.
A good analogy is to use is the roots and trunk of a tree as the fundamentals, and the leaves as the hot/popular tech stacks of today. With each season new leaves are formed, whilst retaining the underlying critical knowledge that supports them.
So rather than gaining knowledge that is short-lived, we want to focus on knowledge that supports the structure of programming languages. If we start with that, no matter how long the trends change, no matter how society changes, we have those fundamental principles to develop skills as they change to adapt to the current society.
Watching an online tutorial is a sure-fire way to create a carbon copy of an existing project. Instead, the optimum way to learn and gain more experience is to put your existing knowledge into practice and develop your own project. Your coding is unlikely to start as clean and concise as you would like it to be and that is to be expected; by developing your own projects it provides time to reflect on what you could improve upon during the next iteration.
Whilst the odd online tutorial will do no real harm, you will need to start small and gain confidence in your approach, rather than rush to create a technical project through a step-by-step tutorial.
Goals and deadlines are particularly important, in a real-world working environment you are going to face them on countless occasions, tying in to release dates and buyer demands. By becoming familiar with working to schedules, goals, and deadlines you will develop a working pace and be able to determine if your knowledge and experience is thorough enough to handle a real project on real deadlines.
You should determine what your project will be and (depending on the size) set a realistic deadline for completion, along with setting small goals in between to keep you on the right track. By hitting your smaller goals, it will help in maintaining motivation and keeping you on your set schedule. If you hit any roadblocks during this time, then you can assess how far you have come and adapt your deadline to suit any change of plans. This becomes valuable in the real-world environment by allowing you to communicate with your employer or client about any issues that have surfaced and what impact this may result in, helping to maintain a good working relationship with clear communication.
This is an easy mistake to make and one that can muddy the waters between clients and coders. Clients need to receive regular, clear communication that demonstrates the project is going to plan and meets all of their requirements. The technical jargon used by programmers is often confusing for the inexperienced person and therefore needs to be explained in a clear and concise way.
When it comes to programming the end user or client is generally interested in the impact of something, not the process behind it. Therefore, explaining to a client that the “back-end server has encountered an error on line 12 when processing the command” will likely mean nothing to them. Instead, being able to advise that "the document has failed to upload, and we estimate this should be resolved within the hour" will give the client the critical information they need and summarises the problem in a way that is easy for anyone to understand.
It is also extremely helpful in environment in which you are pitching a programming concept, the client will be looking for any benefits that your coding will provide them and any potential impacts that could arise. Such as explaining how your tailored software will utilise many connected call routes to reduce the time taken for a customer call to be taken by a user service agent.
If you know how the back end of this type of system would work but cannot communicate the benefits of your programming to the end client then it is unlikely that your work would be seen as any form of benefit to them.
If you do not understand something then it is important to ask for support. Programmers work exceedingly well in teams and often are able to provide input on resolving and adapting a problem. For this reason, it is recommended that you find someone who is on a similar path to you, or even a mentor, who is there to answer questions you may have and who can help accelerate your learning. This will also benefit you by way of being able to concisely explain a problem and demonstrate your previous efforts in trying to solve the problem.
All programmers will have gone through stages in which they did not have all the answers to resolve a particular problem and had to seek support, it is acceptable to ask questions and learn from any mistakes or bad practices made as a junior software developer.
Any time that you invest your own time into something, you are giving up the opportunity to do something else. Not all learning is created equal, so it is recommended to spend a bit of time doing some research deciding what you should put your time and efforts into. It is not about cramming the most amount of work to become better. Those who succeed are those that can learn efficiently. This is a skill that goes beyond just learning to code.
Do your own research and figure out things on your own and find few mentors you can trust, it will take time, but it will be invested in a valuable skill that has ever growing potential.