Developing the basics: Programming myself, post sixteen
<< Read the previous post from this series Start from the beginning of this epic journey >>
Projects
So the final entry of this project, is, in fact, going to talk about projects. Starting a project for yourself to try and use all your new found programming knowledge is the perfect way to push yourself to learn and practice the skills. Anyone who is going for a job as a programmer will need some kind of portfolio of demonstrable skills to show off to their new potential employer too so there really is no drawback to having a couple of completed projects under your belt.
The only drawback some people may have is that it can be really difficult to think of a cool project that will help them learn a new or different aspect of what they would like to practice. It has to have the right level of difficulty, the right sense of it being something that actually might be useful, and the right kind of excitement that you will actually want to see the project through to the end.
So here is a list of projects that you can have a go at. Anything that sounds kind of interesting to you is a good project, and they can all be made more difficult or less difficult depending on the features you want to add to it.
Personal Projects
Personal Website
Building your own website from scratch is a great project to start if you want to learn about all the web technologies by implementing them for yourself. You are going to likely need to know quite a bit about web technologies if you have aspirations of rolling out something on a huge scale, as lots of things rely on it in one way or another. Want to make your game multiplayer? It will probably work well as online multiplayer. It is the first step to getting involved with all this and learning about how the different aspects work together in a real-life situation.
Build a gaming computer
We have looked at the software, but never the hardware. Building your own computer is considered a right of passage to the technically minded. Don’t worry if you don’t really even know where to start there is a lot of support out there on the internet to help you get by.
Specs for the gaming computer we built at home:
- Asus GeForce GTX 1050Ti Strix 4096MB GDDR5 PCI-Express Graphics Card
- Zalman R1 Midi Tower – Black
- Asus ROG Strix Z370-G Gaming Intel Z370 (Socket 1151) DDR4 Micro-ATX Motherboard
- Microsoft Windows 10 32/64-Bit – USB Pen Drive – Retail
- Intel Core i5-8600K 3.6GHz (Coffee Lake) Socket LGA1151 Processor – Retail
- Kolink KL-500 500W ’80 Plus Bronze’ Power Supply and Kolink AT/ATX “Kettle Plug” IEC – C13 1.8 Meter Mains Cable 10Amp
- Corsair Vengeance LPX DDR4 16 GB Desktop Memory Kit – Black
- Samsung 850 EVO 500 GB 2.5-Inch Solid State Drive
- Western Digital WD20EZRZ 2000 GB Hard Drive
- ARCTIC Alpine 11 GT Rev.2 – Super Silent Intel CPU cooler for Mini PCs – Up to 75 watts cooling capacity with 80 mm PWM fan
- Logitech Z120 Stereo Speakers
- Logitech wireless mouse and keyboard
- TP-LINK TL-WN881ND 300Mbps Wireless N PCI Express Adapter
- Asus DVD Writer 24x Black, black
- HP 22ES (T3 M70AA Full HD Monitor (VGA, HDMI, TV IN, 7ms Response Time Black/Silver, silver
Regarding technical considerations, the most important thing was to make sure the Motherboard, graphics card, and processor were all compatible with each other. Also to get the best you can afford (depending on what you want the computer for) as if you want to upgrade one, you probably need to upgrade them all.
Also, you need to think about how much space you have, and so what size tower box you need. Mine (component 2.) is a midi tower, if I wanted a much better graphics card, I would probably need a bigger tower unit. Also, you need to make sure your tower is compatible for the size of the motherboard too – mine is a micro ATX and so fits in the Midi tower, a regular ATX would be much bigger and hence you would need a bigger tower. Also, check that the motherboard has enough USB inputs for your needs.
(4.)Operating system… Sorry, it was Windows 10 for me, maybe next time I may try Linux.
(5.)The processor was the newest available at the time, but not the highest spec, as for my purposes it didn’t make sense to buy the most expensive one as it would be too much for the other components to handle fully.
(6.)The power pack – I expected this to come with the tower unit… it did not, I had to purchase it separately.
(7.) The RAM – you need to make sure you get RAM that is compatible with your motherboard – in my case I needed DDR4 Ram. Also, it is better to get 2 8GB RAM components (which I did) than one 16GB RAM component. It is also worth checking how many RAM slots the motherboard has before you buy it, as the more slots it has, the better. Mine has 4 DDR4 memory slots so I can upgrade to 32GB (which is the max my processor can handle anyway).
(8.)Solid state hard drives (8) are more expensive but supposed to be much faster. It should be enough to buy one that you put the operating system on, e.g. 250gb but if you can afford more, get a larger one (mine is 500gb)
(9.) The additional hard drive is just for extra storage and it is not necessary in my case to have another SSD for just storing files.
To go with the processor, you need to buy and fit a cooling fan (10.) – again you need to check the size to make sure it will fit in your case, and make sure you are not getting a fan that is more than you require.
(13.) A wireless adaptor is not necessarily needed if you can connect easily via LAN cable (as long as your motherboard has a LAN input which most do I think) but if you can’t connect by LAN you need the wireless adapter, and therefore as PCI slot in your motherboard for the adaptor.
Speakers, mouse, and keyboard (11 & 12.) are personal choices really.
(15.) Monitor – make sure you don’t get something too good for your processor, or it will slow everything down. E.g. there was no point me getting a 4K monitor as it would negatively impact the performance.
(14.) DVD writer – not necessary but useful for some things, and cheap, and easy to fit.
Retro games emulator console
Want to relive all those retro games now after trying to program your own? Then it is not as impossible as it might have once seemed before you knew your way around computers. With a simple Raspberry Pi and some USB controllers you can install old console emulators and play all the old games from yesteryear, you only need to find the game files known as a ROMs (read-only memory) and put them into the correct folders within the emulator and the rest is magic. If you are particularly good then maybe you want to have a go at creating either the ROMs or emulators yourself…
What will you need:
- Raspberry Pi 3 (power supply, memory card, HDMI cable to connect it to the TV)
- Usb Controller (though you can also use an old wireless controller)
- Actually, that is it… Maybe a TV to play it through.
Smart home
With so many peripherals that you can interact with, now is the time to start playing about and making your home a bit smarter. There are loads of projects that come within this single project so you can start small with say an automated aroma diffuser, and move on to something big like a proximity sensor aroma diffuser. If your house doesn’t smell all that bad though, there are loads of other things that you can now link up to the internet and control remotely, all you need is a bit of imagination.
Game Making Projects
Hangman
Input processing
A bit more fun than guess the number, now you have 7 tries to guess all the letters and the final word.
Rock, paper, scissors, lizard, Spock
Input processing, logic
You are going to have to work out how to check the input against a randomly generated one. Converting the strings into something that can be put into an algorithm and tested.
My Rock, Paper, Lizard, Scissors, Spock blog post
Tetris
Input processing, physics
Cue Tetris music… this will test your skills at dealing with people’s inputs, generating sprites and collision handling and looping the movement.
Here is a tutorial to get you started: Tetris tutorial from freecodecamp.org
Space invaders
Input processing, scripting, graphics
Another classic this time with added controls and a fire button added in. This will test your abilities to move the sprites independently and deal with the added fun of shooting.
My playing about with pygame blog post
Snake
Input processing, scripting
With randomized fruit to pick up, and ever-growing sprite to handle and collision and movement, all rolled into one, this should provide a nice bit of practice.
Tic tac toe
Logic, gameplay
Seems simple no? There are only 9 possible places to put your X or O. Add in a little competitive AI and see what you can do.
Javascript TicTacToe YouTube tutorial
Connect four
AI, physics, gameplay
This old favorite should challenge you with lots of aspects to consider and the differences in the environment to consider including diagonals, filled spaces and the sequence of the stack drops.
Breakout
Input processing, physics
You are going to have to work out the behavior of the ball, how it bounces off things in relation to the angles it hits the blocks and the paddle at.
Tower defense
Scripting, graphics, gameplay
Wave after wave of monsters which have to fit the constraints of the new defenses thrown in their way. Weapon upgrades, monster upgrades, monster health, player health, and keep the monsters following the track.
More Advanced Game-Making Projects
Pac-Man
AI, input processing, scripting, gameplay
If you are looking for something a little more challenging then Pac-Man will be able to deliver. Multiple enemies all interacting chasing you, then the swop to them running away when you eat the fruit. You also have to keep them all within the maze walls return them to their cage and keep score. Challenge accepted.
Chess
AI, scripting, gameplay
Chess becomes hard through the use of AI, strategies, piece movement, and sacrificing. You have to be smart to play chess well. To create a program which will do the same kind of thing, well then you have to become a genius.
Other digital board games
AI, scripting, gameplay, logic
There is nothing more satisfying than digitizing your favorite board game so that when people are tired of being beaten by you, you can start beating computers instead. Most board games have specific game dynamics and logic behind them and working out the maths behind this on its own can be interesting, as you will be able to take away from it some super advanced new tactics which you can apply the next time you are facing your nemesis-arch-rival-opponent. Win-win.
Worms
Physics, GUI, scripting
Another hard to part of computer programming is the ability to interact with the background. Worms will test everything to do with physics and combining this with graphics as different weapons will have different effects on the landscape and on the characters. The trajectories the weapons take will depend on the level set by the player and then they also have the added environmental influences.
Pong
Input processing, gameplay, physics
Duel input processing and the added challenge of making the ball react properly according to the physics of how it was hit. This will give you a firm grounding in understanding how to make multiple elements interact together.
Gauntlet
AI, input processing, scripting, graphics, gameplay
Multiple enemies, magic item generation, different character abilities. This game has it all. The challenge comes from having to put it all together as this game literally encompasses all the game programming disciplines with movement, walls, collecting keys, unlocking doors, and fighting once you can make a working gauntlet game this can easily be adapted into many other game concepts.
2D platform shoot ‘em up
AI, input processing, physics, graphics, gameplay
Now we are in the big leagues. Platform shooters will require all of the parts of the code to work seamlessly together your characters need to move, the AI too, there will be some physics to take into account like gravity. The landscape will likely need to provide protection or blow up. You can also provide different weapons which each need to respond in different ways. Think BroForce, Super Contra, and even Super Mario even with his fireball ability. Once you have worked out how to make a platform shooter work there is no end to the kind of fun games you can make.
RPG game
Input processing, scripting, AI
Interactions and quests through your own stories can be really fun. This type of project will need some careful consideration of how the responses impact the storylines. And all the subsequent changes to further interaction that happens because of the result of this.
Virtual pet simulator
Scripting, UI, gameplay
Keeping a real pet alive is hard; making a virtual life could be considered harder. This project will have you scripting in a lot of events, you will need to monitor times, inventory, interactions, an ever-changing system that will react to the environment.
Duplicate Projects
I mean, these have been done by someone else already which goes to show they are possible… Challenge accepted. Here are some ideas of things that are a simple collection of code that has changed the world.
Amazon
Another example of a commerce website. These giants know what you like, even if you don’t. Build in some methods to provide suggestions which are inspired by your browsing history or work on the psychological aspects of buying such as the ability to leave reviews, quick buy, and quickfire deals and you will quickly find you have a powerful selling engine.
eBay
Making a website to sell stuff can be hard, making a website so other people can sell their own stuff… well, that is a whole new level of difficulty. You will need to provide an interface which people can upload to with images, payment processing, and probably some rules and regulations, so you don’t find yourself quickly on the wrong side of the law.
Built by Mark Zuckerberg as he studied at Harvard University with some of his fellow students, Andrew McCollum, Dustin Moskovitz, Chris Hughes, and Eduardo Saverin. It has gone on to become somewhat of an empire.
Building on the small SMS sharing project of the Twitter project you need to build something that conglomerates all the posts into a single ‘newsfeed’ then add in the possibility of sharing images. Logging in, friend requests, customizable security on content, chat, friend suggestions, this has a lot of aspects to get your head around which means you can take it as far as you want.
Google search
Another reason to go to university if you ever needed one: Google was started by Larry Page and Sergey Brin while they were at Stanford University. Another success story with the idea to “Don’t be evil”. Maybe it is your turn to shake up the internet a bit with a new search engine.
Grammarly
You need to work out how to parse the text in a way that you can begin applying grammatical rules too. For the project we took on in our hackathon we used an NLP engine to do this as this provided a syntax tree which described the type of word that each one is (verb, object, etc.) so then you can apply the rules to it. You can even win hackathons with this: 2018 JetBrains Hackathon
NetFlix
The ability to store and play video remotely, include a login and payment taking for subscriptions then also make a clean UI that works on both TV and computers are just some of the incredible features of NetFlix. Add in a ‘recommended for you’ ability and you are cooking with gasoline.
Again a university has proven to be a hotbed of ideas. Reddit was founded by University of Virginia roommates Steve Huffman and Alexis Ohanian. Who doesn’t want to learn about the latest social news from their peers? Clearly not many people, as Reddit users still flock to the site to discuss all the aggregated news and to upvote and downvote what the internet should be looking at today. You can check out how our team looked behind the scenes of Reddit here: https://blog.jetbrains.com/pycharm/2017/09/hacking-reddit-with-pycharm/
Stack Overflow
In the age of content and information sharing, there is a well known technical website that guides the people with answers to their questions from the community. This Q&A site revolutionized the idea of Q&A quality with their innovative “answer accepted” feature where the asker of the question can mark an answer as “the” answer. Otherwise, questions rise to the top through user votes, so the most relevant answers are always at the top.
Tinder
Swipe right to find a match, who will be the love of your life and you can live out the rest of your days with. That is how it works right? See if you can crack the game of love by creating your own dating app. You will need to consider how to resolve swipe matches, support conversation, and probably best to build in some anonymity and the possibility to block the crazies just to be on the safe side.
Apparently Jack Dorey and Biz Stone built Twitter in about 2 weeks… I believe you can make it in less. Twitter was made using Ruby on Rails and Scala, so if you have been looking for an excuse to dive into something new then this could be it, or you can try and do it in other languages too of course.
Create a small SMS service that shares the messages with other users who are ‘following’ the user. Messages are then saved in chronological order in a feed. Add in the chance to share websites as attachments that use their HTML header meta info and you will have something pretty cool.
Wikipedia
Where do you go to for most of your information… Wikipedia. Creating a wiki full of relevant information with as much fake news removed as possible and better yet written by the community well then you can start your own empire of information much like the incredible resource that is Wikipedia.
YouTube
Taking the NetFlix app to the next level, now it is time to build it up further and let people add their own videos to the platform. Surprisingly, or maybe not surprisingly – if you already know this – YouTube is considered to be a search engine for videos; as once you have cracked the actual adding of videos then you need to make them findable. So you will need to work out a search engine for video, and also suggested channels, restricting viewers, and messaging channel subscribers when there has been a new video upload.
Useful Weekend Projects
Financial independence and budget calculator
Brief: Create an app that tracks your income and spending both credit and debt. Applies calculations based on interest rates and can tell you how long until you are financially free!
Bill splitter
Brief: Takes into account the total bill and can evenly distribute the money owed by each person. Further development can take into account the different courses and drinks taken by each person, and could include further expenses paid by other people which are also included in the equation.
Lunch decider
Brief: Chooses at random a restaurant or food vendor to eat at during lunch.
Weather notifier
Brief: An app that gives an accurate forecast for the location that the request is made from.
Fake news checker
Brief: Check the original source of a news story and how many other legitimate sites are reporting on this event.
Recipe creator
Brief: Taking the contents of your fridge; provide some meals plans.
Travel planner
Brief: Search the area you will be on holiday and provide a list of activities times frames for each and travel times to the next activity.
Bandwidth monitor
Brief: Check the traffic in, traffic out, average traffic, highest point, and the lowest point.
Chatbot
Brief: Create a chatbot that reacts correctly to what you type in.
Pomodoro Timer
Brief: Create a timer which lasts exactly 25 minutes and then has 5 minutes downtime.
Anything else?
To be fair the world is your oyster. You can start a project doing anything you can imagine. Creativity is key here and seeing an existing problem for what it is, you can then start working out what would be needed to solve it. The simplest thing that you could create, which will be universally sought by people is something that helps with the following:
- Health
- Wealth
- Love
- Entertainment
- Information
- Automation of boring repetitive tasks
If you can cover any of these areas of life you can be sure that the majority of people would find it somehow useful. So take time to think about each one and what problems you can see for yourself which you think are important to solve and then hash out a plan for how you can do it. Good luck, may the future be yours!
Making projects is key to expanding your skill set, but to become professional then one of the best ways to get to this level is to get a job in it. We at JetBrains are always looking for passionate new people to join our team, if you are ready to push your boundaries and want to start a career in JetBrains, I would really recommend checking out the jobs we have available on our jobs page or the internships we have going on through the year. You can be a part of the change you want to see.
“The best project you will ever work on is you.” – Anon