home  |  about us  |  privacy policy  |  other reviews  |  contact us  |

AddThis Social Bookmark Button

 

"Teach Yourself Programming in Ten Years"
Peter Norvig
http://norvig.com/21-days.html
Hypnotize

כותרת מקורית:
מאת:
מקור:
תורגם ע"י:

למד את עצמך תכנות בעשר שנים

מאת פיטר נורוויג
Director of Research, Google


מדוע כולם כל-כך ממהרים?

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

pubdate: after 1992 and title: days and (title: learn or title: teach yourself)

וקיבלתי 248 תוצאות. 78 הראשונות היו ספרי מחשבים (מס' 79 היה למד בנגאלי ב- 30 יום).
החלפתי בחיפוש את "ימים" ב"שעות" וקיבלתי תוצאות דומות להפליא: עוד 253 ספרים, עם 77 ספרי מחשבים, ואחריהם למד עצמך דקדוק וסגנון ב- 24 שעות במקום ה- 78. מתוך 200 הראשונים,
96% היו ספרי מחשבים.

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

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

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

  • פסקאל: ב- 3 ימים תוכל אולי ללמוד את התחביר (syntax) של פסקאל (אם אתה יודע כבר שפה דומה), אבל לא תוכל ללמוד הרבה בנוגע לדרך להשתמש בתחביר. בקצרה, אם היית לדוגמא תכנת בייסיק, תוכל ללמוד לכתוב תוכניות בסגנון בייסיק תוך שימוש בתחביר של פסקאל, אבל לא תוכל ללמוד עבור מה פסקאל בעצם טוב (או רע). אז לשם מה ? אלן פרליס אמר פעם: "שפה שאינה משפיעה על דרך המחשבה שלך בנוגע לתכנות, אין טעם לדעת אותה". סיבה אפשרית אחת היא שאתה צריך ללמוד טיפונת פסקאל (או יותר נכון, משהו נוסח Visual Basic או JavaScript) כי אתה צריך להתממשק עם כלי קיים ע"מ לבצע מטלה ספציפית. אבל במקרה זה אינך לומד לתכנת, אתה לומד לבצע את אותה מטלה.

  • בשלושה ימים: לרוע המזל, זה לא מספיק, כפי שהפיסקה הבאה מראה.

למד את עצמך תכנות בעשר שנים

חוקרים (הייס, בלום) הראו שלוקח בערך 10 שנים לפתח מומחיות בכל אחד מתחום נרחב של נושאים, כולל משחק שח, הלחנת מוזיקה, ציור, נגינה בפסנתר, שחיה, טניס ומחקר בנוירופסיכולוגיה וטופולוגיה. נראה שאין קיצורי דרך ממשיים: אפילו למוצארט, שהיה ילד פלא מוזיקאלי בגיל 4, נדרשו עוד 13 שנים לפני שהתחיל ליצור מוזיקה ברמה בינלאומית. בז'אנר אחר, נראה שהחיפושיות פרצו לזירה עם שרשרת של להיטי 1# והופעה בתכנית של אד סאליבן ב- 1964. אבל הם ניגנו שמועדונים קטנים בליברפול ובהמבורג מאז 1957, ובעוד שהייתה להם הצלחה נרחבת מוקדם בקריירה, ההצלחה הקריטית הגדולה האשונה שלהם, סרג'נט פפרס, יצא לאור ב- 1967. סמואל ג'קסון חשב שזה לוקח יותר מ- 10 שנים: "הצלחה בכל תחום ניתן להשיג רק בעמל של חיים. לא ניתן לרוכשה שמחיר פחות מזה". וצ'וסר התלונן "החיים כה קצרים, האומנות כה ארוכה ללמוד".

הנה המתכון שלי להצלחה בתכנות:

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

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

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

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

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

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

  • למד לפחות חצי-תריסר שפות תוכנה. כלול שפה אחת שתומכת באבסטרקציה של קלאסים (כמו Java או C++), אחת שתומכת באבסטרקציה פונקציונלית (כמו LISP או ML), אחת שתומכת באבסטרקציה תחבירית (כמו LISP) אחת שתומכת בהגדרות הצהרתיות (כמו פרולוג, או C++ Templates), אחת שתומכת בקו-רוטינות (כמו Icon או Scheme) ואחת שתומכת במיקבול (כמו Sisal).

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

  • הייה מעורב במאמץ סטנדרטיזציה של שפה. זו עשויה להיות וועדת ANSI C++, או זה עשוי להיות החלטה אם סגנון הקידוד המקומי שלכם יכלול רמות הזחה (indentation levels) של 2 או 4 רווחים. בכל דרך, אתה לומד מה אנשים אחרים אוהבים בשפה, כמה עמוק הם חשים כך, ואולי אפילו מעט בנוגע למדוע הם חשים כך.

  • הייה בעל השכל הטב לרדת ממאמץ הסטנדרטיזציה של השפה מהר ככל האפשר.

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

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

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

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


סימוכין

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.


תשובות

זמן מקורב לפעולות שונות על מעבד PC 1GHz טיפוסי, בקיץ 2001:

בצע פקודה בודדת

1 nanosec = (1/1,000,000,000) sec

שלוף מילה מזיכרון מטמון L1

2 nanosec

שלוף מילה מזיכרון ראשי

10 nanosec

שלוף מילה ממיקום עוקב בדיסק

200 nanosec

שלוף מילה ממיקום חדש בדיסק (חפש)

8,000,000 nanosec = 8 millisec

 


נספח: בחירת שפה

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

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

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

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

בהתחשב בקריטריונים הנ"ל, ההמלצות שלי לשפת תכנות ראשונה יהיו Python או Scheme. אבל הנסיבות שלך עשויים להיות שונות, וקיימות בחירות טובות אחרות. אם גילך הוא בסיפרה אחת, אתה עשוי להעדיף את Alice או Squeak (לומדים מבוגרים יותר עשויים גם ליהנות מאלה). הדבר החשוב הוא שתבחר ותתחיל.


נספח: ספרים ומקורות אחרים

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


הערות

T. Capey הצביע על כך שהעמוד באמאזון עבור Complete Problem Solver כולל כעת את הספרים "למד בנגאלי ב- 30 יום" ו- "למד עצמך דקדוק וסגנון ב- 24 שעות" מתחת למקטע "לקוחות אחרים שחיפשו פריט זה חיפשו גם את הפריטים הבאים". ככל הנראה אחוז גבוה מהאנשים המסתכלים על אותו ספר מגיעים מהעמוד הנוכחי.


Copyright © 2001 Peter Norvig
Published under permission of the Author

 

 

Webmasters:

     

Other Reviews: Singing Lessons | Piano Lessons | Drum Lessons | Forex Trading Lessons | Learn to Hypnotize | Learn Reiki | Train Dog

Copyright © 2006-2009 The Reviews Nest: Online Guitar Lessons | Learn to Play Drums