views:

855

answers:

8

From my some of my previous questions it might be clear that I am looking to follow the road of web development.

While, as I finish up school I do want to do web development and maybe for a little while once I graduate. Down the road, however, I'd the move into different areas of software like embedded systems or systems programming. How difficult is it to make the leap, do you get type cast into a certain style of work based on the sorts of things you worked on in the past?

UPDATE: Just to clarify when I say I web development I mostly mean backend server side stuff like php or RoR not design as much.

+11  A: 

I'd recommend spinning up side projects that touch technologies that you're interested in getting into. If you can walk into an interview and demonstrate proficiency with the target platform, I don't think you'll have to worry about being typecast.

Gabriel Isenberg
+4  A: 

I've worked for very small consulting firms in the past where you are kind of forced into being a jack of all trades. I've worked on ASP.NET websites one hour and programmed Symbol barcode scanners in the next hour. If you want to vary your experience, you might consider working for a small company like this that kind of takes the "anything for a buck" approach to choosing projects.

Anderson Imes
+2  A: 

It's appropriate that you've identified that web development and software programming are two different paths. The problem is that by choosing an alternate path you will have to start from scratch with regard to your experience, as web development experience doesn't much apply. The good news is that the personal, educational, and mental effort to shift gears and focus on software programming will be made easier, assuming that your web development experience was highly technical, i.e. plenty of exposure to actual programming and not more style, layout, configuration, and design.

stimpy77
+3  A: 

First answer: I think it depends what you mean by "web development", which can span anything from simple HTML pages to Google.

Second answer: do the hardest thing you can be good at and that you're interested in. If it's hard, you'll learn more. If you're good at it, you'll find new things to do easily. If you're interested, you'll do a good job.

Switching from one "type" of programming to another isn't hard as long as whatever "type" of programming you're talking about involves solving interesting problems. Some web development does, some doesn't. Same with systems programming, or anything else. Put yourself in a position to solve interesting problems.

Generalists are always in higher demand than specialists. I've seen excellent and adaptable engineers with backgrounds in everything from game programming to running their own web server for a startup to driver development to airplane mechanics. The easiest way to do what you want is to be excellent at what you're doing.

Moishe
+2  A: 

Priority should be the work that interests you. If it suits you then no matter how remote it is you will eventually enjoy doing that.

"Polymorphism is a great virtue."

Nrj
+1  A: 

My recommendation is to attempt to remain adept in all types of programming. Sure you'll get a web development job, but don't let that stop you from reading blogs about other types of languages, or even better, dabbling yourself in stuff like functional programming, system level programming (admittedly that is hard to get into by yourself), etc... Practice makes perfect. And if you enjoy doing it, which it seems like you might, it won't even be 'hard work,' just interesting work.

It seems like you won't go the functional / theoretical CS route, so the best I can say is... look up projects, or do side projects of your own, that require system programming skills. Learn assembly. Write assembly. Work on MenuetOS.

Claudiu
+1  A: 

Although my work experience and studies we're not Hardware based at all, I've always loved hardware and played around coding for several gadgets. So for a job interview in the hardware domain, a few years back, I once brought in an embedded portable device (one of their target platforms) with some software demos written in my spare time. Needless to say I got the Job.

Robert Gould
+10  A: 

After several years of C/C++ Win32 application programming, I changed jobs and had to suddenly learn Pascal and Delphi. A few years later I switched from that to embedded C. After a few years of that I switched to database/web apps.

In each switch, I had to learn a new language, new rules, and in some cases learn where rules from other systems didn't apply anymore. It felt like starting from scratch, going from mentor to newbie, and it's highly uncomfortable.

The good thing is knowledge of data structures and algorithms helps everywhere. Math is priceless. If you can write good code on a web app, and make your database queries tight, then developing for an embedded CPU with limited memory, I/O, and speed won't be anything more difficult. It's just a matter of learning a new set of rules or a new language.

The real problem is how to learn a new specialization quickly. The answer is to just write a lot of code. When you encounter something you don't know how to do, ask google, buy books, ask stack overflow, or whatever, but write the code and try it. You can learn a lot by reading, but you learn more by experimenting.

I highly recommend making leaps. And if it takes a while to get hired as an embedded systems programmer, you still have the experience with web apps to keep you paid.

Mnebuerquo
Great answer... +1
Chirantan