How to Get Into a Programming Career

I was just talking to a friend about programming. She’s interested for all kinds of reasons, not the least of which is that she’s read all about how ‘programming is the future’ and that tech people make tons of money.

We talked about some things that I thought would be useful to share more openly — so here it is: my advice for getting into programming, System Administration, or any other technology path.

Programming? Which Programming?

It’s a huge world once you learn to program, do you have any idea what kind of work you’d like to do? For example, although the basics are the same, there are vastly different things you can get into afterwards:

-web application development
-windows/apple applications
-iphone/android apps
-scientific programming
-distributed systems
-etc etc etc
It’s the same with System Administration; there’s lots of places where you can spend a whole career:

-Linux
-Windows
-Networking
-System Architecture
-DevOps, System Reliability Engineering, and other software development/sysadmin mashups
-Automation
-Project Management
-Sales Engineering
-Security

Not to overwhelm you at the very beginning, but it helps to start developing some ideas about what’s out there and which things, specifically, might interest you. As you learn new skills, you’ll naturally find new interests which will take you in some of these directions.

 

Good Reasons to Get Into Tech

Almost anyone can become a programmer if that’s what they really want to do. However, I’d caution people not to do it just because a lot of media outlets are saying that it’s a great career, pays well, etc. etc. Those things are true *if you really love it*.

If you decide to be a developer, sysadmin, or anything else, you should do it because you find it interesting, otherwise it’s going to be a slow, miserable slog. Same as anything else.

That said, even if you learn the basics of programming and then decide it’s not for you, you’ll still have a really useful skill that you can use to make your life easier no matter what you’re doing. Almost any job where you’re sitting in front of a computer — an overwhelmingly large percentage of jobs, these days, and growing steadily — can be supercharged if you know how to do a bit of scripting or how to set up a Linux server with some services.

Even if you have a career that don’t happen in front of a computer (from farming to teaching music), you can save huge amounts of time and avoid many of the most annoying parts of the job with a few lines of code.

If you *do* decide to go forward with this, there are three main ways which don’t involve going back to school for 3-4 years:

 

Three Major Paths

I’m going to oversimplify a bit and talk about the three major paths that people take when they get into programming, system administration, or any other technology craft. As you read these, know that it’s not always so black-and-white, and that in the real world people usually end up doing a combination of these things instead of just one.

1. Do It Yourself

Most programming languages and tools (certainly the majority of the best and most popular ones) are free to use and modify. That means there are huge communities of people contributing to make them better, find bugs, etc. The bigger the community, the better the documentation generally is, and the more people there are to help you with questions.

Doing it yourself is hard and lonely, at least at the beginning. It probably takes longer than some of the other paths, but when you’ve got it, you’ve *really* got it, since no one has been holding your hand. This is how I did it, but it’s not really what I recommend, since it takes an enormous amount of self-generated motivation for many years. I could have saved myself months or years of time if I’d had some kind of mentorship at the beginning, but I don’t regret it now.

The downside of doing it yourself is that you can end up with blind spots that can create problems later. For example, after a few years of Python, you probably won’t have a strong feeling about the fact that you are missing some basic realities about how memory is managed in a programming language and an operating system. This can sometimes result in writing inefficient or incorrect programs without realizing it, when all your buddies with a CS degree intuitively don’t make the same mistake because they sat through an Operating Systems or C Programming course when they were 19.

Balancing the practical and the theoretical can be hard when you’re learning by yourself, but after a few years you’ll usually be so good at learning that you can grab the necessary textbooks and pick up the missing mental models over the course of a few weeks. Yes, some day every programmer will learn about how the basic data structures are implemented, and every system administrator will understand how Linux manages memory. Despite my love for theoretical learning, I have to admit that at least for the first 5 years of your career, knowing the computer science underneath what you do will not dramatically change how you do your job, 99% of the time.

 

2. Courses and Bootcamps

Do a course or ‘bootcamp.’ This can be a good way to learn the very very basics, but it often costs $5-$10k+. All these bootcamps will promise you the world, but I would caution you to really do your research (and perhaps get an opinion from a few professionals) before investing in one. If you’re committed to investing the time anyway, I think there are better ways to spend that money, unless you’re rolling in cash already. I’m speaking from limited experience, since I’ve only been to *one* smaller bootcamp which an employer sent me to when we suddenly had to maintain a new technology (a week-long Rails bootcamp in New York City).

Pros:

  • steady curriculum,
  • static end date (helps with motivation)
  • possible connections that lead to jobs

 

Cons:

  • hugely crazily expensive
  • debatable career value (some companies are anti-bootcamp and won’t hire you)
  • could possibly instill a skewed view of programming (see link), or an attitude that isn’t really conducive to further learning

Here’s some discussion on the topic from some very very smart programming/startup people: https://news.ycombinator.com/item?id=10930215

 

Too Much Time on Your Hands? Try Hacker News!

As an aside, Hacker News is a good website to start visiting regularly *anyway* if you’re interested in this stuff. It’s where some incredibly skilled and successful tech people hang out. As in, people who have founded or been some of the first employees at many tech companies you’ve heard of, people who’ve invented new technology or pushed things forward in a major way, etc. It’s getting extremely popular now, so there are starting to be lots of the ‘normal tech person’ crowd there, too, like me :-).

3. Mentorship

If you ask me, this is the best way forward. Bootcamps can give you a tiny bit of this if they’re good, but finding good mentors is something you’ll have to do yourself once you know the basics and have completed your first few projects. Mentors are for guiding the big-picture stuff:

  • giving career advice
  • helping you decide which languages and tools you should invest time in learning
  • occasionally reading and critiquing your code

They will make you better just by being around you, throwing cool links and articles at you, and talking about things from a different perspective.

I think a lot of people try mentorship in a less-than-effective way, by approaching potential mentors at the very beginning, before they’ve learned the basics. Think of software development as a craft rather than a specific set of job skills. Mentors are generally people who are so much further along than you at developing their craft, that you really don’t want to waste their time asking about the very basics.

Finding good mentors is actually more of a big deal than it seems; that subject deserves a post of its own. Finding good mentors and focusing on giving them as much value as possible has changed my life in the biggest of ways.

 

OK, For Real, How Do I Get Into Programming?

In my opinion, a combination of 1 (self-powered learning) and 3 (mentorship) is ideal. First, spend time learning the basics yourself. Then you’ll know the foundations of what’s going on, you’ll be able to write simple programs, and you’ll (most importantly) have the skills necessary to start asking and researching the right questions.
I think the most important thing is to do this for the right reasons. Not because it’s a steady job, or you heard that people are regularly making six figures as software engineers. If you do it for these reasons, you will have a truly brutal stretch of YEARS of difficult learning and painfully boring practice.

If, however, you are interested in technology and programming or system administration sounds really cool to you, this field can offer a lifetime of exciting stuff to learn, useful projects that you can make for yourself and others, and cool people to meet and cooperate with. All of this with a well-paid/exciting career on the side.
After all this heavy talk, here’s a link for fun; someone commenting on a programming discussion they saw: https://twitter.com/alicemazzy/status/619985687119425536

Enjoy!

4 replies
  1. mr_bruckner says:

    Hey!
    This post was really helpful! I’m currently after engineering university, did a bit of programming, a bit of microsystems and photonics, and currently stuck in large american corporation, but this post gave me an overall image of what I could invest my spare time in. Thanks

  2. Edward G. O'Connor Jr. says:

    I am at the *opposite* side of the spectrum from the commenter above. I am in my mid 40’s and have realized having Windows 2k+ Sys admin credentials isn’t enough anymore in the changing job market. I want to get into programming, and learn as much as I can, but it’s like trying to start from the center of Jupiter, its just too much! Thanks for this article, it will help me to focus and try to point myself into a particular direction. Although I’m confused as to which programming language I should learn first? does it matter? aside from syntax, aren’t they all pretty much the same? (just like no matter the look WinXP….Vista….Win7 are all the same under the hood!) Just want to get this kickstarted as soon as possible, as I’m up in age and will be in competition with the younger generation. It would be nice to at least secure a job in this field if for no other reason than to add it to my resume, and place me in this particular circle of people. Any advice yo could give would be helpful! (Aside from the very much appreciated advice from this article of course!! LoL!)

    Cheers!

    • Dave Cohen says:

      It’s nice to hear from someone in this situation; thanks for writing. I actually think your situation is more common than you might imagine. As someone once said, age and guile beat youth and innocence, so I actually don’t think you’re in a bad position. My advice for you would be the same as to anyone else in your position, whether younger or older: Become ‘hireable’ as soon as possible, given your unique background, interests, and skills. Then use your first job to learn as much as possible.

      You can get a tremendous amount of mileage out of reading through job openings for Software Development positions in your geographic area. If you already have sysadmin skills, a ‘DevOps’ position may be a good ‘first’ job position, since you’ll be able to work your previous sysadmin experience into your story when interviewing. But there are plenty of other good ideas — it all depends on your background and the local market.

      Choosing a language is actually much bigger than just ‘choosing a language’ — I’ll write a larger post about this soon, but be aware that you’re (usually) choosing a LANGUAGE, a DEVELOPMENT ENVIRONMENT, and a SOFTWARE ECOSYSTEM all at once. I would start with your interests and existing skills and build out from there. If you know a bit about HTTP, a bit about HTML, and some basic scripting from your Windows days, you might try your hand as a web developer.

      Different languages lend themselves to solving a problem in different ways. There are very skilled people who maintain that “they’re all basically the same anyway,” and there are other very skilled people who see tremendously important differences between languages that might even appear to be similar on the surface. Both viewpoints have advantages and drawbacks.

      Learning to program is a task that can be completed in a single caffeine-fueled weekend. Becoming a great software developer is the thing that takes a lifetime. If you’re looking to get the skills you need to start working as quickly as possible, I recommend you

      1. Look at your local market and figure out what’s really needed there; then learn it.
      2. Go to meetups, build software (you can’t really become skilled just by reading), and start solving your friends’ problems with code.
      3. Use the contacts you made in steps 1 and 2 to get your first job. Worst case, apply to jobs and interview to get your first position.
      4. Work your ass off at your first job. This is where your learning actually begins, so use it for all it’s worth. Try to get some mentorship relationships started with especially skilled coworkers.
      5. Congratulations, you’ve switched careers.

      Hope that helps!

  3. Jamie says:

    Hi this post interested me a lot as I was doing a CS course but had to leave as could not afford to stay at university.

    Looking to get back into development mainly Web development

Comments are closed.