Contents:

Free course: “Fast Start in Python"
Learn more
From an early age, he has been programming in assembler and Pascal. He masters C/C++, Delphi, Python, and PHP, and sometimes experiments with other languages. He is passionate about the demoscene and regularly publishes articles on the Habr platform. He has created an extensive collection of tools and literature on low-level programming, which will help both novice and experienced developers deepen their knowledge in this field. Links play a key role in the structure and functionality of websites. They allow users to navigate between pages and find the information they need. Proper use of internal and external links is important to improve navigation and boost SEO rankings. Internal links help distribute page weight across the site, while external links can increase the authority and trustworthiness of your content. Furthermore, using anchor text that clearly describes where the link leads contributes to better user experience and search engine rankings. The optimal number of links on a page also affects its SEO effectiveness, so it's important to maintain a balance between quality and quantity. I started programming at age nine, starting with BASIC and then moving to Pascal. Over time, I mastered computer technology better than my computer science teacher, which allowed me to skip her classes.
At twelve, I began learning assembly language. At the time, I didn't have access to the internet, so I purchased several self-study guides and used online reference books, as well as information I found on Fidonet. This experience became the foundation for my immersion in programming and development.
By ninth grade, I had decided to become a programmer. At that time, representatives from the construction university came to our school and announced the opening of three-year preparatory courses. These courses were supposed to help us prepare for admission to the programming department. Several of my classmates and I successfully passed the intelligence test and were accepted into the courses.
I successfully completed the courses and entered the university, but faced a problem: the Information Systems and Technology department offered only a few programming courses. These courses focused more on scientific aspects than on practical development. I even considered transferring to another university, but ultimately decided to stay and completed my master's degree in 2004. As a result, I entered the program as a future programmer, but ended up with an engineering degree.
After graduating, I didn't look for a job as a programmer because I was afraid it would lead to spending too much time at the computer and preventing me from going outside. I thought such work would only involve writing boring code. It's a shame I didn't realize at the time that there are many interesting and diverse career paths in IT. Today, the IT industry offers a wide range of opportunities, including mobile app development, project management, UX/UI design, and many other specialties that combine creativity and technology.
After graduating from university, I immediately began working in my field, but the engineering career path proved challenging. I worked at my first job for a year and a half, at my second for only six months, and at subsequent jobs, I never stayed longer than a few months.
After I lost interest in construction, I decided to switch to event planning. My experience in theater courses and vocal lessons provided an excellent foundation for this new career. I began working part-time as an entertainer, began performing as Santa Claus, and it was there that I met my future wife. Together, we began organizing children's parties and worked less frequently at weddings.
Until 2013, my wife and I worked for employees, but soon opened our own agency organizing children's parties. This business brought us a stable income until the pandemic. However, with the onset of lockdowns, I lost interest in children's topics and decided to end my work in this field.
In recent years, I have been working as a self-employed specialist, my main focus being the development of software solutions and writing custom programming coursework. From time to time, I also organize events, but only for my regular clients. I realize that I should not have passed up the opportunity to look for a job in IT immediately after graduating from university.
Why Assembly is Better than Dozens of Other Languages
Over the course of my life, I have studied many programming languages, including esoteric ones. In addition to assembly, I am familiar with Pascal and Delphi, and I also write in C++. Although I have mastered this language at an intermediate level, it is quite difficult to learn perfectly. I also have basic knowledge of Python and PHP, can program in JavaScript, and have some skills in Ruby. I've also worked with Visual Basic, including VBA for Excel.
Recently, I came across a challenge from the UniLecs Telegram channel and decided to implement the same algorithm in more than twenty programming languages. This doesn't mean I was proficient in all of these languages. I simply studied the relevant documentation and quickly figured out how to complete the task. This experience not only expanded my knowledge but also allowed me to better understand the specifics of each programming language.
Assembly stands out among other programming languages due to its unique capabilities. I value it for its ability to create a wide range of software—from simple applications to complex operating systems. Here are a few examples of my projects implemented using assembler:
DOS bootloader. In the DOS era, users often needed to boot their computers from a floppy disk to avoid loading the main system from the hard drive. This required entering the BIOS and changing the boot order. Unlike modern systems, where this function is available at startup, this option did not exist back then. If I needed to boot from a floppy disk, I had to reboot the computer, enter the BIOS, change the boot settings, and reboot the system again. If I wanted to return to booting from the hard drive, I had to repeat the process again. This took time and required attention, which made working with the computer less convenient.
My program worked like this: when turning on the computer, if I held down the Ctrl keys, the system would boot from the floppy disk; otherwise, it would boot from the hard drive. This process was possible because my program ran before the operating system, which made it possible to implement such functionality. Creating something similar in a high-level language without using assembler would have been extremely difficult.
Virus jokes. My fascination with low-level programming and viruses began in high school. At that time, I was experimenting on a friend's computer, infecting his system with a "Trojan". This virus would display text or create an effect, for example, causing the image on the screen to shake. This was a pleasure and allowed me to better understand how computer viruses and programming in general work.
Small programs written in assembly language allow for the implementation of functionality that is difficult to achieve in other programming languages. An example is the DOS operating system, which lacks multitasking support. However, DOS does have resident programs that can run in parallel with the main process. With their help, you can, for example, create a falling snow effect, assign a hotkey to launch a specific program, add a clock to the corner of the screen, or change the behavior of standard system functions. Such applications demonstrate the flexibility and power of assembly language, allowing users to improve the functionality and appearance of their systems' interfaces.
Demoscene. I first heard about the demoscene during my school years, but I only became seriously interested in it four years ago. It's an activity that occupies me in my free time, when I'm inspired and have a desire to create. Demoscene is similar to competitive programming, as it requires compressing captivating visual effects into files ranging from a few bytes to several kilobytes in size. This art combines creativity and technical skills, allowing to create unique works that impress with their complexity and originality.

Assembly language provides unique opportunities for studying the workings of operating systems such as Windows. Using assembler, you can gain a deeper understanding of the internal mechanisms of the system and extract necessary parameters. Although the C language also allows you to perform similar tasks, assembler is often a more convenient and engaging tool for working with low-level aspects of programming.
Why it is better to write your own assembler in C++
I have many ideas, including developing an operating system in assembler for specific purposes and for experimental purposes. I am also interested in creating my own version of a programming language. These projects are exciting and challenging tasks that will require significant effort and time, but the results can be very interesting.
In my assembler, I would eliminate the shortcomings and combine all the advantages of popular assemblers such as FASM (Flat Assembler), NASM (Netwide Assembler), and MASM (Microsoft Macro Assembler). In addition, I would suggest my own improvements, since extending the assembler syntax is quite feasible. This would create a more flexible and convenient tool for developers, facilitating greater efficiency in working with low-level programming languages.
Developing in the old assembler is impractical. It is a labor-intensive process that requires significant effort to maintain the code. Assembler is not suitable for implementing large projects, since the code it generates is not cross-platform. It will not function simultaneously on Linux and Windows systems, or on 32- and 64-bit architectures or various hardware configurations. As a result, a separate version of the program will need to be developed for each of these platforms, which is a serious limitation for developers.
The ability to use conditional compilation directives allows you to adapt the code depending on the selected platform, compiling only the necessary parts. However, a more efficient solution is to create a separate version of the program for each platform. In this context, the C++ language demonstrates its practicality: you only need to write the code once, and it will work on all supported platforms. This simplifies the process of developing and maintaining software, reducing the cost of time and resources.
Why Students Still Learn Assembly
Working with assembly allows me to study modern approaches to teaching programmers in universities. It is surprising that such outdated technologies as DOS and Turbo Assembler (TASM), which has not been updated for over 25 years—the last version was released in 1996, are still present in the curricula. This raises questions about the relevance of the curriculum and its ability to prepare students for modern industry requirements. TASM remains a popular tool for DOS development and is significantly similar to modern MASM. This assembler allows students in early courses to become familiar with the history of programming and understand the evolution of processors. However, in more advanced courses, it is important to study assembler for Windows and Linux operating systems, as it is an integral part of modern programming. Unfortunately, such topics are rarely included in the curriculum, which can hinder the acquisition of relevant skills.
Currently, even in 2022, most orders still involve DOS development. However, students at leading universities such as MIPT and Bauman Moscow State Technical University offer more engaging projects. They study NASM assembler, create Linux programs, and solve complex and interesting problems, significantly expanding their technical skills and capabilities.
Where to start learning assembler
In recent years, I have been regularly publishing materials on assembly language. I include collections of books and tools useful for both beginners and experienced developers. These resources will help you gain a deeper understanding of assembler and improve your programming skills in this language.
- "Why do I love assembler?" - In this article on Habr, I talk about how I came to assembler, its advantages, and where it is used. There's also my short selection of books, compilers, and other tools.
- A selection of literature on low-level programming is a thread on the "Sources.RU" forum, where I've collected literature, guides, and documentation on assembler, system programming, operating systems, drivers, and microcontrollers.
- Low-level programming tools — links to compilers, SDKs, development environments, debuggers, emulators, file managers, and other tools that will be useful for those planning to write in assembler.

