avatarNicholas Obert

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

3834

Abstract

.org/wiki/Endianness">endianness</a> into consideration and working with raw binary data.</li><li>You could implement the execution through a <a href="https://en.wikipedia.org/wiki/Virtual_machine"><b>virtual machine</b></a>, thus working with <a href="https://en.wikipedia.org/wiki/Bytecode"><b>byte code</b></a><b> instructions</b>.</li></ul><p id="192e">Expect this project to take a long time to complete. It took me half a year to create a compiler (and it’s not yet full-featured), not including a few months of previous experience with their less cool cousin, interpreters.</p><h2 id="aee5">Build an interpreter</h2><p id="aef2">Interpreters are partly similar to compilers. They involve many of the same skills:</p><ul><li><b>Syntactical analysis</b> and grammar.</li><li>The data structures mentioned above for the compiler (linked lists, syntax trees and symbol tables).</li><li>It may require you to create a <b>virtual machine</b>, although it’s not required.</li><li>You also have to <b>manage variables and symbols</b> during runtime, typically through a <b>symbol table</b>.</li></ul><p id="b293">Expect this project to be somewhat simpler than a compiler, but still not an easy task. It took me a few months to learn about and build a full-featured interpreter for a new language.</p><h2 id="38c0">Build a network proxy</h2><p id="426d">Networking and socket programming are never a wasted skill to have in your arsenal.</p><p id="9186">Through this project you will learn about:</p><ul><li><b>Socket programming</b> along with concepts like addresses and ports.</li><li><b>Network protocols</b> such as HTTP or HTTPS. You’ll be studying the structure of a request and a response with their headers and parameters.</li><li><b>Threading</b> for handling multiple concurrent connections.</li></ul><p id="e59e">This project should not be difficult to complete. It could take anywhere from a few days to a week, depending on how complex you want your proxy to be.</p><h2 id="0b67">Database management system (DBMS)</h2><p id="f8e4">Databases are all around us. We use them regularly in many applications. But how many developers actually know what’s behind APIs or tools that allows us to interface with databases? Or what’s inside a database file?</p><p id="70d1">To implement a DBMS from scratch you will need to learn about:</p><ul><li><b>SQL</b>, of course.</li><li><b>Interpreters</b> if you decide to also implement a SQL parser and query executor.</li><li><b>Database file structure</b> is also mandatory for actually storing the data.</li></ul><p id="06b7">This project may not be an extremely difficult one, but if you choose to implement an SQL parser yourself, expect it to take a lot longer since you have to code for the functionalities of at least an usable superset of SQL. In this case it may take up to a month.</p><h2 id="85cf">Machine learning library</h2><p id="b774">As with compilers, it may sound very intimidating to build a machine learning library from scratch. It’s definitely not easy and requires a lot of math knowledge.</p><p id="865e">During this process you will learn about:</p><ul><li>Advanced math concepts like <a href="https://en.wikipedia.org/wiki/Derivative"><b>derivatives</b></a>, <a href="https://en.wikipedia.org/wiki/Gradient"><b>gradients</b></a>, <a href="https://en.wikipedia.org/wiki/Vector_(mathematics_and_physics)"><b>vectors</b></a>, <a href="https://en.wikipedia.org/wiki/Curve"><b>curves</b></a> and <a href="https://en.wikipedia.org/wiki/Probability"><b>probability</b></a>.</li><li><a href="https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/"><b>Algorithms</b></a> used to train the various kind of models.</li><li><b>Represent and store</b> the trained models in files. This will involve working with raw binary data.</li></ul><p id="

Options

b0fd">In this case I don’t feel like giving a time reference, since I have once started to build such a library, but never actually completed it, nor got to a remarkable milestone.</p><h2 id="9513">Procedural world generation</h2><p id="9c59">Create a game, be it 2d or 3d, whose world is based on procedural generation. Take Minecraft or Terraria as an example and implement various biomes, structures and everything that comes to your mind. Have you ever wondered how it’s done?</p><p id="9de6">In this journey you will learn about:</p><ul><li>The concept of <b>noise</b> and how is it generated.</li><li>How to combine <b>noise maps</b> to produce world features.</li><li>You’ll have to create some algorithm for handling the various parameter matrices such as temperature, humidity, altitude and more, then combine them into a final world map matrix.</li><li><b>Chunk loading </b>and storing is another skill you will have to pick up, since CPU and RAM are limited resources.</li></ul><p id="364b">The time it takes to code this really depends on how complex you choose it to be. I suggest you should read <a href="https://betterprogramming.pub/how-to-create-infinite-worlds-in-your-games-using-procedural-generation-d4d4baecd3cb">my article on procedural world generation</a> if you decided to take on this project.</p><h2 id="307e">Basic social media</h2><p id="9bed">It doesn’t have to be the next Instagram, although it should have all the key features of such a piece of software.</p><p id="d297">This journey will cover:</p><ul><li>Working with a <b>web server </b>and eventually some <b>web frameworks</b>.</li><li>Creating and managing user accounts and <b>authentication</b>.</li><li>Setting up and using some kind of <b>database.</b></li><li>You have to handle and display text posts, images and videos.</li><li>It requires a minimum usable user interface.</li><li>You may decide to implement encryption in private chats.</li></ul><p id="cad3">The time it takes to build a social media totally depends on the complexity and features you decide to implement. However, expect it to take at least a few weeks for the most basic one.</p><h1 id="6343">Conclusion</h1><p id="17ae">Don’t be superficial with your business. Dig deep into the inner workings of the technology you build with to really be a master of your art. Programming is a journey, not a destination. There always is room for improvement.</p><p id="29f0" type="7">Nobody gets better by doing what he has always been doing. Push yourself beyond your comfort zone to achieve what you never thought you could.</p><p id="4ee8">Projects like these are an investment worth your time and effort. All it takes is to pick one and just start: you will learn everything you need on the job.</p><p id="bd73">If you know any other interesting project that involves getting your hands dirty and you think is worth doing, please share it in the comment section.</p><p id="68c5">I hope you enjoyed my article and feel inspired to start building. If you would like to read more about advanced programming projects, please check out my series below:</p><div id="64fe" class="link-block"> <a href="https://betterprogramming.pub/7-advanced-projects-to-improve-your-programming-skills-f05d7875104"> <div> <div> <h2>7 Advanced Projects to Improve Your Programming Skills</h2> <div><h3>Get out of your comfort zone and enhance your skills</h3></div> <div><p>betterprogramming.pub</p></div> </div> <div> <div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/0*jS0W6po_8DzaCWGU)"></div> </div> </div> </a> </div><p id="dc8e"><b>Thanks for reading!</b></p></article></body>

7 Great Projects to Deepen your Understanding of Computers

Push your understanding beyond just the theory and the abstractions with these awesome projects

Photo by Sasha Yudaev on Unsplash

Nowadays' programming is based on a huge stack of abstractions and friendly interfaces that hide the inner workings of the technology we use daily. Just think of how thoughtlessly we use an IDE to write our code, then compile/run it effortlessly and get friendly error messages in case something went wrong. This was completely different just a few decades ago, though. Back then, programming was certainly not an easy task someone could pick up in a couple of months.

But why can’t we stick with abstractions and call it a day?

You definitely can, but should you? Getting to know the inner workings of technology we use is the first step to master it. Here are a few reasons to get your hands dirty and advance your knowledge:

  • Improve debugging skills. How many times did a random error show up and you had no idea on what might have caused it? And no, Stack Overflow doesn’t always have a clear and straight-forward answer. Learning how stuff works under the hood helps you with the debugging process.
  • Optimization instinct. Understanding how something works exposes the weak and strong points of it. You will naturally know what to do and what to avoid. Your first approach will often be the best one.
  • Contribute to projects that matter to you. Say there’s a feature you would like in software you use. Why not implement it yourself and help the community? If you need it, chances are someone else also does.
  • Help to the community. Stack Overflow is what it is because of all those people who dug deep down the stack and mastered their business. These experts must come form somewhere and you could be one.

The actual projects

Beware that these projects might be hard and might take a long time to complete, but they will surely be worth your effort. So prepare yourself for a long journey through the lower level world.

Build a compiler

I know this might sound intimidating and hard, because it really is. However it’s among the best projects a programmer could do to deepen its skills and knowledge, in my opinion.

Building a compiler will involve:

Expect this project to take a long time to complete. It took me half a year to create a compiler (and it’s not yet full-featured), not including a few months of previous experience with their less cool cousin, interpreters.

Build an interpreter

Interpreters are partly similar to compilers. They involve many of the same skills:

  • Syntactical analysis and grammar.
  • The data structures mentioned above for the compiler (linked lists, syntax trees and symbol tables).
  • It may require you to create a virtual machine, although it’s not required.
  • You also have to manage variables and symbols during runtime, typically through a symbol table.

Expect this project to be somewhat simpler than a compiler, but still not an easy task. It took me a few months to learn about and build a full-featured interpreter for a new language.

Build a network proxy

Networking and socket programming are never a wasted skill to have in your arsenal.

Through this project you will learn about:

  • Socket programming along with concepts like addresses and ports.
  • Network protocols such as HTTP or HTTPS. You’ll be studying the structure of a request and a response with their headers and parameters.
  • Threading for handling multiple concurrent connections.

This project should not be difficult to complete. It could take anywhere from a few days to a week, depending on how complex you want your proxy to be.

Database management system (DBMS)

Databases are all around us. We use them regularly in many applications. But how many developers actually know what’s behind APIs or tools that allows us to interface with databases? Or what’s inside a database file?

To implement a DBMS from scratch you will need to learn about:

  • SQL, of course.
  • Interpreters if you decide to also implement a SQL parser and query executor.
  • Database file structure is also mandatory for actually storing the data.

This project may not be an extremely difficult one, but if you choose to implement an SQL parser yourself, expect it to take a lot longer since you have to code for the functionalities of at least an usable superset of SQL. In this case it may take up to a month.

Machine learning library

As with compilers, it may sound very intimidating to build a machine learning library from scratch. It’s definitely not easy and requires a lot of math knowledge.

During this process you will learn about:

In this case I don’t feel like giving a time reference, since I have once started to build such a library, but never actually completed it, nor got to a remarkable milestone.

Procedural world generation

Create a game, be it 2d or 3d, whose world is based on procedural generation. Take Minecraft or Terraria as an example and implement various biomes, structures and everything that comes to your mind. Have you ever wondered how it’s done?

In this journey you will learn about:

  • The concept of noise and how is it generated.
  • How to combine noise maps to produce world features.
  • You’ll have to create some algorithm for handling the various parameter matrices such as temperature, humidity, altitude and more, then combine them into a final world map matrix.
  • Chunk loading and storing is another skill you will have to pick up, since CPU and RAM are limited resources.

The time it takes to code this really depends on how complex you choose it to be. I suggest you should read my article on procedural world generation if you decided to take on this project.

Basic social media

It doesn’t have to be the next Instagram, although it should have all the key features of such a piece of software.

This journey will cover:

  • Working with a web server and eventually some web frameworks.
  • Creating and managing user accounts and authentication.
  • Setting up and using some kind of database.
  • You have to handle and display text posts, images and videos.
  • It requires a minimum usable user interface.
  • You may decide to implement encryption in private chats.

The time it takes to build a social media totally depends on the complexity and features you decide to implement. However, expect it to take at least a few weeks for the most basic one.

Conclusion

Don’t be superficial with your business. Dig deep into the inner workings of the technology you build with to really be a master of your art. Programming is a journey, not a destination. There always is room for improvement.

Nobody gets better by doing what he has always been doing. Push yourself beyond your comfort zone to achieve what you never thought you could.

Projects like these are an investment worth your time and effort. All it takes is to pick one and just start: you will learn everything you need on the job.

If you know any other interesting project that involves getting your hands dirty and you think is worth doing, please share it in the comment section.

I hope you enjoyed my article and feel inspired to start building. If you would like to read more about advanced programming projects, please check out my series below:

Thanks for reading!

Projects
Programming
Learning
Computer Science
Challenges And Growth
Recommended from ReadMedium