Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm looking for some advice on the best path to take to shift careers from database development to software engineering.

Some background:

I have an undergrad in Mathematics from one of the better engineering/computer science schools in NA. I was lucky to have taken a few computer science courses given me a bit of a foundation in CS theory (java programming, elementary algorithms, data structures).

Since graduating I've been working as a database developer (6 yrs now), specifically in data warehousing doing lots of PL/SQL coding for back-end ETL processing and occasionally front-end web/database applications. For a while now I've been finding that I'm far more interested in the work involving building database driven applications and now I want to extend and apply this passion to more traditional areas of software development.

I've done research online to come up with some first action steps to catch up on theory and start to practice coding.

  1. Study following texts.

    • Code: The Hidden Language of Computer Hardware and Software
    • The C Programming Language
    • The Structure and Interpretation of Computer Programs
  2. Simultaneously work through Python coding tutorials and look into solving as many online challenges, problems using Python.

  3. Once reaching comfortable level of understanding of Python, start participating in open source projects, leveraging existing knowledge of HTML, CSS, JavaScript, AJAX, mySQL combined with Python.

  4. A few months down the line begin serious study of algorithms via Introduction to Algorithms (Cormen) & MIT 6.006 opencourse. Need to brush up on some discrete math but I think prior exposure to advanced mathematics and basic algorithms from my undergrad will come in handy.

So at moment I could use some direction on following:

  1. Does the above learning plan look ok? Any other readings, concepts, practice to consider optimizing my time and opportunities?

  2. I'm in a dilemma in that I want to leave my current job asap as I'm not gaining anything that will help move me towards software development (not to mention how boring, unchallenging it is), yet I don't have the practical experience on the resume to apply for programming positions. What to do? Ideally I would like to get a position which I can leverage my background in databases/data warehousing, like data services engineering (Amazon for example has several positions in this regard), and transition from there but even those need some work experience in java/c++. If I pick up minor open source work on the side in the following months, how far can that get me in being considered for development positions? Any other paths I should consider?

share|improve this question
1  
The dilemma part of your question is possibly off topic, don't worry about that, but answerers may opt to ignore it. Go through questions tagged career-transition, I promise you'll find several helpful tips. –  Yannis Rizos Jan 12 '12 at 5:16
add comment

4 Answers 4

I could be barking up the wrong tree here but database development is "software engineering" because the same principles are followed in both.

From your question you want to move from the backend (database) to the middle tier (application logic) or front end (UI) development.

My suggestion would be for you to take the path of least resistance and start taking on more application support and programming responsibilities within the two layers in the applications you are doing database development for since you already understand their business space.

Now in order to accomplish these tasks you will need to do a lot of reading, research which will be focused and has to show results.

My experience has been that the transition from theory (books and articles) to practical work is very difficult so why not start working on solutions immediately. The small steps with results will be like a beacon on your path

share|improve this answer
add comment

You're asking for relevance feedback based on one negative data point (I don't want to do database development) and one vague handwave (more traditional areas of software development). You then give a list of skills/tools that looks fine, except I have no idea what you really want to do. Where is your passion, what gets you excited? Find that and all of these other questions will sort themselves out. Seriously.

Here's a homework assignment for you. It will only take 15 minutes of your time, but you may find that it fundamentally changes the way you think about this process you are going through.

Steve Job's 2005 Stanford Commencement Address

There were a lot of things I didn't agree with Jobs about, but this address is a classic.

Oh, and don't quit a good paying job until you have an idea where you want to go to. This economy sucks planetoids and finding a new job is always easier when you already have one. But that doesn't mean you have to go into a holding pattern. Find open source projects that look interesting, download the code, poke around, see if it lights a fire. If so, contribute and learn. People worth working for will know that real contributions to open source projects are just as valuable—maybe more valuable—than commercial experience.

Good luck.

share|improve this answer
add comment

The books you've listed are definitely books you should read, but at the same time they will be very technical, extremely dry, and difficult to get through.

You might want to think about starting with something like "Code: The Hidden Language of Computer Hardware and Software" by Charles Petzold. I would also recommend "The Pragmatic Programmer" and "Code Complete".

The key to being successful with the transition is to not take on too much, too fast and overwhelm or burn yourself out. You should start with simple programming exercises that and are fun and entertaining.

I've found I like the approach that http://www.codecademy.com takes because you learn by doing (it's free) and it's kind of fun. Since you have some CS background you might find it overly simplistic, but it could also be a fun, easy refresher on basic skills.

In terms of experience and proving to another employer that you're qualified for a development job without work experience, I'm going to copy liberally from my answer to another question:

You are going to want to build up a portfolio and a reputation. There's a couple of good ways you can do this:

  • Contribute to open source projects.
    • This gives employers to opportunity to actually look at the code you've written.
  • Develop your own software applications for fun.
    • This shows you can actually build something from beginning to end, regardless of how small.
  • Start a blog on software development. Try to post to it regularly.
    • This shows skill mastery and gives employers a chance to see how many you know and not just what you can write.
  • Post answers to StackOverflow questions.
    • This again helps to demonstrate skill mastery and your ability to leverage your skills and knowledge on other people's problems.
  • Earn certifications.
    • Depending on what technology stack(s) you're familiar with, there may be some certifications available for you to get. This shows an employer that a third party has tested and validated your knowledge and skills in a specific area.
    • Be aware that not all vendor exams and certificates are created equal. Be sure to do some research on the value of the various certifications and how they are perceived by other developers in that area.

This are somewhat long term approaches, but they will add up over time. You will accumulate a body of work that you can use to show prospective employers that you can do the job and you have experience even if you've haven't yet been paid to develop software previously.

A few more resources for you:

share|improve this answer
add comment

Just apply in-house for a new position that contains more application-development work.

Market your database-development skills as a plus. It actually is an advantage.

There will be many app developers on other in-house dev teams who do not know anything on implementation details of database layers. You could increase their productivity by helping them develop new database-backed applications faster, and learn a whole lot from them about app development yourself.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.