The world of software development has changed significantly over the years. It started as an engineering field only, but nowadays everyone can get into programming relatively easily. All thanks to the sheer pile of simplicity that lets people focus on the task they need to accomplish, rather than engineer a way to do it from scratch.
Simplicity is life-saving when it comes to accelerating development times, but comes with a host of drawbacks for learners. In my experience, the best method to really understand how a complex technology works is to rebuild it myself.
This approach greatly improves your basic knowledge and leads to better use of the tools you use; You get to know them more in depth, including their strengths and weaknesses.
Beware that some of these projects may take a long time. This is normal, as they may require some research on the subject. They are not in a certain order.
This may seem like an easy task – just evaluate the given phrase – but there is much more to it. How would you solve an expression with multiple operators or nested functions? Calculator software is actually very similar to an interpreter or compiler, because it is really a mathematical interpreter. This project will bring a journey that includes:
- Learn about Tokenization, Also known as Dictionary analysis. This is also one of the main stages of compilation, so learning it can provide you with a starting point for more complex projects such as a compiler.
- Token evaluation is another key aspect of calculating the outcome of a phrase you will learn about. It is a process of performing chains of actions in the right order and transferring the result of one action to another.
If you would like to continue this project, I suggest you read my step-by-step calculator software programming software.
In recent years there has been a tendency to turn everything into a cloud service; Just think about SaaS, PaaS, And so on. Registration as a service (Latest) Is no different. It provides developers with a managed and reliable registry system, which can be very useful for large complex applications.
Building a cloud registration service will include:
- Set up and manage servers, whether through cloud service providers or through your own computer. In case you were deciding which cloud provider to choose, then I suggest you check out my article “7 Free Cloud Hosting Service Providers for Software Developers”.
- Dealing with web servers and ultimately related frameworks. You may also need to set up a website to provide your service with a beautiful log image.
- API keys and user activation management. You may need to implement a validation system or learn to use an existing system such as Auth0 or Firebase.
- Database management to store users and their logs.
- You may need to think about securing your server.
- Such an application can be implemented using Microservice architecture, So this is a great opportunity to learn about them.
Virtual machine programming from scratch may seem a bit overwhelming, but it’s completely doable. In its simplest form, a virtual machine is a processor software that executes instructions, just like a physical processor.
This project will improve your low level skills and bring you through:
- Working with raw bytes. Today, programming involves almost no raw binary data thanks to libraries and frameworks.
- Learning assembly languages. Each processor has its own set of instructions, depending on its internal architecture. You can create a virtual machine for an existing assembly language or create your own machine.
- Language analysis and translation no Operating bar, If you plan to implement your own assembly language because you will need to write a specific language rearguard for this.
- Low level optimizations. Learning how computers work under the hood will lead you to know which approach will work better in specific situations.
They are everywhere, from image filters to image recognition software. Such a tool can be as simple or complex as you like, but they all have the following aspects:
- You start working with raw image data, usually RGB bytes.
- You can learn how image files really work. Moreover, it can be a starting point for learning to manipulate videos as well.
This field is very wide and includes all kinds of tools. I have previously written an article on an image converter for ASCII; You can check it out below.
A physics engine is at the core of any game or simulation. While there are many great options out there such as unity and Unrealistic engine, It’s a great project to take on to learn. It covers a large number of concepts, some of which are not directly related to programming.
You can make it as simple or complex as you like. Depending on the accuracy, this may include different aspects of physics. In any case, in this journey you will usually learn about:
- Physics, of course. You will need to repair Classical mechanics And finally do some research on the subject in order to simulate the movement and interaction of physical bodies in space. You can also apply other and more accurate theories and properties like temperature, energy, magnetism …
- Analytic geometry, For example, to detect collisions between bodies.
- Vectors And the actions associated with them, since they are the basis for any calculation.
- Algorithms such as Search techniques, For example, to detect collisions effectively.
- On-screen simulation processing. Obviously you need some graphic feedback from your engine. You also need to distinguish between physics and graphic frames (more info Here).
Every software product around us relies on synchronization in one form or another; Watches should show at the same time; Chat apps need to be updated in messages; Data backup services need to keep up with the latest changes.
Although there are countless synchronization applications, I suggest building a service that maintains writing board Updated on multiple devices on a local network. Such software can not only be useful but also a great opportunity to learn about:
- Socket programming, because you will need to set up a Socket server to sync and clients to connect to.
- Setting up a server to run the synchronization service. It could be a dedicated machine or just a process running on a device that you know will always work.
- Synchronization techniques to track board history, determine which data was recently copied, and the order of Copies.
- You can create an app for visualizing, editing and clearing the board history and choose which clip to paste.
- The board is usually provided by the operating system and is accessible by programs through a dedicated API. You will need to deal with the API of the board of your operating system. For Windows, check This guide outside; For Linux, This Reddit thread Including several approaches; For macOS, It Need to get the job done.
Nowadays, web apps are ubiquitous because of their versatility. In fact, you can use them without installing them; You can access your account from multiple devices without worrying about data synchronization.
A note-taking app is a classic handy tool that does not require too much engineering to build. However, this is a great project for learning, as it covers many technical aspects such as:
- Set up a server, whether through a cloud provider or by managing your own computer. As I mentioned earlier for a cloud registration service, here you can find some free cloud service providers with their features.
- Internet technologies such as frameworks and web servers.
- User authentication, activation management and related security.
- Manage user settings, or using JSON Web Token (JWT) Or other means.
- Database management is another basic aspect of any web application. In this case, you need to store both the user accounts and their comments.
- Live data synchronization through startup. The front end of the app needs to make constant requests in order to keep the interface up to date with any changes that may occur. For example, you can make joint comments at any time and you will need to refresh them all the time.