JavaRush /בלוג Java /Random-HE /קיי הורסטמן ו-1500 המילים שלו על איך להפוך למתכנת ג'אווה ...

קיי הורסטמן ו-1500 המילים שלו על איך להפוך למתכנת ג'אווה טוב יותר

פורסם בקבוצה
רוב הסיכויים שכבר שמעתם את השם Cay S. Horstmann. הוא אדם בולט למדי בעולם הג'אווה ומחברם של ספרים רבים על השפה האהובה שלנו. ביניהם הקורס הקלאסי "Core Java" (שפורסם ברוסית בספר בן שני הכרכים "Java. Professional's Library" ) וסדרה עם סיכום קצר של מהות "Java for Disaient" (שפורסם ברוסית "Java SE 8. קורס מבוא" ו "Java SE 8. קורס בסיסי " ). הוא נושא את התואר הגאה "אלוף ג'אווה". ובקישור הזה תוכלו למצוא את אתר בית הספר הישן שלו עם מידע מעניין.
קיי הורסטמן ו-1500 המילים שלו על איך להפוך למתכנת ג'אווה טוב יותר - 1
אנו מביאים לידיעתכם תרגום של מאמר למשאב InformIT , בו משמיע קיי מספר טיפים למתכנתים מתחילים וממשיכים כיצד להשתפר במקצועם. יום אחד, ג'ניפר בורטל, מנהלת העריכה של InformIT, ביקשה ממני לכתוב בשורה כיצד להפוך למתכנת Java טובה יותר. היא הציעה שאני, המחבר של Core Java for the Impatient, עשוי לדעת משהו על זה. "אין דבר קל יותר, פשוט תקנה ספר," חשבתי בהתחלה. אבל התשובה הזו לא עבדה, כי אני צריך להתאים אותה ל-1500 מילים, ועד לנקודה זו יש רק 62 מהן * ( כמובן שבעת תרגום המאמר לא ניסינו לשמור על מספר המילים - תרגום בקירוב ). לאחרונה קיבלתי מייל מחבר מפתח שנשאל בראיון מדוע הקוד הבא אינו בטוח בשרשור:
class ThreadSafeClass extends Thread
{
     private static int count = 0;

     public synchronized static void increment()
     {
         count++;
     }

     public synchronized void decrement()
     {
         count--;
     }
}
חבר שלי החליט שהקוד בדוגמה הזו בטוח בשרשור, והסכמתי איתו, וציינתי שחסרה מילת מפתח אחת staticבשיטה השנייה, וברגע שהיא הוכנסה, הגישה נשלטה על ידי הנעילה המובנית של אובייקט הכיתה. אמרתי גם שזו לא שאלת ראיון טובה כי אם אתה צריך מונה שרשורים, עדיף לך להשתמש ב- AtomicInteger. אבל אז באמצע הלילה התעוררתי ותהיתי: מה אם המילה הזו staticנשארה בחוץ מסיבה כלשהי? אולי איזה מראיין ערמומי בנה בכוונה את הדוגמה הזו בצורה כזו שתטעה את המועמדים? אז כתבתי בחזרה למפתח ששאל את השאלה ואמרתי שכנראה טעיתי קודם: ביקום מקביל שנקרא Interview Questions, התשובה לשאלה הזו היא: "השיטה השנייה מכילה נעילת אובייקט". אחרי התשובה הזו, הבחור שאל אם אני מנהל ערוץ יוטיוב שבו אני מלמד איך לטפל בבעיות מסוג זה של ראיונות. אבוי, אני לא עושה את זה. אני מלמד מדעי המחשב וכותב ספרים, אבל המטרה העיקרית שלי היא לא לעשות "פותרי בעיות ראיונות" טובים יותר, אלא להפוך את התלמידים שלי למתכנתים טובים יותר. פעם, פיטר נורוויג ( מדען אמריקאי בתחום הבינה המלאכותית, מנהל המחקר של גוגל - בערך טרנס. ) כתב מאמר נפלא בבלוג שלו. הוא טען שספרים שמבטיחים ללמד אותך ג'אווה תוך 24 שעות או 21 ימים הם פשוט מגוחכים. קשה לא להסכים איתו: לוקח 10 שנים, או אולי 10,000 שעות, כדי להפוך למומחה בכל תחום. וזה ידוע שמומחים מעבדים מידע בצורה שונה מטירונים. בניסוי קלאסי הראו לשחקני שחמט מנוסים ומתחילים לוח שח עם סידור מסוים של כלים למשך מספר שניות, ולאחר מכן הוא הוסתר והתבקש לסדר את הכלים כפי שהם. מתחילים לא התמודדו עם המשימה היטב, אבל למומחים לא היו בעיות. אבל רק בתנאי חשוב אחד: סידור הכלים חייב להתאים למשחק האמיתי . אם החלקים הונחו באופן אקראי, המומחים לא היו טובים יותר בבנייה מחדש של הלוח מאשר הטירונים.
קיי הורסטמן ו-1500 המילים שלו על איך להפוך למתכנת Java טוב יותר - 2
לכן עניתי על השאלה מהמכתב בדיוק כפי שעניתי. הרקע שלי הוא בתכנות בפועל, לא בראיון, אז הוספתי אינסטינקטיבית את מילת המפתח החסרה והגעתי למסקנה "שגויה". הייתי רוצה לחשוב שעדיין אקבל לעבודה אחרי שהסברתי מה קרה ומדוע לעולם לא אכתוב קוד כמו הדוגמה בלי התוספת שלי. אולי, אם תשובה כזו לא הייתה מספקת אותם, אני עצמי לא הייתי רוצה לעבוד איתם.
עכשיו, אני לא חושב שלימודים למבחני הסמכה או ראיונות יהפכו אותך למתכנת טוב יותר. אני גם בטוח שקנייה של מספר רב של ספרים על תכנות ולאחר מכן קריאתם מכסה לכריכה גם לא תעבוד (אם כי אני, כמחבר של הספרים האלה ממש, לא הייתי רוצה להודות בכך!). למעשה, דרך ממש טובה להפוך למתכנת טוב יותר היא ליצור כמה שיותר תוכנות . מדי פעם אני מלמד קורס מבוא למדעי המחשב באוניברסיטה שלי. זה ללא ספק הקורס הכי קשה שלימדתי אי פעם. זה אפילו יותר קשה מהקורס לתואר שני. כשהתחלתי לעבוד כפרופסור צעיר, העברתי בשקדנות הרצאות לסטודנטים שבהן כיסיתי בצייתנות את נושאי התכנות, כמו ההבדל בין לולאות forללולאות . לאחר מכן הקצתי לתלמידים ארבעה פרויקטים בני שלושה שבועות. והנושא הזה נלמד כך מאז ראשית הימים בכל האוניברסיטאות. לאחר הניסיון הראשון שלי, המדריכה של הקורס בסמסטר ב' התלוננה שרוב הסטודנטים שלי לשעבר לא ממש מבינים אפילו לולאות פשוטות אחרי הסמסטר הראשון שלהם לתכנות. ותוצאות כאלה התרחשו גם מאז ראשית הזמן. זוכרים את המאמר "FizzBuzz או למה מתכנתים לא יכולים לתכנת" ? כאשר אתה לומד שפה זרה, רוב המשימות הן תרגילים ותרגול, לא תיאוריה בכלל. חשוב ביותר "לדחוף" ידע אל תת המודע. נקודת המפנה מגיעה כאשר אתה כבר לא צריך לחשוב באופן פעיל על כל מחזור, או (במקרה של צרפתית), כל פועל לא סדיר. אם הרגע הזה הגיע, אז אתה מוכן לעבור לשלב הבא. ואין ברעיון הזה שום דבר מהפכני. whiledo
קיי הורסטמן ו-1500 המילים שלו על איך להפוך למתכנת ג'אווה טוב יותר - 3
המפתח להכל הוא משוב מיידי. כמה פסיכולוגים מאמינים שאנחנו יכולים לעשות הרבה יותר עם למידה מבוססת מחשב עם משוב מיידי. לדוגמה, בניסוי קלאסי אחר, טייסים מתאמנים שאפתנים עברו אימון בו הם נדרשו להסתכל שוב ושוב על לוח המחוונים ולתאר את תנועת המטוס. במקביל, הם קיבלו משוב מיידי המציין אם הם עשו זאת נכון או לא. לאחר שעתיים של אימונים, הם גברו על הטייסים המנוסים. כמובן, זה לא אומר שאפשר לשלוח אותם מיד לטיסה אמיתית, אבל הם כבר לא היו עצבניים מהחוגות המגוונות והרבות בלוח המחוונים. לכן, אם אתה רק מתחיל ללמוד ג'אווה, לעשות הרבה תרגילי תרגול כדי לתרגל זה הרעיון הטוב ביותר. ישנם מספר רב של אתרים וקורסים מקוונים הבודקים אוטומטית את נכונות הקוד שלך. בחר באחד שמציע אתגרים אמיתיים ולא גובלדיגוק. אחרי הכל, אתה רוצה שתת המודע שלך יהיה טוב בקוד שאתה באמת כותב בפועל. זו הסיבה שאני לא מאוד מתלהב מדוגמאות תכנות שמשתמשות במצבים מתוכננים, כמו שיעורי בעלי חיים עם שיטות מיאו ונובחות. לאחר זמן מה, תשלוט ביסודות התכנות. כדי לעבור לשלב הבא, אתה יכול לכתוב כמה פרויקטים. לפני מספר שנים, פורטל InformIT שאל מתכנתים מנוסים שאלה: "מהי הדרך הטובה ביותר עבור מתכנת ללמוד שפה חדשה?" אם נסכם את תשובותיהם, נוכל להסיק את הדברים הבאים: "השתמש בשפה זו בפרויקט הנוכחי שלך." אז, חשבו על מה שתמיד רציתם ליישם - וממשיכים. לפני 20 שנה, כשג'אווה עדיין הייתה צעירה מאוד,ידידי ולעתים מחבר שותף גארי קורנל ואמר, "קיי, אנחנו הולכים לכתוב ספר על ג'אווה." תשובתי הייתה שלא הוא ולא אני באמת יודעים כלום על הג'אווה הזו, והוא השיב לה: "אז מה? יש לנו כבר עסקת ספרים". אין מה לעשות. היינו צריכים למהר כי מישהו אחר הכריז על יציאתו הקרובה של הספר "למד את עצמך להיות ג'אווה דמה ב-24 שעות" ... אני חושב שזה נקרא משהו כזה ( קיי עושה צחוק מסדרת הספרים "בשביל בובות" - "עבור בובות" ניתן לתרגם את המילה "דמה" כ"דמה" - הערת המתרגם ). כדי ללמוד שפה חדשה התחלתי בפרויקטים - כתיבת תוכנית שיצרה ממשק משתמש לתכנון פרישה ולאחר מכן תוכנית שהתחברה לאתר מזג אוויר והציגה דוח מזג אוויר. אחריו - תוכנית המדמה תנועת מכוניות על הכביש המהיר. באותו זמן, התוכניות האלה היו פשוט מדהימות!java.awtjava.netוחוטים ( threads). והייתי צריך ללמוד איך לגרום לזה לעבוד בפועל, לא רק מה שהתיעוד אמר. באותה תקופה אלו היו דברים שונים לגמרי. לכן Core Java [1] היה להיט: זה לא היה בשביל בובות.
קיי הורסטמן ו-1500 המילים שלו על איך להפוך למתכנת Java טוב יותר - 4
באותה תקופה, לימוד ג'אווה היה הרבה יותר קשה. לא היו לנו אתרים כמו Stack Overflow ( וגם לא היה לנו JavaRush - הערת עורך ). בשלב זה, אני עובר לגבש את העצה הבאה לשיפור "מיומנות" התכנות שלך. לכן, כשאתה עובד על הפרויקט שלך, אתה חייב להיתקע איפשהו. במקרה זה, עבור לפורום מיוחד ונסה למצוא תשובות. תאמין לי, זה רעיון נהדר . ראשית, תשאל שאלות שכבר נשאלו פעמים רבות בעבר. אבל בקרוב תצבור ידע והשאלות שלך יהפכו לייחודיות יותר. זו דרך מדהימה ללמוד! כמובן, זה לא רק העתקה והדבקה של פיסת קוד ולשאול: "מה עליי לעשות עם זה עכשיו?" צריך לרדת לעומקו, להסביר אילו ניסיונות כבר עשיתם לפתור את הבעיה לפני שנתקעתם. אגב, ברוב המקרים, בזמן שאני מנסח שאלה בכתב, אני מוצא את התשובה בעצמי וכל מה שאני צריך לעשות הוא לומר לעצמי: "מה הבעיה פה, זה לא פשוט" עוד לפני ששלחתי את השאלה . אבל גם אם זה לא יקרה... האמן לי, שאלות מתחשבות נוטות למשוך תשובות מתחשבות. רק זכרו להחזיר את הטוב החברתי על ידי תשובה לשאלות המתחשבות של אנשים אחרים. גם שאילת שאלות וגם מענה על שאלות מתחשבות הופכים אותך למתכנת טוב יותר. "אז מה עם הספרים? - אתה שואל. "האם הם באמת הפכו מיושנים לחלוטין ובלתי הפיכים הודות לגוגל ול- Stack Overflow ?" בכל פעם שאני מנווט בטכנולוגיה חדשה, אני מאמין שאני אדם אמיץ ויכול להתגבר על כל הקשיים לבד. אבל שעה של ייסורים חסרי טעם מפנה את מקומה לשעה של שפיות – ואני קונה ספר. ספרים טכניים הם מציאה מדהימה בימים אלה. אם אני משלם $40 עבור ספר אלקטרוני ומקבל תשובה מהירה לשאלה אחת בלבד, כבר החזרתי את הכסף שלי. אני שונא לאכזב את חבריי הסופרים, אבל מעולם לא קראתי ספר טכני מתחילתו ועד סופו. אני מתחיל איפה שאני חושב שהבעיה שלי והפתרון שלה כתובים, וקורא עד שאני מבין איך לפתור אותה. מסיבה זו, אני מנסה כרגע לכתוב ספרים שניתן לקרוא בצורה כזו. גישה זו הולידה את הסדרה "לחסרי סבלנות". ובשלב זה עלי להפסיק - חרגתי ממגבלת העריכה של 1500 מילים. הרשו לי רק להוסיף שכדי להפוך למתכנת טוב יותר, התחל בכך שתכיר בכך שיש רמות רבות של ידע.
  1. ראשית, "משוך" מבני שפה בסיסיים אל תת המודע שלך, כלומר, הביאו את הידע שלהם לאוטומטיות על ידי פתרון מספר רב של תרגילים.

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

  3. לאחר מכן הצטרף לקהילה שבה תוכל לשאול ולענות על שאלות.

  4. לאחר שתעשה זאת, תוכל לדבר עם ידע וניסיון בראיונות. וזה לא ממש משנה אם תפתרו את הפאזל המושקע.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION