תוספות
cover image

חדו"א 1
יד ביד

משפרי ביצועים

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

שיטת OOOE

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

איך מעבדים עובדים, ממש ממש על קצה המזלג

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

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

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

.

.

פקודה לא מעניינת

פקודה לא מעניינת

תחלק את 8 ב-2

תחבר את 3 ו-4

פקודה לא מעניינת

פקודה לא מעניינת

.

.

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

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

ואתם צודקים, וזה אכן מה שמחשבים עושים (חבל על הזמן עושים). לשיטה הזו קוראים Out Of Order Execution, ובעברית “ביצוע לא לפי הסדר”. מה נדרש מהמחשב כדי שהוא יוכל להגיע למסקנה דומה לשלכם? ראשית הוא חייב שיהיו לו כמה יחידות חישוב. שנית, וחשוב יותר, הוא חייב להסתכל על יותר משורת פקודה אחת, הוא חייב להסתכל קדימה ולראות אם יש לו אפשרויות לבצע עכשיו. בנוסף, חשוב גם שהפקודות שהוא מבצע במקביל לא יהיו תלויות אחת בשניה. אם למשל הקוד היה כזה:

.

.

פקודה לא מעניינת

פקודה לא מעניינת

תחלק את 8 ב-2 ותשמור את התוצאה

תחבר את 3 לתוצאה מהפקודה הקודמת

פקודה לא מעניינת

פקודה לא מעניינת

.

.

עכשיו המחשב לא יכול לחשב את פעולת החיבור במקביל לפעולת החילוק, כי החיבור תלוי בתוצאת החילוק.

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

איך זה קשור לניהול זמן

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

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

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

קבוע זה רגוע

“אל תתנו ללחץ לשבור לכם את השגרה. תנו לשגרה שלכם לשבור את הלחץ”

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

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

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

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

ייעול זמן

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

הנה כמה עוד רעיונות לייעול הזמן שיכולים לסייע לסטודנטים:

פיצול למקטעים ואיחוד מקטעים

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

הפסקות ומנוחות

“הגישה הטובה ביותר נמצאת בין שתי הקצוות – אבל לא בדיוק באמצע”

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

הנה כמה רעיונות שיכולים לעזור לסטודנטים בפרט:

רפרנסים

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

חלוקת עבודה

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

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

המשיכו לחלק הבא


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

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

החכמתם? נהנתם? מוזמנים להזמין לי כוס קפה :)