how to use ajax with json in ruby on rails?

How do I make a career switch from computer hardware to software?

  • Quick summary: My educational & work experience relates to computer hardware & architecture, but I'm strongly considering making a move to software development. I have no idea how to go about this, what to expect, and can really use some advice. A little background about myself: I have a Master's degree from Stanford, with a specialization in systems & computer architecture. Since college, I've been working at leading processor-design companies for 5 years, doing logic-verification. A quick overview of what this role entails: We build & maintain a software ecosystem that is used to verify the chip's functionality, before it's ever manufactured. The job is very much focused on computer hardware & architecture, but our day to day responsibilities entail a lot of coding & software development. I do have a good foundation in computer science & programming as well. I've taken courses on C++ object-oriented programming, parallel programming, operating systems, databases & machine learning. Not to brag, but I've aced all these classes, beating out most of the computer-science majors. Hence why I'm confident that with a bit of ramp-up, I can do well in a software development role. That said, my breadth of computer-science knowledge is definitely lacking compared to most CS graduates. The only languages I'm most experienced programming in, are C, C++, SQL & Matlab.  I've also done some programming in Perl, Python, XML, JSON and a few others, but wouldn't say I'm as knowledgeable on those as I am with C++. I'm pretty good at problem solving & analysis, but don't have any formal training in algorithms. Some questions that I'm trying to figure out & can use your help with: 1. How easy/hard is it to transition from computer hardware to software development? Is there anything I can do a few months ahead to prepare for this transition? I have a lot of colleagues/HR/recruiter contacts on LinkedIn, but they are mostly in the field of computer hardware. How should I go about job-hunting in the software world? 2. When I make this transition, will I be starting over from scratch, like a fresh college grad? Or will I be able to use my 5 years of engineering work experience to get a more senior role? 3. I'm currently making around 140k/year in base salary. What should I expect & negotiate for when I make the switch to software? A pay cut? Roughly the same salary? A pay raise? I would really prefer for this discussion to stay away from "hardware vs software" debates. My career growth & compensation is definitely a factor I'll keep in mind, but I'm primarily exploring this transition because of personal interest. ----------------------------------------------------------------- It's been 6 months since I've posted this, and a month ago, I accepted a job offer for a Software Engineering role which I'll be starting next week. To share my experiences over the past 6 months: Outcome: I applied to a number of companies through their online website, and never heard back from them. Personal references from existing employees definitely seems like the way to go. I spent multiple hours emailing all my LinkedIn contacts working at interesting companies, and it certainly paid off. An ex-colleague of mine is now a manager at Amazon and got me an interview there. I scraped through the first phone screen and failed the second phone screen, mostly because I tried to do it before completing all my interview prep. Regardless, it was a great ice-breaker. A 3rd party recruiter on LinkedIn got me an interview at Two Sigma. I passed both phone screens, and lasted a full day of on-site interviews. I thought I did pretty well, but didn't get an offer. I've a number of friends at Google who referred me and got me an interview there. I passed both phone screens, and did the full day of on-site interviews. Apparently I didn't do well enough to get an offer, but I did well enough to be invited back for a second day of on-site interviews. By then, the clock was ticking down, so I had to pass. I had a few more interviews lined up for VMWare, NetApp and Meraki. All through personal connections who referred me. But I ran out of time, and had to pass on those. The same 3rd party recruiter also got me an interview at another small tech-centric Hedge Fund, and they made me a job offer which I've accepted and I'm very happy about. Career Progression: In terms of job title, I used to be a "senior" engineer at my old job and lost that senior title at this new job. I get the feeling that my first year will definitely involve a lot of ramp-up and catching up with the other software guys. However, from a compensation perspective, they gave me a very healthy pay-bump over my previous job. So I'm certainly not starting over or losing anything by making this switch. Interview Prep that really helped: I spent 2-3 months preparing before doing any interviews at all, and I'm really glad for that. Otherwise, I would have completely bombed the interviews. Some things I did to prepare: Took the Algorithms & Data Structures class offered by Princeton on Coursera. This was the single best decision I made, since 80% of my interview questions revolved around this class material. If I had more time to prepare, I would have taken the follow-up class as well. Did a lot of practice questions from the book: Cracking the Coding Interview. It was very effective in getting me in the right frame of mind for interview questions, and exposing areas that I need to brush up on. Spent a good amount of time practicing on TopCoder. This was very helpful for hands-on programming experience, and making me very intimately familiar with the various libraries & syntax. Picked one language (Java) and made sure that I was very comfortable coding-on-a-blackboard with it. This gave me a lot of credibility & self-confidence during interviews. Redid my resume to emphasize the programming aspects of my job, education, and career goals. I was very upfront about the hardware-oriented nature of my previous jobs and education, but made sure to emphasize the amount of programming that I've done in the past as well. Interview Prep that didn't help: Read the book: Design Patterns. In retrospect, the benefits of this were very low compared to the amount of time it took to read it. Most interviews barely touched on this, and even when they did, very superficially. Fascinating book for the content itself, and its approach to software design principles. But purely from an interview prep perspective, wasn't as useful. I started learning Ruby on Rails, to diversify my languages. I was worried that my lack of Python/Perl/scripting experience would be a problem in interviews. Thankfully, this never became an issue. There was one amazon interviewer who also asked me about Java's synchronization tools, and I had to tell him that I knew nothing about it. I then spent a lot of time learning this stuff on my own, but none of the other interviews ever asked me about this. Apparently, knowing one language well enough to answer generic programming questions with, is good enough for the interviews. Some things that I didn't do: I never posted any answers on Stack Overflow. And this never came up during interviews either. I tried getting involved in open-source projects... for about one hour. I found myself completely lost in the existing code base, and had no idea how to make any sort of meaningful contributions. I eventually just gave up on this. I did a lot of coding at my previous job, and that seemed to be good enough for the interviewers I talked to. Conclusion: Making the switch is definitely going to be a challenge, but it's certainly doable. From a compensation perspective, I'm making just as much as I would have made, if I had stayed within the hardware industry. For anyone else considering making the switch, good luck!

  • Answer:

    I think is mostly on the right track. For the past couple of decades, hardware has really been about software - from the release of http://en.wikipedia.org/wiki/Magic_(software)in '83 onward, you just don't do any of this stuff by hand. You've been intimately involved in building and supporting complex software environments, targeted to a specific function. Go back and read your original statement of problem. Dude, seriously? You ARE a software developer. Sounds like you want to work in a different area. That's a whole different problem to solve, than "how to I go from crafting sand into CPUs to writing code". Figure out what area you want to work in. Meet people doing that. Talk to them about what they're doing, figure out what your deficits are, and correct that. I highly recommend two other things: http://stackoverflow.com, and open source projects. Get on StackOverflow, and see how many questions you can answer. Correctly. :-) Build reputation, that's the "social media of choice" for serious tech recruiters. If I'm hiring devs, I could give a shit about what they do on Facebook or Twitter, but if they're a zero on Stack Overflow, well.... they're a zero. Open source projects are important too. Find open source projects that interest you,  and start pitching in. Code, commit. Fix bugs. Port to new OS. Whatever floats your boat. What you're doing is building a portfolio. At the end of the day, that's what's going to get you a job, not your degree. Your prior experience will be super helpful in getting you gigs where the words "mission critical" appear. Whether or not that's of interest to you is another matter. P.S. I made that shift myself, part way through grad school. In my opinion, I'd rather have a software dev that could have built the hardware working on certain classes of projects than anyone else. You can totally do this!

Stan Hanks at Quora Visit the source

Was this solution helpful to you?

Other answers

Based on your description you are already doing software. You are talking about a switching from software supporting hardware development to software supporting something else. It's still a change but it is NOT as extreme a change as going from pure hardware to software. I think you need two major changes to make this transition. One is the retraining you expect but the other is a shift in marketing yourself. For the marketing yourself I'd start by rewriting your current resume as not a hardware resume but as a software resume. You are a software person with experience interfacing with and supporting hardware. Highlight the languages you know, the programming aspects of your jobs, the programming tools you have used etc. When doing this and talking to potential employers remember that you probably already know the following: Basic programming concepts (loops, variable, object oriented, etc) Debugging Working with some software tools Developing projects in a team Turning requirements into working software Deployment and testing for the specific stuff you worked on That's a whole lot of practical knowledge needed in any programming job. For the retraining part, it's time to expand your horizons but I think in a different direction then you were thinking. Algorithms are great but there are a whole lot of tools and libraries out there now that handle a lot of that for people. Unless you are going into highly theoretical programming you don't need as much hard core algorithms as you assume. If you want a good refresher I've heard this book is good but I don't think you need to memorize it for a "regular" programming job: http://www.amazon.com/dp/1849967202 What you really need for your retraining is two parts. Break the hardware mindset Expand your areas of expertise out of the low level area Break the Hardware Mindset The hardware mindset isn't bad when you are working on hardware. You have to go slow. You have to be methodical. You have to measure twice because you only get to cut once. You have to test, test, test because there is no going back and upgrading everyones chips. If you don't follow this mindset on hardware you can get into a lot of trouble. Things are totally the reverse when you are working in modern web development. Things change so fast in the web development space that if you carefully and slowly planned out a project using the waterfall method your competitors would leave you in the dust. Planning and quality are important but not at the sake of speed. I'd start reading up on Agile software development. Start thinking about tradeoffs when working on projects. Sometimes it's better to release simple and fast and then iterate. Make sure people you interview with see that you understand the tradeoff between pure approach and practical approach. Expand your Expertise I tell new programmers that to head towards expert level you really need to know 3 unique different programming languages. It sounds like you have C++ and Matlab. (I'm not that familiar with Matlab so can't say if it counts as a "language".) To push yourself I'd retrain on something totally different. Either grab a mobile language like iOS devices or a web framework language like Ruby on Rails. You can get basic training online for free. Pick up some great books from places like http://pragprog.com. Then depending on how you feel in your skills consider one of the paid training programs, finding someone who will let you contract part time for the experience and training or working on some open source in that area. Also, look for local dev groups in that language. What you want to do is get yourself in a position where you are working with experts who know more about it then you do. From them you will pick up both how to do it but also some of the mindset discussed above. Once you have a strong set of practical skills you can start looking for a job. You will be new to that language but old to the concept of programming.

Rose Wiegley

This is doable, IMHO, but will be challenging.  Additional classes in data structures and algorithms are almost certainly beneficial, if not out and out necessary. But beyond that, just dive right in.  You have a fundamental understanding of how to code.  Now you need to learn how to turn that into software engineering.

Tony Li

I am in the exact same position. I work in Hardware Verification myself, doing SystemVerilog and C. I'm switching to a software job this year, just got an offer. Just believe in yourself -- honestly once you do hardware verif most software is a piece of cake. You have the skills, just do programming problems, read up on the latest trends in the industry and work out what you wanna do.

Aditya Anchuri

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.