Preslav Mihaylov

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

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

The process of achieving a meaningful goal

Some time ago, I told you my story of becoming a better player in League of Legends. There was some kind of flaw in my skills and I decided to change that. So I started watching some YouTube videos about becoming a better LoL player.

But the key to mastering that game was not in studying all sorts of fancy game mechanics or memorizing the items to buy for each hero. It was in adopting a mindset of always blaming yourself instead of your team for the mistakes you all make. That helped me skyrocket my overall gameplay and after a while, I was able to climb the ranked ladder of the game and I moved from the weakest division to being among the top 5% of the players in my server.

This achievement was quite improbable at first. So since then I had been wondering – how could adopting such a philosophy make me a better player in the game? Why didn’t all the mechanics I had watched help me, but instead it was this simple thought of always blaming yourself that released the handle of my potential?

Continue reading

Understanding Standard Input and Output

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.

Somewhere in the first lectures of a programming basics course, we are shown how to take input and show output on the terminal. That’s called standard input/output or just Standard IO for short.

So, in C# we have Console.WriteLine and Console.ReadLine.
In C++, we have cin and cout.

All these things are associated with the topic of Standard IO. And what they tell us is that the standard input is the keyboard and the standard output is the screen. And for the most part, that is the case.

But what we don’t get told is that the Standard IO can be changed. There is a way to accept input from a file and redirect output to another file. No, I’m not talking about writing code to read/write files. I am talking about using the Standard IO for the job, via the terminal.

Continue reading

Older posts »