by Tim Park

My first step into the world of Software Development — and what you can learn from it.

*Nervous laugh* (Source)

As a budding student of computer science, there’s a disconnect between what you learn in class and what you see in the real world. You learn all there is to know about loops of every variety—for, while, do while. You can write a command line based tic-tac-toe game like it’s nobody’s business. And you write so much fill-in-the-blank x86 assembly that it makes your head spin.

But you haven’t the slightest clue how something like Facebook works. Or Reddit. Or YouTube. You don’t even have an inkling of where to begin. When you Google “companies that use python,” since Python is the only language you know, you find people saying things like “Reddit…uses python for their backend.” Backend? What does that even mean?

There’s this giant gap in your knowledge between writing tic-tac-toe for the command line and building a “real” application, and nobody is telling you how to fill it in. Even though you’ve learned all about how to think logically, you have no idea how to apply what you’ve learned in order to build the things you want to build.

Here’s the thing: it takes initiative to get to where you want to be. You won’t always have professors giving you templates and boilerplate for all your projects, leaving you to fill in the blanks. You won’t always have a lesson plan telling you “This is what you need to learn next.”

Takeaway #1:

Nobody has more influence over your personal development than you. It’s up to you to decide what you want to learn, without someone spoon-feeding you the next step every step of the way. This self-directed learning, what Dan Luu might describe as a meta-skill, is one of the most important skills you’ll pick up in your journey towards becoming a software developer.

Luckily, these days we have Google to help out. “How to build a website using python,” you search. You stumble across this nifty little web framework and decide to give it a shot—not that you actually know what a framework is. You try reading the documentation from the beginning, don’t understand any of it (“database abstraction layer?”), and skip ahead to the installation step.

Finally, some actionable steps to follow! You copy the commands into your terminal. There’s something about something called pip, and virtualenv, whatever those are. You take a minute to look those up, just so you have an idea of what you’re doing to your machine.

Takeaway #2:

We learn by understanding, not by mindlessly following instructions. Get used to learning instead of giving up when you don’t understand something, and you’ll see that seemingly impossible tasks are really just greater opportunities to grow—it’s only a question of how long it takes.

Okay, looks like pip is a utility to install packages so you can import them, just like we import the built-in math package. Virtualenv seems like a way to isolate package installations to a specific project. You still don’t fully understand any of the commands besides mkdir and cd, but you‘re not totally clueless either. Time to move on to the quick start guide.

Just follow along and try to keep up. (Source)

You follow the initial instructions, and there’s a burst of elation when you run your program and see “Hello, world” in your browser for the first time. You think to yourself, now this is what I’m talking about! No more boring old command line programs for me! It’s a small step, to be sure, but that’s your code in the browser, and that’s significant.

You continue, but start running into a lot of concepts that you don’t fully understand. Routes? HTTP? GET? POST? And what are rendering templates? Some of these terms seem vaguely familiar, but you don’t actually know what they mean, so you stop along the way to look them up. Just like you learned about pip and virtualenv, you start to assemble a fuzzy picture of how this application is working.

Takeaway #3:

Learning takes practice. Just like any other skill, it needs to be honed. And just like any other practiced skill, it can become a habit. Seize every opportunity you have to learn. Remember: success begets success. Make learning a habit, and not only will your personal growth skyrocket, but your desire to learn will grow as well.

You can use templates to display content like you would with any other HTML/CSS page, but the content is dynamic. You can control what content is displayed at different URLs by defining routes. You can even fetch content from other websites to use in your own application!

As you get more and more comfortable, you start to feel a degree of control and pride in your independent learning that you’ve never felt while working on any of your class projects. You feel empowered. Who even needs school, anyway?

As you gain confidence, the guide starts to feel a little…basic. It is, after all, a quick start guide. I could do something cooler than this, you think.

So you strike out on your own. You set up your project the same way you did before, with pip and virtualenv, because that’s the only way you know how to set up a project. You know how to set up the templates. You know how to set up the routes, the HTTP requests, the GETs and the POSTs. You might even dare to use a third party API and practice reading some more documentation. You still don’t understand everything, but you’re learning, bit by bit.

And finally, you build your very first independent side project. Not the result of a tutorial that hundreds of budding developers before you have followed. Not a class assignment that thousands of students before you have done. A real, tangible, honest-to-goodness application that would not exist had you not built it. And that’s an amazing feeling.

You are a master builder. (Source)

So what’s next? Now that you’ve built an application, how do you put it online so everyone can use it? What really is a “back end?” A front end?

Here’s the great thing about fostering a desire to learn: there’s always more. It’s like an amazing television series that you can never get enough of—and it never ends. There’s no such thing as learning too much. Every discipline in software development is an entire new world to dive into, and the more you learn, the more worlds are opened up to you.

At some point, you realize that there is no single canonical path to being a “real” software developer. There’s not enough time to master every single thing. Everyone’s path to success is totally unique. It’s entirely up to you to forge a path to the destination you want to reach.

This was the story of my own first step into the world of software development. If you want to see the very first side project that I ever built, you can check it out here.

And if you feel like sharing your own, feel free to post a link in a response! I’m always curious to see what kind of code people start out writing.

If you like what you read, there’s more where that came from!

As a guy in the early stages of his tech career, I write about — you guessed it — the early stages of a tech career.