• בלוג
  • פשוט תראה לי איך עושים את זה

פשוט תראה לי איך עושים את זה

02/02/2021

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

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

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

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

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

function Numbers(props) {
    return (
        <ul>
            {Array.from({ length: 10 }).map((x, i) => <li>i + 1</li>)}
        </ul>
    );
}

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

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

function Numbers(props) {
    const numbers = [];
    for (let i=1; i <= 10; i++) {
        numbers.push(<li>{i}</li>);
    }

    return (
        <ul>{numbers}</ul>
    );
}

וגם זה עבד! אפילו שלא יקבל שום נקודות ב Stack Overflow ואף אחד לא יכתוב שום פוסט שימליץ על השיטה.

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

function Numbers(props) {
    const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    const listItems = numbers.map(x => <li>{x}</li>);

    return (
        <ul>{listItems}</ul>
    );
}

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

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

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