How to Pick a Good Programming Project
Creating a project from scratch will always be the best way to feel as if one finally understands programming. It’s also the most rewarding part of being a developer, taking an idea from concept, all the way through to reality. Companies in particular love seeing candidates who have built something from scratch, because it reassures them that their developers can build things, and have the most crucial skill of all for developers – thinking for themselves to find solutions to problems that aren’t well defined.
That being said, it’s difficult for someone who hasn’t been developing long to come up with an idea for what is an appropriate project to make after having taken a course, and what’s reasonable.
So let’s walk through some options for a developer who’s just finished a course or class, and what paths they might want to go down in choosing a project to work on.
The Many Paths of the Developer
First of all, what do you want to focus on as a developer?
From an outsider’s perspective, there are a few major different sorts of developers. Some people make web applications, others do frontend development, and still others focus on desktop applications or video games. In choosing one of these domains, they’re usually presented as being so entirely different that it doesn’t make sense for one person to try making more than one of them.
But in reality, the concepts of trying things from multiple domains of software development is a great way to grow. So my personal advice would be to take a smaller project from a domain or two, and see which is most exciting for you. It’s often at the intersection of two difficult domains that new ideas are made.
As long as you focus on one project at a time, and at least see it through to a completion (whatever that means for you), you’ll be rewarded with an accomplishment, and along the way you’ll have plenty more ideas for other things to build.
Now, let’s walk through some potential ideas for projects to demonstrate and test one’s programming skills.
The Creative Visual Project
People like Zach Lieberman do a great job with creating a new visual experience every day and sharing it with the world. If you choose to start down this path, you’ll likely be building an immediately interactive, visual result program that you have to figure out a way to share.
If you choose to do a project like this, it’s generally best to either start playing with somebody else’s code, to explore what’s possible, and how the projects are structured. It also helps to have a timeline for releasing something, and doing it over and over again. Zach chooses to release a sketch mostly daily.
If you don’t want to start using someone else’s code, you can get inspired by some already existing work and try copying it yourself. If you’re looking for inspiration here, the Generative Art guys (people like Generate_Me, and Inconvergent) have a lot to offer to get you started.
The Web App Project
The web is still the biggest platform and megaphone to get your ideas across the maximum number of people. It also allows you to help speed up communication between people as quickly as possible. My first project as a developer was building a private social network. It was meant to be a platform for families to privately share pictures and discuss what’s going on in their lives.
Choosing to build a specific web application is great, although almost always a bigger project than anticipated.
Choose a web app as your side project, but understand that if you want to have users and authentication, you’re almost always better served by starting with a library or framework that provides this out of the box.
Something like Django, Ruby on Rails, or Flask will be your best bet to build a web app project quickly. Along with building the actual application itself, deploying it to a server can also be a pretty big challenge. To keep things manageable, if you feel overwhelmed with setting up a Linux server, don’t feel bad to deploy to a service like Heroku. It will let you get your app out there, without adding the headache of setting up a server from scratch.
The Mobile App
Building a mobile application is what we all hear the most about nowadays. And indeed, building an app is a great way to see an idea through to completion as a new developer. There are many tiny problems you can tackle, and getting an elegant solution can make an app very successful.
If you choose to go down this path, understand that you’ll need to pick the tiniest idea or problem you can find.
Mobile apps tend to do best when they’re tiny and do one job especially well. It takes larger teams to make more complicated, robust apps. So try to stick with the most simple piece of the app you can find, and forget adding any extras. The less there is in an app, the better the apps usually are.
Of course, to do development you’ll need to either use XCode or Android Studio. XCode, of course, requires an Apple computer to do development on (unless you build a hackintosh), while Android can generally be built on any platform. Either platform will require different languages and APIs, so generally, you’ll only want to target building for one platform at a time.
The Data Analysis Project
There’s a lot of talk about big data and data analysis nowadays. Sorting and providing insights from massive amounts of data certainly has a lot of market value, as more and more companies are just overwhelmend with an avalanch of data from the growth of the internet and cheap storage.
If working on a data analysis project, be prepared to deal with a lot of ambiguity. You’ll be responsible for finding your data, combing through it, and then trying to find insights from that data.
And there really isn’t a way to share your insights, other than through a lot of write up afterwards. Clear writing and telling a story actually ends up being the most crucial part of doing any sort of data analysis.
In addition, it’s almost always better to start with an already clean data set. Generating clean data sets from scratch is itself already a fairly difficult project.
The current best platform for doing and presenting this sort of data analysis is Jupyter notebooks, and a language like Python or R. To get a feel for what these projects can look like, checkout the nbviewer gallery on the Jupyter page.
The Embedded / Hardware Hacking Project
Building a good, complete hardware project involves a lot of domains of knowledge. Electrical engineering, project design, software development, debugging, critical thinking, and more.
Each of these is difficult enough on their own, but putting them all together at the same time makes a lot of different variables to keep track of, and can turn hardware projects into some of the most challenging projects you can take on.
If you decide to build something hardware wise, make sure you have separate methods of debugging each piece of the project, one at a time. Make sure you can test your hardware components outside of your software, and test after each feature is added to keep it running.
Starting with a Teensy or Arduino set from Adafruit is a great way to get started. Here I’d actually recommend building a kit from an existing project, and then adapting it to your needs after the fact.
Having access to a 3D printer allows you to build custom enclosures and rapidly prototype. I personally have a Prusa i3 MK2, and wouldn’t hesitate to recommend the Prusa i3 MK3 for someone who was serious about building their own hardware projects.
Properly done, these projects are extremely well architected, and have multiple experiences all built into them. One for desktop, one for mobile, and one for tablets. All across these experiences, subtle differences have to be accounted for in the way interaction occurs.
The Game Project
Large groups of people want to become developers because they love experiencing video games. Creating a video game project from scratch again can cover so many different domains of experience, that it can be a true test of one’s patience to build one from scratch.
However, there are some really exciting projects out there, most notably Ludum Dare, which aims to build an entire game in a day to a weekend.
Joining an event like this with a time constraint is a great way to make sure you limit what you’re trying to build, and move quickly. Unless you’re using an engine like Unity, you’ll need to write a lot of game logic yourself. If that’s the case, using something like LÖVE is a great way to build a 2D game from scratch.
Regardless of the path you take, as a self taught developer your example projects are your resume and your foot in the door for a job. Building something polished you can be proud of is the only way of verifying that yes, you understand what you’ve learned, and yes, you can build something from scratch.
And the biggest reward in software development is building something from scratch. Coming up with an idea, and persevering step by step, all the way through to completion.