Книги, які повинні прочитати молодші розробники

Ці книги "в основному є чіт-кодами" для підвищення рівня ваших навичок та знань як розробника.

Незалежно від того, ви новий розробник або ви досить досвідчені як програміст, ви зрозумієте, що кількість часу, який ви пропрацювали на роботі, - не найкращий спосіб визначити свою майстерність та знання програміста (Я знаю, скажіть це вербувальникам?).

Що ви робите у вільний час і як ви вирішили взяти навчання у свої руки, це те, що врешті-решт визначить ваш успіх у цій галузі. Ось чому для нас, як розробників, так важливо прийняти спосіб мислення.

Є кілька чудових способів навчитися та вдосконалюватися як розробник. Деякі з цих способів - це парне програмування, онлайн-курси, зустрічі, досвід роботи, побудова проектів та пошук наставника.

Один із моїх улюблених способів вчитися - відкрити добре написану книгу та спробувати поглинути щось із тих, хто провів багато років знань та розуміння постійного артефакту.

Ось мої особисті рекомендації, які я думаю, що всі розробники (особливо молодші) повинні в якийсь момент прочитати. Усі ці книги високо оцінені професіоналами у нашій галузі та можуть надати глибокий вплив на якість вашої роботи та швидкість розвитку та навчання.

Деякі з них відхиляються від технічних деталей і більше зосереджуються на тому, щоб дати вам практичні правила щодо того, що означає бути хорошим розробником на міжособистісному та професійному рівні.

Розкриття інформації: Деякі з посилань нижче є афілійованими. Але я додав лише ті книги, які, на мою думку, корисні для молодшого розробника.

1. Чистий код

Роберт К. Мартін (дядько Боб)

Після того, як ви подолаєте основні виклики розробки та розберетеся, як писати код для вирішення проблем, було б непогано поглянути на цю книгу. Виявляється, змусити код працювати вперше - це насправді проста частина. Важким є те, що ваш код добре читається, щоб інші могли зрозуміти його та змінити в майбутньому.

Пам'ятаєте, коли востаннє вам доводилось читати такий код?

function calculateIt (a, b) { if (a.delta < b.element.x) { var x = b.element.x; return x - b.delta.x } else { var y = b.next.y; var h = b.element.y * 2; return y - h } }

Хто знає, що це насправді робить. Код, подібний до цього, може спрацювати, але в той момент, коли нам потрібно його змінити, ми повинні сподіватися, що автор коду все ще в компанії і молитися, щоб вони якось змогли розшифрувати те, що вони написали потенційно багато років тому.

Коли пильної уваги не приділяється написанню коду, який читається і підтримується, ми отримуємо такі кишені коду, до якого всі бояться доторкнутися, і якщо він коли-небудь зламається, у нас трапляються проблеми.

“Чистий код” дядька Боба вчить вас, як визначити, як виглядає чистий код порівняно з поганим кодом, і вчить, як перетворити його на хороший код. Подібне завдання для більшості звучить тривіально, але ви здивуєтесь тому, як перетворення лише кількох принципів чистого дизайну програмного забезпечення у звички може допомогти вам написати набагато більш професійний та масштабований код.

Ви знаєте, ми майстри програмного забезпечення. Будівництво будинку мало чим відрізняється від побудови додатка в принципі. Нам потрібно звернути увагу на деталі, інакше все це може стати дуже дорогим для виправлення в майбутньому, якщо не зробити це вперше.

2. Чистий кодер

Роберт К. Мартін (дядько Боб)

Ця книга не обов’язково є технічною, оскільки вона навчить вас бути професіоналом у цій галузі. Професіонали - це ті, хто, зіткнувшись із проблемами, невизначеністю та тиском, і надалі буде ставитися до створення програмного забезпечення як до ремесла і буде твердо налаштований дотримуватися своїх професійних цінностей.

Clean Coder наповнений практичними порадами щодо оцінки, рефакторингу, тестування, вирішення конфліктів, графіків, уникнення вигорання та багато іншого. Довірена порада того, хто десятки років займався цим.

Одне з найкращих речей, яке вона навчає, - це те, як бути чесним як розробник, коли говорити «Ні» та як це говорити.

Книга про професіоналізм.

3. Рефакторинг

Мартін Фаулер

Мартін Фаулер - один із моїх улюблених авторів. Перша причина полягає в тому, що він веселий. Його підхід до написання програмних книг є безпомилково "Фаулер". Інша причина полягає в тому, що він неймовірно добре пояснює складні теми, і робить це дуже просто, таким чином, щоб ви не втомили вас як читача.

«Рефакторинг» - це книга, яку творець Ruby on Rails одного разу сказав, що вам слід «прочитати, перш ніж писати черговий рядок коду». Фаулер проведе вас через рефакторинг простого додатку, познайомить вас з низкою методів, які він накопичив і склав за роки своїх консультацій.

Фаулер показує, як переходити між кодуванням та рефакторингом, як часто ви повинні фіксувати свій код та коли ви повинні писати свої тести. Настійно рекомендується. Останню версію цієї книги було оновлено, щоб представити приклади в JavaScript, що стало додатковим плюсом для мене, оскільки це моя улюблена мова.

4. Шаблони проектування: Елементи багаторазового об'єктно-орієнтованого програмного забезпечення

Еріха Гамми, Річарда Хелма, Ральфа Джонсона та Джона Вліссідеса

Це основна книга про шаблони дизайну. Що таке шаблони дизайну, запитаєте ви? Шаблони проектування - це добре відомі рішення загальнопоширених проблем у розробці програмного забезпечення. Якщо ви знайомі з моделями, ви виявите, що зможете значно скоротити час, необхідний для викладання рішень цих проблем.

Хороша обізнаність із шаблонами дизайну також дозволяє ефективно передавати свої рішення іншим розробникам.

"Так, я щойно використав Фасад поверх будь-якого адаптера бази даних, який завантажується зі Стратегії".

“Ага! Зрозуміло ".

Так, це старша книга. Але це все ще одне з найкращих для довідки. Якщо ви хочете щось на цю тему, яка є дещо недавнішою та доброзичливішою, я б також порадив хороший «Шаблони дизайну, що відповідають першому принципу: керівництво, дружнє до мозку» Еріка Фрімена.

5. Дизайн, керований доменом: вирішення складності в основі програмного забезпечення

Ерік Еванс

Для того, щоб великі бази кодів продовжували масштабуватися, нам потрібно логічно розділити код на різні частини. Ідея полягає в тому, щоб розділити ваш код таким чином, щоб окремі команди могли працювати над цими частинами вашої системи, не зачіпаючи нікого іншого.

The underlying concept that enables moving your code base in this direction is Domain-Driven Design (DDD). It’s an approach to software development where we model the problems that exist in the “problem domain” (the real world) to a number of solution domains.

DDD is incredibly important when a code base gets sufficiently large. Large enterprise companies employ DDD in order to assign teams to parts of the company’s code base.

Eric Evan’s coined the term “Ubiquitous Language”, which is the term for building a common, all-encompassing language between the developers, the domain experts and any other users or actors in the domain. By using this Ubiquitous Language, it ensures that the most important domain concepts are well understood and get modeled in the software.

The book is a little more technical and challenging than the others, but if you get familiar with these concepts, you’ll be very well off in understanding how today’s largest companies keep their code bases manageable and scalable.

**Update: April 17th, 2019**

I’ve thought about this recommendation a little bit. Introduction to the DDD world is, in my opinion, extremely beneficial for Junior Developers. I believe this to be true because DDD places importance on familiarity with software architecture, designprinciples and design patterns. It’s a great way to practically introduce yourself to a higher level of programming.

That said, DDD is a large and challenging topic. For some readers, this book (the seminal “blue book”)by Eric Evansmight be better treated as a reference. It was Eric Evans who wrote the first book on DDD.

However, I just recently finished reading DDD Distilled by Vaughn Vernon. It’s a really short and sweet intro to DDD, written in order to address the fact that most books on DDD are huge in size.

Definitely try DDD Distilled instead. I think this book would be a lot better for most developers in order to get ramped up on the DDD essentials first. For more practical details on how to implement the concepts, refer back to “the blue book” and “the red book”.

6. Soft Skills: The Software Developer’s Life Manual

by John Sonmez

We should strive to stay well-balanced as a software developer. Unfortunately, being well-balanced is not a trait that most people affiliate with software developers. The truth is, it’s incredibly important to invest in your learning, health and overall well-being as a developer.

“Soft skills” is about the important stuff that matters outside of actually coding, like productivity, career goals and personal finance. Sonmez also goes into investing, how he retired at 33, fitness hacking tips and maintaining relationships - things rarely addressed in the programming community.

It’s written in such a way that you can jump into the book at whichever chapter you think is most relevant to you today.

7. Clean Architecture

by Robert C. Martin (Uncle Bob)

What? Uncle Bob writes good books, ok?

In school, there’s a lot of focus on algorithms and less focus on software design principles. I think it’s kind of unfortunate because in reality, you don’t encounter that many algorithm challenges too often. Instead, it’s more common that you’ll be faced with the challenge of structuring your code in a way that’s modular, flexible, readable and will allow you to add new features quickly when requirements change.

Clean Architecture is about the essential software design principles and patterns that you’ll be able to use in order to face these challenges.

Some of the best takeaways from this book are the cost of dependencies, stable vs. non-stable code and the SOLID principles: a way to write code so that it’s more understandable, flexible and maintainable.

Other aspects of this book that were incredibly useful were concepts of “screaming architecture” and “packaging by component” which are opinions on how to organize your modules so that it practically screams to the reader exactly what the project is all about.

This book goes well hand-in-hand with Domain-Driven Design, which is enabled through the use of a “Layered Architecture” or as Uncle Bob calls it, “The Clean Architecture” (also known as Ports and Adapters). A great book for anyone who wants to up their architecture chops and learn how to effectively design a system at a high level, and do the dance of dependencies at the detail level.

8. The Effective Engineer

by Edmond Lau

Time is our single most valuable asset in life, and we should aim to be more efficient with it. It’s easy to get bogged down and spend a lot of time fixing bugs and wasting effort. Doing repeated work. Bleh. The Effective Engineer is all about getting more done in less time and removing repeated work.

We can mitigate wasted time and effort on repetitive tasks through a framework called “leverage”.

Leverage helps you identify the activities that you can do that produce the most disproportionate results- per unit of time invested. It’s a framework that can apply to anything, whether that be how you learn, how you code, how you debug… anything!

9. The Pragmatic Programmer

by Andrew Hunt & David Thomas

Praised for being easy to follow and understand, The Pragmatic Programmer is a book that should be on the desktop of developers of all levels. Andrew and David are programmers that not only spent many years doing what they do, but paying attention to what they were doing as they were doing it, and then trying to determine if they could do that better.

What came out of their years of introspection was this book, which introduces a number of essential programmer philosophies to follow throughout your career, like “programmers should have a “do it once, or automate” philosophy”.

It includes simple yet detailed advice that you should carry with you in the back of your mind before you write another line of code or start a new project.

Final Words

Books really are some of the best tools to improve your knowledge and skills as a new programmer or Junior Developer. Books tend to have a really high return on investment; did you know you can make a lot of money programming? ?

These are just a few of the best books out there right now in 2019! None of them are really new, but that’s because programming has maintained the same general philosophies and best practices for years. As a professor I once had to say, “you can make a lot of money in this industry, you just have to read the damn manual”.

Have you read any of these books? What did you think? Any books not on this list that you think newer developers would really benefit from reading? Let us know in the comments!

Additional Resources

Here’s a list of some really excellent articles that cover some of the topics from these books. If you don’t quite have the time to invest in fully blown books right now, familiarizing yourself with these concepts might assist you in your journey to become a better developer!

Surviving Your First Junior Developer Job [Guide] ??

//univjobs.ca/blog/developer-guides/ultimate-guide-for-first-junior-developer-job-success/

Refactoring.guru

//refactoring.guru/

SOLID Design Principles

//stackify.com/solid-design-principles/

DRY (Don’t Repeat Yourself)

//en.wikipedia.org/wiki/Don%27t_repeat_yourself

NodeJS and Good Practices

//blog.codeminer42.com/nodejs-and-good-practices-354e7d76362

Implementing the SOLID and the onion architecture in Node.js

//dev.to/remojansen/implementing-the-onion-architecture-in-nodejs-with-typescript-and-inversifyjs-10ad

Better Software Design with Clean Architecture

//fullstackmark.com/post/11/better-software-design-with-clean-architecture

The Clean Architecture

//blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

My upcoming free resource, an introduction to software architecture and design principles with Node.js and TypeScript

//khalilstemmler.com/resources/solid-nodejs-architecture

Keep growing, and have fun while you’re at it!

If you’re a Canadian student or recent-grad looking for entry-level developer opportunities or co-ops/internships, you should check out our platform, Univjobs. We only post jobs specifically for students and recent-grads.