Wednesday, July 13, 2022

Essay 2A "Mechanic" Computer Programmer

Essay 2 A "Mechanic" Computer Programmer

Not insulting Mechanical Mechanics


My frame of reference for this piece, is that of a magical circle. By which I mean magicians, either performing on stage or street magicians. If you want to know the secrets of magicians, all you have to do is go to a magic store, and there you will find gadgets galore, all ready to fulfill all your magical needs.


There are tricks, however, that is unachievable by magical gimmicks alone. Certain magic tricks require the magicians to perform with skill, either misdirection, or hidden manipulation. It can take years to refine those skills, and it's certainly no easy feat to be an accomplished magicians.


However, there are magicians who decided that skills are beyond them, and they depend on gimmicks for their performance. The term bandied about is "mechanic", which as you may surmise, a rather dim view of the quality of their magic. Yes, they are magicians, but no, not a high level, or even medium level ones. In short, "mechanic" magicians are mediocre magicians.


Those magicians are usually get hired at children parties. Children, being inexperience in ways of the world, tend to be immune to misdirection. Only the greatest magicians can pull off successful misdirection with children, and most magicians who depend on these children parties wisely chose mechanical magic for their entertainment. Furthermore, if you want to entice these children to become magicians in the future, you would be well advised to keep a few of these gimmicks as to inspire them to the wonders of magic.


However, they should at least keep trying to attain higher skill levels. Those who doesn't generally receive well-deserved scorn for their performance. There's nothing new in their performance. No need for them to divulge their magical secret. Just go to the store and buy their tricks! No real value to their craft.


Now, imagine that you are a computer programmer. You learned so many things. Maybe Java or C#. PHP or Python. HTML, CSS, and JavaScript? Sure. You learn so many frameworks and paradigm. Pair Programming, Agile, and Patterns? Why not? Why not use the most powerful tools available? After all, professionals use them, so why not give yourself the same advantage those professionals use? Why handicap yourself to primitive ones?


The thing is, I don't think primitive tools are handicaps. I think powerful tools are crutches. They allow you to do great things with their "black box" solution, so to speak. There is a difference between knowing how to do things and use code libraries to do them, and use code libraries without understanding what they do, or how they do things. 


Somebody ask me once, why does it matter to use code library if they can recreate the library from scratch? "Nothing," I answered, "but the problem is that they cannot recreate even the simplest task!" That is the problem. It's not that using code library is a problem, but the lack of ability to be independent of them that is the problem.


Nowadays, such questions aren't even asked anymore. Whenever you see computer programming course, you see a ton of these names of these technologies spread around with no regards of how they're made. As more and more of these courses ignore the underlying technologies, the myth of the difficulty of computer programming become more and more exaggerrated. Nowadays, people have no problem claiming that Turtle graphic is an absolute impossibility to teach to students. We're talking about Forward, Turn Left, Turn Right, and PenUp/PenDown! It's so simple, that I've done it in 10 minutes. Somehow, their inability to code Turtle Graphic becomes nobody can code Turtle Graphic easy and that it takes years to do!


Somebody actually told me with a straight face, that "include FizzBuzz" is a perfectly acceptable solution to the problem. And don't tell me about the numerous "professional" programmers, who would be happy to remove recursion from Quicksort() by using Stack() routine! Uh-huh. They just turn implicit stack into explicit one. How is that any better?


I was 13 years old when I independently learned how to use sin() and cos() to draw a circle. I then proceeded to write Spirograph type of programs. It's not until much later in the latter part of my high school senior year in AP Calculus class, that the teacher taught the exact same subject. Needless to say, I scored 100%. The thing is, it seems like nobody else thought that it was easy, judging by the expression of their face and the way they look at me. And these are the smart kids. I'd have thought that maybe lots of them would get it as well, but apparently not.


I think more important that the ability to learn from a teacher in a classroom is more important than the ability to get as many certifications as possible. It takes independent thinking, and that takes guts, as well as stubbornness to try to dissect pre-existing code libraries and to try to figure out how they do things. It takes curiosity, problem solving skills, and the willingness to suffer the inevitable frustration as you try to decipher professional code.


I don't think I want to suffer the pain of deciphering professional code. The few times I did, I end up with reducing the code size, usually to 25% of the original size. I think most of professional coder are Rube Goldberg practitioner. I have no patience for that. What usually happen of late is that I would figure out the API, which tells me the functions and capability of the library, and I will figure out the appropriate Data Structure involve. After that, the code will usually write itself.


The point I'm making is that if I can be independent from Other People's Code, then I would do so. There's nothing more assuring that the code you have is the most fool-proof, correct code possible because you write it yourself. After all, who wants to dedicate the most time writing the correct code for you if not yourself? Nobody, that's who!


You can always ignore this advice, and constraint yourself to a programming language and libraries. Sure, you can do that. But then, you will feel the same pain I felt when I moved away from Linux/Perl solution to Windows environment! When I decided to rebuild everything from scratch, I found out, to my dismay, that most of them are really OS calls, and that I needed to rebuild the most of OS from scratch! Perusing GNU source code didn't help. Did I say that they're complicated? They're complicated! So, it was really a pain!


Nowadays, I'm using Raspberry Pi, and that's Debian technology. So, that's fine. But I already moved away from Perl. I'm building my own set of libraries to do, and I don't regret the extended amount of time I spend building it. After all, I only have to do it _once._


So, you can try your best to study, really study, the whole spectrum of computer programming. Or you can be a mechanic. Your choice.


No comments:

Post a Comment