לעשות שורות (קוד)

פורסם במקור, בגירסה מקוצרת, בגיליון יוני של "בלייזר"

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

שאלה – סעיף א'

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

סעיף ב'

בואו נניח שגם עומרי וגם רונן רוצים לעשות אלבום תמונות לכבוד יום ההולדת ה-70 של הסבתא האהובה עליהם, בובל'ה. עומרי פותח את התוכנה לניהול תמונות ותוך 10 שניות מוצא את כל התמונות שהסבתא מופיעה בהן מסודרות לפי התאריך שבו הן צולמו. רונן לעומתו מבלה 10 שעות בחיפוש סיזיפי, מתיש ומורט עצבים אחרי מופעים של הסבתא תוך כדי מעבר על אלפי התמונות שצילם.
אז מי צדק בדיעבד? עומרי או רונן? אם מקודם אמרתם עומרי וגם עכשיו אמרתם עומרי אתם עדיין צריכים טיפול פסיכיאטרי. אם מקודם אמרתם רונן ועכשיו עומרי אז בטח קניתם רבע דונם אדמה חקלאית לפני הפשרה בחדרה. אם מקודם אמרתם עומרי ועכשיו אמרתם רונן יש לכם בעיה בהבנת הנקרא ואם אמרתם רונן בשנית אתם גברים טיפוסיים. ושוב אם אמרתם "זה תלוי" יש לכם אולי עתיד כמהנדסי תוכנה. כי זה באמת תלוי כמה פעמים ידרשו עומרי ורונן לכזה מבצע.
זהירות מתמטיקה של כיתה ב'! מספר השעות בשנה שמשקיע עומרי בסידור התמונות בזמן שרונן משפר את ביצועי השוד שלו ב GTA הן 52 * 3 = 156. אם כל מבצע סבתא שתואר ייקח לרונן הבלגניסט 10 שעות יותר מאשר לעומרי המסודר אזי 156 לחלק ל 10 זה כמעט 16. זאת אומרת שאם בשנה יהיו 16 מבצעים כאלו עומרי יוכל לבטל את הטיפול הפסיכיאטרי שלו.

נו אז?

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

איפה שמתי?

מבני הנתונים הכי נפוץ אצל ישראלים בגילאים 18 ל 21 היא המחסנית (Stack). מחסנית של גליל יכולה להכיל 35 כדור ואפשר לבצע עליה שתי פעולות, הראשונה – הכנס כדור והשנייה – הוצא כדור, כשהכדור הראשון שנכנס הוא האחרון שיוצא. זה נקרא באנלית (LIFO (Last In First Out ובעברית נאי"ר (נכנס אחרון יוצא ראשון) וברוסית последним пришёл — первым ушёл. בהנדסת תוכנה יש למחסנית מקום של כבוד וכדי לא להלהיב יותר מדי חנונים, נו בגלל האסתמה, לא נרחיב למה אבל את הבעיה של להפוך משפט כאשר חובה לקרוא את המשפט מהתחלה לסוף, הכי קל לפתור בעזרתה.
איך? קחו לדוגמא משפט כמו "מהנדסי תוכנה מעולים במיטה". האלגוריתם, שנדון בו בהרחבה אחר כך, הוא שעוברים אות אות וכמו כדור 5.56 דוחפים אותה למחסנית. כשגומרים את כל האותיות פשוט מתחילים להוציא (לירות) אותן החוצה ואז יוצא "הטימה םילועמ הנכות יסדנהמ" שבאופן מוזר יותר נכון מהמשפט המקורי.
יש עוד המון סוגים של מבני נתונים כמו תור (הראשון שנכנס הראשון שיוצא – אזהרה לא תקף בישראל), רשימה מקושרת (החברים של אולמרט), מילון, ערימה ועץ בינרי בו כל איבר מצביע על שני אברים אחרים, די לצחקק, באנגלית זה נשמע יותר רציני. המשימה של כל אחד ממבני הנתונים הללו היא לאחסן נתונים בצורה הכי טובה לפתרון בעיה ספציפית בעזרת אלגוריתמים.

מתכון לניצחון

כל פעם שאתם רוצים להגיע עם המכונית שלכם למקום מסוים אתם מפעילים אלגוריתם של מציאת הדרך המהירה ביותר. פעם זה היה בעזרת מפות מודפסות ודיווחי התנועה של גלי צה"ל. זוכרים? רוצים להגיע מחיפה לבאר שבע: כביש 2, כביש ואדי מילק (70), כביש 6, כביש 40. אופס, דיווחו על תאונה בצומת פרדיס אז נמשיך על כביש 2 עד כביש ואדי ערה. אופס! היום זה יום האדמה, נשנה את התוכניות וניסע דרך איילון. היי אנחנו בת"א למה בכלל להמשיך?
היום רובנו העברנו את האחריות להגיע ממקום למקום לאפליקציה Waze שבעזרת הדיווחים של אלפי המשתמשים שנשמרים במבני נתונים יחד עם המפה של ישראל, מוצאת בעזרת אלגוריתם את הדרך הכי מהירה מסביב לכל פקק שנוצר. סביר להניח החבר'ה המאד מוכשרים של Waze לא המציאו אלגוריתם חדש כי הבעיה של להגיע ממקום למקום במחיר הנמוך ביותר היא עתיקה מאד. תשאלו את משה רבנו שלא הכיר את האלגוריתם של ההולנדי אדסחר דייקסטרה שפותר את הבעיה הזאת בצורה מאד אלגנטית.
אלגוריתמים נכתבים כסדרה של צעדים עם התניות ואם ניקח את הבעיה של הפיכת המשפט שפתרנו בעזרת מחסנית זה יראה בתרשים כך:

מה זה השטויות האלה?

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

לדבר בשפה שהם מבינים.

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

10. אות = ממקלדת-קרא .
20. אם "אות היא 'כלום'" לך לצעד 50.
30. למחסנית-הכנס(אות).
40. לך צעד 10.
50. אות = ממחסנית-הוצא.
60. אם "אות היא 'כלום'" לך ל 90.
70. למסך-הדפס(אות).
80. לך לצעד 50.
90. בירה-שתה.

הקוד עובד. בדקנו. אבל עד כמה הוא מוצלח? עד כמה הוא יעיל? עד כמה יהיה קל לשנות אותו בעתיד? זאת שאלה מעניינת וחשובה, אבל אנחנו עדיין תקועים בשלב 90.

שלב 100

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

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

4 תגובות על לעשות שורות (קוד)

  1. ohris הגיב:

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

    אהבתי

  2. צחי הגיב:

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

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

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

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

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

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

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

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

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

    כולם מתרחקים תמיד מהערפל ורק הוא נגש לערפל של "ההר בוער באש עד לב השמים חושך ענן וערפל… קול דברים אתם שומעים ותמונה אינכם רואים זולתי קול" (דברים ד', י"א,י"ב)

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

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

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

    אהבתי

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s