A Career In Computer Science & More

Started by
13 comments, last by samoz 15 years, 5 months ago
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.

throw table_exception("(? ???)? ? ???");

Advertisement
Step one, reading comprehension...

Antheus didn't say that learning from books was like learning to paint by studying paintbrushes, he said that learning to be a programmer by studying languages/APIs/technologies is like learning to be an architect by studying hammers, nuts, planks and bolts.


Books are fine. Classes are better (for almost everyone). Practicing by writing apps is essential, but you will not learn sufficiently by practice alone. That's more like learning to paint by painting off-white walls all day. You learn to apply things nice and evenly; how to clean up messes, but you'll never learn to make art that way.

Quote:
At the moment I'm not really sure whether I should jump on the Microsoft bandwagon or not.


It doesn't matter; not one bit. If you learn computer science sufficiently, switching between languages and technologies is a rather trivial matter. A few months to learn how the not-Microsoft bandwagon does things and you're good to go. This isn't exactly a make or break decision.

Quote:
So, should I continue learning programming languages?


No, you should learn how to program.

Quote:
Also should I learn how a computer works?


You should have at least a vague overview of how modern computers and networks work and interact, yes.

Quote:
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).


It's more useful if you fix computers or need to troubleshoot problems, sure. But it's not useless to programmers. It allows you to consider problems you would've never thought of otherwise. Though to be fair, that goes for pretty much all knowledge.
I do not know if this was stated already, but most jobs that are outsourced are not programming jobs but IT positions. As well their is still a lack in CSS graduates so the industry is still rather easy to get into.
Actually, Lothia reminds me of a good point...

Earlier this year, Microsoft lobbied very hard for an increase in the H1B Visa cap in order to bring in more senior developers from other countries. This implies two key points:

1) Microsoft, at least, is at least as interested in importing employees as it is in exporting jobs. It stands to reason that if suitable candidates were to be found locally, they would snap them right up. Anecdotal evidence suggests (working at Microsoft myself) that appears to be true.

2) Microsoft's main point during their lobbying, was that there are plenty of CS graduates locally who are ready for entry and intermediate-level development positions, but they aren't able to source enough senior development staff to place them under. As a general observation, they seem to have 1 senior development person for every 4-10 underlings -- Develop your skills such that you are in that top 10 or 20 percent, and learn things like team management skills, and you're basically set for life.

throw table_exception("(? ???)? ? ???");

Quote:
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.


Truly, you shouldn't be focused on a specific company's platform, at least not as a beginner. If you get a job at Microsoft, you'll need to learn them in & out, but for now, Microsoft products will support you well enough to do the general type of work you need to do to learn what you are doing.

If you haven't tried it, I'd recommend trying some flavor of UNIX, such as Linux, Mac OS X, or if you're really daring, BSD. These have been around for a while too and have very large user bases. In addition, they are very suited to development, since the core of UNIX has been around since the 60's. I personally am a lot more comfortable with UNIX, and it let's you get more under the hood of your actual software (build from source anyone?), rather than the smoke&mirrors that windows can be from time to time.

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.


Don't ever say things like this on forums. :) Already, I can feel a need to expound on the virtues of UNIX, POSIX, and all the flaws that are collectively called "Windows".

Truly, Windows is a (trying to word this carefully) "difficult" operating system from many different angles. UNIX flavors can do most everything Windows can and more. Windows simply has a better market share because it has a very good marketing and ad team, as opposed to the open-source mentality of Linux and BSD.

If you'd like, take a look into Ubuntu Linux at www.ubuntu.com. It's a pretty easy flavor of Linux to use, but it's very powerful once you get good at it. I'd highly recommend using it. Not only is it really well supported, fast, and fun, it's free!

If you're serious about CS, I recommend you at least try some sort of UNIX. If you don't like it, that's fine, but you will eventually need to learn how to use it. Ubuntu makes using it easier, but if you ever get to using the command-line in it, you'll start to learn what it's all about.

Happy trails :)

This topic is closed to new replies.

Advertisement