"I failed the first few interviews"I studied without a rigid schedule, in fits and starts: during breaks at work, sometimes at night. At about Level 16-17, I began to try to look for a job. By that time, I had been studying for about three months with some breaks. If you don't have work experience, then they like to ask about algorithms, but I also hardly knew them. So I failed the first few interviews. I had to prepare more, look for the most frequently asked questions, and memorize the answers to them. I urgently learned SQL, studied code versioning systems (IMO, CodeGym mentions Git at an unreasonably advanced level, not until Level 30) and SOLID principles, and learned sorting algorithms. In the end, I was hired as a junior dev at a small company. My tasks in my first job were super trivial: developing new system functionality, polishing existing functionality, fixing bugs. We used the waterfall methodology: a business person sends a task, an analyst describes it in a little more detail, a developer implements it, an analyst tests it, and then the developer rolls it into the product. We didn't use any special technologies: we wrote everything in pure Java — a monolith instead of microservices. To work with the database, we used our own proprietary closed-source framework. There was an ocean of difficulties at the very beginning — from learning how to upload the project to the repository, to how to write a request to the database so that it does not time out. I had to google a lot about working with JSON, SOAP, about what Maven is, and about how to build a Maven project. I didn't abandon learning. I tried to study at least every other day, but there were a couple of times when I had to set it aside for a month. But my goal was to finish the cherished 40 levels. In parallel, I took a course on the Spring framework. Spring has opened up a lot of new opportunities for me, and the offers I receive thanks to my resume have multiplied many times over. During quarantine, I changed jobs and switched to a project with a microservice architecture. We're creating a service for searching for, selling, buying, and leasing residential and commercial real estate, as well as applying for and servicing mortgages. 80% of our services are written in Kotlin. The other 20% are written in Java.
My plans for the near future are:
Deeper immersion in architecture. I would like to do a deep dive into the design of backend architecture.
Learning C++. I think this will definitely be useful for any programmer — to be able, if necessary, to write the parts of an application that need to run exceptionally fast. This will be useful for any complex mathematical calculations.
DevOps. Some companies even make this skill a mandatory requirement for programmers. And it will definitely be useful at any other company.
Tips for beginner developers:
- Continue programming. A programmer's work consists entirely of solving certain problems, and finding certain errors, and correcting them. Sometimes this may (and definitely will!) seem unbearably difficult, boring, and vexing, but when you finally solve the problem, it feels like a real breakthrough, a victory, almost a discovery. And this cycle repeats itself. Anger, acceptance, long attempts, and endless failures, then victory. The thrill of a programmer's work lies in the anticipation of the next breakthrough and victory.
Continue learning whenever and wherever possible. Read articles and books. Find and take courses in various areas of software development. Be sure to try new technologies. Apply them to your personal projects. Interact with others who are passionate about software development. Exchange experiences and ideas. Once upon a time, it was talking to such ambitious folks that helped me to not languish at my first company and not be afraid of moving on.
Hence my third tip — Don't be afraid of changing things up: a new job, a new framework, a new language (forgive me, CodeGym). All my major victories over myself happened at exactly the moment when I changed jobs. Initially, it seems scary to go somewhere without fully mastering the technology or language, but this stimulates a lot of growth, as you study this unknown technology or language. Your second wind kicks in, and you find special meaning in understanding and studying something new.
Be reasonable in assessing your strengths. Even if you can combine employment, independent study at home, some online courses, university, and maybe a family, for a time, there is a great chance that you will get exhausted. Unfortunately, I know a few guys who burned out and abandoned programming after a prolonged period of combining university, being gainfully employed, and also working as an unpaid developer intern. If they had taken an extra day off or academic leave at the university, if they had taken one day for a vacation and set aside studying if they had taken a break from their online courses for a few weeks, then perhaps everything would have turned out differently.