Preslav Mihaylov

Speaker, Software Engineer, Technical Trainer. Passionate about computer science, presentations and reading books

The ultimate challenge for aspiring developers

When I first started programming, I started creating some simple console applications following some course materials. I had to create some simple algorithmic-type programs such as implementing factorial, Fibonacci, etc. Although creating these programs might be fun at first, it’s not like creating your own project from scratch.

Shortly after that, though, I created my very own game. That was simply amazing! I never thought that you can create some of the most popular arcade games with so little knowledge. That’s what hooked me up for programming. It was the step that made me look at programming not simply as a vocation, but a calling.

But I realize that I was lucky to find someone from whom to learn how to make my own game and do it myself afterwards. Most of the newbie programmers don’t have this experience and I think that is a shame.

Today, I want to recreate this journey for you and help you create your own game.

How it all started

A few weeks ago, I was invited to make a talk for the event Europe Code Week Varna and I was wondering for a while what to show the attendees there. So I decided to experiment and do something I hadn’t done before. Instead of leading a regular presentation with slides,  I decided to create a C# game from scratch for them in the hour long session. I chose the game Snake.

At the start of the presentation I asked the audience, which consisted of around 50 people if they had ever created their own game. And what amazed me that only one person in the room had created a game before. That was extremely surprising for me because the audience consisted of people, who were just getting started with programming, but there were also people who were already working as professional developers.

The audience loved it. Furthermore, after the event, there were people who contacted me and asked if there was a recording of the event since they couldn’t attend.

That’s how I realized that such a thing is extremely interesting and it can be hugely beneficial for your knowledge, skills and the growth of your passion for programming. I am attaching a video from the event for those of you who want to see how it goes, but note that it is in Bulgarian and won’t be accessible for everyone.

However, this event inspired me to create something far more outreaching and available for everyone. I have a challenge for you.

The Challenge

I want you to create your own game. But I can’t just tell you that and leave, since you don’t know where to start from. Instead, I have recorded a screen cast of me writing the Snake game in C#. But I haven’t finished it. There are things that are missing and it is your job to extend the game.

Look at the video and go through every part of it, make sure you follow along and write the code I type. Try to understand the things I am writing and if you don’t – don’t worry. This is more of a tinkering process instead of guided learning. In the end, your program should look like this:

Once you finish the version of the game I have written, then you have to extend it. I have listed a set of missing things in this game, which you have to do. I have created a GitHub repository, where you can find all the necessary information:

If you don’t know how to work with GitHub, then simply click the “Download ZIP” button at the top right of the page. If you do, however, then what you can do is fork my repository, complete the game I started and submit a pull request afterwards. That way, I will be able to review what you have done and I can give you feedback on what you can improve on the game or in your code.

After you complete this challenge, you will have the necessary skills to create your own favorite game – Pong, Tetris, Flappy Bird, etc.

Why should you do it

In order to be great at programming, it should be interesting for you and you should have passion for it. This challenge has the potential to awaken your passion as creating my own game did that for me years ago.  And why does it matter?

If you do something only because of the financial benefits from it, you can get far. But when you are connected to it on an emotional level, then you have the potential to be great.

Furthermore, creating a project from scratch can greatly solidify the knowledge you have. I didn’t learn any new language constructs or new material related to C# back when I created my first game. But I felt much more confident in my abilities to write code than ever before. Creating simple programs, solving a traditional problem like reversing a string, finding a prime number, etc. is pretty cool and does help you explore programming. But only when you start creating your own project will you gain a much broader view of how a program works.


Now it’s time for action. Enough reading, let’s get into coding. Open up that video I shared, open Visual Studio and start creating that Snake game. Do you have what it takes to complete this challenge?

If you have any questions or concerns, feel free to contact me anytime. You can do that by writing to my email


Speaking at WordCamp Sofia

WordCamp is an annual WordPress community event organized in cities all over the world. Professionals from the WordPress world come and share some great content about development, blogging, soft skills and more.

I will be making an appearance at WordCamp Sofia. I am extremely honored to speak on the biggest community WordPress event in Bulgaria. The date is 11th November, Arena Mladost Hall, Sofia.

My presentation is The Productive Developer. We will see what are the bottlenecks to our productivity and what are the solutions to them. But apart from that, we are going to explore some great tools and techniques that will help you not simply discover where your productivity gaps are, but systematically solve them! And the best thing about these tools is that you can start applying them right now.

I am looking forward to meeting and connecting with great people on WordCamp Sofia, 2017.

Going to the conference yourself? Then just let me know and contact me. I would be happy to chat and see you on the 11th of November at Arena Mladost Hall, Sofia.

Stay tuned for further news and updates about upcoming slides & video.

Languages High and Low

This article is part of the sequence What you won’t learn in the basics courses aimed at eager people striving to gain a deeper understanding of programming and computer science.

When I started programming, I got introduced to C# and I thought it was pretty fun. As I advanced in my studies, I learned other programming languages as well. I learned JavaScript, PHP, Java.

Even though I learned to code in these languages, what I didn’t understand is why are there so many languages? What purpose did they all serve? Furthermore, I was curious where did all these languages came from? How did they come to be? What is a low-level language and why does it still exist?

The goal of this article is to try and help you find the answers for some of these questions and to further fire up your curiosity in the nature of programming languages and computers. I will walk you through the evolution of modern programming languages. Why did they come to be and what problem did they solve.

Continue reading

A computer science course for craftsman

When I started studying programming and computer science, I was capable of doing it from morning until dawn. It was an addiction. It felt like those days, when I was playing World Of Warcraft. Only this time I was doing something a lot more useful. The reason for my dedication was my deep interest in learning how things worked.

How do you make your own exe file?
What is it like to make a game?
Can you make your own Facebook?

But as you advance more and more into programming, you find out that much of the things you are interested in are hidden behind various abstractions. Nowadays, when you want to draw a pixel on a screen, you call the magic function Draw(x, y), from some library and it does the work for you. You don’t get to manipulate the bits of the screen yourself.

And this high level of abstraction is what keeps the industry going forward and lets you focus on higher-level tasks such as choosing the best algorithms for processing the data you are working with, or focusing on more sophisticated topics such as machine learning.

But I am that kind of guy, who always strives to delve deep into the details of the low level nature of machines. I am not satisfied from knowing how to use a function for drawing a cat on the screen, I want to know what are the actual mechanics done on the bare metal for achieving that.

I’m not satisfied with knowing that you build a C# program by clicking Ctrl+F5. I want to know what is the process of transforming a stream of text into a stream of bytes, that the computer knows how to interpret. This genuine interest in the nature of computers is what fuels my passion for computer science.

And if you are like me, then I have a challenging conquest for your weary mind, young padawan.

Continue reading

Should you listen to what other people say?

Taking decisions in life is hard. Especially if they concern our future. One of the classical examples we have all gone through is deciding what career path to follow after we graduate.

And there are many people – parents, relatives, friends, unknowns, who try to give us their valuable advice about our own future. Some will tell you to go study medicine or law since it is so well paid. Others will tell you to study economics, because everyone in your family was an economist and you should continue the chain. And some will tell you to follow your passion and do what makes you happy.

And all of this friendly help makes things even more complicated. Some people blindly agree on what their parents say, since they are their superiors. Others act more rebelliously and do the exact opposite of what others told them and write stuff like “I don’t care about what other people think or say” on their Facebook walls.

I have gone through both periods myself. I know the struggle and I have also received advice about my future when I was graduating and I continue receiving it even these days any endeavor I take.

What has changed, however, is my approach and way of thinking about the issue.

Continue reading

Older posts »