JavaRush /בלוג Java /Random-HE /בואו נתחיל מההתחלה או 'שלום, עולם ג'אווה!'
articles
רָמָה

בואו נתחיל מההתחלה או 'שלום, עולם ג'אווה!'

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

  • הציוד המגניב ביותר נבחר. לא מתחת לרמת המומחים. מגפיים קשות שפוגעות ברגליים. מגלשיים קשים שדורשים כמות עצומה של מאמץ להתכופף, העולה בהרבה על רמת הכושר הגופני של מישהו. ובכן וכו'.

  • מסלול המבחן הוא... ובכן, נניח, המסלול המארח את שלב המונדיאל בסלאלום ענק. זה מתאים בדיוק ללימודים.
  • המשך באותה רוח.
אז הנה השאלה. איך תקרא לזה מישהו? באופן אישי, כאדם שמכיר את הסקי האלפיני כ-20 שנה, אכנה אותו (וזה עדיין מתון מאוד!) - חסר סיכוי. זה בלתי אפשרי לחלוטין ללמוד שום דבר בגישה הזו. אבל דרך בטוחה להיפגע. והדבר הכי בטוח הוא לנטוש את הרעיון של סקי לנצח. אני חושב שתסכים איתי בהערכה הזו. בכל מקרה, אני כמעט בטוח שהמישהו הזה לא יצפה ששום דבר לא נעים יופנה אליו. עכשיו בואו נדמיין מישהו אחר. תן לו, נגיד, להיות סטודנט למדעי המחשב. יש לו ידע מסוים ב-C++, C#, פסקל. הוא רוצה ללמוד ג'אווה. הפעולות שלו:
  • ספרות התואמת לרמת הידע שלו (רמת אפס, בכנות) נסחפת הצידה. מבוסס על היכרות קלה עם תיאוריית C++, C# ו- OOP שהוזכרו.
  • נלקחת סביבת התכנות החזקה ביותר. נניח Eclipse או NetBeans. זה שעושה הכל בעצמו, פשוט לחץ על כפתור אחד.
  • כיישום ניסיון, אנו בוחרים... ובכן, נניח בצ'אט. אפליקציית שרת-לקוח, חלק הלקוח בצורה של יישומון, חלק השרת - שירות אינטרנט או, במקרה הגרוע, סרבלטים. מתאים בדיוק ללימודים.
שְׁאֵלָה. איך תקרא לזה מישהו? אתה יודע מה הפרדוקס? העובדה היא שבמקרה זה יהיו פחות הערכות חסרות פניות באופן משמעותי. למרות העובדה שהמצבים זהים מכל הבחינות. אלא אם כן ההשלכות על הבריאות והחיים במקרה השני פחות קטלניות. אולי זו הבעיה? המצבים באמת מאוד דומים. תיארתי אותם במיוחד באותו סגנון. ודבר מוזר: אם האבסורד של הראשון ברור, אז התרחיש השני מלווה במספר מדאיג של מפתחים מתחילים. שליטה ב-Java מתחילה בכתיבת MIDlets, לקוחות לבסיסי נתונים, צ'אטים, יצירת אתרים המבוססים על servlets... אפשר להמשיך עוד הרבה זמן. אבל הנקודה ברורה בכל זאת. במקביל, ספרות התחלתית מונחת בצד בזלזול. קרא את זה? לי? כן, אני כותב ב-C++ כבר שלוש שנים! (האפשרויות הן בפסקל, ואפילו ב-Visual Basic.) ואני יודע OOP! ובכן, באופן כללי. אז מה הלאה? ואז זה:
  • כיצד להמיר מערך של 8 בתים לטווח ארוך?
  • למה זה קרה NoClassDefFoundError?
  • למה אני מפעיל את האפליקציה ב-Eclipse ( NetBeans/IDEA/JBuilder), והכל בסדר, אבל בלי זה אני מקליד java HelloWorld.class, ויש שגיאה?
  • למה זה קורס ClassNotFoundException?
  • למה אין ספריה? כבר שמתי את זה ב-classes.zip, אבל הכל ללא הועיל!
  • למה אני יוצר מערך של אובייקטים, אבל כשאני מנסה להשתמש ברכיב של המערך אני מקבל NullPointerException?
  • ולמה ...?
  • ולמה ...?
  • ולמה ...?
למה למה למה? אבל בגלל ש-Java זה לא C++ או Pascal. ולא פרל. ידיעת השפות הללו לא רק שלרוב לא עוזרת, אלא גם מעכבת. ולו רק בגלל שלשפות האלה יש אידיאולוגיות שונות לחלוטין. אבל הדמיון החיצוני מטעה. כמובן שלכל ה"למה" וה"איך" הללו יש תשובות בספרים. בספרות ברמה הבסיסית ביותר. אבל הקריאה בו היא עצלנית (אפשרויות: בושה, אין זמן וכו'). אני מכיר די הרבה סטריאוטיפים שהועברו ל-Java על ידי מומחי C++ טובים. דוגמה אחת מהתקופה האחרונה: לעולם אל תזרקו חריג בקונסטרוקטור. למה? כן, כי ב-C++ המצב של אובייקט כזה לא מוגדר. בהתאם, מתרחשת דליפת זיכרון. ב-Java, אין בעיה כזו באופן עקרוני, בגלל נוכחות של אספן אשפה. עם זאת, ישנם אנשים שמנסים להימנע ממצבים כאלה. רק לפי סטריאוטיפ מושרש. והדבר הגרוע ביותר הוא שכתוצאה מהמאמצים הללו, הקוד הופך להיות הרבה יותר מסובך. קל ללמוד את התחביר. ולגמרי לא מספיק. האידיאולוגיה של השפה חשובה הרבה יותר. וכדי לשלוט בו בצורה היעילה ביותר, כדאי להתחיל מההתחלה. למה בדיוק ואיך? וזו שאלה אחרת. כך. איפה ואיך להתחיל. זה תלוי מה אתה רוצה להשיג. אם אתה רוצה להפוך לקוף מקודד מיומן, אתה יכול להתחיל כמעט עם כל דבר. אם אתה רוצה להיות מקצוען, הדברים קצת יותר מסובכים. הניסיון שלי נותן לי סיבה לומר את הדברים הבאים. ההבדל בין מפתח מקצועי ל"קודן" הוא שהוא מבין מה קורה. הוא עושה קצת יותר מאשר ללחוץ על כפתורים. סביבה עוצמתית היא עזרה טובה מאוד. למי שיכול בלעדיו. אבל לרוב זה הכלי היחיד של אלה שהתחילו איתו. ובהיעדרו, ערכו של הקוף המקודד הוא אפס. כי אין כפתורים ללחוץ עליהם. באופן כללי, לחיצה על כפתור יכולה ללבוש צורות מפלצתיות באמת. אחד מהקולגות שלי ראה מוצר שנכתב ב-Java. ההוראות להתקנתו התחילו במילים: "התקן JBuilder מהדיסק..." עכשיו זה כבר קטלני. אם המפתחים לא יכלו לגרום למוצר לעבוד בלי סביבת פיתוח, אז אני נרעד לחשוב איך הוא נכתב. לכל הפחות, הוא נכתב על ידי חובבים. למה אני מתכוון ב"מבין מה קורה?" זה אומר שאדם חייב להבין את הדברים הבאים:
  • מהי מכונה וירטואלית ולמה היא נחוצה?
  • מהו מחלקה מנקודת מבט של מכונה וירטואלית.
  • מהי חבילה?
  • מהי ספריה?
  • כיצד המכונה הוירטואלית מחפשת וטוענת מחלקות; מהו מטעין כיתות וכיצד הוא פועל; כמה יש כברירת מחדל; מה זה classpath.
וכו. וכולי. הרשימה עוד ארוכה. שימו לב שלא כללתי ידע ספציפי למפתח עצמו. מה זה שרשור, מה זה מחלקה מנקודת מבט של OOP ואיך זה שונה מאובייקט, איך מנהלי פריסה עובדים - כל מפתח צריך לדעת את כל זה. כל מה שרשמתי הוא יותר טכני. אבל לעתים קרובות מאוד מתברר שהכרתם חיונית כדי להבין מה עובד לא נכון. דוגמא מהחיים. יש ספריה לעבודה עם XML בשם xalan. הוא מכיל מספר חבילות javax.xml... - מנתחים, שנאים וכו'. ספריה זו פופולרית מאוד. הבעיה היא שאותן חבילות קיימות ב-J2SDK מאז גרסה 1.4. שְׁאֵלָה. איזו מחלקה תיטען בעת ​​גישה למחלקה javax.xml.transform.stream.StreamSource מהספרייה, אם xalan קיים גם ב-classpath - library או מ-J2SDK? כדי לענות על שאלה זו, עליך לדעת כיצד פועל מטעין הכיתה. ראיתי פעם דיון בן ארבעה ימים באחד הפורומים שבסופו של דבר הסתכם בנושא הזה. הקוד לא עבד נכון בדיוק בגלל שהמטעין לא לקח את הכיתה שציפתה ממנו. למה אני מתכוון? הנה העניין: ככל שסביבת הפיתוח חזקה יותר, כך היא עושה יותר עבור המפתח – כך הוא צריך לחשוב פחות. וזה כבר הו, כמה רע. כל כך קרוב לקוף. זה מוביל למסקנה הראשונה, לא משנה כמה זה נראה פרדוקסאלי:

מסקנה 1. רצוי להתחיל ללמוד Java ללא סביבה עוצמתית.

אני לא דוגל בכתיבה בעורכים ברמת הפנקס. אבל אני לא עושה את זה מהסיבה היחידה - להם, ככלל, אין הדגשת תחביר. זה דבר נוח להפליא שאין לו השפעה שלילית. אתה יכול להשתמש במשהו כמו Notepad++ , הוא מבין תחביר של Java ודרך אגב הוא חינמי. לדוגמה, יש לי את סוג הקובץ .java רשום במערכת במיוחד עבורו. אז, עורך טקסט עם הדגשת תחביר ושורת פקודה. יומיים או שלושה של ייסורים - והבנה מה זה מסלול כיתתי, איך מתורגמן מופעל ועוד המון דברים קטנים - ההבנה הזו תישאר לנצח. נוסף. הניסיון שלי נותן לי סיבה לומר שאי אפשר לרכוש ידע לשימוש עתידי. במובן שכדאי לקרוא ספרות רק כשיש שאלות שהיא תענה עליהן. אם אתה קורא ספר מבלי שיש לך שאלות לגביו, המידע ייעלם תוך שבוע. אני יודע את זה טוב מאוד, כולל מניסיוני. פעם התחלתי לקרוא ספר על סרבלטים חמש פעמים. עד שהתחלתי להתעסק איתם בעבודתי, המידע לא נקלט. וזה רחוק מלהיות מקרה בודד. פעם, לפני הרבה מאוד זמן, לפני כ-8-10 שנים, קראתי את הדברים הבאים, לצערי, אני לא זוכר את המחבר: איך ללמד אדם שפת תכנות חדשה? פשוט מאוד. אתה צריך לתת לו שפה, מספר משימות ומינימום תיעוד. לאחר מכן, לאחר מספר חודשים, כאשר הוא מתחיל לכתוב לפחות בשפה זו, ספק תיעוד מקיף. הוא ייקרא בעוד שבועיים כמו רומן בלשי, שאחריו האדם יהיה מוכן לעבודה. אני מסכים עם האמירה הזו ב-100%. בעוד חודשיים, מצד אחד, כל הבעיות הקטנות ייעלמו. התשובות להן יתקבלו באופן עצמאי, מה שיעלה מאוד את ערכן. מצד שני, כבר ייווצרו שאלות ברורות, שהתשובות עליהן יינתנו על ידי התיעוד. זה מוביל למסקנה השנייה, שנראית פרדוקסלית לא פחות מהראשונה:

מסקנה 2. רצוי להתחיל ללמוד ג'אווה ללא ספרי לימוד. תיעוד Java API + מדריך Java - זה די והותר.

תיעוד Java API הוא חובה. אני ממליץ בחום לשמור אותו מקומי, בדיסק. תצטרך ליצור איתה קשר יותר מפעם אחת, לא פעמיים, או אפילו עשר. באופן אישי, לא עובר יום שאני לא הולך לשם. אני גם ממליץ לשמור את המדריך של Java באופן מקומי. זהו מידע התחלתי המחליף לחלוטין ספר לימוד. עם זאת, יש שם כמות לא מבוטלת. אני חייב לומר שבתחומים שאני לא מתעסק בהם בעבודה, אני עדיין מוצא לעצמי משהו חדש. לקרוא הרבה זה רע. כל עוד אין בקשה, אין תגובה. גם לקרוא קצת זה רע. איפה האמצעי הזהוב? אני מקפיד על כלל זה: אני קורא עד שמתחיל להראות לי שקיבלתי את התשובה לשאלה. ב-90% מהמקרים זה לא כך. אבל ברגע זה עדיף לעצור ולהמשיך לבד. הדחיפה הראשונית התקבלה, ופתרון הבעיה באופן עצמאי ייתן הרבה יותר. כמובן, לאחר זמן מה כדאי לקחת ספרות. אבל שוב, לספרות התחלתית. גם אם נראה שכל זה שטויות, כדאי לקרוא את הפרקים הראשונים. אני כמעט יכול להבטיח שתלמדו לפחות משהו חדש. ומשהו זה עשוי להתברר מאוחר יותר כחשוב ביותר. בסדר. נראה שהבנו על מה לכתוב. איך כותבים - גם. אבל מה אני צריך לכתוב? זכור היכן המאמר הזה התחיל. האם כדאי לי להתחיל בכתיבת מערכת הודעות מיידיות? הבחירה היא כמובן שלך. נראה לי שזה לא שווה את זה. ככל שהמשימה מורכבת יותר, כך יעלו יותר שאלות. בהיעדר ניסיון, מספר שאלות שכזה יתנו תחושה של חוסר אפשרות לפתור אותן, ואחריה תחושת נחיתות, טיפשות וכו'. בסופו של דבר, זה יכול להוביל להחלטה "לעזאזל עם זה..." ולהפסקת לימוד השפה. הָהֵן. לאפקט הפוך בדיוק מזה שהיה צריך. זה מאפיין לא כל כך את ג'אווה אלא את תהליך הלמידה עצמו. אבל משום מה הם שוכחים מזה כשזה מגיע להוראת תכנות. בינתיים, משימה קטנה שהושלמה עד הסוף יכולה לתת סיפוק הרבה יותר וידע הרבה יותר גדול מאשר מערכת גרנדיוזית שננטשה ממש בתחילת הדרך. מכאן המסקנה השלישית: מסקנה 3. רצוי להתחיל ללמוד Java עם משימות שמתאימות לרמת הידע הנוכחית שלך בג'אווה. לא כדאי להתחיל ללמוד נהיגה במכונית על מכונית פורמולה 1. לא כדאי להתחיל ללמוד סקי אלפיני במסלול גביע העולם. ובאותו אופן, אתה לא צריך להתחיל לשלוט בג'אווה על ידי כתיבת משהו ענק. אני מבין שהשאפתנות היא תובענית. אבל במקרה הזה הם מופרכים. וככל שיש לך יותר שאיפות לא הגיוניות, כך יש לך פחות סיכוי להיות מקצוען. תופעה יוצאת דופן מבחינת למידה היא, באופן מוזר, פורומים שונים. אם תשתמש בהם בחוכמה. בחוכמה - זה אומר שצריך לעשות את ההפך, לא כרגיל. כלומר, לא לשאול שאלות, אלא לענות עליהן. לכל מה שיש לך כוח להגיע אליו. אם אתה חושב שאני עצמי יודע הכל, אתה טועה מאוד. כן, אני יודע הרבה. אבל יש תחומים שמעולם לא נתקלתי בהם. או שיש לי, אבל מעט מאוד. דוגמה קלאסית מהפרקטיקה שלי היא עבודה עם תעודות: חתימת קוד, חיבורים מאובטחים וכו'. ב-1998, כשכתבתי את התזה שלי, עשיתי את זה, אבל מאז הכל השתנה מאוד. במהלך השנים הצטברו לי שאלות. אפילו התחלתי לקרוא קצת ספרות. אבל, כפי שאמרתי לעיל, אתה לא יכול לקבל ידע לשימוש עתידי. זה כמו ברזל - הוא נכנס לאוזן אחת ויוצא מהשנייה. אין תוצאה מלבד חור בראש. וזה נמשך עד לאחרונה, כאשר נשאלה שאלה בפורום על חיבור SSL עם tomcat. היו כמה בעיות. ורק השאלה הזו דחפה אותי לחפור עמוק. ואם יש בקשה, יש גם מענה. לא רק שהבנתי מה הבעיה של האדם, אלא גם מצאתי המון מידע שימושי אחר. סוף סוף הבנתי איך עובדות תעודות. המאמר המקביל נמצא בתוכניות. וזה קורה כל הזמן. עבדתי לא מעט, למשל, עם ה-GUI. רק בעקבות שאלה של מישהו בפורום הבנתי חלק מהיכולות של TextLayout. לפני השאלה הזו לא היה לי מושג לגביהם. באותו אופן, לאחרונה גיליתי שמסתבר שגם JButton מפרש html ככותרת משלו. לפני זה, חשבתי שרק JLabel יכול לעשות את זה. וזה שוב בזכות הפורום. אז מסתבר: ככל שאנו עונים יותר על שאלות, אנו לומדים יותר בעצמנו. לכן אני לא מסכים עם הדעה הרווחת שאם אדם יושב בפורום, אז הוא לא עושה כלום. זה רחוק מלהיות ברור ותלוי בעיקר למה בדיוק האדם נמצא בפורום. ומה הוא עושה בעיקר - לשאול או לענות. למעשה, אתה אפילו יכול לשאול. אבל גם בחוכמה. אל תבקשו פתרון (ובמיוחד עם הפוסט הבא "בבקשה מי שיודע, תן תשובה, ולא תשאל שאלות!", שנתקלתי בו ממש לפני כמה ימים!), אלא שוב, להיפך, בקשו לקבוע את כיוון התנועה. זה לגמרי מובן שקשה למתחיל להבין איפה לחפור, כי פשוט חסר לו ניסיון. זו לא אשמתו של האדם, וזו אפילו לא בעיה. זה בסדר. כולם עברו את זה. אני כולל. לי אישית הרבה יותר חשוב שבן אדם ירצה ללמוד משהו. ולא רק לקבל תשובה, רק כדי לשכוח את זה חמש דקות אחרי מעבדת תכנות. אני תמיד אגיד לך את כיוון התנועה. אם אני מכיר אותו בעצמי. ואם אני לא יודע, לפחות אני יכול לנחש. ואני בהחלט אחפש גם את התשובה. אבל אני כנראה אף פעם לא נותן תשובות ישירות - לפחות, אני לא זוכר. אגב, בגלל זה עזבתי את אחד הפורומים. כשהתחלתי לשאול שאלות מובילות, הם הסבירו לי פה אחד שמקובל שהם פשוט עונים. ועם השאלות שלי אני יכול ללכת רחוק יותר. בהתחשב בעובדה שרמת הפורום הותירה הרבה מה לרצות, לא מעט בזכות גישה זו! – החלטתי לא לבזבז יותר זמן. אז בחר פורום לטעמך ותצא לדרך. אגב, האתר הזה הופיע דווקא בזכות אחד הפורומים. לאחר שדיברתי שם זמן מה, צברתי רשימה של הנושאים המועלים בתדירות הגבוהה ביותר והבנתי שאתר כזה יהיה מבוקש. וכך זה קרה. כמעט כל המאמרים נכתבים בעקבות כמה דיונים בפורום. או בעקבות ההתכתבות שגם אני מנהלת באופן קבוע. מהי התוצאה? עבודה, עבודה ועוד פעם עבודה. ככל שאתה מרשה לעצמך לעשות יותר עבור עצמך בשלב הראשוני, כך אתה צובר פחות ידע. וככל שהדרך למקצוענות ארוכה יותר. אבל רק אתה יכול לבחור מי אתה רוצה להיות - קוף שלוחץ כפתורים בלי דעת או איש מקצוע. ורק אתה בעצמך בוחר את הדרך שבה תוכל להשיג את זה או את זה. הדרך הראשונה ברורה. ניסיתי להראות את השני. הצעד שלכם, רבותי! קישור למקור המקורי: בואו נתחיל מההתחלה או 'שלום, עולם ג'אווה!'
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION