
Ask HN: any advice for someone changing career to become a software engineer? - tbassetto
One of my friends in his late-twenty has a technical master degree (not related to computer science) but he would like to change his career to become a software developer. He is not satisfied with his current job &#x2F; working field and he is already learning HTML&#x2F;CSS on his free time. A bunch of his friends are software engineers (me included).<p>I think it is possible for him to work hard and gain enough knowledge to find a job as a junior web developer in a few months (a year?) from now. But should he focus on JavaScript and single page applications? On a specific framework? Should he still learn a server site technology and if yes, which one?<p>I am a JavaScript developer so maybe I am seeing this whole story with blinders. What if learning iOS or Android would be a better use of his time in 2014? I may be wrong, but it looks like the market is looking for &quot;native&quot; mobile developers more than web developers.<p>What would you recommend to him?
======
kephra
There are millions of web bunglers in the indernet. Do you really want him to
compete with them at entry job level?

You told he "has a technical master degree". and I would advise to focus
coding goals towards solving problems within his domain. He might be a bad
coder, but he can certainly compete to an average coder, who has no domain
knowledge.

~~~
incision
_> "...advise to focus coding goals towards solving problems within his
domain."_

Exactly.

Every field is bound to have some common problem which is dying for an app to
mobilize it, a site to collect and correlate it, some code to automate it or a
framework to organize it.

Identify a problem in the native domain then figure out to leverage code to
solve it.

This is exactly the sort of transition I'm eyeing, but I'm looking at it from
the perspective of systems/operational tech rather than something entirely
outside.

~~~
tbassetto
> Every field is bound to have some common problem which is dying for an app
> to mobilize it, a site to collect and correlate it, some code to automate it
> or a framework to organize it.

At first sight, we can not see one but he will keep trying to find one because
it is definitely helping to work on a project that could help you in your
current job.

That said, I tend to agree with gofer's comment about how it could not evolve
into a position of developer in his current field. There are definitely "IT
people (developers included)" and "domain experts". Maybe mentalities could be
changes…

------
systematical
Regardless of what language/platform he chooses your friend really needs to
have a passion for this if he is to adequately self tech him self. By a show
of hands, how many got into software development for the pay? I should see
very few hands. Most of us are here because the idea of building something
from scratch and seeing it to fruition was very appealing.

Whenever someone comes to me about getting into programming. I tell them they
should think of an idea they think is awesome and start building it.

~~~
germs12
This is exactly how I got in to programming. It was desire to tinker and play
with tech as well as the joy of creating something on my own that others
valued. Only after working in the field and getting raises that brought my
salary higher than I had ever expected did I start to think of software
development as a field where money can be made. I had blinders on.

------
stonemetal
You say he has a technical masters, Why doesn't he pursue software development
in that field? If he is an EE doing embedded hardware transitioning to
embedded software could be an easier career move than generic junior web dev.
There are computational specialties for every science i.e. computational
biology, computational chemistry, etc. so he shouldn't have a problem no
matter which field his background is in.

~~~
jofer
I completely agree, but from personal experience, it's _very_ hard to get a
job that allows you to actually write code when you wind up in the sort of
role you're describing.

At least for me, there has always been a strict firewall between "developers"
and "domain experts". The roles are dictated by the degree you have.

Basically, as a "domain expert" you wind up doing tech support (i.e. help desk
/ call center / on-site training, etc) for whatever gets developed instead of
actually gaining any software development experience.

Admittedly, my experience is entirely restricted to large corporate settings,
so the situation is probably very different at smaller companies.

------
dsk139
Last year this time I was a middle school science teacher with little to no
technical background. Now I'm a JavaScript software engineer and I teach
others how to become software engineers in my free time. Some common trends I
notice among my clients who are successful:

1) Grit - the ability the struggle through problems and dig through many
rabbit holes/frustrations

2) Passion - true passion for technology and trends to keep up with latest
frameworks/languages/etc and patterns- generally (but not necessarily) is the
first step for grit

3) Problem Solving Frameworks - the ability to create frameworks for yourself
to solve programming issues including debugging, asking questions, talking to
a duck, etc.

Feel free to e-mail (in profile) me and I can set up an intro advice call with
your friend.

~~~
tbassetto
Thanks a lot, I will tell him to contact you.

------
BSousa
If he is serious of continuing developing software for many years and not just
jump ship because the pay is good now, learning the basics of CS is my
recommendation. There are a few coursera courses on intro to CS (I think using
Python) that will be very valuable. Learning about how a computer works, how
algorithms work, etc are very valuable (I'm not saying to know the exact O
notation of 50 sorting algorithms, but the general idea of how they work)

If he just wants to make more money but doesn't care much about
programming/developing software, just tell him to go to one of those
Rails/iOS/etc bootcamps for a month or two.

~~~
busterarm
The bootcamps might be a mistake. I learned basic CS first but I went with a
sort-of bootcamp just to get some projects in and I just found it so boring.

~~~
BSousa
I don't think they are that good as well, but as I mentioned, if the whole
point was just to get an entry level dev job for the money, it maybe a good
option.

------
ufmace
Short version - build something that you want to build. Something that makes
your live easier, or helps people you know. Platform and language aren't as
important as taking a project to completion.

If you have any aptitude for this business at all, you ought to be able to
pick up any language and API in a couple of weeks work, once you know your
stuff. What's hard is having the discipline to get through the sloggy parts -
fixing tricky bugs, adding features to your thing until it's actually useful.
That's why it's best to start on building something that you can personally
use. You'll have the motivation to finish that's hard to keep when you're
learning something you have no use for.

If your current career involves doing anything on a computer that can be
repetitive, start by automating that. Build a website or an app that does
something you need. Keep working - keep adding features to whatever you build,
as long as it makes sense.

If I'm doing the interview, I'd much rather hear about how you solved a real-
world problem with your skills than how you spent X years learning Ruby or
Java or Objective-C.

------
markbnj
Sure, he can become a software developer if that's what he'd rather be doing.
It's still (largely) a business where demonstrated skill outweighs paper
testimonials of brilliance. If he actually likes programming then encourage
him for sure. If he just wants to get into it because he doesn't like what
he's doing now, then something else would be a better fit. Anything else,
really.

------
christopherslee
Agreed with the above comment about having a passion for it.

Build stuff, a lot of stuff. Most of it will be bad, but it will start to get
better, AND you will start to develop speed in the form of mental patterns for
getting things done. Some of those patterns will eventually change as your
mentality shifts from "just getting things done" to "getting things done well"
to other concerns. Software is largely a set of tradeoffs.

I think getting things done is understated because it also means learning to
deal with ambiguity in features/ideas/specifications/product. This can cause
paralysis for some.

~~~
joshvm
My mantra is normally finding a personal problem, locating the
libraries/software/hardware that's needed to fix it and then go about solving
the problem using those things. Usually doesn't matter if you have no
experience, one of the things you get good at is learning to pick up new
technology.

Once you get good at programming it's fairly easy to drop into other languages
if you need to.

Having an end goal is exceptionally powerful. Spec out your idea fully and
then try to make it real.

------
msg
The dirty secret of software is scalability. Scalability to big O, big O to
algorithms, algorithms to computer science. How do you like me now.

You don't want to use the right software language or framework with the wrong
approach. You want to be able to reason clearly about the core problem and
understand the tradeoffs of different classic solutions. Or invent a brand new
approach. Or invent a framework or invent a language if necessary.

Consider this a plug for at least undergrad level education in CS. You can
learn most of the rest of it on the job, but not computational thinking.

~~~
kenster07
I disagree. If this person is a good abstract and technical thinker, he should
be able to make the leap if he is sufficiently motivated.

You absolutely do NOT need multiple years of CS undergrad to have a sense for
scalability. If you open your mind, you will see that world history is chock
full of systems that have scaled -- they just don't happen to be written in
binary or backed by CS degrees. And I would say that these historical systems
share more similarities than you would think with scalable computer systems.

In order to be good at this kind of thing, one just needs some sense for
abstract thinking -- which countless non-programmers have, we are actually not
unique in that regard -- and if you are adequately dedicated, a few weeks (or
a few months at most) of study time to understand fundamental algos and data
structures. After one has an understanding of it, it will certainly take more
time to become practically comfortable using said concepts, but that's what
entry level jobs are for.

~~~
msg
I said an undergraduate level education. By which I mean knowing the things a
CS undergraduate knows, not that you go to a brick and mortar university.

They are not useless abstractions for people to write mathematical papers
about. These ideas are what enable you to proceed deeper when your framework
leaks and breaks.

Anyway we are probably in violent agreement.

------
tcfunk
To me, one of the most important things to learn in web development is to
learn about the HTTP protocol.

This may sound boring and tedious, but if you don't know how GET, POST, PUT,
DELETE etc. work then it won't do you any good trying to wrap your head around
frameworks.

Learn some of the common responses and what they mean and are typically used
for (200 is ok, 302 is a redirect, etc).

REST-style frameworks are just abstractions on this protocol, and a good
understanding of it will help to make sense of why web dev frameworks are
built the way they are.

------
Dirlewanger
Going to be contingent on where he's located. A rough way to start: Take a
look at job openings in his area, see what are the desired technologies, and
have him learn them as quick as he can. He's going to be in a junior role,
there's no way around it, but if he takes the hard angle of being unsatisfied
with his current career, and can demonstrate he's serious with this pivot by
showing off something quick he's built with his newfound powers, then getting
a job should be no problem.

------
burritofanatic
I did this while I was a QA guy who was transitioning out of law in my late
twenties. Progressively working through the web stack is good for learning,
but I've found myself most employable as a new guy doing iOS. It took about a
year.

Let people say what they want about Xcode and Objective-C, but I prefer it
over working with Javascript and one of 50 frameworks.

------
molsongolden
In a similar situation but I've used HTML/CSS extensively in the past with
some PHP experience. My plan is to take some time off this summer and study
Python full-time while working to build an idea. Hopefully that will get the
ball rolling and I'll figure out what to do from there.

------
lmm
I'd start on iOS just because I think it's more likely to inspire good
programming habits, and the choice of tools/frameworks is relatively
straightforward. Move on to the web once he's got a bit more of an idea of the
basics and can navigate the landscape a bit better.

------
fsk
That is the argument AGAINST being a software engineer. If you specialize in
the wrong technology that goes out of favor, the market value of your
experience goes to $0. It's very hard to guess what will be popular 5-10 years
from now. If you pick wrong, you'll be stuck.

~~~
rdudek
Isn't it the same with pretty much with almost every field? My mentality has
always been that learning never stops. Even in my field, if I were to stop
learning new things, I'd probably be out of the job in a few years. Always
have to be up to date with new technologies and software.

------
mattdeboard
I wrote this about 2.5 years ago after I career changed myself

[http://mattdeboard.net/2011/11/23/how-i-became-a-
programmer/](http://mattdeboard.net/2011/11/23/how-i-became-a-programmer/)

There are a couple other entries there about this general topic.

~~~
tbassetto
Thanks for sharing it, I will send him your blog.

------
techhackblob
Where is he located? If it's the USA, especially Silicon Valley, then it's too
late as he's too old. From what I read and comments from likes of Mark
Zuckerberg the illegal practice of age discrimination is rampant. If he's
willing to learn .NET and move to Ireland then all is well as once he gets
good experience older developers with technical ability are in big demand. As
a 43 yr old .NET programmer said to me the other day (as we watched Ireland
beat France in the Rugby) "We are the most employable people in this pub and
I've never been in more demand in my life".

~~~
lpsz
I don't have the power to downvote, but I sure hope you're joking. To the OP,
no, your friend is not too old. I would ask him to focus on learning the
fundamentals (e.g. how to use a hash table, sorting, and so on.), and also
write a couple of projects and put them on GitHub to gain hands-on experience.

~~~
techhackblob
don't shoot the messenger. The US media over the last few months has been full
of this kind of stuff

[http://www.businessinsider.com/software-developers-fear-
age-...](http://www.businessinsider.com/software-developers-fear-
age-30-2014-3)

~~~
potatolicious
Ageism in the Valley is real, but you're _vastly_ overstating the case. A
person in their late 20s is, by a very wide margin, not considered too old -
in the Valley or beyond.

~~~
joshvm
Given that several start-ups have come out of PhD projects, in the US at least
that puts you into late twenties territory. In the UK most PhDs are ~25 if
they started as early as possible.

------
karishmasibal
Learning language is not a big skill but having good logic is. So I will say
concentrate on logic and language you can learn anytime.

------
ThePhysicist
[http://www.hackerschool.com](http://www.hackerschool.com)

------
rosem
drop everything, focus on only on iOS (or android).

