איך ללמוד לתכנת

למה בכלל ללמוד תכנות?

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

אבל איך?

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

ג'אווה

ג'אווה היא שפת תכנות נוחה למתחילים, עם Garbage collector מובנה, שחוסך את הצורך להתעסק בשחרור זכרון.
עוד יתרונות למתחילים:
* סביבת הריצה (JRE) מאוד יציבה, ובדרך כלל מקבלים הודעות שגיאה בעלות משמעות ולא סתם קריסות על טעויות.
* פשוטה הרבה יותר מ++C.
* השפה כוללת ממשקי תכנות לריבוי נימים (Threads), ממשקי משתמש גרפיים, ובאופן כללי, כמעט כל מה שתצטרכו בשביל לכתוב תוכניות מורכבות. (פחות ספריות חיצוניות ללמוד).

איך מתחילים:

1. הורד את הJDK, אני ממליץ על JDK 1.5 Standard edition בלי Netbeans, שאפשר למצוא פה.
2. הורד את Eclipse, שהיא סביבת פיתוח מעולה לג'אווה.
3. עבור בשיטתיות על הטוטוריאלים של סאן, תוך שאתה מנסה לכתוב כל דוגמא בעצמך.
רצוי לעבור על כל הקורסים שם, למעט אולי כמה ספציפיים שמתעסקים בדברים מאוד מסויימים שפחות רלוונטיים לכם (כמו 3D, סאונד או בסיסי נתונים).
אם אין לכם נסיון בתכנות, קחו בחשבון שאתם מסתכלים על בין שלושה חודשים לשנה של לימוד, תלוי באינטנסיביות של הלימוד שלכם.

ספרים מומלצים:

אני אישית למדתי ג'אווה בלי ספרים – הכל ממידע שהיה זמין (כבר ב1999) באינטרנט, אז אין לי המלצות קונקטיות על ספרים בג'אווה.
באופן כללי, הספר Design patterns הוא ספר חובה לכל מתכנת בימינו, אבל אני לא ממליץ לקרוא אותו לפני שאכלתם קצת חרא מהבעיות שהוא בא לפתור, או במילים אחרות, אחרי שתכתבו תוכנה גדולה יחסית.

C++

C++ היא שפה קשה למתחילים, שליטה מלאה בשפה יכולה לקחת שנה או שנתיים.
למרות זאת, C++ היתה השפה הראשונה שאני למדתי, ובהחלט נהנתי מהתהליך.

איך מתחילים:

1. לא מומלץ להתחיל ללמוד תכנות חלונות, יש הרבה מאוד דברים רעים בממשקי התכנות של חלונות, ואם לא רוצים שהם ישפיעו לרעה על נפשכם הרכה.
2. להתאפס על קומפיילר, גם וויזו'אל סטודיו טוב, בתנאי שאתם לא מפרים את תנאי מספר 1 – כלומר, להתרחק ממשקי התכנות של חלונות (לתכנת ישומי מסוף – קונסול)
3. למצוא טוטוריאל טוב למתחילים, עם דגש על מתחילים. C++ נותנת הרבה מאוד חבל למי שרוצה להטביע את עצמו.
חיפוש קצר בגוגל העלה את זה, שנראה מתאים למתחילים, אבל יש המון אחרים.
4. לעבור על הטוטוריאל בשיטתיות, תוך שאתה מנסה כל דבר חדש (ראית const? תכניס const לאפליקציה שלך. ראית exceptions? תכניס לאפליקציה וכו').

ספרים מומלצים:

הספרEffective C++ של סקוט מיירס.
הספר של סטראוסטרופ – The C++ programming language הוא ספר מצויין, אבל לא למתחילים.
עוד ספר שאני נעזר בו לפעמים הוא Thinking in C++, אבל לא קראתי אותו ממש אלא רק נעזרתי בו מפעם לפעם.

Facebook Comments

29 תגובות בנושא “איך ללמוד לתכנת”

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

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

  3. ל C++ יש את הספר "C++ כשפת אם" של יצחק גרבר (לא ברשת) שאני לא כ"כ יודע כמה הוא טוב אבל בכל מקרה, הוא בעברית..

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

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

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

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

  8. בשמחה.

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

    האם זה מסובך ליישם דבר כזה?

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

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

    "
    מה שיהיה יותר מועיל זה עדכון באימייל על תגובות לתגובה שלך, סטייל ישראבלוג.
    "

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

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

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

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

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

  12. אני חושב שהבחירה שלך בגאווה או c++ ממש גרועות. שתי השפות הן כבדות שדורשות הרבה קידוד בכדי לבצע משהו. זה בטוח נכון לC++ ולטעמי גם כך בגאווה. למזלנו מחשבים נעשים מהירים יותר ויותר ומאפשרים לנו להשתמש בשפות יותר נוחות. אני ממליץ בחום על Ruby או Python שתיהן שפות מאוד גמישות שטובות לתכנות כללי וגם לתכנות ברשת.

  13. C++ לא למתחילים, זה בטוח.
    את פיתון ורובי אני לא מכיר מקרוב (עדיין), אבל זה לא אומר שג'אווה לא מתאימה למתחילים.
    ומי שנרתע מקידוד כדי לבצע משהו, שלא ילמד תכנות.

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

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

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

  16. עמרי, תודה על התשובות, קראתי רק עכשיו.

    לגבי פיתוח על חלונות: אתה מפתח בג'אווה אני מניח. האם יש דברים בג'אווה שאפשר לפתח רק על חלונות?

    לגבי Python ו- Ruby: גם אם הן מאפשרות לעשות יותר בפחות קוד (אני מניח שזה נכון למשימות מסויימות), המטרה של ללמוד תכנות היא לימוד תכנות ולא בהכרח ללמוד איך ליצור תוכנות בהקדם האפשרי. לכן אני חושב ששפה מתקמפלת עדיפה. וצריך לבחור בשפה שמכילה את כל המאפיינים של שפה מכוונת אובייקטים מודרנית. JAVA ו- C++ הן כאלה, ו- JAVA בוודאי עדיפה ללומד המתחיל.

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

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

  18. יצחק, אני דווקא מפתח בC++ לאחרונה.
    לשאלתך, בדרך כלל לא משנה על מה אתה מפתח בג'אווה, אבל לפעמים אתה נוגע במערכת הפעלה ואז זה משנה, דוגמא היא JNotify, ספריה לקבלת אירועים על שינויים בקבצים בחלונות ובלינוקס.
    הספריה עצמה כתובה בג'אווה, אבל יש לה חלקים בC++ ובC שמתממשקים למערכת ההפעלה המקומית, ואותם כמובן צריך לפתח על המערכת הנכונה.

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

    אני בהחלט אלמד פייתון ומאוד סביר שגם את רובי יום אחד.

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

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

  21. מרעיל נשמות של ילדים תמימים! ג'אווה כשפה ראשונה? בעעע! אני ממליץ דווקא על פייתון. יש ספר תחת CC אאל"ט שצריך לתרגם בהזדמנות. אני אשלח אם אמצא את הלינק.

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

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

סגור לתגובות.