Quote:Original post by Ntvu
At the moment I'm not really sure whether I should jump on the Microsoft bandwagon or not. I'm aware of the fact that Microsoft is a large company and it (along with Windows and their products) probably won't die out for quite a while. What I'm worried about is that one day a new operating system will probably take over Windows, and then my skills will become obsolete.
Just because a skill will inevitably become obsolete, doesn't mean its not worth learning. IT is littered with technologies that were invented, touted as the best thing ever, popular (and very well paid) for 3-5 years and then abandoned almost overnight. If you waste your time looking for The Last Thing You'll Ever Need (TM) you're going to be waiting an awfully long time and the world will pass you by. Accept that most technologies come and go in cycles and embrace it. Learn to learn, don't learn APIs.
Quote:It's kind of hard to think that if a new OS comes out and it's better than Windows, people won't switch to it. If that is the case, I don't really think that people will stick to Windows and allow their files to be destroyed by viruses, malware, etc. Anyway, that's just what I'm worried about. Also I know that other operating systems like Linux can easily outperform Windows and are much less hardware demanding.
Oh come on... Momentum alone basically drives the computer industry, and there are many, many examples. Look at the old x86 processor for example... Its an ugly architecture with dis-joint bits and bobs that have been cobbled on over the years. We stick with it because it runs our software, because its compatible with our hardware, because it benefits from the economies of scale, because we've invested billions of hours and trillions of dollars into it, and because it is familiar. From a more academic viewpoint most would agree that, PowerPC, MIPS and ARM architectures are all more elegant and subjectively "better" -- and yet today they are mostly relegated to embedded systems and expensive, niche, "alternative" computing platforms. Believe me, it takes a lot more than customer discomfort or "better platforms" to change that kind of momentum.
As for Linux being inherently more performant/less demanding, that's hardly the case -- it can be as light or as thirsty as you make it, Microsoft just hasn't tuned a mainstream windows distro for lightweight use (but there is, for example, XP embedded an WinCE, which target the sort of lightweight computing appliances that linux does, or look at nLite). Honestly, I defy anyone to show me a Linux distro that does what Windows does, as well as it does, and which is less bloated/faster than an appropriately slimmed down windows install.
Quote:Back to the subject though, I'm not sure exactly how I should approach learning computer science. I know that learning purely from books or classes just won't cut it; a hands on experience is probably the best way to approach learning about computers and technology. That's what I'm trying to do, I'm trying to learn mostly by creating my own projects and programs, and less by reading books and taking classes.
I'm not sure if this is exactly the best method to use though. But like someone mentioned, learning to program by reading books is like learning to become an expert painter by studying paintbrushes. So, I'm basically yielding to the hands-on method, though I'm not completely sure that this is the best way to approach computer science or programming though.
Look, there are certain things you can't learn through blind practice. What you need is insight, which is where the book-learnin' comes in. If you can't direct your practice in the right direction, then its all for naught and will only serve to develop and enforce bad practices and assumptions on your part.
Quote:So, should I continue learning programming languages?
You should, but there's another quote of which you should be aware "Computer Science is as much about programming as Astronomy is about Telescopes." A mere "programmer" is not a computer scientist at all. A mere programmer is usually able, at best, to modify wrote, prescribed solutions to familiar problems. Computer Science is exactly that -- the science of computers, and more specifically, of computation -- programming languages, and even "computers" as we know and think of them in our everyday lives, are not at all necessary to true computer science -- they are often little more than mere tools applied to produce more practical results.
Quote:Also should I learn how a computer works? For example, how networking or TCP/IP works, or how a computer works in general? I know that learning this kind of stuff may be important in some computer careers, but most likely not programming (please correct me if I'm wrong).
What I enjoy doing is programming and learning about computers in general. When I mention computers in general, I'm talking about learning how computers work and also programming languages as well. For me, learning how to use certain softwares and not how to program is boring.
Knowing how the computer works will directly help you in becoming a better programmer (leaving out Computer Scientist, because you aren't one if you don't know architecture) My favorite example is knowing how the memory hierarchy works -- You have registers, L1 caches (often split for data and code), L2 and L3 caches and beyond, which may be local or shared, inclusive or exclusive, 2, 4, 8, or 16-and-beyond -way associative, then main memory, extended memory, virtual memory... Because so much of most programs is about shuffling and manipulating data (even games) the memory system is probably one of the most important things you should know -- If you use your memory unwisely, your application will literally crawl -- no matter how fast and numerous your processors are... Heck, the difference between even normal, naive memory use and wise memory use can often represent an improvement in speed of several times.
Quote:So, anyone got any more suggestions?
I'm sure I could write for nearly forever, but I think I've made my point. The bottom line is that fundamentals count. You should have roughly equal parts theory and practice. I've experienced great illumination from both, and you will too. Even being "just a programmer" is about much more than just that, if you're any good.
If you're so worried about outsourcing, remember one thing: "just programming" can *always* be outsourced. Make yourself more than "just programming", be a problem solver and make yourself invaluable -- that is the recipe not only for job security, but fat paychecks as well. Be so good that your employer can't afford to loose you, or worded differently, be so good that your employer can't afford to let you go work for the competition.