I finally decided it’s about time to begin sharing what I’ve learned in my career and what kind of problems I’m facing as well as their solutions.
This blog has a strict software development/computers/techie theme. I will probably share my day-to-day work-related thoughts, observations, and conclusions. The blog will be written only in English to make it accessible worldwide, although my natural language is Bulgarian and my home country is Bulgaria.
Table of Contents
I was born and raised in the capital city Sofia. I got access to computers early in my life – at the age of 7 in the year 1991. Only 2 years later I started programming in BASIC at the age of 9. I wrote small computer games, customized existing ones, and generally tried to spend as much time as possible on a PC XT clone my parents brought home. In those years having a computer in Bulgaria was an extremely rare privilege. I remember that many kids used to come home to play games together with me.
I’ve shared more old memories in another blog post.
Several years later I started playing with the C programming language and the Linux operating system. In 1999 I vividly remember writing my own CD-DA read-ahead buffering playback program in C (later ported to C++) under Gentoo Linux in Emacs to work around my old Mitsumi 8X CD-ROM flaky native Audio CD playback. It worked great and allowed me to listen to my favorite tunes for years, but sadly this software got lost.
I’ve always been interested in multimedia A/V stuff and I contributed to the open-source MPlayer project several years later.
In 2004 I started my first part-time developer/system administrator job and in 2006 was my first job as a low-level C programming language network equipment developer. For several years I continued writing in C, but finally, in 2012 I was fascinated by the Android operating system and the Java programming language. The paradigm change from procedural/imperative to object-oriented wasn’t easy, but I finally escaped the world of verbose low-level code, low productivity, memory corruptions, and segmentation faults.
My LinkedIn profile is up to date for everyone interested in all the details.
Interests and preferences
As years pass by I’m more interested in system architecture, design patterns, good coding practices, clean, maintainable, and easily extensible code. Programming books I love to read lately are about conceptual topics rather than technology-specific.
My favorite tasks are performance optimizations and/or efficiency improvements. Nothing makes me smile more than improving something slow, inefficient or unreliable.
I have a very strong preference for doing the right thing the right way. This means constantly refactoring the codebase I’m working on, applying the boy scout rule. This sometimes slows me down in the short term when I start to work on a new project, but pays off in the future with code that’s easier to read, understand and maintain.
New languages/frameworks are not a priority and learning the next one is only driven by requirements at my current position. I’m wise enough to know that there’s hardly anything new under the sun and most of the latest and greatest hyped technologies the teenagers are so excited about are most of the time some old tricks.
I love to teach and mentor junior developers. Brainstorming, drawing on a whiteboard, explaining and creating small challenges for them are definitely my favorite tasks.
Naturally, I’m interested in becoming a software architect as time passes by. Having worked on a lot of small pieces here and there through the years, I’m a bit more interested in understanding and designing the bigger picture of a software project. I find it difficult to think about parts of a system in insulation and often my mind seeks how complex parts of a software product interact with each other.
My favorite topics lately seem to be complex design, performance considerations and tradeoffs, extensibility, good architecture and following industry-proven good practices.