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
-etc etc etc
It’s the same with System Administration; there’s lots of places where you can spend a whole career:
-DevOps, System Reliability Engineering, and other software development/sysadmin mashups
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).
- steady curriculum,
- static end date (helps with motivation)
- possible connections that lead to jobs
- 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 :-).
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