I remembered when I last read Anomit’s post about “Tech Blogging, you are doing it wrong“. He bashed basically two types of people – one who are self-obsessed with their knowledge and second those who Eat, Sleep and Live by this profession. The second type have always been kicked, but the first ones find themselves in greater light these days.
We have been surrounded by geeks all over the net and everywhere I find people giving away rubbish tips on their tech blog. Believe it or not, web development is very very simple as compared to application programming. Web development is one layer of abstraction over application development. What you need to implement a web application? MVC? ACL? There may be more concepts but its still no where when compared to native application development. I mean by ‘native’. Developing over a runtime environment is 10 times simpler than developing natively. RE have always been a resource hog , best two examples are Java and AIR.
Now what exactly makes you a geek? Is it a specific knowledge of a skill which qualifies you for that title or the thinking or problem solving ability? The question is similar to “Teach Me Hacking”. Many of my juniors have come to me asking whether I can teach them this skill. Is hacking just breaking into other’s computer? Hackers need to have a system wide knowledge and problem solving capabilities so that they can visualize what may be the loopholes in the system rather than finding some flaw in the script itself. Here too finding a flaw in the script needs you to think out of normal programming abilities and think in the ‘cracker’s way.
A Sample Problem
Consider I need to design a mail filtering addon for thunderbird. I can even port it to other clients, or make a standalone application. What I mean to say is that language doesn’t matter here. Design and User Interface doesn’t matter here. What matters the most is the algorithm for building up the whole system. I receive mails for a legit email id, though sometimes they start sending promotional offers, which is always unwanted. If I click on “Mark as Spam”, it can have adverse affect on the normal mails from that id. I want to have a button named “Block & Learn” (with whatever Design or looks). The requirement is that using these mails with their content, the system should learn and apply its capabilities to other mail accounts of the mail client too for blocking such mails. What content/keyword should the system consider so that the learning process is also facilitated? The system should also abandon keywords based on legit mails which contain these keywords. This is in short – Artificial Intelligence, at least a minimalistic trimmed down version.
Consider the above problem statement, even if you are a champ programmer or a geek, the statement can drive you crazy. What actually is required for solving this weird problem statement? Well, I always thought pattern matching would be the right thing, but pattern matching is too dumb. Keep the regex with yourself. Anomit told that Natural Language Processing is a correct way of dealing with this situation. I agree too, we need to work upon natural languages not just programming languages. We even need Automata, DFA for sure, not sure about NFA. College studies may be crap, but they do contain some very very important papers like Grammars, Languages, Compliers Construction principles, Algorithms,Operating Systems, Data Structures, Automata etc. Without these listed topics, don’t expect yourself to get too far as a geek, you would be limited to developing application with Looks, Feel, Functionality minus Intelligence.
What I wanted to say
One more arena where I have seen many geeks lacking is Operating System principles. If you are a normal user, you should know only how to use the GUI. If you are a power user, you should know the inside out of the advanced functionality. If you are a real geek, you should know the inside-out of the lowest level functionality of the Operating System. These low level functionality include File Locking, B+ tree structure of File System, kernel modules, OS architecture, Process scheduling, Process priority, Deadlocks,OS Memory Management, Filesystem security, System calls etc. There is no end, just working on a runtime environment never makes you a geek. Nobody is smart enough to redefine the term Geek, it has been defined that day itself when hackers started ruled the computer’s world.