If you are beginner trying to learn and build your confidence than this article is for you.
Beginners are often in trap of making two mistakes.
The first one is jumping from one language to another. Beginners often get a lot of recommendations from other programmers which programming language is “the best” and why they should learn it. The truth is, there is no such a language, and any language will do. Just stick to it in the beginning.
Second one is the tutorial hell. After completing a book or a course on a language you may end up in tutorial limbo. Following one tutorial after another wondering when you’ll end up finding a tutorial which would make an advanced programmer out of you. However, if you search long enough you’ll know that this tutorial does not exist. Tutorials are mostly about single subject only, and there is no set of tutorials which would help you really understand the complexity of building an app.
The trick is to pick a language, and stick to it while you’re a beginner. Pick a course, or a book, and learn basics of the language. The next step is usually, to pick a framework (depending on the specialization you want), and to learn it. The final step is to build a project. The project should be of considerate complexity, enough to teach you that programming is not just about code, but also about the environment in which the code lives, and about many engineering decisions and compromises one has to make in the process of building stuff.
Also, forget about “weekend” projects while you’re a beginner. Jumping from tutorials and courses to your first big project will be a major leap. Don’t build a mindset that every project has to be finished fast, and in the course of one weekend. Sure, that will happen sometimes. But oftentimes you will need a considerate amount of time to build a project. It’s ok if you work on a project for weeks, or even months. This will also teach you the discipline, and give you some perspective into the daily job of a developer. Sometimes you will write a few lines of code in a day, sometimes several hundred. People often think that developers write 10k lines of code per day. But the truth is far from that. A workday is well spent if you manage to write even couple of lines of code. Most of the time will go to fixing, debugging, and researching. These are invaluable skills that no tutorial can teach you. Only a self drive to complete a project can teach you this.
Write a Library
Writing a library is not an easy job. Usually it is born out of necessity and not out of the blue. However, there are always some kinds of libraries that you can implement without thinking too much: API wrappers.
- Adzuna API Wrapper (plot data with Matplotlib or Plotly)
- Imgur API wrapper - delete/create albums and upload images
- Instagram API wrapper
Take a look at the listing of free public APIs and pick one that you like and use
requests library to build wrapper.
Write a Web App
Build a web app using Django, Flask, or some other Python web framework. I always recommend Django for beginners, as it gives you clear structure, and it has great documentation. When building an API use Django Rest Framework on top of Django. These kind of projects can teach you a lot, and if you want to stretch your goals learn also how to deploy these apps on a real server.
- Create a blogging platform (the obligatory suggestion)
- Create an API - I know, this is too broad, but you can create basic CRUD API for example adding contacts, birthdays, or similar, you can combine this with other projects: create API wrapper, or scheduler to remind you about stuff
- Create an URL shortener
Create a Framework
If you simply want to have some fun, and you’re not sure which branch of programming is for you, do this projects just to get yourself familiar with several technologies such as template engines, markup languages, and CLI tooling. In essence, here you’ll create a framework for others to use.
- Write static site generator (use Jinja and
- Write documentation generator (parse source code files for docstrings, and compile the results into HTML - use reStructuredText or Markdown to make it pretty, and use
clickto make it easy to use)
- Write a web framework (this is not beginner friendly - you should know at least one web framework before building one - but if you want to understands how framework that you are using works - then use wsgi to build your own web framework)
Pretty basic, but interesting.
- Make a keylogger and email results to yourself
- Reddit or IRC bot
- CLI Event reminder - use
clickto create delete and manage events and reminders - schedule event, and automate it with CRON to send you an email reminder
If you are inclined towards the game development, you can try some of these projects. You can do them as command line programs.
- Hangman (console - find dicitonary with words, and draw ASCII hangman - you can also do a GUI version) - implement save and load game options to make it more challenging
- Text based adventure game (make maps, rooms, levels, monsters, inventory, battles, etc.) - it’s actually more harder than it sounds to make fully OOP text based RPG - there is more to it then series of if/else
- Tic Tac Toe - it’s not easy as it sounds to make it
Scraping projects are great because they learn you multiple technologies: html, css, request/response cycle of the Internet, legal implications of scraping, etc. This sound overwhelming, and it probably is to some degree for a beginner, but it gives a broader knowledge of the web. These are manageable by beginners but don’t expect them to be weekend projects: you’ll need a solid full week or two to complete them if you’re a complete beginner.
- Scrape website for weather and send mail to oneself
- Scrape job listings and notify yourself of a new job
- Scrape a website gallery such as imgur
These GUI projects are just to get your feet wet. Tk components are horrible looking in my opinion. They look outdated and ugly. But the logic behind writing GUI app is good as any GUI library. This would serve you as a soft introduction to GUI programming in general without needing to setup anything. If you do want to challenge yourself, try
pywebview - but you also need to know Flask.
- Write a simple desktop gallery viewer for your pictures
- GUI To-do (of course)
- GUI Calculator (of course)
- Document Management System
If you make some of these projects, please let me know, and I can include them in the list at the end of the post if you want. Feel free to write to me if you have any questions.