It was originally posted on my blog.
Recently I started feeling a bit nostalgic and decided to put my feelings in words. This is my story about becoming a self-taught software engineer but also about finding myself in life.
I know there are a lot of developer's stories like this, so it's my turn to write one 😃. I hope my story could inspire or push someone in the right direction. And throw off some prejudices about starting to learn code when you're 30 or without a tech degree.
In addition at the end of the post, I added my advice to the beginners.
Somewhere in 2015-2016, I was working as a System administrator in one of the biggest telecom companies in Russia and my manager asked me to do some automation tasks. I wasn't a good SysAdmin because it was the first time I need to do this. He gave me the huge book on Unix and asked me to figure this out.
This was a turning point for me. It was an ordinary day but something clicked inside.
All my jobs before were weird. It's a funny thing to say now but I've been worrying a lot about this in the past. I always loved computers since I was a kid and there wasn't a question which industry I ended up in. But what I'm going to do within the industry was a very big question.
I spent some time in college but very fast I got bored with it (it wasn't a good school) and I dropped it in the second year
So I found myself in a situation where I had to get a job. I started with the easiest possible way of going into the IT industry - technical support. You know these guys who answer the phone when your Internet broke down. That was me. The job was very dumb and I clearly wasn't learning anything. But I didn't know what else I can do and continue to go to work every day. I tried to educate myself some related stuff of the telecom industry: networks, routing, bla bla. It was so boring and the knowledge was too theoretical. I didn't like it but kept pushing myself and felt bad when I didn't learn anything useful.
Please never do that. If you don't like the topic you're learning maybe it's not for you? Later I finally realized that and stopped torture myself with networks.
Then I tried to pivot to the system administrator. Or I thought so. Since I didn't have good knowledge about the servers most of my administration career I have been one platform specialist. I worked as a specialist of "SMS Router" in two companies. I'm sure you have no idea that these routers even exist. Neither did I. Most of my job was to check logs, change some settings, check logs again.
As you can imagine this knowledge has never come in handy in my life again.
Here I learned my second lesson - try to be more generalist than narrow specific. Especially if it's so narrow that nobody in the world knows about this.
All these jobs felt like I'm a crazy train driver pulling random levers. I never felt satisfaction on any of them and almost all the time I was frustrated and didn't know what to do next. That took me 6 years and a lot of courage to finally found that moment when I said "that's enough".
On the day I mentioned above I got the first time experience of some programming and I loved it! I wrote a small automation tool in bash and it worked and did something helpful.
I didn't have any programming background. I did some coding when I was a kid but it was either too hard for me to understand either too easy and unsatisfactory. It seems it should have passed 28 years before I started to appreciate the beauty of coding 😃
After that day I lit up with the idea to become a programmer. I was madly drawn to this idea. I started reading forums, websites. I discovered the thing called podcasts (they were not so popular in Russia) and started listening to everything related to programming. I understand only about 30% of everything the hosts were saying but it was so exciting!
I loved everything - community, IT area itself, coding approaches, languages. And I still love that to this day to be honest 🙃.
So the goal has been set but where do I start?
I started trying all the different code learning websites I could found. I didn't know much English back in a day so I've been researching runet. Unfortunately, most of the resources in Russian are not good. I even wanted to buy some school subscription for around 800 euro. Later I figured out they are more marketers then real programmers, thank god I didn't buy it. All the resources I tried were either confusing or tried to teach me anything but programming. How to set up a Wordpress website or something like this. I still worked full-time so there wasn't much time for learning and it has been giving me a lot of frustration.
But finally, I found one website which I still think one of the best programming courses ever - hexlet.io. Unfortunately, they still don't have much in English. They had everything you should see in the great learning courses - good quality lessons, great community and one respected hero-programmer who stands behind the project.
Back in a day, they didn't have any marketing and I have no idea how I found it in the first place. But this website changed everything. I started with their YouTube webinars where some smart guy was talking about serious and hard things. I didn't understand much but his talks were so interesting so I wanted to learn all that.
I started with PHP courses and joined the community on Slack (nowadays It's the biggest Russian-speaking code learning community). I was a lurker at first but then I started to chat more and more.
Eventually, I attended a few hexlet meetups and even was added to "chosen ones" Slack channel 😃. There were mostly the old core members of the community. I was so excited about all that! The first time I felt like I'm a part of something cool. The hexlet project had a huge impact on my progress as a programmer.
The world of software engineering has been dragging me on more and more but I still wasn't a programmer. I made a pretty big decision to quit my job and start full time learning to code with the goal of finding the junior position.
I still don't know if it was the right decision or not. I ended up as a programmer and everything is great in my life today but what if I'd fail? I don't know what would have happened then. So if you're thinking about doing the same, please consider all pros and cons.
Another reason why I deiced to quit my job was that my girlfriend (She is a wife now 😍) got the exchange semester in Portugal for three months. I haven't travel much back then so I decided why not to go with her and spend these 3 months of learning code.
It sounded like a great idea and we went to Lisbon for 90 days. Oh boy, how wrong I was with expectations that I'm gonna be studying. When you for the first time living abroad everything is so exciting. You are having new foreign friends among students and all students like to party and drink so much! 🥳. All that was no good for my learning plan 🤦♂️ The days under the hot Portugal sun have been passing very fast but I was slow in achieving my goals.
But even slow learning is still learning. I didn't understand it back then but now I know it well. Always try to compare today's yourself with yesterday's yourself and nobody else. But back then I was a bit frustrated with my progress.
Besides, Hexlet is really, really hard course. The basic idea behind it was taken from a very famous book among software engineers - SICP. With the only difference, the courses use JS/PHP as more modern languages instead of LISP. But all the concepts are still there: functional programming, immutability, recursions, data structures, abstractions. A lot of great but hard stuff for a newbie. I'm quite happy that I took that course, it affected my programming style in a lot of good ways. But I am not sure if I can recommend it to the new people at coding.
Luckily at the same time, they also created a new feature in addition to the courses, called "Projects". I was in the first stream of the students to try it out. And since it was a new feature the creator of courses himself curated it. Basically, it was 3 projects with real-world tasks and in real-world environments. We were writing the tests, setting up a dev environment, used git, etc. It gave me a huge boost in the understanding of how real development works.
I still remember how I've been writing the last project sitting in the Lisbon airport where my flight was delayed before going back to Moscow. ✈️
My first idea after learning to code was to become a freelance developer. This year I already started to fall in love with traveling and dreamed about "digital nomad" (I didn't know the term yet) lifestyle.
But the courses brought me back to Earth and I decided I'm not ready for that. I thought I could only be a freelancer once I was a master. Now I realize it's the wrong mindset. If you want to go to freelance it's fine to go even when you're junior. But questioning yourself is the part of becoming a programmer. Impostor syndrome is a real thing and it pervasive among our community.
So I started to look for an office job. I was part of the Hexlet community and I got a huge help with CV and preparation for the interviews. I like the way how the interviews were going on the coding positions. Most of them were online tests or some coding exercises. I'm a fan of digital asynchronous communication where you have time to think and I hate phone talks where you need to answer within a few seconds.
Once again, the Hexlet community helped me here as well. The founder of the courses knew some guy from the previous job and heard they are looking for a junior developer in their company. I got the interview: live coding, coding exercise for a couple of days, and BOOM! 💣
I landed my first programming job.
I was a PHP junior developer. The salary was negligible, around €300 per month.
Anyway, I was happy. I haven't been looking at the watch, waiting when the working day is over for the first time in my life. I had a pretty good team-lead who educate me on a lot of stuff with patience.
Unfortunately, the management of the company wasn't great and we had a lot of problems with them. Eventually, most of the team quit their positions including me. That was my first and the only office job as a programmer and it lasted for a year.
After I quit even more interesting part of my story began. But I move it to the next post.
I'd like to give some advice to people who only starting their career and journey. And also to think about what I would have done differently.
- Don't research too much. It's good to do some research on the paths of the career or where you need to start with your current knowledge. But don't put too much pressure on yourself. When you over-research you will start to listen to everyone and compare yourself to others. "This language is the best", "I'm working in Google", "I learned how to code for 2 months and I'm making a bunch load of money". All this has to be ignored. Every situation is different, every person has their own path. Take your time and comfortable pace.
- The best way to start thinking and learning to code is to focus on basics. Languages and technologies are great but they are constantly changing whereas the basics are not. Try to learn the core basics at first and move to the specifics after.
- Don't wait too long before you start looking for your first job. You'll never be the ideal hacker you're imagining in your head. The job requirements also could look very scary at first but then you will learn they are not mandatory. The companies are often overstating the requirements in the job listings.
- When you start to go deeper in learning specific technologies try to cover the related fields. If you're back-end developer learn DB, Servers, Operation Systems. If you chose the front-end development learn HTML/CSS, how browsers work, design basic. It will T-shape you and make you a better specialist.
- Make sure you're also paying attention to the environment you work in. It's related to the things which make developer's lives easier. Things like version control systems, Continuous Integration/Delivery, monitoring tools, even editors or IDEs.
- Soft skills are very important for programmers. Learn to talk/write/communicate.
- Find the community where you feel comfortable and learn together with others. It helped me a lot on my path. Without community, you sometimes can feel you're drawing in all this information. With the community, your peers always have your back.
- Code, code, code, especially at the beginning. Nothing makes you a better programmer then solving the real issues.
And the most important thing that has nothing to do with programming - never stop looking for yourself, believe me, it is worth finding.
If you want to discuss my article or share your challenges as a junior developer tweet me at @guar47