Archive‎ > ‎Learn‎ > ‎

Learn Programming

By Ashraf Al Shafaki

Channels of Learning

The Learning Spiral discussed the 4 basic methods of acquiring skill, knowledge, expertise and technical savvy in the IT field. The following lines are about what would happen if someone is totally biased towards only one of those methods and makes no or little use of the others.

Trial and Error

Trial and error makes one delve into the deepest realms of the IT world, specially when it comes to programming. For a hard core programmer, a low level programmer that uses Assembly or C, a hacker, an actively participating open source programmer and a systems programmer trial and error and learning from one's own discoveries is the main source of technical savvy. The benefit if this method is that it can bring you to new heights and into territory than no one has ever treaded onto before you. You will discover new things, yet would of course rediscover things that others have already uncovered which makes trial and error a complete waist of time unless it is used in conjunction with and supplemented by other learning methods such as an IT community of technically supporting friends or technical books or for that matter courses. Trial and error is discovering things on your own. It is this very thing that makes you able to go deeper and discover new things not discovered by others, yet at the same moment it could alienate you and corner you in a mental rut unable to keep up with the many things others discover every day, or let's say every minute. Trial and error gives innovation and self confidence but it does not provide speed. Relying on it alone will make you a computer geek that can do some clever tricks but that lacks the big picture and is incapable of moving swiftly.


Courses are cool. They let your learn quickly, they give you a boost. Of course the value of a course depends mostly on the expertise of the instructor both technically and with regards to ability facilitate the learning process. Though courses are a speedy way to gain technical skills in a new IT field they cannot be relied on alone. Courses are often good for starting to learn about a new technology. They put you on the start of the road, they can show you direction, but they do not take you far from there. After finishing a course, you have to go on from there to develop yourself or else you'll stay at the beginning of the road only without advancement. Those who rely heavily on courses alone and forget the other three methods will never go deep into the field, will lack innovation and will not be able to handle real life situations or projects in the IT field. They will go no farther than the starting line.


Books are great. They provide you with a wealth of information. Books can be good when starting on the new technology but are equally great when you have taken many steps in some technology and want to advance more, fill in the gaps, validate your knowledge and gain a balanced and complete grasp of the technology underhand. Books make you understand concepts, like do courses, and give you a sound technical foundation upon which to build. Understanding the foundation concepts makes you able to solve a wider range of problems, come up with solutions faster or solve problems that you would otherwise not be able to solve. Relying on trial and error and tips from friends alone to build your technical knowledge without having the sound theoretical foundation might make you take a hell of time and energy trying to find a solution and can even make you fail in solving it all together. That's what makes books and courses cool and essential. Yet, books alone, though exciting at times and lovely to learn from, can deprive you of innovation and also quick fixes that you can learn from trial and error and from friends respectively.


Yeh, that's the most fun part. Without friends you cannot survive. Not only in life, but in the technosphere. The greatest thing about friends is that they provide you with a human touch to things. You might find it hard to sift through endless amounts of information present on the web or in hundreds of large techno books, and would restrict your trial and error to the more promising paths of the thousand possible ones. Yet, friends can pinpoint to you how to best use a feature, keep you updated with the latest cool things or provide you with a balanced holistic view of things and tell where every part fits. Friends can also give you instant answers to deep problems you get across which they most probably have faced before and found the solution to using some means or another. Of course depending on friends alone will hurt your capacity for innovation and could let you slide in wrong paths away from the main road. But if you have a balanced mix of the four learning methods you can easily guard against this by not taking in all what your friends say for granted and keeping a critical eye on what they feed you with.

Every one of the main four methods of acquiring technical expertise and maintaining technical savvy has its strengths, yet relying heavily on of method alone and leaving the other three will do nothing but handicap you. Just remember that you probably cannot use them all at the same time, but will focus on one at a time then move on to the next then return back one more and revisit them all from the beginning in a continuous upward Learning Spiral.

The Learning Spiral

How does one get to learn computer technologies and become more technically competent? There are basically 4 main methods you can use to achieve such a goal. Here they are.

Trial and Error

If you ask a hacker or a hard core programmer how to learn or become a whiz in programming, he'll tell you "trial and error, that's all what it takes."


Courses are the foundation. They give you a sound background and a push ahead. They motivate you. They can also serve as an accelerated way to learn. Courses would usually take you through the first steps but will not take you deep into an advanced level.


Books are excellent. While you might spend hours and days trying to figure things out using just trial and error, books can save you a lot of time by telling you how things are done and how things work right from the start. Also books give you a balanced and many times comprehensive covering of the technology being covered. When you've taken many bites of information from here and there using trial and error and from friends, books will fill in the gaps and give you a more complete view.


Yeh. This method you cannot do without. It's the fastest, most outreaching and most fun way to learn. You simply cannot do without it. Having a constant group of friends who are more technically savvy or even as equal as yourself around you will help you thrive in the techno field, keep its beat and remain updated and also in balance. It also helps when you're just starting and taking your first step on the road.

Those are the main 4 methods one uses to gain technical competency when it comes to programming and computers in general. For a really competent techno whiz no one method of those 4 is enough, he/she must use them all to gain top gear. Yet, not all of them can be used at the same time, or else they will not work. But one has to alternate between them then go back to the first one and alternate to the others and so on in a continuous upward spiral.


While the Learning Spiral and Balanced Learning focused on the main basic sources of learning, this article discusses the stages one goes through in his or her everlasting quest for skill and expertise in the IT world.

Copy Existing Code

You get fascinated with something. Your experiencing it gives you a pleasant feeling that you like. The next this is that you find yourself having the urge and desire to create such an 'object' that fascinated you by yourself. The easiest and fastest way to do so is to follow a clear step-by-step zero-explanation procedure that enables you to reach the desired results. For instance, you may do no more than copying the code of a program, without understanding one word of it, then running it. Although you did nothing but copy the code, yet the satisfaction you get from creating the program yourself, though just by copying, is enormous. You feel so glad that you 'did' it.

Modify Existing Code

In the next stage, you start to move from the mere copying of the code or following of the steps to making your own modifications and observing the results.

Develop New Code

In this stage, you start creating your own works from scratch. First you've only copied, then you've done your own modifications now you start creating your own stuff from scratch.

Design System Before Coding

The final stage of this 4-stage learning process is when you reach the point where you have started to accumulate a wealth of experiences by being exposed to a variety of problems and solving them. You will have recognized patterns and have a clear overall view of how you will go about creating a new work as it comes. In this stage, you plan ahead when creating a new work, you take correct paths from the start and avoid dead ends or costly paths. You do the work much faster and in a more standard way.

The cool thing about those four stages is that reaching the 4th stage, if you ever do reach it, is not the end. You will most probably be switching back and forth between different stages as need arises. For instance, you might start copying code or modifying ready code to learn some new concepts or technologies faster. You might, when faced with a new problem, get back to stage 3 and start creating things from scratch and experimenting instead of relying on your set patterns you have gained from your experience, simply because those patterns or 'standards' might not cover this new problem you are facing.


Like It

This is the main stage of them all. Without this stage, no other one would be reached. You have to experience a work with your senses like it first. If that does not happen, you will never be pulled to the other stages.

Copy It

This allows the brain to see and go through dozens of different complete examples that work some of which could be very good models to follow later on. It helps accumulate a wealth of examples upon which to build on later. It also lets the brain practice by burning in the whole process of creating a complete work. It is the best kind of practice a beginner can get. You use books to copy examples from. Courses can also use copying as a means of making you practice.

Modify It

Now you have accumulated a wealth of examples and have trained your hands on copying them. It is time for putting your own touches. You start experimenting by modifying things here and there and watch how that affects the final work. You learn from this. It is trial and error.

Build It

You create your own work from scratch. This also involved a lot of trial and error. Friends can also help you in this stage when stuck with a problem that you find difficult to solve.

Engineer It

You build on the experience you've gained. You start invisioning whole systems before you embark on creating them. The path is so clear ahead of you; you know what you are doing. Books and courses could provide you with off-the-shelf experience gleaned from others. Books can provide you with best practices.