מנהיגות בההיטק #13—קוהרנטיות ארגונית
התנין שבתמונה למעלה (אם אתם/ן קוראים/ות באתר ולא במייל) צולם ע״י בן ה9. התנין החביב הזה בא לבקר אותנו ליד האוהל כשאכלנו ארוחת צהרים. מסתבר שככה זה בלואיזיאנה.
הוספתי אפשרות שלכם/ן לשתף פידבק, לשיפור ולשימור. אשמח לשמוע מה עובד טוב, על איזה נושאים הייתם רוצים/ות לשמוע בעתיד, וכו׳.
קוהרנטיות ארגונית
כשבאים לתכנן את מבנה הצוות או הארגון, יש כמה קווים מנחים שחשוב לחשוב עליהם. אחד מהם הוא קוהרנטיות ארגונית. כדי להבהיר למה הכוונה, נחזור גם הפעם אל עולם הפיתוח המוכר. מפתחים/ות רבים/ות מכירים/ות את המשפט: ״high cohesion, low coupling״ כקו מנחה לתכנון אובייקטים. אבל מה זה בדיוק אומר שאובייקט הוא קוהרנטי? הנה כמה הגדרות שעוזרות לפרמל את המונח.
נניח שיש לנו אובייקט A המכיל משתנים פנימיים a_1, a_2, ..., a_n ומתודות m_1, m_2, ..., m_m. אז נגדיר את הקוהרנטיות של מתודה כלשהו כיחס בין כמות המשתנים הפנימיים שהמתודה משתמשת בהם לבין סה״כ המשתנים הפנימיים.
לדוגמא, מתודה שלא מתייחסת לאף משתנה פנימי של האובייקט היא בעלת קוהרנטיות של אפס. די ברור, לדוגמא, שניתן להוציא את המתודה מהאובייקט לספריית עזר או לפחות להגדיר אותה כסטאטית. מנגד, מתודה שמתייחסת לכל המשתנים הפנימיים קשורה מאוד לאובייקט ויהיה קשה מאוד לעשות refactoring שיפריד בינה ובין האובייקט.
ומה הקוהרנטיות של האובייקט? אפשר פשוט לבחור את הממוצע של המתודות. אובייקט קוהרנטי מספק פונקציונליות שקשורה האופן גבוהה למידע שמגדיר את הstate הפנימי. ומנגד, אובייקט בעל קוהרנטיות נמוכה יכול בדרך כלל להיות מפוצל למספר אובייקטים נפרדים, שכל אחד מהם בעל קוהרנטיות גבוהה יותר.
וכמו בכל מטריקה, צריך להיזהר עם התקבעות למספרים ולא למהות שמאחוריהם. אם אתם/ן רוצים/ות להבין קצת יותר מה זה קוהרנטיות במובן של הנדסת תוכנה, אתם/ן מוזמנים/ות לצפות באחת ההצגות הראשונות של React, ברוח המלצת הספר שבהמשך, שם מדברים עוד קצת על low coupling, high cohesion.
אבל מה בין זה לתכנון ארגוני?