ספרים שמפתחים זוטרים צריכים לקרוא

ספרים אלה "הם בעצם קודי רמאות" להעלאת כישוריכם וידעכם כמפתחים.

בין אם אתה מפתח חדש ובין אם אתה מנוסה למדי כמתכנת, תבין שפרק הזמן שעבדת בעבודה הוא לא הדרך הטובה ביותר לקבוע את המיומנות והידע שלך כמתכנת. (אני יודע, תגיד את זה למגייסים?).

מה שאתה עושה בזמנך הפנוי ואיך אתה בוחר לקחת למידה לידך הוא מה שיקבע בסופו של דבר את הצלחתך בענף זה. לכן כל כך חשוב לנו כמפתחים לאמץ חשיבה לצמיחה.

ישנן כמה דרכים מצוינות ללמוד ולהשתפר כמפתח. חלק מאותן דרכים הן תכנות זוגי, קורסים מקוונים, מפגשים, ניסיון בעבודה, בניית פרויקטים ומציאת מנטור.

אחת הדרכים האישיות האהובות עלי ללמוד היא לפצח ספר כתוב היטב ולנסות לקלוט משהו ממי שזיקק שנים של ידע ותובנה לחפץ קבוע.

להלן המלצותיי האישיות שלדעתי כל המפתחים (במיוחד זוטרים) צריכים לקרוא בשלב כלשהו. ספרים אלה זוכים להערכה רבה על ידי אנשי מקצוע בתעשייה שלנו ויש להם פוטנציאל להשאיר השפעה עמוקה על איכות העבודה שלך ועל מהירות ההתפתחות והלמידה שלך.

חלקם חורגים מהפרטים הטכניים ומתמקדים יותר במתן לך כללים מעשיים לגבי המשמעות של להיות מפתח טוב ברמה הבין אישית והמקצועית.

גילוי נאות: חלק מהקישורים שלהלן הם קישורי שותפים. אבל הוספתי רק את הספרים שאני אישית מרגישים שהם שימושיים עבור פיתוח זוטר.

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. הקודן הנקי

מאת רוברט סי מרטין (דוד בוב)

ספר זה אינו בהכרח ספר טכני שכן הוא ספר המלמד אותך כיצד להיות מקצוען בענף זה. אנשי מקצוע הם כאלו שכאשר הם מתמודדים עם אתגרים, אי ודאות ולחץ, ימשיכו להתייחס ליצירת תוכנה כאל מלאכה ויהיו נחושים לדבוק בערכים המקצועיים שלהם.

קודן נקי מלא בעצות מעשיות בנושא הערכה, רפקטורציה, בדיקה, התמודדות עם סכסוכים, לוחות זמנים, הימנעות משחיקה ועוד ועוד. עצות מהימנות ממי שבילה עשרות שנים על הדברים האלה.

אחד הדברים הטובים ביותר שהיא מלמדת, הוא כיצד להיות שלמות כמפתח, מתי לומר "לא" ואיך לומר זאת.

ספר על מקצועיות.

3. שיקום מחדש

מאת מרטין פאולר

מרטין פאולר הוא אחד הסופרים האהובים עלי. הסיבה הראשונה היא שהוא מצחיק. גישתו לכתיבת ספרי תוכנה היא ללא ספק "פאולר". הסיבה האחרת היא שהוא טוב להפליא בהסבר על נושאים מורכבים, ועושה זאת בפשטות רבה באופן שלא מעייף אותך כקורא.

ריפקטורינג הוא ספר שיוצר רובי און ריילס אמר פעם שעליך "לקרוא לפני שאתה כותב שורת קוד נוספת". פאולר מדריך אותך בשיקום מחדש של יישום פשוט, ומציג בפניך מספר טכניקות שצבר וקיטלג במהלך שנות הייעוץ שלו.

Fowler מראה לך כיצד לעבור בין קידוד לבין refactoring, באיזו תדירות אתה צריך לבצע את הקוד שלך ומתי אתה צריך לכתוב את המבחנים שלך. מומלץ מאוד. הגרסה האחרונה של ספר זה עודכנה כדי להציג את הדוגמאות ב- JavaScript, שהיו פלוס נוסף עבורי מכיוון שזו השפה האהובה עלי.

4. דפוסי עיצוב: אלמנטים של תוכנה מונחית עצמים לשימוש חוזר

מאת אריך גאמה, ריצ'רד הלם, ראלף ג'ונסון וג'ון פליסידס

זהו הספר המכונן על דפוסי עיצוב. מהם דפוסי עיצוב, אתם שואלים? דפוסי עיצוב הם פתרונות ידועים לבעיות נפוצות בפיתוח תוכנה. אם אתה מכיר את הדפוסים, תגלה שתוכל להפחית מאוד את משך הזמן שלוקח לך להציע את הפתרונות לבעיות אלה.

מודעות טובה לדפוסי העיצוב מאפשרת לך גם לתקשר את הפתרונות שלך ביעילות עם מפתחים אחרים.

"כן, פשוט השתמשתי בחזית חזית של מתאם מסד הנתונים אשר נטען מהאסטרטגיה."

"אהה! גוטצ'ה. "

כן, זה ספר ישן יותר. אבל זה עדיין אחד הטובים ביותר להתייחסות. אם תרצה משהו בנושא זה קצת יותר עדכני וידידותי, הייתי ממליץ גם על "דפוסי העיצוב הראשוני של הראש: מדריך ידידותי למוח" של אריק פרימן.

5. עיצוב מונחה תחום: התמודדות עם מורכבות בלב התוכנה

מאת אריק אוונס

על מנת שבסיסי קוד גדולים ימשיכו להתמקד, עלינו לפצל את הקוד באופן הגיוני לחלקים שונים. הרעיון הוא לחלק את הקוד שלך בצורה שתאפשר לצוותים נפרדים לעבוד על אותם חלקים של המערכת שלך מבלי להשפיע על אף אחד אחר.

הרעיון הבסיסי שמאפשר להעביר את בסיס הקוד שלך לכיוון זה הוא DDD (Domain-Driven Design). זו גישה לפיתוח תוכנה בה אנו מדגמנים את הבעיות הקיימות ב"תחום הבעיות "(העולם האמיתי) למספר תחומי פתרונות.

DDD חשוב להפליא כאשר בסיס הקוד נהיה מספיק גדול. חברות ארגוניות גדולות מעסיקות DDD במטרה להקצות צוותים לחלקים מבסיס הקוד של החברה.

אריק אוואן טבע את המונח "שפה בכל מקום", שהוא המונח לבניית שפה משותפת, הכוללת כל שפה, בין המפתחים, מומחי התחום וכל משתמש אחר או גורם אחר בתחום. על ידי שימוש בשפה מקובלת זו, היא מבטיחה שמושגי התחום החשובים ביותר יובנו היטב ויעוצבו במודל בתוכנה.

הספר קצת יותר טכני ומאתגר מהאחרים, אבל אם אתה מכיר את המושגים האלה, יהיה לך טוב מאוד להבין כיצד החברות הגדולות ביותר כיום שומרות על בסיסי הקוד שלהם לניהול ולהרחבה.

** עדכון: 17 באפריל, 2019 **

חשבתי קצת על ההמלצה הזו. מבוא לעולם ה- DDD מועיל לדעתי מאוד למפתחים זוטרים. אני מאמין שזה נכון כי DDD מייחסת חשיבות על היכרות עם ארכיטקטורת תוכנה , עיצוב עקרונות ועל תבניות עיצוב . זוהי דרך נהדרת להציג את עצמך לרמה גבוהה יותר של תכנות.

עם זאת, DDD הוא נושא גדול ומאתגר. עבור חלק מהקוראים ספר זה ( "הספר הכחול" המכונן )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.