

Ask HN: How do I move into software from hardware engineering - mr_b

	I recently completed my masters degree in VLSI from a top 15 school in the US. But in the last two years, I have become very interested in software. However, because of the course structure and time constraints, I never got time to learn any programming language. I can program in C and know basic HTML and CSS. I really want to move into software but since I have no projects/experience in software, companies refuse to even look at my resume. How do I move into software and get a job in that domain.
======
hga
I've worked with someone with pretty much exactly your background, someone who
found himself in a software development project, and I'd indeed never hire you
as you are today for a software job. :-(

The only answer is simple in principle, you just have to find the time and
energy: do a lot of programming. If you're hard core or want to find out if
you are or have that potential, I'd start with SICP/6.001:
[http://en.wikipedia.org/wiki/Structure_and_Interpretation_of...](http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs)

Good luck! People with your background can bring a _lot_ to the table, you
just need to achieve the relevant software background first.

~~~
mr_b
Thanks! The link looks interesting. Will have a look. Now just have to find
some time for programming.

~~~
hga
You're welcome.

In the meantime, make sure to carry around one of your MOSIS chips, that earns
you a _lot_ of geek cred for those who know what it means ^_^.

(Seriously, it does.)

------
mrlyc
Just a few random thoughts:

What were you doing before the VLSI course? How did you get your experience
with C, HTML, CSS and Perl? Can you rewrite your resume so it emphasizes the
experience you have had with programming, even if it wasn't part of a course?

"Design of VLSI Systems" at
[http://lsiwww.epfl.ch/LSI2001/teaching/webcourse/ch01/ch01.h...](http://lsiwww.epfl.ch/LSI2001/teaching/webcourse/ch01/ch01.html#1.2)
says "The design process, at various levels, is usually evolutionary in
nature. It starts with a given set of requirements. Initial design is
developed and tested against the requirements. When requirements are not met,
the design has to be improved. If such improvement is either not possible or
too costly, then the revision of requirements and its impact analysis must be
considered." That sounds a lot like what we do for programming. Is there some
way to emphasize the skills you learned for VLSI and state how you would use
them for software?

Isn't VLSI mainly software driven these days? I would state what software you
used and what you did with it. That's a kind of programming.

During your course, did you work in a team or on your own? Did you gather
requirements, obtain resources, prioritise and allocate tasks and follow up to
make sure each team member did his/her job? You could reuse that experience
for programming.

With your hardware background, I'd aim for low-level technical programming
jobs like writing device drivers rather than more business-oriented software
like account packages, CRMs, databases, GUIs or possibly websites.

Did you debug hardware by using a CRO, JTAG port, signal injector or protocol
analyser? Those can be useful for device driver writers too.

Is there an Arduino group in your area that you could do voluntary programming
for? That would get you started with simple device drivers.

You might have to take a VLSI job for a while to keep the cash flowing while
you get more software experience by programming part time or on a volunteer
basis. There's a list of VLSI companies at [http://www.vlsi-
world.com/index.php?option=com_glossary&...](http://www.vlsi-
world.com/index.php?option=com_glossary&func=display&Itemid=44&catid=30/)

~~~
mr_b
That was an awesome answer. Thanks. I did C as part of course and the rest
because of interest. VLSI is mainly software driven. I have worked with
Hardware descriptive languages like Verilog. As per the suggestions above, I
have decided to take up an open source project and hone my software skills and
then try for a job change.

------
kashif
Perhaps you could work on an open source C/Python/Ruby. This way you could add
something of relevance to your resume.

~~~
mr_b
Ya. That would probably be the best bet. Can you suggest which would be
better-Ruby or Python? I have some experience with Perl.

~~~
kashif
I prefer Python.

------
one010101
Just do it. Pick a project and program it. Then do another. Practice is the
key.

------
ilkhd2
Find a friend who runs small software company, bribe him a bit, so you can
then easily write that you worked in his company a year.

~~~
plinkplonk
"Find a friend who runs small software company, bribe him a bit, so you can
then easily write that you worked in his company a year."

Why would you want to do this? If you have a friend with software company
_work for him_ for a year! Any sw company worth its existence always needs
more programmers. You can work at low pay (or even for no pay if you are okw
ith it) for a couple of months while you are learning and then get into a
fulltime position. With friends you can make such unorthodox arrangements. If
you have a friend who owns a software company, _use_ that to learn!

~~~
ilkhd2
Well, the friend with COMPANY, may have NO REAL positions open. And you may be
ALREADY very experienced in technology. So to break through bureaucracies of
job agencies/HR departments, you need to apply some grease. Yes it is
deception, I know, but it is benign and important one. Your politicians
deceive you every second, but keep them, do not you?.

