A lack of creativity seems to be a recurring theme here. After the first few tutorials, the advice to all new programmers is to “build something”. The question of what to build always gets answers as helpfully vague as “something you care about”. It can be difficult knowing how to find ideas for first projects.
Since I struggled with the same problem of being a super un-creative person, I wanted to pass on two big realizations that eventually helped me get past this particular hurdle.
Like many beginners, I also struggled mightily with this question (what to build); and in the end, I went with my personal blog, and a then a full-fledged website for our music school with Django, which requires me to build the entire data model from the ground up, have a decent understanding of full-stack dev, and have and have a good grasp on how to deploy and maintain a real-life project. Progress so far: have deployed a working blog website in a local server, and having a blast learning SQL, now that I have a clear goal in mind. Best part? I am confident that none of this time and knowledge is ever going to waste. Six months ago, what I have just written would have sounded like science fiction to me.
Here’s how to find ideas for first projects:
It’s perfectly fine to re-create something you saw elsewhere. Your first code is likely gonna be crappy anyway, so don’t waste time trying to come up with unique ideas for “your” first project. Just get started with “some” first project: Don’t be afraid to steal an idea, just don’t go passing it off as your own.
If you have a big idea that is absolutely beyond your skills, that’s fine too. You can break it down and work on a tiny aspect of it, then come back to build on it over the years as your skills develop. Google what a “minimum viable product” (MVP) is, and think of all your projects in these terms. What is the most essential functionality? Build that first. Add the rest later. Huge ideas don’t equal a huge project – Huge ideas equal thousands of tiny projects. This is the first step towards knowing how to find ideas for first projects.
In concrete examples: My first project was a simple calculator website. The MVP is obviously something that performs the calculation. So I did that, and only that: I wrote the input directly as variables into the code. Made it print the output to the console. Next, I added made it get the input from the command line. Next, I made a simple user-interface in HTML/CSS: Two fields for input, a simple DOM-manipulation for the output. I have some ideas for making it into a proper website, but for now, this is still where this project stands.
You can start with finding the best way to enlarge the Instagram profile photo, for example.
While working on this I got familiar with my editor. I installed some extensions, one of which was called “HTML skeleton” – It adds the basics of an HTML structure into an empty document, so you don’t have to waste time writing doctype, HTML, head, and body-tags. I would have loved the same for CSS, as there is quite a bit of code that is common to pretty much all my CSS files. So born was the idea for a second project: I’ll copy that editor-extension.
Of course, a full-featured extension goes well beyond my skills. So what is my MVP? The minimum functionality I want is to have the template code that I can just inject with a click. The Editor I use is open source, and on their GitHub wiki, there’s a “how to write extensions” page, complete with an example that prints “hello world” into an empty document. I copied that, exchanged the “hello world” string for my CSS template code, added another string for some personalized HTML template code, made it add another menu item. All this pretty much without knowledge whatsoever, only by copying and modifying what was already there. I learned a ton just by doing this.
Kind of like AutokaufSchweiz that offers the possibility to export cars outside the Swiss.
Currently, I have to manually open a new empty document to insert my template code into. I would like the button to accomplish both: Open a new doc pre-filled with template code. I’m still searching the Editor’s docs and source code on how to do this.
Going forward, I can imagine adding an option to make the template-code user-modifiable. Add some sort of UI to change the string of code-template. Currently, the menu items are at the bottom of the “file” menu – Maybe I can change that to a button in the extensions-bar or to a different menu. I also want it to activate HTML or CSS syntax-highlighting accordingly.
The point is, once you have something like this it grows kinda naturally. “Writing an extension” is a pretty large project for a beginner like me, but as separate ideas, all these features are doable. And every single one is teaching me quite a bit of not only JS but also about how that editor works under the hood. Maybe I’ll be able to finish it eventually. Maybe not. If this gets too frustrating and I fond some other idea more fitting for my current skill level. But in the meantime, I already have a half-finished extension that allows me to create HTML projects without having to re-type the same hundred lines or so over and over again.
Let me explain: unless you are already sure about how you want to use your knowledge (likely in your current endeavor), first decide on why you want to learn to program. If your honest answer is “to get a job”; then now is a good time to address that. Do you want to be a web developer? A database admin? Do you want to learn Data Science? If for example, Big data is your goal, then investing a month in building a game in pygame may not be the best use of your time. In any case, pick a project that aligns with your interest. My advice: If you are not sure, Build a simple blog, and deploy. Write about yourself, and any project you are doing – describe it there.
I took way too long to appreciate this, and this has been my biggest challenge so far, so that’s why I am putting this here. Say if you want to build a simple game, it needs to accept user input, then maybe save it somehow, and allow the game to be modified by it. If you are doing data science, then your “thing” needs to accept data from somewhere, do something to it, and then a. maybe show your fancy analytics to somebody and b. pass this data on to somewhere. And since in real life, this somebody or somewhere is not your computer, learning how file transfer works, how to connect to a server, how to make requests and accept input, and how to interact with databases programmatically – are of crucial importance. This may not be important to your first project but is knowledge is essential in the long run.
Got something to add to the “how to find ideas for first projects” list? Leave a comment below