לכולנו יש רמה מסוימת של אינטואיציה מתמטית. הרמה שונה מאדם ואדם, אבל זה בעצם מעין חוש כזה שיש לכולם. השכלה מתמטית זה כבר עניין אחר. אצלי ההשכלה המתמטית אינה רציפה בשל נסיבות חיי הספציפיות, ואני משלימה מה שצריך לפי מה שמעניין אותי ומה שאני מעוניינת להשיג. אז כיום, לדוגמה, יש לי רצון להרחיב את הכישורים שלי כמתכנתת מעבר לפיתוח פרונטאנד. על סמך התייעצות ועל סמך הניסיון שלי מראיונות שבהם אכן רצו לבחון כישורים וידע מעבר, הבנתי שמה שהכי כדאי לי לעשות הוא לכסות את החומר של קורסי אלגוריתמים ומבני נתונים כפי שהם נלמדים במסגרת תואר ראשון במדעי המחשב.
מה זה כולל, למשל?
- יכולת לנתח סיבוכיות זמן של קוד
- יכולת לנתח סיבוכיות מקום של קוד
- היכרות עם הסיבוכיות של אלגוריתמים ספציפיים
- התאמה בין בעיה לפתרון: לדעת להסתכל על בעיה ולהבין איזה אלגוריתם יפתור אותה בצורה אופטימלית
פרפקציוניזם זה אסון
כרגיל כשאני מתעניינת בנושא חדש, גיליתי מהר מאוד שיש מקורות מידע בשפע. סבבה. אבל זה בכל זאת קצת מאיים לצלול לתוך נושאי לימוד חדשים, שתמיד נראו לי מרחוק מסובכים. בפרט כאשר ליטרלי יש בהם מילה מהשורש סב״כ.
https://gist.github.com/strayblues/7cd5e947fb4f0fe577c016de35633dfa
כל פעם שחשבתי על זה, ההרגשה שלי הייתה שאני בטח אצטרך לטחון כמות אינסופית של חומר ותרגילים. וכשחשבתי על זה בצורה כזאת, זה הקשה עלי פשוט לשבת וללמוד.
והאמת היא שבהתחלה זה היה דווקא בסדר: במשך שבוע למדתי כמה אלגוריתמים ולמדתי דברים עקרוניים על סיבוכיות. תרגלתי מתוך סרטונים (code along) ולמדתי קצת מהספר של קורמן (שבינתיים אני לא מסתדרת עם הפסאודו־קוד שלו, אחרת הייתי לומדת רק או בעיקר ממנו). אחרי כמה ימים התחלתי לשחזר מהזיכרון אלגוריתמים שלמדתי על דף בגרסה נאיבית, ואז לעשות להם אופטימיזציות בהדרגה. זה עזר לי להכיר אותם יותר ולשים לב באילו דברים אני מתבלבלת. כמובן שעשיתי את זה בין השאר כי לפעמים בראיונות מבקשים לפתור בעיה על דף, מה שהופך את זה תרגול חשוב, אבל גם ניסיתי להשתמש בזה כטכניקה שאפיק ממנה תועלת עבור עצמי, לשם מיפוי של קשיים, הפנמה של הלוגיקה, תרגול של שימוש באינדקסציה וכדומה.
אבל אחרי שבוע בערך, נעשיתי עסוקה בדאגות שזה בטח גדול עליי ובטח יש יותר מדי חומר ואני לעולם לא אשלוט בכולו בצורה מושלמת. וזה, כידוע, סוף העולם. אז זה בעצם גרם לי לעזוב את זה לחודש וחצי ולהשקיע את הזמן בדברים אחרים (ובהם: כמות קיצונית של מנוחה בתקופה החגים, ולאחר מכן ראיונות עבודה, שנת לימודים אוניברסיטאית חדשה והבלוג הזה). וזו אולי נשמעת כמו סוגיה של ניהול זמן, אבל זו סוגיה של ביטחון עצמי.
כל אדם שמנסה ללמוד משהו עשוי לפתח תובנות פרטיות על צורות למידה שונות ועל אסטרטגיות למידה, וכולנו נשלחים למסגרות לימוד מגיל צעיר. אני, למשל, נוטה להשוות חומר לימוד לאוכל: יש גבול לכמה אפשר לבלוע ולעכל, וצריך גיוון. יש ימים שלנסות להאביס את עצמי במידע וטכניקות זו לא הגישה הנכונה, זה לא מצליח.
לא מזמן היה לי יום כזה. אז החלטתי לא ללחוץ על עצמי. ואז התחילו לנבוע שאלות באופן ספונטני, בלי מטרה. ומה שחוויתי באותו יום, הוא שגם למידה ספונטנית יכולה לפתח את החשיבה שלי, וכתוצאה מזה לחזק את הביטחון שלי ביכולת שלי לחשוב בצורה מתמטית ואלגוריתמית. בעקבות ההתנסות הזו, אני יותר מאמינה ביכולת שלי להתמודד עם החומר החדש ופחות עסוקה בשאלות כמו ״מה זה אומר עלי אם יש חלק שלא הבנתי או שאני שולטת בו פחות טוב״. נזכרתי שבסך הכל אני אוהבת ללמוד, ושאין סיבה שזו לא תהיה חוויה חיובית.
ועכשיו אני אספר מה בכלל קרה, איך זה קרה ומה זה נתן לי.
חקירה חופשית
כזכור לכולנו, ביום הבחירות המוניציפליות היה יום חופש. כלומר, היה לי יום ארוך בבית עם בן הזוג (המתמטי להחריד). התחלתי מטרידה אותו בשאלות, ממקום של סקרנות כמעט ילדותית. ממקום של משחק, אפילו.
״תזכיר לי איך קוראים במילים את הנוסחה שכתובה עם סימן של סכימה״
״זה נקרא טור?״
״רגע, מה נקרא טור? הסכום של הסדרה? או האוסף של תת הקבוצות של הסכומים? רגעעע״
״איך קוראים לסדרה של $1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}…$ ככה עד אינסוף?״
״הרמונית? היא מתכנסת? לא? איך מוכיחים שלא?״
מיהר והביא מחברת, שירבט איזה הוכחה. חוץ מזה שהשתכנעתי, ההוכחה הייתה חמודה ומגניבה. הוכחות מתמטיות נוטות להיות אלגנטיות, וחבל שרק מתמטיקאים זוכים ליהנות מהן, אז החלטת לכתוב עליה פוסט נפרד והשתדלתי שיהיה בשפה של בני אדם רגילים.
ואני לא זוכרת מתי לאחרונה למדתי ככה.
ככה. שזה בא ממני. שאני באה לשאול שאלות. שמותר להן להיות מטומטמות. שהן באמת קצת מטומטמות, ואני לא מנסה להסתיר את זה או לעמוד בדרישה חיצונית. בלי הכנה מראש. סתם מנסה לשלוף מהזיכרון כל מיני פירורים, למשש אותם. לא כי נתנו לי משימה שלא הצלחתי בה ועכשיו אני צריכה עזרה. סתם ככה. סתם כי בא לי רגע להבין משהו.
השיחה התגלגלה לעבר אלגוריתם למציאות שורש ריבועי של מספר (השיטה המוכללת מדברת על שורש של פונקציה — אבל לא הספקנו להיכנס לזה). ואז הוא שאל אם אני יכולה לנסח את זה בשפת תכנות והושיט לי את המחברת. בעת רביצה על הספה ומבלי שחשדתי בדבר, נקלעתי לראיון טכני. רק בלי כל הלחץ הנוראי שגורם לבלאקאאוט בזמן אמת.
והמעשה באלגוריתם למציאת שורש ריבועי מתחיל כך: היה היה מספר, אני אקרא לו num. ובתור התחלה ניקח לנו עוד מספר, כי למה להתקמצן, והוא יהיה המועמד לשורש. נקרא לו rc (קיצור של root candidate, זה פשוט שם שהמצאתי לו). אם המועמד הוא אכן השורש, אז מן הסתם התוצאה של num/rc תהיה rc. ״קל לראות״, כמו שאומרים. אבל את זה באמת קל לראות (אם בכל זאת לא ברור, תציבו את 4 ב־num ואת השורש הריבועי שלו ב־rc).
לכן צריך לבדוק אם rc == num/rc. כל זמן שלא, צריך לשנות את ערכו של rc כך שילך ויתקרב, ובסוף יגיע, לערך הנכון או לקירוב מספיק טוב שלו. שיטה שמצאו לקרב את הערך של המועמד (כאמור, rc) היא לחבר את rc עם num/rc ואת הסכום לחלק ב־2. למה? לא בטוחה שהבנתי. לא נתעכב על זה כרגע. אבל הצעד חוזר על עצמו מספר פעמים כנדרש. כלומר, אם נכתוב לולאה, זה יהיה הגוף שלה.
רק שתנאי העצירה הוא לא באמת הגעה למספר המדויק, כי לא נגיע בשיטה הזו לשוויון מדויק בכל המקרים (ואולי גם לא באף אחד המקרים). אז נניח, מספיק לנו לחתוך את המספר 50 ספרות אחרי הנקודה העשרונית (או 10, או 2, מה שנחליט). תנאי עצירה טיפה יותר מורכב כבר מוסיף עוד קצת תוכן ללולאה שלנו, אם נרצה לכתוב פונקציה שמממשת את האלגוריתם.
אז התעסקתי קצת בניסוח ג׳אווסקריפטי של תנאי ההשוואה כך שיסתפק בשוויון המקורב, ואחר כך מצאתי את עצמי זורקת לאוויר תובנות ותהיות:
״רגע, אז איך בוחרים את המועמד? על איזה מועמדים אפשר מראש לדלג?״
״אפשר להגיד שלמספרים עם שורש שלם, השורש לרוב קטן מהם לפחות פי 2?״
״אז בשברים של 1 חלקי דברים זה ההפך?״
״רגע, מה השורש של חצי? זה… אה… לא משנה.״
״אבל נסתכל על השורש של רבע. השורש של רבע זה חצי. השורש של 1/16 הוא רבע.״
״מה קורה במספרים פחות ׳נוחים׳?״
כלומר, קרה דבר מוזר: התחלתי לחשוב על בעיה מתוך סקרנות, ולא כי מישהו בוחן אותי.
מה למדתי מהתהליך
ראיתי שגם אם אין לי את הכלים לפתור את הבעיה על המקום, יש דברים שאני כן יכולה לעשות:
- לרתום גם ידע בסיסי וחלקי כדי להתקדם לעבר פתרון או לפחות כדי לנסח השערות
- לזהות מה חסר לי ולחשוב מה השאלות שיכולות לקדם אותי לעבר פתרון
- לנסות להבחין בין מקרים נפוצים ומקרי קצה
- ליצור הבחנה בין מה שאני יודעת, מה שאני משערת ומה שאני לא יודעת
כלומר, גיליתי שיש לי צורת חשיבה שמתאימה לפתרון של בעיות כאלה, בניגוד למה שאני נוהגת להניח. רק חסרה לי מיומנות ושליטה בכלים (אפשר גם לקרוא לזה ׳ידע׳). וזה מעודד, כי זה הרבה יותר טוב מאשר אם הייתי במצב ההפוך; את הידע אפשר להשלים.
אבל הדבר הכי חשוב שגיליתי היה שזה מעניין אותי, במובן הכי פשוט וטהור. ברגע שנפטרים מאלמנט האיום על האגו (אני אצליח או לא? יכמתו את האינטליגנציה שלי על סמך ההצלחה בשאלות כאלה? אני לא אעבור את הראיון? האם יגלו שאני בעצם נורא סתומה?), אפשר פשוט ליהנות מזה. אפשר להרגיש שזה כן בשבילי ושאני אוהבת את זה. מה יש לא לאהוב? אני רק לא סובלת תחרותיות, לחץ ומגבלות זמן נוקשות שמאיימות לחרוץ את גורלי.
זה נמשך כנראה קצת פחות משעה, כל הסיפור. אחר כך הייתי צריכה להתפנות לעבודה (אני עובדת מהבית כרגע). אבל זה היה כל כך מרענן. אני לא זוכרת מתי בכלל ניסיתי להתעניין בבעיה מיוזמתי, ולחשוב עליה מול הדף הריק, במקום מול גוגל. ובכלל, לחשוב במקום לנסות לבלוע מידע וחומר לימוד.
סיכום
הרבה פעמים כשמופעל עלינו לחץ חיצוני לפתור בעיה אנחנו נתקעים, ודווקא כשאנחנו לא מנסים לחשוב עליה הפתרון מתגבש כמו מאחורי הקלעים, ומופיע בזמן שאנחנו לא מצפים לו. זו תופעה ידועה. חוץ מזה, לפעמים כשאנחנו במסגרת לימודית אינטנסיבית, אנחנו לומדים בצורה פחות יצירתית מאשר כשיש לנו הזדמנות לחשוב מתוך חופש, עניין וסקרנות. יש מקרים שבהם זה יכול להביא אתכם יותר רחוק מאשר אם הייתם עושים דברים לפי הסדר.
לפעמים לחשוב על בעיה מתמטית מתוך זה שסתם בא לכם באותו רגע, זה הרבה יותר משמעותי מלשבת ולפתור עשרות תרגילים מתוך ספר לימוד. לא שתרגול הוא דבר חסר ערך, ולא שרכישת הידע מיותרת (ממש לא), אבל החקירה הספונטנית האינטואיטיבית נותנת משהו מיוחד: תחושה שהמתמטיקה שלכם. היא כבר לא משהו ״של אחרים״ שאתם מנסים למצוא דרך להשתלב בו. זה הופך להיות כלי ואופן חשיבה לשימוש אישי, for recreational use אפילו.
ג׳ייקוב ברנט (Jacob Barnett) אמר דברים ברוח דומה בהרצאת ה־TED שלו בגיל 13 (יליד 1998). הוא טוען שפריצות דרך מדעיות היסטוריות קרו דווקא כשהחוקרים לקחו הפסקה מהמחקר (לאו דווקא בכוונה תחילה), ושזה לא מקרי. התובנות שלו על למידה, חשיבה, יצירתיות ומימוש פוטנציאל מאוד מעניינות וחכמות, אז אני אתן לו להמשיך מכאן. אני מזהירה שהוא קצת צועק מההתרגשות, אבל זו לא אשמתו. הוא אובחן כאוטיסט בגיל שנתיים ואנשי המקצוע העריכו שהוא לא ילמד לדבר לעולם. בגיל 10 התקבל לאוניברסיטה (כן, גם אני תוהה מה לעזאזל).