views:

392

answers:

8

I apologize if this is not the suitable place to be seeking advice.

I would like to switch careers from mechanical engineering to programming. Many of the projects I currently work on (weapon systems for the US military) will not be complete for another 15-30 years. I want to change careers because I enjoy programming, and because I would like to be a part of projects from start to finish.

About me:

  • I graduated in 2006 from Carnegie Mellon University with a bachelors in Mechanical Engineering.
  • My depth-sequence courses involved C++/Java programming of tools that emulated 3D modeling programs---3D coordinate data would be exported from one program, manipulated by my code to fit a suitable viewing format, then imported into another program.
  • I've taken Introduction to Intermediate Programming (a java 100 course) and was a Course Assistant for that same class the following semester.
  • I've taken additional miscellaneous student-taught courses ("Fun with Robots"), where we used WinAVR to program tiny two-wheeled robots to follow light-sources, complete mazes, etc...
  • I am currently writing an iPhone game, using Objective-C, hash tables (NSDictionary) and Core Animation.

I want to be a programmer or developer, whether it be for robotics, mobile device apps, or websites. I have the following questions:

  • What is the general timeframe/range for a single project in the following fields? (any kind of info would help me, even if you tell me they're all the same, or random)

    • Web developer (1-2 years per project?)
    • Robotics programmer (2-5 years per project?)
    • Mobile app developer (1-6 months per project?)
  • With my given experience, would anybody hire me as a programmer?

  • If not, should I consider going to grad school for Computer Science? Have I missed out on some vital programming theory because my programming experience is all from practice?
  • Would it help to dedicate my time toward personal projects to put into a portfolio?

Thank you in advance for any advice you can give me.

-yujean

+3  A: 

From what I've read of your post, the most compelling trait you have is a self-motivated heart for programming. While I can't point you at a specific company and say they'd hire you, I can tell you that self-motivation is one of your greatest assets, and will help you get a programming job given your current state.

That being said, anything you can do to further your computer science experience (go back to school, pick up a pet project, contribute to an open source project, etc.) will further increase your value.

fbrereto
I disagree on the education - a Masters with little if any practical employment experience is worthless IMO.
OMG Ponies
From your answer, I think a good path for me would be to start a pet project, put it in my portfolio, apply for low-level programming jobs, hopefully get an entry-level job, then proceed to graduate school once that job plateaus out.Thank you.
yujean
hmmm... my previous comment may have a bit premature. From osij2is's comment, I think that taking grad courses on the corporate dime is a good choice. I agree with OMG Ponies that a masters will have little to do with getting my first programming job.
yujean
osij2is
+1  A: 

The times are much shorter these days. about hiring you, it's all about skills. you will be tested for actual knowledge. experience is more important then degree, but if you're familiar with government contracted companies, they value the degree more then experience. look for a way to do a degree while working.

(times: web projects - 6 months, Robotic - longer, mobile - 6 months at most..., time to market is crucial in this field).

Dani
+1  A: 

Your existing education should help you get a position fairly easily, but you will be starting with no experience, so expect to start with a junior position unless you can demonstrate skill in a desired area, such as with your iPhone development.

I don't think grad school would be as valuable as getting a job for time spent, unless there is something specific you want to do that couldn't be done otherwise.

Project length varies widely. Web projects can run from three months to over a year.

Personal projects can be very helpful in gaining experience. Contributing to open source projects is also a good learning experience.

Dave Swersky
+1  A: 

Sounds like you have a lot of the basics.

My suggestion to get up to speed, take these classes: Algorithms and Data structures, discrete mathematics, and a course on design patterns. You won't be at the same level at as a computer scientist by just taking these courses, but you will be considered to be a serious candidate for programming related positions.

Granted this depends on your existing knowledge:

  • Web developer: Anywhere from 2m - 1y- This depends on the breadth and depth that you desire to go into for the project. If you want to just stick with HTML, CSS, Javascript (excellent starting points) it would be shorter. However, if you go into server side, it will take much longer and there is a lot more material to gain understanding on.

  • Robotics programmer: 6m-1y+: Robotics programming is a pain. It's not nearly as bad as game development, but it is a pain. Robotics programming deals with: networking, embedded systems programming, mechanical parts/sensor programming (as you know how important sensitivity and wear is here), AI [for movement and localization], etc.

  • Mobile app developer: 6m at the very least. Mobile applications have many issues you have to consider. Issues with mobile dev: power programming (optmizing your program to reduce the power consumption, and reducing network communication), optimization, reducing graphics complexity (simplifying what you are going to draw programmatically), etc

In my opinion the easiest of the three is the web developer, however the problems that are involved with web development aren't nearly as interesting as the ones that are with the other topics.

A good starting point for these in order:

  • Web dev: HTML, CSS, JS, XHTML, AJAX, ASP.NET/JSF, Perl/Python
  • Mobile App Dev: Win CE, Nokia n800, micro-controller
  • Robotics: Lego mindstorms (uses Java), Vex Platform, Roomba, Gumstik, micro-controller

With my given experience, would anybody hire me as a programmer?

monksy
When you say "computer scientist", do you mean "someone with a CS degree"?
Ben Dunlap
I shall look into these topics. This is the exact sort of advice I was looking for. Thank you.
yujean
Someone with a credible CS degree, and that is deemed suitable for CS research.
monksy
+1  A: 

There are a couple of different paths I'd suggest taking next:

  • Desire - consider a bit more about what it is within websites or robotics or mobile applications that drives you to enjoy that kind of programming. "Why you want this job?" may be a common question from recruiters, HR or managers at various companies. Knowing what you want to do can be an important asset in finding a job.

  • Skills - Consider some self-study on the SDLC, if you aren't familiar with it, and see what kinds of positions you could shift into that may be development or QA positions initially. Having some C++/Java basics may help get you into a junior position, I'd think.

The Engineering degree you have could be seen as technical enough for an HR screening your resume. Some projects I've been on have taken years to complete and others were done within days so it can vary widely depending on scope as putting in big enterprise systems,e.g. CMS, ERP or CRM, are generally done in phases that can take years while putting up a form may only take a few days to give a couple examples.

JB King
Knowledge of the SDLC won't convert a non-programmer to someone that cna develop software. The SDLC can only help people that are managing developers, or people that can already program.
monksy
"Desire" is definitely something I have been unclear about. osij2is recommended I pick up "Land the Tech Job You Love" (by Andy Lester). Thank you both for opening up my eyes!
yujean
I'll concede that some programming aptitude can't be taught, but there comes to a time to graduate from the school where one can just hack together a solution to using a more formal style that would be seen as professional to my mind.
JB King
+1  A: 

Your experience in mechanical engineering can be an extremely valuable asset for some types of software. There will be companies willing to hire you given a reasonable programming experience.

Taking classes would be helpful, as to getting a graduate degree. If you're anything like me though, I prefer to just sit down and read algorithms, operating systems and programming books on my free time.

The biggest attractor for some employers though, are personal projects and Open source contribution. If you can show that you love programming and you're willing to do it on your free time, then you're good to go.

Julson Lim
I will def be hoping to finish my iPhone app to show my dedication toward programming. I feel a bit scared though, because the code itself (while functional) is a bit hackish.
yujean
Everybody starts out with ugly code in my opinion. Just seek to find faults in your previous implementations and prevent the same occurence in succeeding ones. Also, refactor, refactor, refactor.
Julson Lim
+1  A: 

I did that exact thing. I graduated with a BS in Mechanical Engineering from RPI in 2006. It took about 6 months of working to realize that that was going to be a very boring thing. So, I started teaching myself undergraduate computer science by watching lectures from MIT's open courseware and UC-Berkeley's online courses. I was able to start working for a software group at my company on a trial basis, and after a few months I switched groups.

I'm currently getting my Master's in Comp Sci from UIUC online.

If you're able to do what I did (move within your large company) then I suggest it because they'll tend to take someone with a engineering background in the stuff you'd be working on as a benefit worth the limited software experience.

Dave
It's awesome to see that things worked out well for you. I can see myself following your footsteps in transitioning to a programming group, then proceeding further into CS via a masters program. Thanks for the blueprints of your own experiences.
yujean
+2  A: 

What is the general timeframe/range for a single project in the following fields? (any kind of info would help me, even if you tell me they're all the same, or random)

They all range in time alloted and "perceived" time alloted. If the company you work for builds sites/apps for other companies, then usually the client dictates too much of the schedule. If your company has their own product/service, internally the schedule/timeline comes from within the organization and often I've seen directives/initiatives/projects fall in line with quarterly financial reports (assuming the company is public). It really depends on what company you work for and most importantly what industry they're in.

Web developer (1-2 years per project?)

Try 3 to 4 months (usually). Again, it varies from client to client, industry to industry.

Robotics programmer (2-5 years per project?)

Can't say for sure. I've never done any robotics programming.

Mobile app developer (1-6 months per project?)

Again, no experience with mobile apps, but I fear it's something akin to web development.

With my given experience, would anybody hire me as a programmer?

I'm not in HR so I'm not bound by the rules of insanity, irrationality and stupidity so if it were me doing the hiring, I'd hire you. As for what the "real world" would do, I'd bet that any company worth your time would hire you. Many companies pass on great candidates simply because they don't understand what the candidate brings to the table or how to use them. Quite frankly, it's a mixed blessing. Getting hired by a bad organization can be an awful experience and may make you rethink your career choice and personal desires but getting hired by the right organization that really fosters your personal/career growth and opportunities and you'll never look back.

If not, should I consider going to grad school for Computer Science? Have I missed out on some vital programming theory because my programming experience is all from practice?

It certainly wouldn't hurt to go for Comp Sci in grad school but do it on the corporate dime. With the economy as bad as it is, I'd never encourage someone to get deeper in debt but education tends to be an exception to that rule. Just make sure to ask an employer if they offer tuition reimbursement as another perk.

You may have missed out on some vital programming theory, but it's nothing that a little time and energy can't resolve. Some concepts (while few in number) do require a large amount of time and contemplation, but I really don't see it being a hiring roadblock. I've met plenty of Comp. Sci. student programmers that were awful all the while a few mechanical/electrical engineers that I met were extremely talented programmers. Go figure.

Would it help to dedicate my time toward personal projects to put into a portfolio?

Tough call. I would say it wouldn't hurt, but seeing as how you're starting out, you might want to do a few small personal projects yourself. I wouldn't be surprised though if it didn't help your desirability to employers (much) at this point. I'd argue though that if you keep doing projects on the side and in particular Open Source projects that you could point employers to look at your code to get a sense of how you program, think, solve problems.

Sorry for the long post but I do have one more idea. If you can check-out from your local library or buy the book: "Land the Tech Job You Love" (link) by Andy Lester. I've started reading the book and I must say it's quite informative and I wish I had read it (if it was published) when I got out of college. I actually met Andy Lester at a party. Very nice guy. Very passionate about career advice and helping people out especially in your situation. He's a programmer (at heart) so don't think this is one of those lame ass inspirational books brought by some speaker with no connection to your field of interest. Give it a look and maybe it can help you focus your energy/interests to getting the "Tech Job You Love".

osij2is
Thank you for putting so much time into responding to my questions. You are the man. This helps me very very much!
yujean
Will definitely pick up that book. Thanks again.
yujean
No problem, dude. Good luck!
osij2is
Thanks very much for the recommendation on my book. I hope it helps!
Andy Lester