This is a translation of the success story from our global Java community. Danil learned Java on the Russian-language version of the course, which you study in English on CodeGym. May it become the inspiration for your further learning and maybe one day you’ll want to share your own story with us :) Well, I'd like to start my story with something inspiring and easy to understand... But once again it all boils down to typical age stereotypes that everyone talks about but you never personally feel. Hello, colleagues. My name is Danil. I'm 35 years old and I'm a programmer. The backstory of my career is similar to that of thousands and millions of others in our country, and perhaps throughout the world. I grew up, partied, and didn't think about much. Something would capture my interest. I would read about something. I thought that I understood something. Then I enrolled somewhere to study. Because I wasn't admitted somewhere else. And thinking about it now, did I want to be? Did I really understand what I wanted then? Did I have real dreams? Not just to make a ton of money, but something that I would really want to do?! No, of course not. In high school, my approach to studying was haphazard. Since I was introduced to a computer science class in the 6th grade, I've always had an affection for computers... Even an interest in programming, to dig into how things work. But now, after so many years, it seems ridiculously strange that I didn't have a desire to dig deeper back then. To understand, investigate, and feel out... Way back in 1995, we programmed in QBasic and dreamed of releasing "our own version of Windows" (which we hadn't even seen with our own eyes) in VGA mode :) That, or we dreamed of creating a computer game, like Command & Conquer or something in the vein of the quests that were fashionable at the time, but with Bill Gates as the main character. Shhhh! We looked at Pascal, but it was all so complicated there... We heard about C, but couldn't get a single program to run. We learned and played on the first x386s, using MS DOS's black window, while hefting boxes filled with floppy disks and joking about terabyte hard drives. There was all this, but there was no desire or understanding that I could dive deeper into it all. To tell the truth, in subsequent years there have been times when programming gave me an outlet and even earn a little bit of money. Over the course of my life, I had written 1 program for my thesis and a few for coursework, even though I never made this field a focus of my studies :) And all this without immersion, on sheer enthusiasm alone. Of course, I wouldn't want to work with that code now :D I enrolled in a civil engineering program and did a pretty good job of learning how to build things, but, fortunately, I didn't receive a job assignment. I was rather passive in my job search. As a result, I got a job as a mechanic for a company that maintains district heating grids. Then, again thanks to an acquaintance, I found a home services job, where I was consistently filthy for the next 12 years. And now I'm a cellphone repair technician! Of course, this isn't a bad job. It seems to offer a good income as well as room for growth... But something wasn't right. I began to feel like an amateur everywhere. There was plenty of work and regular customers, but something wasn't right. I had the feeling that I didn't fully understand how it all works. At the same time, I did understand that paying for education for 5 years would also not lead to anything. After 5 or 6 years, I was already sick and tired of repairing phones. If I didn't change my profession, I at least wanted to "go out on my own". But, of course, these passive desires were not destined to come true. Years passed, and I turned 33. Someone 10 years younger might say that this is almost old age, but someone 10 years older would certainly disagree, just as I disagree :) Yet, boredom and monotony in phone repairs drove me to get involved in various creative activities. And now I was imagining a job in design or, at worst, website development, 3D modeling, or video editing! Fortunately, this enthusiasm of mine really brought changes into my life. For a couple of years, I took on some side gigs, and won some significant prizes in creative competitions. And then I was hired in a different role, working as a designer at a local production company. Suddenly the wind of change was blowing in my life like in the famous Scorpions song. For the first time in a long time, by changing jobs, I suddenly felt like I could change anything if I wanted to. I realized that when my life wasn't fully consumed by picking apart someone's phone or talking with friends of friends of friends of friends about how to make their phones work, or pointlessly playing, World of Tanks, or sitting at work filled with fear that some careless move would force me to spend my already modest salary to replace a broken part, I realized that I could change. Change to really do what I wanted to do. And when I started working as a designer, I found out that I didn't want to do design work. Of course, drawing, designing, website administration, modeling, and video editing are all interesting professions. But they were missing something, some other level of creativity. When I saw the ad for "Java Courses" and the salary they were promising after completing the training, I realized what it was :) Yes, of course! I dreamed of becoming a programmer all my life! A salary three to four times higher than mine, and a job that requires thinking! A job that doesn't tie you to anything but your brain! That's what I've always dreamed about, but God, there was so much I didn't understand! I asked my wife, "Say, what if I become a programmer? They make 100-200 thousand." "Sure," she said, "Become one. And we'll move to Brazil. "But this isn't something that can happen in a month. It will take a year! And I'll be very busy in the evenings!" "Well, what can you do?" That's how it all began, but... For some reason, the bank didn't approve a loan for 30 thousand to train a designer who recently appeared on the job market. And, as it turned out, not in vain :) As old Oogway said to Master Shifu, there are no accidents. My desire to quickly join the ranks of programmers could have turn out sadly. Indeed, in education, it's not so much how much you pay that matters, but rather the knowledge you gain. Despite the fact that I didn't sign up for expensive courses, I didn't abandon my desire to become a programmer. Circumstances helped. Calm, pacifying circumstances that made it possible to reflect and relax. The salary! Over the next month, I scoured the entire Internet, looking for the best (and of course free!) way to become a Java programmer. Why Java? Because Java programmers have the highest salaries! That's how I ended up on CodeGym. It had an old design then, reminiscent of the once beloved Futurama cartoon. I was immediately attracted to CodeGym's 10 free levels and audaciously colorful "techie" atmosphere. With great ferver, I threw myself into my studies. I thought that after 10 levels, if I simultaneously studied using free courses on YouTube, various GeekBrains webinars and SoloLearn apps, I might be so skilled that my career would take off for sure! As I recall, I completed the first 10 levels in a week or less. It was so simple, entertaining, difficult, and simultaneously, entrancing — I can't put it into words. Of course, I also had some deep misunderstandings. Imagine how it feels to believe for almost 20 years that you understand quite well that a program is a file that executes from top to bottom... and then you encounter the fact that a program is not a file at all, but rather an entire project, and a project has a lot of files, and when you click the "Run" button (in IntelliJ IDEA, which was unfamililar at the time), the file you're looking at on the screen isn't necessarily what's being run... It was painfully incomprehensible. In fact, somewhere in the layers of old discussions on the website you can still find my angry and abusive comments about the short-sightedness of the creators, who did not think that their users might be completely new and not know anything about these new-fangled IDEs =) So I finished the 10 levels quickly, all in one go. It was so good that I almost immediately bought a 1-month extension. It was a major purchase for me. Things went smoothly at first, but subsequent levels were much harder. What's more, I realized that up to Level 10 the tasks were relatively simple and I still didn't have a deep understanding of "modern programming". A month passed, but I didn't make significant progress. I probably got closer to Level 20 or something like that. But every day I got the feeling that I wasn't cutting it. I had invested money, but I couldn't justify it. Under the weight of my weaknesses, I gave up my studies for a month or two. Only occasionally did I watch any interesting videos on the topic, and they lacked details. New Year 2017 drew near. And with it, a huge gift for all CodeGym students — a huge 50% discount off the regular price. The self-torment subsided, and the dream lived on. I paid for a subscription. It wasn't an astronomical amount of money, but it was substantial and had to be justified. Immediately after the New Year holidays, I set to work with renewed vigor. I remember that everything went well until I came across a seemingly simple task that was nevertheless very difficult for a beginner with my background. I believe it was called "Restaurant". It wouldn't yield to washing or scrubbing. It wouldn't yield to prolonged study or hopping up and down. Classes and methods floated around in my head, tangling and clinging to one another, and I certainly couldn't tell one from the next. I probably wrestled with it for a week. My old fear was already looming at the edge of my mind, and only the 6,000 rubles I had already plunked down stopped me from quitting the game I had started... And then a great tragedy happened in my family... Huge and, as always, unexpected... For a whole week, I couldn't concentrate on anything. I couldn't do anything, think anything, live... I simply stopped at some place in the universe and flew away to where we all fly... I'm glad, dear reader, that you made it this far. Because this is the most important part of my story. It's the main reason why I can now say that I'm living instead of existing. And though it's sad, every end is a beginning. And this was my beginning. My real beginning. After a week of numbness and apathy, my melancholy was replaced by a desire to live. A thought entered my head. Every parent wants his children to live. For children to live while they can. And in doing so, our parents live on in us... When I returned to the "Restaurant" task, I suddenly felt amazingly at ease. Classes using classes that instantiate classes and implement interfaces suddenly seemed as simple as unraveling knotted ropes. You pull one and see what moves — there it is! The problem was due to a single typo! :) I recommend that everyone untangle this "nourishing" knot. Later, the process became harder, much harder. But it no longer seemed like the end of the world or a prison sentence. Every puzzle had a solution. If one couldn't be solved for a long time, I could set it aside and return to it later with renewed energy. And then it wouldn't be able to withstand me! Of course, I battled with the validators and my head boiled from the incomprehensibility of it all, but everything began to fit into some sort of structure. It was as if everything transformed: solid granite turned into sandstone. And any block of sandstone can be worn down — it's only a matter of time. Another 4 or 5 months passed. And now I felt strong. I had worked through numerous tests of my knowledge of Java Core, brainteasers, and loads of videos on a variety of programming topics (it's so nice to have the Internet now - you can find everything online!) I had read the success stories, some encouraging or some not so much, but they were all intriguing and pulled back the curtain from the mysterious IT field. Maybe I could succeed now, too? At some point, I was literally dizzy from all these stories. Heeding the numerous suggestions, I decided to go to interviews. Almost every success story recommended to go through at least a dozen before finding your destiny. I took a look at a well-known job search website. I didn't think there would be high demand for programmers in my small city of Izhevsk. But after looking at a rather interesting listing for a junior developer position, I decided to take a chance. I indicated a modest required salary in my resume and applied for the position. How surprised I was when on Monday (if I'm not mistaken, I submitted my resume on Friday), recruiters started calling me! What's more, they weren't even from the company that I sent my resume to. Of course, I assumed that someone might find my resume and consider it interesting, but I was mentally prepared to attend interviews no more than once a month. The sudden attention frightened me so much that I quickly hid my resume. But I was curious, so I decided to go to both interviews that I managed to schedule. I was entirely unprepared technically for the first interview. The success stories said that interviews are divided into stages: the first is usually just about getting to know each other, without testing. Still, I wasn't expecting success and prepared my mind above all to not be upset by a rejection or maybe a bewildered "With your experience, how dare you?!" I had never been to the offices of any IT companies. I had only seen pictures of the "fairy tale buildings" owned by Google, Facebook, etc. Of course, I didn't expect to see anything like that. It seemed that my remote neck of the woods would have some oppressed bespectacled guys sitting at wooden chairs, buried behind CRT monitors with anti-glare screen protectors. But no. Of course, I didn't see the magnificence and glamor of Google there, but the fooseball table in the office did impress me. In a sense, it challenged my entire previous working life, in which the number of hours worked related directly to how much money I received. A quick interview with HR, then a questionnaire completed by a trembling hand — I was not ready for testing. Then a short conversation with the head of the department and suddenly they were offering me a job. Oh, yes! Despite the fact that I didn't answer all the questions on the test, my overall knowledge of Java was quite good, so I was immediately offered a job. The offered salary was a bit more than I requested in my resume. Furthermore, after a probation period, it was set to rise. And then the pay raises would accumulate, leading to even faster salary growth! This tempting thought made me a little crazy. But it also emboldened me. I didn't make any deliberate preparations for my next interview. But the success stories also teach us that we must not immediately accept the first job offer. There is some truth in this. So, of course, I didn't cancel my appointment with the second recruiter. I went to the second interview with a job offer in hand. But I'm a little ashamed of my self-confidence at this interview. The simplest questions, which seem utterly trival to me now, totally muddled my head. I was crushed, exhausted, and (OMG!) even mixed up HTML and HTTP when talking with the leads! After crashing and burning like this, I was no longer sure that I was ready to become a programmer. The HR department at the company where I went for my first interview insistently asked for an answer and sent me the offer in writing. They were even willing to wait for me to return from a very long-planned vacation, but I still hesitated. After all, I still had to inform my new former boss that his new former designer was leaving him, which would be entirely unexpected for me and for him. But I still couldn't bring myself to turn down the offer. I accepted, spoke with my new former boss, and everything went smoothly. That's how I became a junior test automation engineer. Perhaps someone will say that test automation engineers aren't programmers at all, and their work must be boring. But I must completely disagree with that. I myself once thought that testers are programmers who don't have what it takes to become "full-fledged" programmers. I hope none of my coworkers will beat me if they read these words and recognize me! Hello to you all, by the way! The reality proved to be entirely different. When I took the first step into this discipline and started to really develop parts of the testing framework, I found inspiration. I felt like a programmer who not only likes writing programs, but also knows where critical errors may be hiding in them. I understood how CodeGym's validators work and why they don't always seem logical. I became aware of the many technical nuances of programming, and I plunged into this new world more smoothly than if I had immediately entered IT as a junior software developer. You ask if I can now become a "full-fledged" programmer? Easy! But now I have more choices: I can choose a job based on not only the salary, but also the team, the situation, and the project. In addition to that aha moment, a completely different world of employment unfolded around me. Employment wanted me. It wanted to wine and dine me, entertain me, and let me relax, all while paying me a salary. These first six months were like in a dream. I just couldn't believe that for decades, while I was stagnating at my old jobs, all this had developed and flourished. And of course it was waiting for me! And for anyone who strives to get here :) It was also amazing to see how dozens of my coworkers for some reason didn't notice all these riches enjoyed in the IT world, this charming life right here in front of them. As if all this so commonplace and ubiquitous that there's nothing to notice. In this field, you really live, really work, and really make money. As for your coworkers, each will have a unique personality — they will be intellectuals and enthusiastic people. Many of them will be creative and absolutely all of them will be just nice people! I can hardly convey that cosmos of feelings in this tiny paragraph. I just really hope that my readers will believe how everything has become real and prosperous for me in this new field. And I came to it myself, deliberately. I mastered all the relevant technologies in a year. Once again, I reassessed my attitude toward learning programming in general and Java in particular. Recruiters reached out to dozens of times, something that had never happened before! For me, life began to become an unbelievable joy — I received real pleasure from work and then came home and happily continued to learn new things. At this point, I was 34. In the preceding years, I sometimes clearly sensed that my brain was withering away. My memory was slipping. I would forget words. Now my thinking is becoming rigorous and unrelenting. But it's amazing! When I began to study a topic as broad as programming, my brain contracted at first, as if was being compressed, but then it seemed to gradually expand. Thinking became easy and quick. In recent years, such grandiose ideas have come into my mind that I have to wonder if I came up with them myself or unconsciously picked them up somewhere. At my new workplace, I immediately gained fifty coworkers in an open space. I admit, I initially panicked as I tried to remember everyone's role and name. But my brain was already accustomed to quick learning, and very soon I knew everyone's name and all sorts of other details that, like thorns, stuck into my mental model of each of my coworkers (yes, OOP transfers very easily into real life and vice versa). It all continues to amaze me to this day. With ease that I find hard to comprehend, I wrote a large full-fledged desktop application (I had never completed a large project before), for which I received a nice bonus. I suddenly began to understand design patterns and even understand other people's programs simply by looking at their code. All those mysterious magical words — Spring, JDBC, Hibernate, Git, SQL and hundreds of others — gained meaning and became clear. Any programming language, not just Java, and not just languages with similar syntax, suddenly became clear. It was like I couldn't read and then suddenly I could. I sensed how deeply I was immersed in my new world, as if I had sunk roots into every subject surrounding me. Thanks to my job, new knowledge and my own hard work, I began to look differently at everything. I discovered how easy it is to realize your plans and achieve anything you want if you exert very specific and logical efforts. And for me, this is the most amazing part of my rapid transformation. It's not that I received some huge salary, nor is it that I realized a childhood dream. The most amazing thing is that this ambition gave me great strength and the confidence that my life could be changed for the better in every way. Sometimes I run into my old coworkers, who are also intelligent people. I say, look, for six months of effort, I get more than you get in ten years! Come join me in IT! And they say, "No, what are you talking about? I'm not that smart. I can't learn all this." But I believe in people, because I believed in myself and proved that it can be done. I'm an entirely ordinary person. I achieved it, which means other ordinary people can achieve anything! That said, it's always harder to convince someone else than to persuade yourself and act yourself. But I believe in you, dear reader. You're like me, maybe even better. I was able to and so can you if you want! At this point, I hope no one has fallen asleep or died from my lengthy introduction. In truth, I just wanted to share my observations and everything that helped me to grow so quickly and, I think, rather effectively. But for me, advice without emotion seem divorced from life and disconnected from my personal difficulties. So finally, here I turn to what matters most principles that I believe will make your studies as fast and effective as possible (I hope I don't forget any of my principle that I'm always trying to pass on to my Padawans):
- Use CodeGym. It has shortcomings, of course. What website doesn't? Learning on CodeGym isn't so fast and magical as what you're promised by other glamorous courses. But with CodeGym, you'll get the most important thing, something not available anywhere else: you will learn how to understand code. A lot of code. Good and otherwise. Back when I was studying, the courses didn't have Java 8 and all these sparkly features like lambda expressions and streams. But I learned 1.7 very well.
- Use lots of sources. Don't limit yourself to one source for anything. I have plenty of praise for CodeGym, but many of the topics here are unclear. Sometimes the particular explanation that a person can understand depends a lot on that person. It may be necessary to read the lesson, then read a little Horstmann, read a little Eckel, and only then does the lightbulb come on: ah! that's how it works! Or maybe one of them will be clear to you. By the way, in my view, Horstmann is better than Eckel, and Bloch is simply incomparable (in the original) :)
- Learn IntelliJ IDEA key combinations. In my opinion, this is absolutely the best IDE of all. And I admit that I really miss the IDE's shortcuts in other programs. Do two important things: Help -> Keymap reference (Print it, fold it in half, staple it, and put it on your desk) and use Ctrl+Alt+L more often in your code =) I especially like to repeat this advice to my colleagues.
- Start using Git as soon as possible. This is a really a necessary skill. The sooner you bang your head against it and get to know it, the better. I recommend using IDEA's built-in plugin. I plan to make a detailed video tutorial on how to do all this. Even more importantly, I was once contacted by a very large company that had simply found my GitHub profile, which at the time was just a project with CodeGym solutions.
- Don't be afraid to admit that you don't know something. Be afraid of not wanting to know. As I wrote earlier, the relatively simple terminology of classes, methods, functions, properties, and fields created a terrible mess in my brain, but over time everything fell into place. Sometimes you just need time to digest things that are unclear.
- Don't be afraid to make mistakes. Once you've made a mistake, fix it and try not to repeat it. The only real mistakes are things that cannot be fixed.
- Walk. You may think your wasting your time, but you're not. An hour of walking to (and from!) work can be incredibly effective for assimilating new information. Of course, it's best to put in your earbuds and listen to an IT-themed audiobook or podcast along the way. I just can't imagine being able to learn something so purposefully if I hadn't listened to "The Willpower Instinct: How Self-Control Works, Why It Matters, and What You Can Do to Get More of It" by the incomparable Kelly McGonigal during these walks.
- Take more breaks away from the computer. Personally, I use WorkRave, a program that drives me away from my computer for a 5-minute break every 25 minutes. Maybe this is too often? But each person's health is unique and at some point you begin to understand what you value more: an extra minute to finish writing that loop, or a pain-free back, wrists, and neck. By the way, the very popular Pomodoro productivity-boosting technique is based on exactly this timing.
- Exercise regularly. For me, after stepping away for a walk, it was a great pleasure to sit down at my laptop and devote half an hour to English and two hours to CodeGym tasks. When I encountered something incomprehensible, I watched videos and read relevant articles until the topic became clear. I especially remember trying to understand generics (when I first encountered a generics problem, I didn't even know what they were called). Despite believing that I understood what they are and how the work, a year later I realized that I did not. And in general, I'm not convinced that all the nuances are understood by many people who say they do. Anyway, this is how my weekdays were filled to the brim with a desire to achieve my goal. But I found it difficult to plan out my weekends and had to constantly drive myself onward. Of course, during this time I was borrowing money from my family, with whom I hardly spent any time, but now I've recouped these costs. My evenings are filled with family time and I even have time to write something to post on CodeGym =)
- Don't deny yourself the pleasure of studying related incomprehensible technologies. UML? HTML? XML? CSS? XPATH? Maven? Hosting? Docker? TCP? How does the CPU add numbers? Yes! Thank you, sir, may I have another! :)
GO TO FULL VERSION