PageSourceSearch

https://dmitripavlutin.com/component---src-components-pages-post-f…g-climbing-index-md-aef03703366c72cf2b6a.js

js dmitripavlutin.com collected 2026-10-02 07:26:40 UTC 20,502 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkdmitri_pavlutin_blog=self.webpackChunkdmitri_pavlutin_blog||[]).push([[6626],{8841:function(e,t,a){a.r(t),a.d(t,{default:function(){return d}});var n=a(7294),A=a(1151);function i(e){const t=Object.assign({p:"p",a:"a",h2:"h2",span:"span",em:"em"},(0,A.ah)(),e.components);return n.createElement(n.Fragment,null,n.createElement(t.p,null,"The journey of becoming better in any profession is tough. Mastering requires time, dedication, focus, and choosing the right learning directions."),"\n",n.createElement(t.p,null,"In this post, I will describe the approach that I use in my journey to become a better software developer."),"\n",n.createElement(t.p,null,"I want to be honest: this post doesn't contain any shortcuts or tricks. Because generally ",n.createElement(t.a,{href:"http://www.carlpullein.com/blog/good-news-there-are-no-shortcuts-to-success-only-hard-work-and-a-passion-to-learn-and-we-all-have-that-ability/11/4/2018",target:"_blank",rel:"noopener noreferrer"},"there are no shortcuts to success"),"."),"\n",n.createElement(t.p,null,"What's more important, you will understand the importance of choosing the right directions."),"\n",n.createElement(t.h2,{id:"1-shallow-knowledge",style:{position:"relative"}},n.createElement(t.a,{href:"#1-shallow-knowledge","aria-label":"1 shallow knowledge permalink",className:"anchor before"},n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"1. Shallow knowledge"),"\n",n.createElement(t.p,null,"Probably the most difficult stage of becoming a software developer is the beginning. If you've just graduated, you have about 5-10% of the knowledge required for writing real-world applications."),"\n",n.createElement(t.p,null,"I was lucky to get a job while studying at the university. Anyways, a few years I struggled because of web development shallow knowledge. It allowed me to keep my job, have income, but nothing more."),"\n",n.createElement(t.p,null,"Something wasn't right. I felt a lack of deep knowledge. But the idea that things were ok made me agree with the level of knowledge I had."),"\n",n.createElement(t.p,null,"Somehow, everything went well enough until the team I was working with got a big web-based Java project (for a Romanian government agency). The application used Java on the server side, JavaScript libraries and HTML/CSS on the client side."),"\n",n.createElement(t.p,null,"As usual, my team was productive at the beginning. But as time passed by, the functionality of the application grew, and the shallow knowledge of the whole team (including myself) started to manifest itself."),"\n",n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<span\n      class="gatsby-resp-image-wrapper"\n      style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 560px; "\n    >\n      <a\n    class="gatsby-resp-image-link"\n    href="/static/f8b31b51651f85b92aa63bb3ad07fd9d/7bdc5/sinking-ship.jpg"\n    style="display: block"\n    target="_blank"\n    rel="noopener"\n  >\n    <span\n    class="gatsby-resp-image-background-image"\n    style="padding-bottom: 66.42857142857143%; position: relative; bottom: 0; left: 0; background-image: url(\'data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMFAv/EABUBAQEAAAAAAAAAAAAAAAAAAAAD/9oADAMBAAIQAxAAAAFup7KTpksP/8QAGhAAAwADAQAAAAAAAAAAAAAAAAECAxETIf/aAAgBAQABBQLrB2xpTcUl6NaNn//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/Aaf/xAAZEAACAwEAAAAAAAAAAAAAAAAAERAxQZH/2gAIAQEABj8CN4NzR//EABkQAQADAQEAAAAAAAAAAAAAAAEAESExUf/aAAgBAQABPyEB2+1hGyWAUEv3JygL2JI//9oADAMBAAIAAwAAABD0D//EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCIiP/EABgRAAMBAQAAAAAAAAAAAAAAAAABEUFR/9oACAECAQE/EKelfT//xAAcEAEBAAICAwAAAAAAAAAAAAABEQAhMWFBUXH/2gAIAQEAAT8QSinQo0nPRjRToTcO7Gx0fTLG0rMlkaPLMhm2vef/2Q==\'); background-size: cover; display: block;"\n  ></span>\n  <img\n        class="gatsby-resp-image-image"\n        alt="Mistakes in software development"\n        title=""\n        src="/static/f8b31b51651f85b92aa63bb3ad07fd9d/9605b/sinking-ship.jpg"\n        srcset="/static/f8b31b51651f85b92aa63bb3ad07fd9d/c496c/sinking-ship.jpg 140w,\n/static/f8b31b51651f85b92aa63bb3ad07fd9d/cbbf7/sinking-ship.jpg 280w,\n/static/f8b31b51651f85b92aa63bb3ad07fd9d/9605b/sinking-ship.jpg 560w,\n/static/f8b31b51651f85b92aa63bb3ad07fd9d/97efb/sinking-ship.jpg 840w,\n/static/f8b31b51651f85b92aa63bb3ad07fd9d/8ae37/sinking-ship.jpg 1120w,\n/static/f8b31b51651f85b92aa63bb3ad07fd9d/7bdc5/sinking-ship.jpg 1280w"\n        sizes="(max-width: 560px) 100v
1w, 560px"\n        style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"\n        loading="lazy"\n        decoding="async"\n      />\n  </a>\n    </span>'}}),"\n",n.createElement(t.p,null,"After about 1 year in the project, it was increasingly hard to add new features. The bugs were manifesting themselves too often. I remember myself hours and days just fixing bugs. Eventually, the project failed."),"\n",n.createElement(t.p,null,"Not that I didn't want the project to succeed, it was the opposite. But I concluded that the shallow knowledge, lack of deliberate learning towards the programming language and tech stack are the source of the problems."),"\n",n.createElement(t.p,null,"I decided to dig into Frontend."),"\n",n.createElement(t.h2,{id:"2-i-started-digging",style:{position:"relative"}},n.createElement(t.a,{href:"#2-i-started-digging","aria-label":"2 i started digging permalink",className:"anchor before"},n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"2. I started digging"),"\n",n.createElement(t.p,null,"The first thing is to understand better the programming language you're using every day. In my case, it was JavaScript."),"\n",n.createElement(t.p,null,"I didn't want to waste my time on superficial learning. I decided to dig as deep as I can."),"\n",n.createElement(t.p,null,"A good book I found on JavaScript was ",n.createElement(t.a,{href:"https://www.amazon.com/JavaScript-Definitive-Guide-Activate-Guides/dp/0596805527",target:"_blank",rel:"noopener noreferrer"},'"JavaScript: The Definitive Guide"'),". It took me more than 6 months to dig into JavaScript specifics, try every code snippet, re-read multiple times the difficult parts."),"\n",n.createElement(t.p,null,"I solidified more my knowledge using ",n.createElement(t.a,{href:"https://github.com/getify/You-Dont-Know-JS",target:"_blank",rel:"noopener noreferrer"},"YDKJS")," series."),"\n",n.createElement(t.p,null,"Then followed ",n.createElement(t.a,{href:"https://www.amazon.com/CSS-Missing-David-Sawyer-McFarland/dp/1491918055",target:"_blank",rel:"noopener noreferrer"},'"CSS: The Missing Manual"'),". CSS is known for its property for being hard to master. That's true!"),"\n",n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<span\n      class="gatsby-resp-image-wrapper"\n      style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 560px; "\n    >\n      <a\n    class="gatsby-resp-image-link"\n    href="/static/6c20e3dabffbd640011ea2dc5da2b977/5cdd9/dig3.jpg"\n    style="display: block"\n    target="_blank"\n    rel="noopener"\n  >\n    <span\n    class="gatsby-resp-image-background-image"\n    style="padding-bottom: 56.42857142857143%; position: relative; bottom: 0; left: 0; background-image: url(\'data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIEAQP/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAGlGzOupID/AP/EABwQAAAGAwAAAAAAAAAAAAAAAAABAgMEERITI//aAAgBAQABBQIhItEdmtSQ8fNlR4f/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPwGI/8QAFhEBAQEAAAAAAAAAAAAAAAAAABES/9oACAECAQE/AdK//8QAHRAAAgAHAQAAAAAAAAAAAAAAAAECEBMhQXGB8f/aAAgBAQAGPwIdPwhzaXUaZ//EABsQAQADAQADAAAAAAAAAAAAAAEAESExQVGh/9oACAEBAAE/IdFPIt3b1PCBv06VuKJn2H0lwXiBP//aAAwDAQACAAMAAAAQvy//xAAXEQEAAwAAAAAAAAAAAAAAAAAAASEx/9oACAEDAQE/EMoo/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARIf/aAAgBAgEBPxB6l7f/xAAcEAEAAgIDAQAAAAAAAAAAAAABACERMUFhcYH/2gAIAQEAAT8QCQ9kiwM0zvR+0TUYFBLzbEq4xJpAxsaoHTkY0T//2Q==\'); background-size: cover; display: block;"\n  ></span>\n  <img\n        class="gatsby-resp-image-image"\n        alt="Software development digging"\n        title=""\n        src="/static/6c20e3dabffbd640011ea2dc5da2b977/9605b/dig3.jpg"\n        srcset="/static/6c20e3dabffbd640011ea2dc5da2b977/c496c/dig3.jpg 140w,\n/static/6c20e3dabffbd640011ea2dc5da2b977/cbbf7/dig3.jpg 280w,\n/static/6c20e3dabffbd640011ea2dc5da2b977/9605b/dig3.jpg 560w,\n/static/6c20e3dabffbd640011ea2dc5da2b977/97efb/dig3.jpg 840w,\n/static/6c20e3dabffbd640011ea2dc5da2b977/8ae37/dig3.jpg 1120w,\n/static/6c20e3dabffbd640011ea2dc5da2b977/5cdd9/dig3.jpg 1920w"\n        sizes="(max-width: 560px) 100v
1w, 560px"\n        style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"\n        loading="lazy"\n        decoding="async"\n      />\n  </a>\n    </span>'}}),"\n",n.createElement(t.p,null,"While moving slowly in understanding JavaScript and Frontend stack, often I felt a huge relief. The concepts I've been struggling so much time in the past are now so easy to use."),"\n",n.createElement(t.p,null,"Overall, did I get the results I wanted? Partially."),"\n",n.createElement(t.p,null,"I knew how to use efficiently the programming language. I made lots of performance optimizations. I wrote better applications by applying my Frontend knowledge. But still... I was missing something important."),"\n",n.createElement(t.p,null,"The problem manifests itself by increasing difficulty when adding new components to the application. I felt like I was thrown back to the beginning. It was a bit disappointing."),"\n",n.createElement(t.p,null,"Turns out, if you dig too much into low level implementation details, you don't develop a vision of the whole picture. You cannot efficiently design functions, classes, and components that are well structured and loosely interact with each other."),"\n",n.createElement(t.p,null,"Ok, I have to climb through the abstract principles of good system design."),"\n",n.createElement(t.h2,{id:"3-i-started-climbing",style:{position:"relative"}},n.createElement(t.a,{href:"#3-i-started-climbing","aria-label":"3 i started climbing permalink",className:"anchor before"},n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"3. I started climbing"),"\n",n.createElement(t.p,null,"Again, I've decided to read a detailed book on how to organize efficiently the system components."),"\n",n.createElement(t.p,null,"The problem with abstract principles is that they are... too abstract. The brain cannot visualize them, cannot attach them to something material. You might read about a particular principle (e.g. ",n.createElement(t.a,{href:"https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle",target:"_blank",rel:"noopener noreferrer"},"Open/Closed Principle"),"), but when exactly to use it within your application?"),"\n",n.createElement(t.p,null,"I've started my journey of climbing by reading ",n.createElement(t.a,{href:"https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882",target:"_blank",rel:"noopener noreferrer"},'"Clean Code"')," page by page. It provides a good grasp on how to structure your functions and classes, how to make them focused on a single task."),"\n",n.createElement(t.p,null,"Then I've continued my journey by understanding coding recipes: the design patterns. I particularly enjoyed ",n.createElement(t.a,{href:"https://www.amazon.com/Pro-JavaScript-Design-Patterns-Object-Oriented/dp/159059908X",target:"_blank",rel:"noopener noreferrer"},"Pro JavaScript Design Patterns"),"."),"\n",n.createElement(t.p,null,"Again, it wasn't enough for me. The next book ",n.createElement(t.a,{href:"https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164",target:"_blank",rel:"noopener noreferrer"},'"Clean Architecture"')," wasn't easy. I didn't want to miss any detail, so I read the book page by page for about 1 year. At least for me, understanding the principles of clean architecture is hard."),"\n",n.createElement(t.p,null,"I repeat the principles of good design (",n.createElement(t.a,{href:"https://en.wikipedia.org/wiki/SOLID",target:"_blank",rel:"noopener noreferrer"},"SOLID"),", ",n.createElement(t.a,{href:"https://en.wikipedia.org/wiki/Don%27t_repeat_yourself",target:"_blank",rel:"noopener noreferrer"},"DRY"),", ",n.createElement(t.a,{href:"https://en.wikipedia.org/wiki/Separation_of_concerns",target:"_blank",rel:"noopener noreferrer"},"SoC"),", etc) over and over again. Having them always circulating in my head while coding helps to identify the places to use them."),"\n",n.createElement(t.p,null,"The next altitude I want to conquer is ",n.createElement(t.a,{href:"https://www.amazon.com/Software-Architecture-Practice-3rd-Engineering/dp/0321815734",target:"_blank",rel:"noopener noreferrer"},'"Software Architecture in Practice"')," book and understanding ",n.createElement(t.a,{href:"https://en.wikipedia.org/wiki/Domain-driven_design",target:"_blank",rel:"noopener noreferrer"},"Domain-Driven Design"),"."),"\n",n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<span\n      class="gatsby-resp-image-wrapper"\n      style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 560px; "\n    >\n      <a\n    class="gatsby-resp-image-link"\n    href="/static/84518283b03868ab62376fa6438953e0/5cdd9/climb.jpg"\n    style="display: block"\n    target="_blank"\n    rel="noopener"\n  >\n    <span\n    class="gatsby-resp-image-background-image"\n    style="padding-bottom: 66.42857142857143%; position: relative; bottom: 0; left: 0; background-image: url(\'data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAMC/9oADAMBAAIQAxAAAAG1OQljoM8Ov//EABwQAAIBBQEAAAAAAAAAAAAAAAIDAQAQEhMhI//aAAgBAQABBQIWcIsYe302nFE5k2//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAWEQEBAQAAAAAAAAAAAAAAAAAAETH/2gAIAQIBAT8BxX//xAAbEAEAAgIDAAAAAAAAAAAAAAABAAIQIREiMf/aAAgBAQAGPwLUVHidWxPZuzj/xAAYEAEBAQEBAAAAAAAAAAAAAAABEQAxQf/aAAgBAQABPyEWacQsHrqxEIhmSTqood3f/9oADAMBAAIAAwAAABBUP//EABYRAQEBAAAAAAAAAAAAAAAAAAEAMf/aAAgBAwEBPxAF2Av/xAAXE
1QEBAQEAAAAAAAAAAAAAAAABABEh/9oACAECAQE/EHOiUt//xAAbEAEBAAMAAwAAAAAAAAAAAAABEQAhMYGR8P/aAAgBAQABPxBxJdalPGdQphMKBCgS/OHVK9hhfXgXXrGpVq7Vz//Z\'); background-size: cover; display: block;"\n  ></span>\n  <img\n        class="gatsby-resp-image-image"\n        alt="Software development climbing"\n        title=""\n        src="/static/84518283b03868ab62376fa6438953e0/9605b/climb.jpg"\n        srcset="/static/84518283b03868ab62376fa6438953e0/c496c/climb.jpg 140w,\n/static/84518283b03868ab62376fa6438953e0/cbbf7/climb.jpg 280w,\n/static/84518283b03868ab62376fa6438953e0/9605b/climb.jpg 560w,\n/static/84518283b03868ab62376fa6438953e0/97efb/climb.jpg 840w,\n/static/84518283b03868ab62376fa6438953e0/8ae37/climb.jpg 1120w,\n/static/84518283b03868ab62376fa6438953e0/5cdd9/climb.jpg 1920w"\n        sizes="(max-width: 560px) 100vw, 560px"\n        style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"\n        loading="lazy"\n        decoding="async"\n      />\n  </a>\n    </span>'}}),"\n",n.createElement(t.p,null,"Step by step I work out the ability to see and fix structural problems before they get into the code. Or even if they get, refactor until I have better structuring. Slowly I master how to write better applications. I like this feeling."),"\n",n.createElement(t.p,null,"What defines a good software? The software that is ",n.createElement(t.em,null,"soft"),", i.e. easy to change, reuse and maintain. That's the main lesson I learned from climbing ",n.createElement(t.a,{href:"https://dev.to/luminousmen/what-are-the-best-software-engineering-principles--3p8n",target:"_blank",rel:"noopener noreferrer"},"good design principles"),"."),"\n",n.createElement(t.h2,{id:"4-conclusion",style:{position:"relative"}},n.createElement(t.a,{href:"#4-conclusion","aria-label":"4 conclusion permalink",className:"anchor before"},n.createElement(t.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"4. Conclusion"),"\n",n.createElement(t.p,null,"The journey of becoming a better software developer is long and challenging. There are no shortcuts. Who said is going to be easy?"),"\n",n.createElement(t.p,null,"Shallow knowledge lets you stay in your comfort zone. But the disappointment of writing crappy code is worse than the comfort zone pleasure."),"\n",n.createElement(t.p,null,"To become a better developer, dig into learning the details of your tech stack. It makes you productive at a low level."),"\n",n.createElement(t.p,null,"At the same time climb the abstract principles of good system design. They're harder to master, but they don't change often. Good design principles make you productive at a high level."),"\n",n.createElement(t.p,null,"As long as you're striving to become better, digging and climbing never ends."),"\n",n.createElement(t.p,null,"The books I've chosen for my journey might work for you or not. That's ok. Choose the ones that you like, and go for it. The sooner, the better!"),"\n",n.createElement(t.p,null,n.createElement(t.em,null,"What approach do you use to become a better software developer? Please write a comment below!")))}var r=function(e){void 0===e&&(e={});const{wrapper:t}=Object.assign({},(0,A.ah)(),e.components);return t?n.createElement(t,e,n.createElement(i,e)):i(e)},o=a(12),l=a(5319),s=a(5893);function c(e){let{data:t,children:a}=e;const{featured:{popularPostsByCategory:n}}=t.site.siteMetadata,{mdx:A,popularPostsMarkdown:i}=t,r={...A.frontmatter,children:a,thumbnail:A.frontmatter.thumbnail.childImageSharp.gatsbyImageData,tableOfContents:A.tableOfContents},c=A.internal.contentFilePath.split("/").slice(-3).join("/"),d=i.edges.map(l.sN),g=n.map((e=>{let{category:t,slugs:a}=e;return{category:t,plainPosts:a.map((e=>d.find((t=>{let{slug:a}=t;return e===a}))))}}));return(0,s.jsx)(o.Z,{postRelativePath:c,post:r,popularPostsByCategory:g})}function d(e){return n.createElement(c,e,n.createElement(r,e))}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.