Introduction
In June 2017, I've built my first website as a self-taught Software Developer. Looking back on my six years of experience in the field, I've come to realize just how far I've come since building that first website as a complete beginner.
There were countless challenges and obstacles along the way, but each one has helped me grow and learn as a programmer. During these 6 years, I've tried out different programming languages, platforms, frameworks, and even development fields such as game, mobile, and web. It blows my mind how big the programming has become and how rapidly it continues to evolve.
In this article, I'll reflect on my six-year journey and come up with some valuable information that may benefit you. I'll start by telling how I've started my journey and transition into sharing the impact of programming on my life. You can follow the sections to get a better idea of the structure of this article.
If you are a total beginner or someone who has many years of experience in the field, my insights will provide some valuable takeaways for you. If it doesn't, well, I'm sure it will give you a bit of motivation to keep pushing forward.
5 years in the meat industry
I was an experienced butcher working in a meat shop who was enjoying his job. It was a dirty job, but I loved going to work every day because I loved the environment and the people I worked with. The best moments in my life working as a butcher were related to Roman and Tanya, two coworkers who became close friends.
I was earning around $400 a month, which was an average salary in Ukraine in 2013. It was more than enough for me because I don't have a wife and kids.
Of course, for some people, working with meat and blood every day might seem gross, but for me, it was just a job that I enjoyed. I loved the feeling of holding a knife in my hand and cutting through different cuts of meat to create something beautiful.
It probably sounds like some psychopath's fantasy, but customers do not buy meat pieces that don't look pretty, and I took pride in providing high-quality products to them. Occasionally, I worked behind the counter directly with our visitors and sometimes as a Meat Shop department manager while my friend was away.
I knew deep down that working in the meat industry was not something I wanted to do for the rest of my life. In 2013, I've started learning the English language, I knew that by knowing English I can get many opportunities in the future. The feeling of learning something new and challenging was exhilarating.
How it all began
By 2017, I got so good at English that I was even thinking in English instead of my native language, Russian. I was at a Proficiency level, and I knew it was time for a new challenge.
I wanted to have like a social media website to connect people learning English. It should have been a platform where people can practice their skills, communicate with others, and get feedback from each other.
At that time, I didn't have any money and my work in the meat industry came to an end due to various reasons, so I decided to learn how to create a website on my own. Little did I know the journey that was about to unfold.
I needed web development, so I started with HTML, and CSS, and soon moved on to PHP and SQL to create dynamic websites. It's funny, but, at the time, I was delaying learning JavaScript because I thought it was too complicated and strange. Little did I know how important it would become in my future projects.
Tip. Programming can be learned and mastered through learning platforms like Laracasts, which is a great platform to learn coding. It's critical to find the resources that work best for you and your style.
I don't like jQuery, so I avoided it throughout my whole career and instead focused on learning vanilla JavaScript to create more efficient and dynamic web applications.
My project went pretty well, it turned into a social media platform for English. Long story short, I abandoned it and moved to another project because I realized that everything I did on that first website was wrong. Moreover, I realized that I enjoy programming, so I started to explore more areas and frameworks to get to the point where I could start taking on freelance projects.
I've jumped into freelance and started earning my first money from programming. All the proposals on freelance were overwhelming. People were describing things they wanted, and I had no idea what they were talking about. I still have no clue what some of them were talking about, but at that time I knew that I needed to learn more.
My first paychecks were small, but they were a giant motivation to keep learning and improving. I knew that by learning more, I can better serve my clients and take on more complex projects.
Since 2014 until this day, the Ukrainian economy has been going downhill, with the official currency depreciating significantly compared to the US dollar. Working with foreign clients allowed me to earn much more than I could have earned working locally, and it allowed me to pay taxes and contribute to the country's economy, even if it was a small contribution.
The impact of programming on life
People are so closely connected to their profession that it becomes an essential part of their life. Little did I know that learning to code would have such a significant impact on my life. It opened up for me a whole new world of possibilities and allowed me to create something tangible and meaningful.
Firstly, working as an entrepreneur and dealing with things like tax reports, accounting and this full new business world where you need to take responsibility not only for your work but also for legal and financial aspects.
Programming has even changed the way I think and look at things. I've started questioning things and analyzing things more deeply. Occasionally, you look at something and think, "I wonder If we couldn't use some sort of looping mechanism here".
I remember seeing the sullen face of a lady selling cigarettes and thinking, "I wonder if we could replace this 1 square meter cigarette kiosk with some sort of automated payment system and vending machine using sensors and a microcontroller".
There are already tons of machines like this all over the world, but for some reason, it is much cheaper for people to hire someone to sell cigarettes than to invest in a vending machine.
I'm sure you also had such thoughts if you are a programmer yourself. Some people are afraid that it would increase unemployment, but it actually creates more job opportunities. It's much more fun to be a creator, rather than just sitting in a small box and doing the same thing over and over again for many years. As our world moves into a new era of automation, programming becomes even more critical.
Lessons learned
Throughout my 6-year journey of being a self-taught software developer, I've learned many valuable lessons. I'm still not a Guru of programming, but I'm sure I have some insights to share.
This section is probably the most important and valuable, so I've decided to separate it into subsections to make it easier to read and understand.
User experience is crucial
When you're a beginner, you don't consider too much user experience because you are overwhelmed with the amount of information you need to absorb just to get your code to work.
However, as you gain more experience, you realize that user experience is just as critical in creating successful software. Coding becomes not just about getting something to function, but also making it easy and intuitive for users.
If you are a web developer, I have a great article that I recommend reading, titled "You don't have to be an Accessibility expert to know this". It delves into the importance of creating accessible websites and shows how to make small but impactful changes that can improve the user experience for everyone.
Collaboration can do wonders
In this journey, I've also learned the importance of collaboration. It's great to sometimes code on your own and come up with innovative solutions, but working with others can take your creations to the next level.
In Ukraine, we have a saying that translates to, "One head is good, but two are better". No matter how smart you are, there will be someone who can bring a fresh perspective or expertise to the table. Even when those people are not related to programming, they can provide insights that can help you create a better experience for your users.
Of course, it might greatly depend on your personality and work style, but for me, collaboration has been a game-changer. I love to be a part of something big, planning things with others and discussing ideas.
Most of my time I was working with a small team, where we bounced ideas from each other, found solutions to problems together and enjoyed the process of creating something new.
Language battles
Another important lesson I've learned is to avoid people who get too caught up in language battles. It's not worth wasting your energy debating which programming language is the best or which one is superior to the others.
If you ever see a YouTube video talking about how this particular language is terrible, just put a dislike and don't watch this channel again. These pseudo-teachers on the internet think that they know everything, but in reality, they are just trying to create a buzz and attract views.
It's normal to see discuss the weak points of a particular language, but it's unprofessional to tell people that Java is dead and Python is the only language worth learning. There is no such thing as a "better" or "best" language, it all depends on what you want to do with the language and what suits your project the best.
Instead of saying that "A" language is better than "B" language, they should say that "A" language has simpler syntax, but "B" language is better for handling computations. Think about this, there is no one universal programming language that can do everything better than any other language.
Typing speed is important
I know that there are many opinions about touch typing and typing speed, but as a programmer, I've found it to be incredibly valuable. I understand that you can be a slow typist but still create remarkable apps with all the modern coding standards.
My brother is a great Android developer, and he is not a fast typist at all. He needs to look at the keyboard to type. However, it's painful for me to watch this because I type so much faster, and I know it would save him a lot of time if he could improve his typing speed.
Adam Wathan put it perfectly in one of his live streams about typing speed. I don't remember the exact words, but he said something like:
Typing speed is the only thing that stands between my idea and having it in code. The faster I can type, the quicker I can turn my ideas into reality
Adam Wathan, the creator of TailwindCSS
I truly agree with him on this one. Now, I doubt that touch typing is a requirement for recruiting developers, but it certainly makes a difference in productivity. At least, that's what I've noticed in my experience.
Embrace new tools and methodologies
As a self-taught software developer, I've learned that embracing new tools and methodologies is essential to being a better software engineer. And not only because it keeps you up-to-date with the industry, but also because it can greatly expand your vision and approach to problem-solving.
I don't know if it's just me or if others have experienced this too, but I've tried building apps with React Native, game development, Swift programming, and hard-core programming with C and Go and I love all of them. I even enjoyed working with Unity and Unreal Engine 5 where I was trying to create a game.
If you also love many types of software development, leave a comment under this article and tell me what you like. I really want to know what to do in this kind of situation where there are so many exciting tools and technologies you wish to use.
Not always perfect
Lastly, I wish to emphasize that as a programmer, it's significant to let go of the need for perfection. We are all told by people like Robert C. Martin and Martin Fowler that we should constantly strive for clean code, test our code and follow best practices. But sometimes, in the pursuit of perfection, we end up delaying our projects and missing deadlines.
I entirely agree with the importance of writing good-quality code and following best practices, but it's equally significant to recognize that some clients have different priorities and resources. In such cases, we might need to make trade-offs and talk to the client about the benefits and consequences of certain decisions.
At least for myself, I've noticed that some clients aren't concerned with the internal structure of the code as long as the app works without bugs. They don't want you to write tests because it takes too much time and money.
However, this doesn't mean we should compromise the quality of our work. Rather, we should find ways to balance the client's needs with our standards of quality.
Rest outside of programming
What I've noticed throughout these six years of being a self-taught software developer is that taking breaks from programming can actually improve my performance. And breaks are usually short and simple: going for a walk, exercising, gardening or spending time with family. Taking time to rest and recharge allows me to come back to my work with a fresh perspective and renewed energy.
I love activities that require physical strength, such as swimming, cutting wood, hand mowing the grass or weightlifting. Swimming in cold water for me is a life-changing activity, as it recharges me and bumps my dopamine levels so up, that I feel like I can conquer anything.
Just do something that doesn't require any screen time and allows you to disconnect from the digital world. It has to be something nearby, ideally outdoors, and preferably something that you enjoy. Maybe you like biking as I do, taking a walk with your dog, or simply lying down on the grass and watching the clouds go by.
I believe engaging in activities that encourage connection with nature is essential for mental and physical well-being. Especially cold water immersion has been shown to have mental and physical benefits, as it boosts the immune system, decreases inflammation and stress levels, and increases endorphins.
If you have a healthy heart, you don't smoke, and you can safely handle cold water, I highly recommend giving it a try. If you don't believe me, you can learn more about cold exposure from Andrew Huberman, the professor of neurobiology and ophthalmology at Stanford School of Medicine. He has a great podcast with a PhD researcher, Dr. Susanna Søberg, I highly recommend listening to it if you are interested in the quality of your health.
Moreover, I have a great article about "How to make your software developer job more enjoyable" that goes into more detail about enjoying your profession and finding balance in life. It's important to recognize the value of taking breaks and engaging in activities outside of programming.
The Purpose and meaning behind programming
I want to go back to where I was talking about the language battles and emphasize that the purpose and meaning behind programming goes beyond just choosing a language to use. I want you to read the quote from Rasmus Lerdorf, the creator of PHP. He gave a talk at a conference where he was talking about one PHP project that saved lives during a natural disaster.
Development is a tool to solve real problems in a world. It doesn't matter that much, PHP doesn't matter that much, the tool doesn't matter, it's what we solve, it's what we do with the tool. PHP is just a hammer, it's irrelevant, all the tools are hammers, in and of themselves they're irrelevant, what we do with them is super, super important.
Rasmus Lerdorf, the creator of PHP
If you are interested in the talk, this is a link to a YouTube video. I've included a timestamp to the point where non-technical people can understand the significance of programming. Watch the last 12 minutes of the video, it will change your perspective on what programming can truly accomplish.
It's cool to play with different programming languages and technologies, but let's always remember that the true purpose of programming is to solve real-world problems. I often forget about this myself when I get caught up in the technical details.
All these languages like Python, Rust, Go, Swift, and TypeScript don't matter as much as we ramble about them. At the end of the day, what matters is how we use these tools to solve real problems and make a positive impact on the world.
The end user doesn't care if you use PHP or Python for a website, as long as it does what it's supposed to do. They don't care if you use Docker or Kubernetes to deploy an app, as long as it runs smoothly and provides value to them. Create software with tools you know, you can always improve over time if there will be a demand for it.
The challenges of programming
I want to tell you the truth, it's very difficult to be a good programmer. The amount of information you need to take in, the constant updates and changes, and the ever-evolving technology are overwhelming. Don't let it discourage you, though, because the rewards can be incredible.
There were times when I was questioning my career choices and thinking that maybe it isn't for me, perhaps my calling is 3D modeling instead. Throughout my entire life, since I was a child, I've always been connected to art and drawing. Occasionally, the nostalgia kicks in, and I miss those days when I could just sit down and draw without any worries.
But after I do a Blender project, I realize that programming is where my heart truly belongs. I always miss the feeling of typing on the keyboard, I miss the satisfaction of just sitting on the couch with my MacBook on my lap and programming away. I miss problem-solving, I miss Codewars challenges, and I even miss looking for bugs, believe it or not.
Follow me on Codewars, it's an honor to have you as a coding buddy. After the registration, you can find my Codewars profile here. They are not sponsoring me or anything, I just love platforms like Codewars and the LeetCode because they make me a better problem solver.
There is so much to learn, you learn one thing and then discover there's a whole new world of knowledge to explore. It's critical to not take shortcuts and don't skip steps in the learning path. Abraham Lincoln has a famous quote that goes:
Give me six hours to chop down a tree, and I will spend the first four sharpening the axe.
Abraham Lincoln, the 16th President of the United States
You might hear people say that programmers are earning too much money, they're just sitting in front of a screen all day and writing code. Don't take these words to heart because these people would struggle to last a day in your shoes. Most of them don't know the amount of hard work, commitment, and perseverance that goes into being a successful programmer and building a great product.
Whether you work in mines, construction, or programming, every profession has its unique challenges and is deserving of respect. If that was an easy profession, everyone would do it. It's hard, and everybody knows this fact.
Conclusion
Programming has taught me to question things, value user experience, communicate effectively with other developers and solve problems rather than just write code. My six-year journey as a self-taught software developer has been full of challenges, learning opportunities, and growth.
Through it all, I've learned the importance of embracing new tools and methodologies, balancing the pursuit of perfection with the client's needs, taking breaks to recharge, keeping in mind the purpose and meaning behind programming, and persevering through the difficulties.
Despite the overwhelming amount of information and ever-evolving technology, I continue to enjoy programming and appreciate its ability to solve real-world problems. I encourage all programmers, whether self-taught or not, to never stop learning and to continually strive for improvement. It's a difficult profession, but the rewards of making a positive impact on the world can be incredible.
Keywords: lincoln, lerdorf, wathan, codewars, learn, lessons, six, purpose, collaboration, typing, tailwindcss, freelance, english