Hacker News new | ask | show | jobs
Ask HN: I want a change in my life and become a developer
8 points by ChangeThrowaway 4004 days ago
Hello fellow HNers.

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/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.

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't like it, I did love my job but because what I really want to do is make things.

While I was ill and during my recovery I took my knowledge of systems automation with scripting/shell languages and picked up the basics in real 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 "give it a go" as they say.

The problem is I don'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.

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.

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?

Many thanks in advance.

8 comments

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.

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.

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. That will get you to where I'm coming from.

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.

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.

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

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/, you can get an epub elsewhere). It's one of the most important books around, MIT uses it for their introductory CS course.

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.

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.
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!
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.

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.
I very rarely feel compelled to reply to throwaway accounts, but this is a great comment. Inspirational. Thanks for sharing.