

Ask HN: I want a change in my life and become a developer - ChangeThrowaway

Hello fellow HNers.<p>A quick background on me. I am a 31 year old male and due to illness in 2009 and 2010 I left my job as a System Administrator&#x2F;IT Project Manager at a large Blue Chip. I now live with my partner and am a full-time Dad to my 2 year old son in West London.<p>As my son will be starting nursery next year and I am back in full health (have been for a while but wanted to spend time with my son while he was young) I am starting to think about returning to work. However I am not really that keen on returning to what I was doing. Not because I didn&#x27;t like it, I did love my job but because what I really want to do is make things.<p>While I was ill and during my recovery I took my knowledge of systems automation with scripting&#x2F;shell languages and picked up the basics in <i>real</i> languages (C, C++, Java and C# mostly). I really fell in love with it and while I have the time I would like to really &quot;give it a go&quot; as they say.<p>The problem is I don&#x27;t have a software engineering or computer science background. I learnt to code with scripting languages on the job for sysadmin tasks on Windows and Linux. I know that when I code I do so in quite a hackish way. I get it working but obviously not in the best way possible. This sometimes comes back to bite me on the ass when it comes to adding features in the future so I would really like to spend the next couple of months getting some good patterns under my belt.<p>My question to the HN community is where do I start? I read up on algorithms and quickly get out of my depth with things like Big O, binary search trees, recursion, etc. All the things I never needed as a sysadmin.<p>Are there any good resources online for getting a basic but solid CS education? And is it realistic for me to be able to go from a hack sysadmin to a junior dev in 6 months or so?<p>Many thanks in advance.
======
pageld
When I'm hiring people for my company (especially new people), I look at
things beyond the Binary Tree stuff. People straight out of school can
regurgitate that stuff all day but they don't know how to put themselves in a
clients position on why it matters when a site is slow and actually make
software that helps someone. Obviously, if you have been doing some project
management, you are way ahead of those people.

Just build something. Don't worry about the details an how many O's it is.
Find a tutorial on codecademy and have some fun with it. Figure out something
_you_ could use in your day to day life and build an app/website/facebook
thing.

This is just my experience in a SMB software company.

~~~
ChangeThrowaway
Thanks. I have been working on a few things of my own but have not put the
source up on GitHub as I am still pretty embarrassed with my code quality. I
mostly use Java and I quite like the language, it requires more lines of code
than pretty much any other language but I also kind of like that about it. It
certainly makes it easier to come back to a few days or weeks later. Almost
self documenting by default.

I also really enjoy C but I feel it is a language that requires at least some
CS knowledge to really understand it.

I have pretty good PM knowledge yes, that does help me keep organised and
break things up into small, manageable deliverables. I have also worked with
developers so I kind-of get how they work, the thins I found hard working with
them, etc.

~~~
pageld
I'll be blunt. Your code is crap. Everyone's code is crap. Code I did 2 years
ago was crap. Code I did 10 years ago: shudder.

Don't worry so much about what you "should" be doing and just have fun with
it. I ended up making an Android app 3 years ago to help out my wife do "party
sales". It ended up with 15k downloads. If I would have actually tried to turn
that into a business, it might have actually worked. Was it good code? No. Is
it on github. No. Do I say I had 15k downloads on an Android App at every meet
up / interviews? Hell yes.

Here's a rant I did when my company was in interview mode:
[http://www.davepagel.com/?p=58](http://www.davepagel.com/?p=58). That will
get you to where I'm coming from.

------
zhte415
Here's an approach you could make. I don't know if it works in your case, but
it might.

Find an employer (preferable in your contact network, not a friend as a favour
type thing, but someone who) needs your previous skill-set, is happy to employ
you for it, but allows flexibility in how you approach it (and key in this is,
some office time 'developing' your role).

Ensure this employer has an easyish-to-kill problem that is in-line with your
new role, ideally really hard for anyone else to fulfill, unless they have
both skill-sets/knowledge domains. Implement your IT solution being both the
expert and IT person, develop it to a prototype stage, get people satisfied it
truly is better (this takes hard work, but is extremely hard for 'just skill-
set A' or 'just skill-set B' people to deliver) and expand functionality
quickly. As scale increases, delegate your past skill-set to new hires / new
transferees, moving yourself to an oversight position. This opens the options
of management if you'd like it, or technology specilisation by maturing the
system and letting the experts in your previous domain take over management.

Sounds simple. Isn't. But it realistic and do-able. The biggest road-block
I've seen is having enough time to do the transition and delegation of past
tasks.

Seriously, don't do this as a favour of a friend. This is a leapfrog move, and
you don't want to break their back, or get stuck in the mud after a bad jump.

------
soulbadguy
Full-time dev here, offering my 2 cents. One thing to be careful about is that
there is difference between loving to code and loving the job of professional
programmer. Being a programmer, especially at a big corp(who are the one more
likely to hire a junior dev) entails a lot of not so nice things : dealing
with legacy code, endless-useless meetings, retarded/old tools. poorly
written/undocumented code, debugging etc... etc...

Why don't you leverage your current position as an Sys admin/IT manager. As
someone mentioned in the comment, programming is about solving interesting
problems, and i am pretty sure you could find some very interesting and useful
processes to automate in your current position. As a dev myself, a sys
admin/Manager that could produce useful tools for us would be a god send and a
very valuable asset to our company.The advantage of staying at you current
position and evolving your job responsibility to include some coding is that
you get to define and create exactly what software you want , using whichever
platform/ language you want which avoiding the not so nice aspect of being a
full time dev.

As for the ressources, i would check coursera. They have very good course on
CS, especially Algo 1 which looks like exactly what you need.

------
veddox
There are plenty of good, free online CS resources. Check out this page:
[https://github.com/vhf/free-programming-
books/blob/master/fr...](https://github.com/vhf/free-programming-
books/blob/master/free-programming-books.md)

Also, have a look at MOOCs on platforms like Udacity, Coursera, edX, etc.

Personal recommendation: read "Structure and Interpretation of Computer
Programs" ([https://mitpress.mit.edu/sicp/](https://mitpress.mit.edu/sicp/),
you can get an epub elsewhere). It's one of the most important books around,
MIT uses it for their introductory CS course.

------
pliny
Cormen & Rivest's Introduction to Algorithms is a solid and decently paced
book that covers a lot of what you would realistically need to know to start
working in CS, as far as theoretical knowledge is concerned, and will give you
the tools to understand the merits of new algorithms and data structures as
you encounter them.

After that you should try to get through Ullman's Introduction to Automata
Theory, the dragon book and Sipser's Introduction to Computation Theory.

Those are the 'core' elements of a CS education, although it misses everything
to do with how your computer and OS actually works, but I don't know what to
recommend for those.

------
aaronbrethorst
Pick a problem that you personally want to solve, and go solve it. It'll
simultaneously give you the skills you want, and get you in the door with
prospective employers.

------
ChangeThrowaway
I just wanted to say thank you to everyone who has replied. I have read all
you have said and have a lot to work with. Many thanks again!

------
throway123
It was 2009. I was at a startup. We ran out of money, everyone got laid off. I
had a degree in marketing and no one wanted to hire me because it was from a
shitty school. Every engineer at the company had a new job in a week. I looked
at them, I looked at myself and I said: Fuck it, I'm learning to code because
I know I am smarter than them and I work harder than they do. Also I wanted to
make a lot more money and not have a shitty job anymore. And programming is
fun, can't forget that.

So I learned to code.

First I built a flash game and tried to monetize it with ads. It took me two
months. I posted it online and everyone hated it. They said it was the worst
game ever. That put me into a deep depression for maybe a week. Programming
flash games was supposed to make me money. So I wrote another game and took
three months. It was much better and got played by 3,000,000 people. By then I
knew some ActionScript 3 (actually a perfect starting point for programmers).
I made very little money on either of these games but I did learn some
programming and I now had a portfolio.

I tried getting contracts doing ActionScript 3 and they all paid like $15 an
hour which was bullshit. Then I noticed that Flex 3 developers were getting
paid more like $40+ an hour. By then I was so broke I was basically evicted
from my apartment and was thousands of dollars in debt which sucked.

I already knew ActionScript 3 and Flex was ActionScript...so I started getting
Flex contracts. I found an amazing little agency that gave me a break. I took
on every project they had and every bug on every system, I didn't give a shit.
Android? Fuck it, I'll read an Android book and fix some Android bugs. Ruby on
Rails? God dammit I will learn some motherfucking Ruby on Rails too. EXT
framework? I will fix some bugs in that too. I didn't care what the tools were
I just did it.

Too many developer are either perfectionists (basically human robots with
tunnel vision), anal retentive or permanently glued to a single tool they
love...I was none of those things. I just did what needed to get done and
learned whatever they needed to get fixed.

At first, I didn't even know what a Linux terminal was, I was using Windows up
until that point. All the developers laughed at me for being the only asshat
in the office with a Windows machine. It was embarrassing so I bought a Mac
and used that to fit in and not look like a tool. I learned about Git and some
basic Bash commands, enough to be somewhat productive.

I realized that, at that agency, I would never make it to the next level
because I had no technical mentors to teach me how to do things right. I was
just writing tons of bad code to scotch tape over the problems. If I was going
to learn to code, I wanted to be the best coder ever. So I got a job at a more
sophisticated agency which had much more evolved processes and more advanced
talent. At that agency they trained me to be a deep iOS expert, I learned so
much. I also learned PhoneGap.

By then I had built more apps being used regularly by millions of people on a
monthly basis. I built an absolutely gigantic iOS application as well which
taught me all kinds of core iOS frameworks.

At that time my lack of CS training started to become really apparent and
started to hurt me. I looked into getting a CS degree at night but it was too
expensive and my employer wouldn't help me. So I looked up their curriculum
and bought all the textbooks used on Amazon and read them and intensively
studied them on my own time.

I didn't just page through these books. I read the shit out of them. I
underlined, I wrote notes in the margins. I made those books my bitch. I made
that knowledge go into my brain so I could make more money and work on more
high profile projects. Algorithms, data structures, graphs, operating systems,
compilers, I learned it the hard way.

I went to some more higher paying interviews and realized that interviewing
has nothing to do with platform knowledge of iOS (at which I was by then an
expert). So I bought the Gayle Laakman book on interviewing and memorized all
the algorithms and practiced all the steps on pads of paper.

This got me into the next pay grade (I call it AAA eg. Facebook, Microsoft,
Google, Amazon level of difficulty) where I belonged.

In three years I went from making unemployment to $66,000 to $83,000 to
$130,000 to (now, fully loaded with bonuses and stock etc) around $200,000.

All the developers I used to look up to? I make more money than they do now or
probably ever will. Blew right past them.

I did it because I really wanted it, I enjoyed programming, I spent my nights
and weekends reading, I said "yes" to everything they wanted me to do and I
chose projects and skill-sets that opened up more growth possibilities. And I
took the craft of computer science seriously by learning the default knowledge
I had skipped by not getting a degree.

So if I can do it with a marketing degree, you can do it coming from IT. You
are much closer than I ever was.

~~~
throwaway1410
This is all nice, but this means you've optimised for money and career
progression. It works for some people (it certainly seems to be working for
you), but for the rest of us, we'd also expect stuff like interesting/engaging
tasks, good work environment etc. on top of the money.

