Quote:
Originally Posted by
wisecracker
I am an amateur coder
Much has already been said - mostly by Neo in his passionate post - so i will concentrate on some minor points:
Moderator's Comments:
|
|
Neo: Edited by Admin
|
|
Quote:
Originally Posted by
wisecracker
You do not need a maths and/or computer science doctorate, just an accepting mind and the ability to logically create code, BUT, most of all, patience and LOTS of practice.
You are right - but a working understanding of math principles certainly will help. In fact i got the most education about programming from Don Knuths famous "TAOCP",
The Art of Computer Programming. It is a heavily mathematical book and may be "love at third sight", but i guarantee you that it will change your life as a programmer forever.
Also notice that Knuth says it is an "art" - not a science, not a trade. In fact - like any art - it is a trade at the base like masonry is at the base of sculpting. But this trade is, as the apprentice ascends to journeyman and finally to master - transcended into the realm of the artistic. The words "technics", "technical", etc. come from the greek word
τέχνη ("techne"), which means "art". We should do accordingly.
Art seems like breaking every rule and in some respect it certainly is. But at the basis art is something completely different. The apprentice learns rules like iron laws - obey them or else! Once the apprentice has learned all the rules he becomes a journeyman. The journeyman knows all the rules and can skillfully apply them. He knows and understands that sometimes the rules seemingly contradict each other and can weigh their relevance against each other. With increasing understanding a "feeling" for what is "right" (or "correct" or "good", ...) develops and the journeyman ascends to the level of master. The master still follows the rules - not their extrinsic expression any more but their innate meaning. He might find ways to obey a certain rule in a deeper sense by contradicting it on a perfunctory level. Knowing how to do that - and do it for the desired effect - first needs the perfect understanding of the rules he is ignoring at some particular point. You "throw away the ladder" - but only after you used it to climb over and above it.
"CODE, CODE, CODE", as Neo suggested is very sound advice. Not because the world needs more code but because the world needs more good coders - especially to replace all the bad code that is already in place. The more you learn and exercise the application of the rules the faster your eye will develop that hard to describe "understanding of good versus bad" code.
There was an experiment about learning: they showed professional airplane pilots a picture of a cockpit in mid-flight for a very short time (2s) and asked them to tell if the plane was in trouble or not. Guess what, it is impossible to really read all the hundreds of displays in that time but still the pilots did it with a stunning rate of precision. They were not trained for that but they developed - simply by practice - the ability to discern what "looked good" from what "looked bad". This is called "pattern learning". An experienced programmer can tell you similarly at one glance if the program is written poorly or written well. He might not know if it contains some syntax error, but he will be able to judge the "overall structure" and with astonishing precision.
Sometimes you will come across old and wise UNIX guys (unlike me, i am only old) who will tell you this or this is "not UNIX-like" or "doesn't seem quite right" or something such. Listen to them. It is hard to explain these feelings like the pilots would have a hard time explaining why they thought something is wrong with the plane.
Finally, a last advice: learning from the masters only means copying them at first. Learning from the masters means using what they can teach you (so, yes, start by copying them) to form your own finally. Mozart didn't become Mozart by composing the same way Haydn or Bach did. In fact he did compose quite similar to these two in the beginning but then used what he learned to form his own genuine and singular style.
I hope this helps.
bakunin