בסדרת הספרים של דאגלס אדאמס, מדריך הטרמפיסט לגלקסיה, מוצגת
הזכרתי כבר בפוסט קודם את השאיפה של מפתחי משחקים הרבה פעמים ליצר משחקי טריפל A. ובכן במשחקי טריפל A יש הרבה יותר שאלות לשאול, והרבה יותר תשובות לענות עליהן. לכל משחק יש את המורכבות שלו, והרבה פעמים אנשים שמתחילים לעבוד על פיתוח משחקים, נתפסים על פרויקט שהם רוצים לעשות, שהוא הרבה מעל היכולת הנוכחית שלהם. כמו שמישהו שקרא ספר בישול, לא יכול לנהל מטבח של מסעדה עם שני כוכבי מישלן. כך מישהו שמתחיל לפתח משחקים, לא יכול על ההתחלה לעשות משחק ברמה של Call of Duty. חלק חשוב מלדעת, מתי ליצר משחק איקס עיגול, מתי whack a mole ומתי god of war זה לדעת לשאול את השאלות ששואלות מה צריך כדי לבנות את המשחקים האלה. חשוב לראות שגם אם אנחנו עדיין לא יודעים את התשובות, לפחות יש לנו מספיק כלים כדי לפתור את השאלות האלה תוך כדי עבודה על המשחק. מה שבטוח זה, שאם אנחנו אפילו לא יודעים לשאול את השאלות הנכונות, המציאות תטפח לנו בפנים במוקדם או במאוחר. ואין דבר מתסכל יותר, מלעזוב פרויקט שהשקעת בו זמן רב, כי גילית מאוחר מידי שאתה פשוט לא מוכן אליו.
כשאנחנו מתחילים ללמוד תכנות, בדומה ללימודי מתמטיקה, מלמדים אותנו דרך זה שנותנים לנו לפתור בעיות. בהתחלה מציגים לנו שאלה, נותנים את אופן פתרון הבעיה, ואז נותנים לנו שאלות אחרות כדי לפתור באופן דומה. אבל זו רק ההתחלה, כי די מהר אנחנו מגיעים למצב שהשאלות, הופכות לבעיות תכנות מורכבות, שהן עוברות מ "תעשה לי החלפה של שני מספרים שלמים עם שני משתנים" שזה קצת כמו חידה, ל "תבנה תוכנה שמוצאת את כל המספרים הראשוניים עד למספר n" שזה כבר דורש יותר חשיבה.
בסופו של דבר, אנחנו נדרשים לבנות דברים מורכבים הרבה יותר, כמו תוכנה לניהול חנות, או משחק שובר קירות למשל. רק שלעשות את זה זה לא קל, כמו שלפתור שאלות מתמטיקה בנושא חדש זה לא קל, כשרק מתחילים.
טוב, הפוסט הזה יצא קצת משתפך :) אבל אלה באמת הדברים שאני מרגיש לגבי תכנות, שמסבירים למה אני כל כך אוהב לתכנת. כשאנשים נמצאים בתחילת הדרך, קשה להם פשוט לראות את זה. קשה להבין ממבט ראשון אייך המשתנים, והתנאים והפונקציות, הופכים בסופו של דבר למשחק. אבל אני מקווה שמה שאמרתי כאן, יעזור קצת למי מכם שנמצא בתחילת הדרך ונתקל בקשיים. פשוט תחשבו בגדול, אל תתנו לחוסר הבנה בהתחלה לרפות את ידיכם. אם לא הצלחתם לענות על שאלה, או לתכנת משהו, זה לא נורא. תלמדו אייך הייתם צריכים לעשות את זה, תנסו להבין מה לא עבד ולמה פיספסתם את זה, ותגשו לאתגר הבא, כל עוד תמשיכו לנסות ותתמודדו, אתם תלמדו. ובסופו של דבר הקוד יתחיל לזרום לכם מהידים, הדברים יתחילו לפעול, ואולי אפילו תשתכנעו, שהמחשב לא באמת מתנכל לכם ;)
התשובה לחיים, היקום וכל השאר
שכידוע היא 42. זו התשובה הודאית אליה הגיע המחשב הכי חזק ביקום אחרי 7 וחצי מליון שנה. מה שמעלה את השאלה - מה השאלה?
נזכרתי בבדיחה הזאת, כשחשבתי על הנושא של הפוסט הזה, אבל מה בעצם הנושא של הפוסט? הנושא של הפוסט הוא - למה קשה ללמוד לתכנת (משחקים ובכלל) ואייך אפשר להפוך את התהליך ליותר קל.
כל מי שהטיח קללות במחשב שלו אחרי שעות של חיפושים אחרי באג חמקמק, יודע כמה תכנות יכול להיות מתסכל. מצד שני, הרגעים האלה שאתה חושב על משהו, מתכנן אותו, מתכנת אותו, ושבסופו של דבר הוא עובד, ואפילו מועיל במשהו, הם רגעים של אושר וסיפוק, שלמישהו שלא מכיר את ההרגשה הזאת יהיה קשה להבין.
תכנות הוא אומנות. נכון אנחנו המתכנתים הרבה פעמים נחשבים יצורים מרובעים, אנליטיים, שכל הנושא של הרוח והאומנות רחוק מהם שנות אור. אבל קודים של מתכנתים, והאופן שהם ניגשים לבעיות, ופותרים אותן, השמות שהם בוחרים לתת למשתנים ואפילו האופן שבו הם מתעדים את הקוד (כשהם עושים את זה), כל אלה הם כמו משיכות מכחול עם צבע על קנוואס. שילוב פרטים חסרי משמעות בפני עצמם, שמתאגדים יחד ליצירה מרשימה....
זאת במקרה הטוב. האמת היא, שהרבה פעמים במיוחד בהתחלה, אנחנו מיצרים כזה זבל, שאם תתנו למישהו שמבין משהו להסתכל על זה, הוא יחזור על המנטרה "what the f$%k" בזמן שהוא יטיח את ראשו במסך בתסכול. לעשות דברים יפים בתכנות זה לוקח זמן, וזה דורש התמדה, יכולת וכישרון. לא כל אחד יכול לעשות את זה, ולכן כשמגיעים לשלב הזה כשכבר מיצרים דברים שהם באמת מיוחדים, הסיפוק הוא כה רב.
התחושה של הסיפוק הזה היא כל כך נפלאה, שזה כמו לפתור חידה, ולהרגיש פתאום שנהיית יותר חכם. אם אתם צריכים תזכורת אייך זה מרגיש, אתם יכולים ללכת לשחק משחק שמבוסס (לפחות בחלקו) על חידות חשיבה. תנסו את braid, את portal, או אולי את ico (מומלץ בחום).
אז נכון, שבשביל לתכנת ולתכנת טוב, צריך להיות חכם וכישרוני והכול, אבל יש גם הרבה אנשים שהם כן חכמים וכן כישרוניים שנתקלים בקושי מאוד גדול כשהם מתחילים ללמוד לתכנת. למה?
כי הם לא מתיחסים לתכנות כמו אומנות.
אבל בשביל להגיע לתשובה הזאת אנחנו צריכים לשאול ולענות על שאלות, על הרבה שאלות. וזה הקטע שקשה לאנשים, לאו דווקא לענות על השאלות, כמו לשאול אותן.
הרי רוב האנשים שמגיעים לתכנת, הם אנשים עם מוח ריאלי, הם טובים יותר במתמטיקה מאשר בספרות, יותר טובים בלהבין את הנתונים ולענות על שאלה, מאשר לנתח את הלך רוחו של הגיבור.
הרי רוב האנשים שמגיעים לתכנת, הם אנשים עם מוח ריאלי, הם טובים יותר במתמטיקה מאשר בספרות, יותר טובים בלהבין את הנתונים ולענות על שאלה, מאשר לנתח את הלך רוחו של הגיבור.
הם מבינים מה זה sin ופחות מעניינת אותם ההיסטוריה של סין, ו... טוב, הבנתם את הרעיון.
אני אוהב מאוד מתמטיקה, אני לא עד כדי כך טוב בה, אבל אני אוהב את האתגר, אני אוהב את זה שיש את כל הנתונים בשאלה, וכל מה שצריך זה להבין אותם, לעשות את החישוב הנכון, ולהגיע לתשובה. במיוחד אני אוהב גיאומטריה, זה תמיד עוזר שיש סרטוט שאפשר לקשקש עליו, כדי לרשום ולגלות את הנתונים. אבל האמת היא שתכנות אמיתי הוא לא בדיוק כזה. בתכנות בכלל, ובעיקר בתכנות משחקים, אין לך באמת שאלה שצריך לענות עליה, יש תשובה.
מהי התשובה? התשובה היא המטרה הסופית, מה שאנחנו רוצים שהתוכנה תשיג. זה יכול להיות תשובה לחישוב כל שהוא, תוכנה לעיצוב תמונות או משחק, המוצר הסופי הוא התשובה שלנו, אבל בשביל להגיע לתשובה הזאת אנחנו צריכים לשאול ולענות על שאלות, על הרבה שאלות. וזה הקטע שקשה לאנשים. הם לאו דווקא נתקלים בקושי, כשהם צריכים לענות על השאלות, הרבה פעמים, הם נתקלים בקושי דווקא כשהם צריכים לשאול אותן.
שאלות כמו, אייך אני גורם לדמות לזוז ולקפוץ, אייך אני מציג טקסט בשביל ניקוד, או אחת מהשאלות היותר קשות במשחקים אייך אני מזהה התנגשויות ומטפל בהן. חשוב לדעת לשאול את השאלות האלה, כי רק אחרי שנדע אייך לשאול אותן, נדע אייך לענות עליהם, ואם אנחנו יכולים לענות עליהם.
שאלות כמו, אייך אני גורם לדמות לזוז ולקפוץ, אייך אני מציג טקסט בשביל ניקוד, או אחת מהשאלות היותר קשות במשחקים אייך אני מזהה התנגשויות ומטפל בהן. חשוב לדעת לשאול את השאלות האלה, כי רק אחרי שנדע אייך לשאול אותן, נדע אייך לענות עליהם, ואם אנחנו יכולים לענות עליהם.
לימודי תכנות מתחילים תמיד כמו לימודי מתמטיקה.
מלמדים אותנו דרך לפתור בעיות
הזכרתי כבר בפוסט קודם את השאיפה של מפתחי משחקים הרבה פעמים ליצר משחקי טריפל A. ובכן במשחקי טריפל A יש הרבה יותר שאלות לשאול, והרבה יותר תשובות לענות עליהן. לכל משחק יש את המורכבות שלו, והרבה פעמים אנשים שמתחילים לעבוד על פיתוח משחקים, נתפסים על פרויקט שהם רוצים לעשות, שהוא הרבה מעל היכולת הנוכחית שלהם. כמו שמישהו שקרא ספר בישול, לא יכול לנהל מטבח של מסעדה עם שני כוכבי מישלן. כך מישהו שמתחיל לפתח משחקים, לא יכול על ההתחלה לעשות משחק ברמה של Call of Duty. חלק חשוב מלדעת, מתי ליצר משחק איקס עיגול, מתי whack a mole ומתי god of war זה לדעת לשאול את השאלות ששואלות מה צריך כדי לבנות את המשחקים האלה. חשוב לראות שגם אם אנחנו עדיין לא יודעים את התשובות, לפחות יש לנו מספיק כלים כדי לפתור את השאלות האלה תוך כדי עבודה על המשחק. מה שבטוח זה, שאם אנחנו אפילו לא יודעים לשאול את השאלות הנכונות, המציאות תטפח לנו בפנים במוקדם או במאוחר. ואין דבר מתסכל יותר, מלעזוב פרויקט שהשקעת בו זמן רב, כי גילית מאוחר מידי שאתה פשוט לא מוכן אליו.
אבל נניח שאנחנו מודעים למגבלות שלנו. אנחנו לא רוצים לעשות טריפל A, אנחנו רק רוצים להתחיל ללמוד תכנות, כדי שנוכל להכין משחק פשוט יחסית. אייך אנחנו עוברים ממצב שאנחנו רק מחכים שאחרים ישאלו אותנו שאלות, שנוכל לענות עליהן.למצב שאנחנו שואלים את השאלות הנכונות, ועונים עליהן?
ובכן, כפי שאמרתי, זה דורש איזשהו שינוי בגישה. זה דורש להתחיל להתיחס לתכנות כמו לאומנות. וזה קצת קשה, כי לימודי תכנות מתחילים תמיד כמו לימודי מתמטיקה.
ובכן, כפי שאמרתי, זה דורש איזשהו שינוי בגישה. זה דורש להתחיל להתיחס לתכנות כמו לאומנות. וזה קצת קשה, כי לימודי תכנות מתחילים תמיד כמו לימודי מתמטיקה.
כשאנחנו מתחילים ללמוד תכנות, בדומה ללימודי מתמטיקה, מלמדים אותנו דרך זה שנותנים לנו לפתור בעיות. בהתחלה מציגים לנו שאלה, נותנים את אופן פתרון הבעיה, ואז נותנים לנו שאלות אחרות כדי לפתור באופן דומה. אבל זו רק ההתחלה, כי די מהר אנחנו מגיעים למצב שהשאלות, הופכות לבעיות תכנות מורכבות, שהן עוברות מ "תעשה לי החלפה של שני מספרים שלמים עם שני משתנים" שזה קצת כמו חידה, ל "תבנה תוכנה שמוצאת את כל המספרים הראשוניים עד למספר n" שזה כבר דורש יותר חשיבה.
בסופו של דבר, אנחנו נדרשים לבנות דברים מורכבים הרבה יותר, כמו תוכנה לניהול חנות, או משחק שובר קירות למשל. רק שלעשות את זה זה לא קל, כמו שלפתור שאלות מתמטיקה בנושא חדש זה לא קל, כשרק מתחילים.
אז אייך הסתכלות על תכנות כאומנות עוזרת כאן. ובכן, אם פתרון השאלה הוא המטרה, והכלים הם מה שאנחנו לומדים בתכנות, למשל על משתנים או תנאים, אז זה מה שהם ישארו, כלים לפתרון הבעיה. וזה מה שצריך לשנות. כי אם סטודנט למדעי המחשב חושב על משתנים, או על תנאי if רק לפי הדוגמאות שהראו לו, אז הוא אולי יתמודד עם פתרון הבעיה שעומדת מולו בצורה די טובה, אבל זה לא יכין אותו באמת להמשך. במקום זה, אם הוא ישנה את צורת החשיבה שלו, אם הוא יסתכל על תכנות כמשהו יצרני, משהו אומנותי, ועל משתנים ועל תנאים if ככלים, אז כל הגישה שלו תהיה אחרת. במקום לחשוב אייך הוא משתמש ב int כדי לחשב סכום של סדרה, הוא יחשוב לאיזה צורך המשתנה מהסוג הזה int יכול לשמש אותו באופן כללי.
הם מפסיקים לפחד מתחושת הכישלון שבלא להיות מסוגלים לענות על שאלה מסוימת, ולהסיק מזה שהם לא טובים בתכנות.
כשיוצא לי לעזור לאנשים שמתחילים ללמוד תכנות, כשהמטרה שלהם היא לבנות משחקים בסופו של דבר, תמיד אני משתדל לגרום להם להסתכל על הכלים שיש להם ככלים. אני משתדל לשאול אותם שאלות ברמה התיאורטית. למשל, אם היינו בונים משחק יריות, אילו משתנים היינו צריכים. באיזה משתנה היינו משתמשים כדי ליצג שם של שחקן, באיזה משתנה הינו משתמשים ליצג סוג של שחקן, באיזה האם האם השחקן עדיין חי, פצוע, או מת. בהתחלה אני קצת עוזר עם הפתרון של השאלות, ואז הם פותחים את הראש לזה ש int הוא אולי מספר שלם, אבל מעבר לזה שהוא יכול לשמש לספור ניקוד, הוא גם יכול ליצג סוג של חייל (1-לוחם 2-מהנס 3- מרגל וכן הלאה). ובהמשך לכך גם לשמש לשימושים אחרים, שהם לאו דווקא בעלי שימוש מספרי.
אחרי זה אני שואל שאלות כמו, אייך אנחנו יודעים ששחקן מת, מתי אנחנו בודקים את זה. כל השאלות האלה נשאלות כאמור, באופן מאוד תיאורטי, אבל הן עוזרות להוציא סטודנטים ומתכנתים מתחילים, מהתבנית של "זו השאלה וצריך לענות עליה," לכיוון מחשבה של "יש לי את כל הכלים הנפלאים האלה, אייך אני יכול להשתמש בהם הכי טוב. מה אני יכול לעשות איתם ומה אני יכול להשיג איתם".
כשיוצא לי לעזור לאנשים שמתחילים ללמוד תכנות, כשהמטרה שלהם היא לבנות משחקים בסופו של דבר, תמיד אני משתדל לגרום להם להסתכל על הכלים שיש להם ככלים. אני משתדל לשאול אותם שאלות ברמה התיאורטית. למשל, אם היינו בונים משחק יריות, אילו משתנים היינו צריכים. באיזה משתנה היינו משתמשים כדי ליצג שם של שחקן, באיזה משתנה הינו משתמשים ליצג סוג של שחקן, באיזה האם האם השחקן עדיין חי, פצוע, או מת. בהתחלה אני קצת עוזר עם הפתרון של השאלות, ואז הם פותחים את הראש לזה ש int הוא אולי מספר שלם, אבל מעבר לזה שהוא יכול לשמש לספור ניקוד, הוא גם יכול ליצג סוג של חייל (1-לוחם 2-מהנס 3- מרגל וכן הלאה). ובהמשך לכך גם לשמש לשימושים אחרים, שהם לאו דווקא בעלי שימוש מספרי.
אחרי זה אני שואל שאלות כמו, אייך אנחנו יודעים ששחקן מת, מתי אנחנו בודקים את זה. כל השאלות האלה נשאלות כאמור, באופן מאוד תיאורטי, אבל הן עוזרות להוציא סטודנטים ומתכנתים מתחילים, מהתבנית של "זו השאלה וצריך לענות עליה," לכיוון מחשבה של "יש לי את כל הכלים הנפלאים האלה, אייך אני יכול להשתמש בהם הכי טוב. מה אני יכול לעשות איתם ומה אני יכול להשיג איתם".
מה שקורה כשאנשים משנים את כיוון המחשבה לכיוון זה, שהם מפסיקים לפחוד.הם הופכים ליותר פרואקטיבים, יותר יוזמים ופחות עונים, ובקיצור יותר ראש גדול. הם מפסיקים לפחד מתחושת הכישלון שבלא להיות מסוגלים לענות על שאלה מסוימת, ולהסיק מזה שהם לא טובים בתכנות. הסיטואציה של להסתכל על רשימת שאלות בתכנות, ולא לדעת אייך לפתור אותן, היא תחושה שמאוד מתסכלת מן הסתם.
בשלב ההתחלתי של לימודי תכנות, עדיף להמנע מלשאול שאלות שהן בעיות תכנותיות שיש דרך יחידה לפתור, ושלמישהו בלי רקע בתכנות קשה להתמודד איתן. במקום זאת כדאי לשאול שאלות, שמעודדות את הסטודנטים לחשוב אייך אפשר להשתמש בכלי התכנות להשגת מטרות שונות. בגלל שאלו הן שאלות פתוחות, שמעודדות את אלה שלומדים תכנות לחשוב בעצמם, ולשמור על ראש פתוח, אז הן פחות מרתיעות, מעודדות יצירתיות, ונותנות מקום ליותר הצלחות. הן נותנות לסטודנטים לרכוש בטחון, והבנה אמיתית של הכלים העומדים לרשותם. וברגע שהם מתחילים לחשוב בכיוון הזה, הם מגיעים למצב שהם יותר מוכנים להתמודד עם בעיות תכנות ספציפיות.
ללמוד לתכנת זה קצת כמו ללמוד לחשוב בצורה מתקדמת. האופן שבו אתה מתיחס לדברים משתנה, וזאת גם בזמנים שאתה לא יושב מול מחשב ומקליד. כשאתה מתעסק כל היום וכל הזמן, בלפתור בעיות, ולהמציא דברים, אפילו אם אלו דברים פעוטים יחסית כמו אייך לסכום סידרה חשבונית, זה כאילו שהמבנה של המוח שלך משתנה. אתה גם בחיים מוצא שאתה מתחיל יותר להיות פעיל מאשר מופעל. אתה מתחיל יותר לשאול שאלות, ולשים לב לדברים, ולחשוב עליהם, מאשר סתם לזרום עם מה שקורה מסביבך. ואתה מתחיל למצוא כל מיני פתרונות שלא היית חושב עליהם קודם, לבעיות שאתה נתקל בהן. אבל אחד הדברים הבאמת מדהימים, הוא האופן שאתה מתחיל להשתמש יותר בדברים שאתה יודע, או שנתקלת בהם. אני יודע שבמקרה שלי, כל היחס שלי למתמטיקה ולמספרים השתנה בעקבות זה שלמדתי לתכנת.
בשלב ההתחלתי של לימודי תכנות, עדיף להמנע מלשאול שאלות שהן בעיות תכנותיות שיש דרך יחידה לפתור, ושלמישהו בלי רקע בתכנות קשה להתמודד איתן. במקום זאת כדאי לשאול שאלות, שמעודדות את הסטודנטים לחשוב אייך אפשר להשתמש בכלי התכנות להשגת מטרות שונות. בגלל שאלו הן שאלות פתוחות, שמעודדות את אלה שלומדים תכנות לחשוב בעצמם, ולשמור על ראש פתוח, אז הן פחות מרתיעות, מעודדות יצירתיות, ונותנות מקום ליותר הצלחות. הן נותנות לסטודנטים לרכוש בטחון, והבנה אמיתית של הכלים העומדים לרשותם. וברגע שהם מתחילים לחשוב בכיוון הזה, הם מגיעים למצב שהם יותר מוכנים להתמודד עם בעיות תכנות ספציפיות.
ללמוד לתכנת זה קצת כמו ללמוד לחשוב בצורה מתקדמת. האופן שבו אתה מתיחס לדברים משתנה, וזאת גם בזמנים שאתה לא יושב מול מחשב ומקליד. כשאתה מתעסק כל היום וכל הזמן, בלפתור בעיות, ולהמציא דברים, אפילו אם אלו דברים פעוטים יחסית כמו אייך לסכום סידרה חשבונית, זה כאילו שהמבנה של המוח שלך משתנה. אתה גם בחיים מוצא שאתה מתחיל יותר להיות פעיל מאשר מופעל. אתה מתחיל יותר לשאול שאלות, ולשים לב לדברים, ולחשוב עליהם, מאשר סתם לזרום עם מה שקורה מסביבך. ואתה מתחיל למצוא כל מיני פתרונות שלא היית חושב עליהם קודם, לבעיות שאתה נתקל בהן. אבל אחד הדברים הבאמת מדהימים, הוא האופן שאתה מתחיל להשתמש יותר בדברים שאתה יודע, או שנתקלת בהם. אני יודע שבמקרה שלי, כל היחס שלי למתמטיקה ולמספרים השתנה בעקבות זה שלמדתי לתכנת.
אז פתאום המתמטיקה הקרה והקשוחה הזאת, שמפחידה כל כך הרבה ילדים בבתי הספר, הופכת לכלי שמאפשר לעשות קסמים על המסך.
כיום אחד הדברים שאני הכי אוהב בתכנות, הוא להשתמש בידע מתמטי, שתמיד היה נראה לי בעיקר תיאורתי כשלמדתי אותו, ולהפוך אותו לכלי שימושי. מתמטיקה היא כל כך סכמטית ומדויקת, אבל כשאני משתמש במשפט פיתגורס, כדי לקבוע כמה רחוקה הדמות במשחק שאני יוצר מהאויב שלה, או שאני משתמש בסינוסים וטנגנסים, כדי לגרום לעיניים של הדמות שלי, לעקוב אחרי משהו עם המבט שלה, אז פתאום המתמטיקה הקרה והקשוחה הזאת, שמפחידה כל כך הרבה ילדים בבתי הספר, הופכת לכלי שמאפשר לעשות קסמים על המסך. שמאפשרת ליצור עולם, ושאני בתור המתכנת יוצר אותו. (וטוב שיש גרפיקאים כמובן, כי אחרת העולם הזה באמת לא היה כזה מושך...).
כיום אחד הדברים שאני הכי אוהב בתכנות, הוא להשתמש בידע מתמטי, שתמיד היה נראה לי בעיקר תיאורתי כשלמדתי אותו, ולהפוך אותו לכלי שימושי. מתמטיקה היא כל כך סכמטית ומדויקת, אבל כשאני משתמש במשפט פיתגורס, כדי לקבוע כמה רחוקה הדמות במשחק שאני יוצר מהאויב שלה, או שאני משתמש בסינוסים וטנגנסים, כדי לגרום לעיניים של הדמות שלי, לעקוב אחרי משהו עם המבט שלה, אז פתאום המתמטיקה הקרה והקשוחה הזאת, שמפחידה כל כך הרבה ילדים בבתי הספר, הופכת לכלי שמאפשר לעשות קסמים על המסך. שמאפשרת ליצור עולם, ושאני בתור המתכנת יוצר אותו. (וטוב שיש גרפיקאים כמובן, כי אחרת העולם הזה באמת לא היה כזה מושך...).
טוב, הפוסט הזה יצא קצת משתפך :) אבל אלה באמת הדברים שאני מרגיש לגבי תכנות, שמסבירים למה אני כל כך אוהב לתכנת. כשאנשים נמצאים בתחילת הדרך, קשה להם פשוט לראות את זה. קשה להבין ממבט ראשון אייך המשתנים, והתנאים והפונקציות, הופכים בסופו של דבר למשחק. אבל אני מקווה שמה שאמרתי כאן, יעזור קצת למי מכם שנמצא בתחילת הדרך ונתקל בקשיים. פשוט תחשבו בגדול, אל תתנו לחוסר הבנה בהתחלה לרפות את ידיכם. אם לא הצלחתם לענות על שאלה, או לתכנת משהו, זה לא נורא. תלמדו אייך הייתם צריכים לעשות את זה, תנסו להבין מה לא עבד ולמה פיספסתם את זה, ותגשו לאתגר הבא, כל עוד תמשיכו לנסות ותתמודדו, אתם תלמדו. ובסופו של דבר הקוד יתחיל לזרום לכם מהידים, הדברים יתחילו לפעול, ואולי אפילו תשתכנעו, שהמחשב לא באמת מתנכל לכם ;)
לסיום אני אספר לכם משהו על הפוסט שלא פורסם. הפוסט האחר, ששמור אצלי בארכיון למקרה ש.
חבר שלי, שהוא גם מתכנת לאיפון, שאל אותי למה אני לא כותב איזה פוסט הארדקור על תכנות. כאילו אני מדבר על גרפיקה, על גיים דיזייגן, אבל למה לא תכנות, הדבר שאני הכי עושה ביום יום. אז התחלתי לכתוב פוסט על הכלים שאפשר לתכנת איתם משחקים מה ההבדל ביניהם, ועל objective c, ו cocos2d ו box2d שאלו הדברים שאני בעיקר משתמש בהם כיום. ואתם יודעים מה, יצא לי פוסט ממש משעמם.
מגיעים לשלב שכתיבת קוד הופכת לאומנות. וזה גם השלב שנותן לנו המתכנתים את תחושת הסיפוק הזאת של הישג.חבר שלי, שהוא גם מתכנת לאיפון, שאל אותי למה אני לא כותב איזה פוסט הארדקור על תכנות. כאילו אני מדבר על גרפיקה, על גיים דיזייגן, אבל למה לא תכנות, הדבר שאני הכי עושה ביום יום. אז התחלתי לכתוב פוסט על הכלים שאפשר לתכנת איתם משחקים מה ההבדל ביניהם, ועל objective c, ו cocos2d ו box2d שאלו הדברים שאני בעיקר משתמש בהם כיום. ואתם יודעים מה, יצא לי פוסט ממש משעמם.
יצא לי פוסט משעמם, כי תכנות הוא לא הארדקור, הוא לא משהו יבש וטכני. ברור שיש לו את הצד הזה מאחורה, כי מה לעשות, מחשבים הם כאלה, אם אתה לא מדבר איתם ב 0 ו-1 אז הם מתיחסים אליך כ 0 1 ולא עושים מה שאתה אומר להם. (ועל זה נאמר יש 10 סוגי אנשים בעולם כאלה שמבינים בינארית וכאלה שלא). אבל זה לא באמת חשוב שאני אסביר על ניהול זיכרון, או על הבדלי סינטאקט. זה אומנם יכול לשמש כמה אנשים, שבאמת רוצים ללמוד את זה, אבל יש מקורות מידע כל כך הרבה יותר טובים ממני לנושאים האלה. הרי זה בעיקר סוג הדברים שלומדים כשעושים תואר במדעי המחשב, או כשעושים קורס בתכנות.
מה שאני מנסה לעשות בפוסטים האלה הוא משהו אחר, אני מנסה להראות את הדרך הכיפית, הנעימה והמעניינת לפתח משחקים. 12 שנים למדתי ביסודי ובתיכון, וחיבבתי מתמטיקה, אבל רק להשתמש בה באמת בקוד גרם לי לאהוב אותה, ואני רוצה שגם אנשים אחרים ילמדו לאהוב מתמטיקה ותכנות, ואת כל שאר הנושאים ה "קשים" שדרושים על מנת ליצור משחקים טובים. הרבה אנשים בעולם נמצאים בקשר עם בני זוג, שהם קודם כל אהבו, ורק אחר כך באמת למדו להבין, ואז התחילו לאהוב באמת. אותו דבר יכול לקרות עם תכנות ומתמטיקה, מתחילים בלאהוב דברים מסויימים, וככול שמכירים אותם יותר, מתחילים ללמוד ולאהוב דברים נוספים. ואז באמת מגיעים לשלב שכתיבת קוד הופכת לאומנות. וזה גם השלב שנותן לנו המתכנתים את תחושת הסיפוק הזאת של הישג.
הפוסט הזה מוקדש לאייל, מתכנת האיפון עם השם משפחה הכי שווה במדינה. וגם לבן, שהגיש לאחרונה את המשחק הראשון שהוא עבד עליו ל אפ-סטור, ומי שלא ראה אותו רוקד במשרד אחרי זה, לא ראה שימחת בית השואבה מימיו.
דווקא בתור גיק הארד-קור, כן הייתי שמח לקרוא מאמר טכני "יבש" שמשמש כמקור ראשוני לקריאה בנוגע לתכנות משחקים, סביבות עבודה מתאימות, רעיונות למשחקים פשוטים לתכנת על מנת לצבור נסיון וידע, וכו'.
השבמחקפופסט מצויין :)!
השבמחקאהבתי מאוד והתחברתי מאוד .!
בהחלט יצא לי למזלי להתחיל לתכנת בצורה קצת שונה. כזאתי שאולי בזכותה נקודת המבט שלי על התכנות די דומה למה שאתה מציג כאן.
ובאמת כשאני מתכנת מעבר לתחושת סיפוק בסוף אני בהחלט אוהב גם את התהליך עצמו ..
הי ירון,
השבמחקכיוון שאתה לא היחיד, אני חושב אולי לעשות משהו כזה. אולי אני אכתוב מספר פוסטים, שאני אלמד לבנות משהו ב gameMaker (או אולי אני אכנס ל game salad) ואז אני גם אלמד משהו על המנוע עצמו, וגם אסביר אייך העבודה איתו מלמדת דברים שרלוונטים גם לפיתוח משחקים באופן כללי. זה משהו שיענין אותך, או שהיית מעדיף ממש הארקור תכנות, כי אם כן, אז אולי עדיף שאני אתן לך, או אעשה פוסט בכלל על הפניות יותר ספציפיות, אייך ללמוד לתכנת משחקים.
הי לידור, תודה רבה על התגובה. אתה גם מתעסק בתכנות למשחקים?
השבמחק