Starting and education in IT
Sunday, May 28, 2006
Someone at slashdot.org asked the following question
Like the typical slashdot discussion, there were some good, and not so good comments.
My response, goes along the lines of:
Like anything else, CS and IT is based on basic principles.
There are two aspect to IT: as a consumer of the technologies and as the creator of different layers of the technology.
For example, to some HTML may be enough to do what is needed to get accomplished and move on with their lives.
To others, just plugging in APIs into highly business oriented applications is enough.
However, there is a that other group of "IT" people who would like to know a bit more about what makes the whole information thing work. And those, I believe are the CS/Math/Engineering guys (when studied formally) or the hackers that play around with kernels and teach themselves how to hack (hack here doesn't mean script kiddies).
So, I think that in order for anyone to endeavour into "IT" one must choose a level to start and then move up or down the chain of knowledge.
For example: lets say someone want to start with HTML.
When creating HTML pages one encounters web servers. A curious person will learn how to set it up a whole web server to publish the created HTML pages. Once at this level, a curious person may want to try make the web server faster, or start playing with scripts (Perl, ASP, whatever). For some, this is enough. For others, finding out how HTTP works will do it (or move down all the layers in OSI model). Etc., etc.
Take the other way around (what I call: going up the chain). When creating HTML pages one encounters images (GIF, JPGs, etc.). Some may be curious and start creating their own images to embed in their HTML pages. Consequently, a more curious person may start playing around with graphics programs. Then such person may see moving images and movies and start playing around with Flash. Etc., etc.
So, in both cases one is always dealing with technology but at different levels. And all levels are OK. And if one has arrived at a full circle, then one is not looking hard enough, or there is not enough interest to keep looking. (Notice though, how HTML is the pivot to everything else).
Having said all this, if you have a formal education in Mathematics or Computer Science, you will notice that everything is based on first principals and everything comes down to the manipulation of data.
If there is no formal education, then pick something and be curious and start going up and down the chain. At some point you'll find out that you know more than what you think you know. And most importantly, anything you would have learnt along the way is of value to someone.
On a final note, you don't need to know everything about anything to be useful to someone or be interested in CS or IT.
Personally, I like coding, but I don't do assembler coding--I know how to do it, well, I learnt how to do it, but I rather not and that's OK with me.
What is your take on the subject?
"Personally, I like coding, but I don't do assembler coding--I know how to do it, well, I learnt how to do it, but I rather not and that's OK with me."
This is a key. We have lots of developers. The developers that don't know basics (like Assembler, C, low levels of networking protocols) have tons of problems when things go wrong. They have no clue how these high level things like Oracle, Java, App Servers work so when things don't work, they are completely lost.
It is unfortunate, but if you want to be very good at high level things, you really have to understand the low level things. When colleges decided that Java (or C#) was an entry level programming course and nothing lower level was needed, the quality of graduates went down greatly.
Someone who doesn't understand the low level things can be productive, but they will never be a top level programmer until they understand the lower levels.
So, it might not be fun dealing with assembly language, or understanding how TCP/IP works, but if you don't understand that, you are limiting where you can go in your career.
I agree with "anonymous" above.
Sometimes you can get by without understanding the intricacies, and sometimes knowing high level stuff is just enough to be somewhat productive in some environments.
But it is career limiting.
That's where I think the formality of University comes in. Even though we may not agree with certain aspects of the curriculum, the structure and content forces you to follow and learn certain patterns that in the long run are actually useful.
Some say that this style hampers creativity. It certain cases it may be true, but the majority of times it is actually the opposite. For example, understanding pointers is key to CS, but I think the trickiness of it has been abstracted out due to newer higher, more commercial languages other than C. Do you need to know pointer logic to code a simple app in PHP now a days? No, I don't think you do (actually, I wouldn't know--I've never used PHP for large application development).
But when it comes to larger engineering endeavours such as banking systems or large scale networked application, it sure is handy to understand them. Even if certain languages claim not to have pointers anymore--It probably leaves some wondering what that "java.lang.NullPointerException" error message is all about ;)
Knowing how to solve knapsack style problems (dynamic programming) is not something is done everyday, but just knowing how to look at a problem and develop a solutions is an advantage. Not too mention all the other stuff you study: compiler stuff, low level networking stuff (OSI), algorithm design stuff, discrete math stuff, software engineering stuff, etc., etc.
Like you said, anonymous above, not knowing some of this things is career limiting.
But it is all relative.
Would you hire someone with all that academic background to create HTML pages? (Take aside market conditions.)
I doubt it. For one such developer will quickly leave for something more interesting, and second, you would be overpaying someone to do scripting when you can probably get someone cheaper and more motivated to do it.
However, anyone can start learning stuff, and not necessarily wanted to do it at CS graduate level. All that is needed, I think, is just curiosity and the ability to know what to look for.