קל ופשוט

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

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

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

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

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

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

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

(ותודה לריק היקי על ההשראה ולויטאלי ששיכנע אותי להקשיב לו).