שלום לכולם
המדריך הזה נועד עבור מי שרוצה וחפץ לממש את הסטטיסטיקה שהרגע המצאתי "שעה של מחשבה = מאה שעות עבודה" בבחינת יפה שעה אחת של קורת רוח בעולם הבא יותר מכל חיי העולם הזה. למה דווקא 1=100 את זה המצאתי, אבל העיקרון ששעה מחשבה שוה להרבה מאוד שעות עבודה, עם זה כולם מסכימים.
לאחרונה פרוייקט שלנו של 4 חודשים נכשל והרבה שעות עבודה הלכו לטמיון בגלל שלא השקענו זמן בתיכנון, ניסינו לזרום וחטפנו מכה.
שמעתי בשם המתכנת של "תג" (שאגב הוא כתב אותה בשפת C נקייה, והוא אמר לי שהוא לא אוהב את השפות שכל שנתיים מחליפים קומפיילר, אבל זה נושא לדיון פילוסופי אחר) שעל קוד שלוקח לו שעה לכתוב, לוקח לו שעתיים לבדוק. זהו קוד נקי מנופה בשלש עשרה נפה. אני רוצה להסביר איזה חטא זה לכתוב קוד מלוכלך, שם לוקח לך רבע שעה לכתוב, אבל אחר כך חמש ועשר שעות עבודה להתמודד במצבים של אל-חזור.
הקצב שבו פרוייקט לא מתוכנן מכה בך, הוא מעריכי, כלומר, בוא נניח שקוד לא מתוכנן, לא נקי וכו', דורש ממך השקעה של חצי שעה עבודה על כל שעה של כתיבת קוד מלוכלך כשאתה בא לממש אותו אחר כך, או להרחיב אותו. תארו לעצמכם, בהתחלה אתם צריכים להתמודד עם באגים לתקן, לעשות טלאים, לקרוא שוב ושוב ולא להבין מה כתבתם, במשך חצי שעה על כל שעה של כתיבת קוד. אוקי, עברנו בשלום את חצי השעה ואנחנו רוצים להמשיך הלאה, אבל רגע!!! כרגע הקוד הזה הוא "ליכלוך בן שעה וחצי!!!!!!!!!!" אוי ואבוי, זה אומר שבפעם הבאה, תידרש מאיתנו 3/4 שעה לעבוד איתו!!! שימו לב! כל הרחבה של קוד לא נקי, הופכת אותו לעוד יותר לא נקי, ולעוד יותר קשה לעבודה ולתחזוקה אחר כך!!! אז עכשיו יש לנו קוד בן שעה וחצי, שכדי לעבוד איתו נידרש לשלשת רבעי שעה, ואז הילד הזה גדל עם החינוך העקום שלו, והוא מגיע לגיל של שעתיים ורבע, זמן התחזוקה גודל לשעה ושבע וחצי דקות, וכן הלאה.
בסופו של דבר הקריסה היא רק עניין של שבועות ספורים, והרבה מאוד מתכנתים מתייאשים מלכתוב תוכנות גדולות רק מהסיבה הזאת, כי אם פרוייקטים קטנים קורסים להם ככה, מה יעשו עם פרוייקט לניהול רשימת מכולת..............
הכלל הזה הוא נכון בכל תחומי החיים, בעסקים, בשלום בית, חינוך ילדים, לימודים, וכמובן לעניינינו ארכיטקטורת תוכנה.
הרב שלי פעם הסביר לי, את הסיבה שבאמזונס עדיין חיים שבטים פרימיטיביים שלא התקדמו לשום המצאה, ולו המינמלית ביותר של תקופת אברהם אבינו, הוא הסביר את זה ככה, מחסור הוא אבי ההמצאה, ובאמזונס הואיל והטבע שם עשיר מאוד, ובהושטת יד משיגים בננה או קוקוס טריים, אין מחסור, ולכן אין שום מניע להתקדם ולהמציא המצאות.
חברת השפע לאחר כל ההמצאות, הפכה אותנו בעצם לחיים באמזונס בחזרה ולפי ההיגיון, התבונה של המערב אמורה לשקוע תוך כמה מאות שנים, לא נדון בזה כרגע, גם האתר הזה נועד למתכנתים ולא לאנתרופולוגים. אבל יש משהו שכן נוגע לכאן, כאשר שפה עילית של תוכנה, נותנת לנו תחושה שהכל עובד ואין צורך ברעיון, זאת אחיזת עיניים שהיא לרועץ עבור מתכנתים. כשיצרו פונקציה שבנויה תחת אשכול ענק של קוד, ואנחנו מפעילים אותה בשיא הנוחות. זה נותן תחושה של "הנה הכל זמין אין צורך להמציא כלום" ואז באופן טבעי נוצרת אשליה של שפע, כאשר מעבר לפינה ממתינות לנו שנות רעב שגם פרעה לא יכל לחלום עליהם.
למעשה כל מתכנת שרוצה להצליח צריך לחשוב שנתיים קדימה מה הוא הולך לעשות עם הקוד הזה, ובאלו מצבים. אני לא מדבר על אחד שזה עתה למד לעשות מסג' בוקס, והוא נהנה מעצם החוייה שבה הוא כותב "שלום עולם" והמסך נשמע להוראותיו, תנו לו לחיות ואל תשגעו אותו. אני מדבר על אחד שכבר עובד ומרויח, ורוצה להתייעל עם הזמן.
אז אחרי כל הפילוסופיות אפשר להתחיל.
מה שכבר כתוב בויקיפדיה אין צורך לחזור עליו (יש ערכים שהם חובה גמורה לכל מתכנת כגון צימוד לכידות , ועוד, אבל לדעתי, חסר חומר פילוסופי, על ארכיטקטורה של נתונים, IT. דהיינו בראש ובראשונה תיכנון מסד נתונים מנורמל. ולאחר מכן עבודה נקייה עם קוד שמטפל בDATA.
אחד הויכוחים הגדולים, בתיכנון מסד נתונים, האם יש לחסוך בכמות הטבלאות, ולעמעם במקצת את איפיון הנתונים, או להיפך, להקפיד על איפיון ולצורך כך להיות פזרן בטבלאות.
ניקח דוגמא:
יש לנו הרבה combobox בתוכנה, נניח בתוכנה ממוצעת יש משהו כמו 80 combobox. מנין לקוחים הערכים שברשימה????
לי ידוע על 3 שיטות
- כל ערך שמוקלד אי פעם נכנס לרשימה והופך להיות חלק ממנה. שיטה זו בעיני היא נלוזה ועקלקלה, ואין בה שמץ של ארכיטקטורה, כבר עדיף לעבוד עם אקסל, הוא באמת נותן השלמה אוטומטית לכל מה שיש מעליו.
- לעשות טבלה מיוחדת לכל combobox שיכיל את הערכים שלו (בדרך כלל באמצעות key-value דהיינו ID ו string) ככה יש לנו שליטה מלאה בחומר.
- טבלה אחת גדולה שתכיל את כל הערכים של כל ה combo בתוכנה, עם שדות שתפקידן לסנן את הערכים שלא יתערבבו קומבו בקומבו.
דוגמא נוספת יותר קיצונית:
יש לנו תנועות פיננסיות מכל מיני סוגים, הוראות קבע, שיקים, מזומנים, העברות בנקאיות, שוברים, ועוד הרבה, וכל זה תכפילו בשניים לפחות הוצאות והכנסות (יש גם זיכויים וחיובים אבל הבה ונעצור כאן) שוב יתווכחו המתווכחים, יש שיעשו טבלה לכל נושא, טבלה להכנסות בהוראות קבע, טבלה להכנסות בשיקים, טבלה להכנסות במזומנים, שוברים, העברות, וכן להוצאות, כעת מה יהיה אם יש לנו תרומות ושכר לימוד??? האם צריך טבלאות נפרדות לשכר לימוד, ולתרומות? אפשר להגיע במוסד ממוצע ל 30 טבלאות בלי גוזמא, אם ניצמד לעיקרון שכל נושא הוא טבלה בפני עצמה.
השיטה האחרת אומרת, טבלה אחת גדולה של הכנסות, כאשר השדה "אופן הכנסה" אמור להצביע על סוג התנועה, באיזה אופן בוצעה. בהוראת קבע או בשיק וכדומה.
שיטה יותר קיצונית אומרת, טבלה אחת גדולה שתכיל גם את ההוצאות וגם את ההכנסות, ויהיה שדה שיגדיר Type האם מדובר בהוצאה או בהכנסה, שדה נוסף שיגדיר את אופן התנועה (וכאן אנו חוסכים ב combo וב UI ובניהול של קוד!!!! כי הכל בטבלה אחת וממילא גם מבנה אחד בקוד)
בשיעור הבא נדבר באיזו שיטה צריך לבחור.
בהצלחה לכולם!
פורסם במקור בפורום CODE613 ב15/07/2013 13:02 (+03:00)