JavaRush /مدونة جافا /Random-AR /لنبدأ من البداية أو "مرحبًا، عالم جافا!"
articles
مستوى

لنبدأ من البداية أو "مرحبًا، عالم جافا!"

نشرت في المجموعة
أريد أن أبدأ هذا المقال باستطراد غير عادي للوهلة الأولى. في وقت لاحق سوف يصبح واضحا لماذا بالضبط.
لنبدأ من البداية أو مرحبًا، عالم جافا!  - 1
لذلك، دعونا نتخيل شخص ما. هذا الشخص يريد إتقان التزلج على جبال الألب. ولهذا يقوم بالخطوات التالية:
  • المدرسون والكتب المدرسية والأدلة وما إلى ذلك. - وهذا كله من الشرير. يمكنك تعلم التزلج بنفسك. بالإضافة إلى ذلك، تعلم في المدرسة التزلج عبر البلاد بشكل جيد. وبناء على ذلك، يتم تجاهل جميع النصائح من الأشخاص الأكثر دراية.

  • يتم اختيار أروع المعدات. ليس أقل من مستوى الخبراء. الأحذية الصلبة التي تؤذي قدميك. الزلاجات الصلبة التي تتطلب قدرًا رائعًا من الجهد للانحناء، بما يتجاوز مستوى اللياقة البدنية لأي شخص بكثير. حسنًا ، إلخ.

  • مسار الاختبار هو... حسنًا، دعنا نقول، المسار الذي يستضيف مرحلة كأس العالم في سباق التعرج العملاق. هذا مناسب للدراسة فقط.
  • استمر بنفس الروح.
إذن هذا هو السؤال. ماذا سوف تسمي هذا شخص ما؟ شخصيا، كشخص على دراية بالتزلج على جبال الألب منذ حوالي 20 عاما، سأتصل به (وهذا لا يزال خفيفا للغاية!) - ميؤوس منه. من المستحيل تمامًا تعلم أي شيء بهذا النهج. ولكن طريقة أكيدة للتعرض للأذى. والأمر الأكيد هو التخلي عن فكرة التزلج إلى الأبد. أعتقد أنك سوف تتفق معي في هذا التقييم. على أية حال، أنا على يقين تقريبًا من أن هذا الشخص لن يتوقع أن يوجه إليه أي شيء مزعج. الآن دعونا نتخيل شخصًا آخر. دعه، على سبيل المثال، يكون طالب علوم الكمبيوتر. لديه بعض المعرفة بـ C++، C#، Pascal. يريد أن يتعلم جافا. أفعاله:
  • الأدب المطابق لمستوى معرفته (المستوى الصفري، بصراحة) يتم إزاحته جانبًا. استنادًا إلى الإلمام البسيط بنظرية C++ وC# وOOP المذكورة.
  • يتم أخذ أقوى بيئة برمجة. لنفترض Eclipse أو NetBeans. الذي يفعل كل شيء بنفسه، فقط اضغط على زر واحد.
  • كتطبيق تجريبي، نختار... حسنًا، لنفترض الدردشة. تطبيق خادم العميل، جزء العميل في شكل برنامج صغير، جزء الخادم - خدمة ويب أو، في أسوأ الأحوال، servlets. مجرد حق للدراسة.
سؤال. ماذا سوف تسمي هذا شخص ما؟ هل تعرف ما هي المفارقة؟ والحقيقة هي أنه في هذه الحالة سيكون هناك عدد أقل بكثير من التقييمات المحايدة. على الرغم من أن الأوضاع متطابقة في جميع النواحي. ما لم تكن العواقب على الصحة والحياة في الحالة الثانية أقل خطورة. يمكن أن تكون هذه هي المشكلة؟ المواقف متشابهة جدًا حقًا. لقد وصفتهم على وجه التحديد بنفس الأسلوب. والأمر الغريب: إذا كانت سخافة الأول واضحة، فإن السيناريو الثاني يتبعه عدد مخيف من المطورين المبتدئين. يبدأ إتقان Java بكتابة MIDlets، وعملاء قواعد البيانات، والمحادثات، وإنشاء مواقع الويب بناءً على servlets... ويمكنك الاستمرار لفترة طويلة. لكن النقطة مع ذلك واضحة. في الوقت نفسه، يتم وضع الأدب المبتدئ جانبًا بازدراء. اقرا هذا؟ إلي؟ نعم، أنا أكتب بلغة C++ منذ ثلاث سنوات! (الخيارات موجودة بلغة Pascal، وحتى في Visual Basic.) وأنا أعرف OOP! حسنا، بشكل عام. إذن، ما هي الخطوة التالية؟ ثم هذا:
  • كيفية تحويل مجموعة من 8 بايت إلى طويلة؟
  • لماذا يحدث هذا NoClassDefFoundError؟
  • لماذا أقوم بتشغيل التطبيق في Eclipse ( NetBeans/IDEA/JBuilder) وكل شيء على ما يرام ولكن بدونه أكتب java HelloWorld.classوهناك خطأ؟
  • لماذا تحطم ClassNotFoundException؟
  • لماذا لا توجد مكتبة؟ لقد قمت بالفعل بوضعه في Class.zip، ولكن دون جدوى!
  • لماذا أقوم بإنشاء مصفوفة من الكائنات، ولكن عندما أحاول استخدام عنصر من المصفوفة أحصل عليه NullPointerException؟
  • و لماذا ...؟
  • و لماذا ...؟
  • و لماذا ...؟
لماذا لماذا لماذا؟ ولكن لأن Java ليست C++ أو Pascal. وليس بيرل. إن معرفة هذه اللغات لا تساعد في أغلب الأحيان فحسب، بل تعيق أيضًا. فقط لأن هذه اللغات لها أيديولوجيات مختلفة تمامًا. لكن التشابه الخارجي مضلل. وبطبيعة الحال، فإن كل هذه "الأسباب" و"الكيفية" لها إجابات في الكتب. في الأدب من المستوى الأساسي. لكن قراءته كسولة (الخيارات: عار، لا وقت، إلخ). أعرف الكثير من الصور النمطية التي تم نقلها إلى Java بواسطة متخصصين جيدين في لغة C++. أحد الأمثلة الحديثة: لا يجب عليك مطلقًا طرح استثناء في المُنشئ. لماذا؟ نعم، لأنه في C++ لم يتم تعريف حالة مثل هذا الكائن. وفقا لذلك، يحدث تسرب للذاكرة. في جافا، لا توجد مثل هذه المشكلة من حيث المبدأ، بسبب وجود أداة تجميع البيانات المهملة. ومع ذلك، هناك أشخاص يحاولون تجنب مثل هذه المواقف. فقط وفقا لصورة نمطية متأصلة. والأمر الأسوأ هو أنه نتيجة لهذه الجهود، يصبح الكود أكثر تعقيدًا. بناء الجملة سهل التعلم. وغير كاف تماما. أيديولوجية اللغة هي أكثر أهمية بكثير. ومن أجل إتقانها بشكل أكثر فعالية، يجب أن تبدأ من البداية. لماذا بالضبط وكيف؟ وهذا سؤال آخر. لذا. أين وكيف تبدأ. ذلك يعتمد على ما تريد تحقيقه. إذا كنت تريد أن تصبح قردًا ماهرًا في البرمجة، فيمكنك البدء بأي شيء تقريبًا. إذا كنت تريد أن تصبح محترفًا، فالأمور أكثر تعقيدًا بعض الشيء. تجربتي تعطيني سببا لقول ما يلي. الفرق بين المطور المحترف و"المبرمج" هو أنه يفهم ما يحدث. إنه يفعل أكثر بقليل من مجرد الضغط على الأزرار. البيئة القوية هي مساعدة جيدة جدًا. بالنسبة لأولئك الذين يستطيعون الاستغناء عنها. لكنها غالبًا ما تكون الأداة الوحيدة لأولئك الذين بدأوا بها. وفي غيابه تكون قيمة القرد المشفر صفراً. لأنه لا يوجد أزرار للضغط عليها. بشكل عام، يمكن أن يتخذ الضغط على الزر أشكالًا وحشية حقًا. رأى أحد زملائي منتجًا مكتوبًا بلغة Java. بدأت تعليمات تثبيته بالكلمات: "قم بتثبيت JBuilder من القرص..." الآن هذا أمر قاتل بالفعل. إذا لم يتمكن المطورون من جعل المنتج يعمل بدون بيئة تطوير، فإنني أرتعد عندما أفكر في كيفية كتابته. على أقل تقدير، تم كتابته من قبل الهواة. ماذا أعني بـ "يفهم ما يحدث؟" وهذا يعني أنه يجب على الإنسان أن يفهم ما يلي:
  • ما هو الجهاز الظاهري ولماذا هو مطلوب؟
  • ما هي الفئة من وجهة نظر الجهاز الظاهري.
  • ما هي الحزمة؟
  • ما هي المكتبة؟
  • كيف يبحث الجهاز الظاهري عن الفئات ويحملها؛ ما هو مُحمل الفئة وكيف يعمل؛ كم عددهم بشكل افتراضي؟ ما هو مسار الفصل.
إلخ. وما إلى ذلك وهلم جرا. والقائمة تطول. يرجى ملاحظة أنني لم أقم بتضمين المعرفة الخاصة بالمطور نفسه. ما هو الخيط، ما هي الفئة من وجهة نظر OOP وكيف تختلف عن الكائن، وكيف يعمل مديرو التخطيط - كل هذا يجب أن يعرفه أي مطور. كل ما ذكرته هو أكثر من الناحية الفنية. ولكن في كثير من الأحيان يتبين أن معرفتها أمر حيوي لفهم الأخطاء التي تحدث. مثال من الحياة. توجد مكتبة للعمل مع XML تسمى xalan. يحتوي على عدة حزم javax.xml... - المحللون والمحولات وما إلى ذلك. هذه المكتبة تحظى بشعبية كبيرة. المشكلة هي أن هذه الحزم نفسها كانت موجودة في J2SDK منذ الإصدار 1.4. سؤال. ما هي الفئة التي سيتم تحميلها عند الوصول إلى فئة javax.xml.transform.stream.StreamSource من المكتبة، إذا كان xalan موجودًا أيضًا في classpath - Library أو من J2SDK؟ للإجابة على هذا السؤال، عليك أن تعرف كيف يعمل محمل الفصل. لقد رأيت ذات مرة مناقشة استمرت أربعة أيام في أحد المنتديات والتي تناولت هذه القضية في النهاية. لم يعمل الكود بشكل صحيح على وجه التحديد لأن المُحمل لم يأخذ الفئة المتوقعة منه. ما الذي أحصل عليه؟ هذا هو الأمر: كلما كانت بيئة التطوير أقوى، كلما كان تأثيرها أكبر على المطور - كلما قل تفكيره. وهذا بالفعل أوه، كم هو سيء. قريبة جدا من القرد. وهذا يقودنا إلى النتيجة الأولى، مهما بدت متناقضة:

الخلاصة 1. يُنصح بالبدء في تعلم Java بدون بيئة قوية.

أنا لا أدافع عن الكتابة في المحررين على مستوى المفكرة. لكنني لا أفعل ذلك للسبب الوحيد - كقاعدة عامة، ليس لديهم تسليط الضوء على بناء الجملة. هذا شيء مريح بشكل لا يصدق وليس له تأثير سلبي. يمكنك استخدام شيء مثل Notepad++ ، فهو يفهم بناء جملة Java، وبالمناسبة، فهو مجاني. على سبيل المثال، لدي نوع الملف .java المسجل في النظام خصيصًا له. لذلك، محرر نص مع تسليط الضوء على بناء الجملة وسطر الأوامر. يومين أو ثلاثة أيام من العذاب - وفهم ما هو مسار الفصل الدراسي، وكيف يتم إطلاق المترجم الفوري ومجموعة من الأشياء الصغيرة الأخرى - سيبقى فهم هذا إلى الأبد. إضافي. تجربتي تعطيني سببا للقول أنه من المستحيل اكتساب المعرفة لاستخدامها في المستقبل. بمعنى أنه لا يستحق قراءة الأدب إلا عندما تكون هناك أسئلة يجيب عليها. إذا قرأت كتابًا دون أن يكون لديك أي أسئلة حوله، فستختفي المعلومات خلال أسبوع. أعرف هذا جيدًا، بما في ذلك من خلال تجربتي الخاصة. لقد بدأت ذات مرة في قراءة كتاب عن servlets خمس مرات. وحتى بدأت التعامل معهم في عملي، لم يتم استيعاب المعلومات. وهذه ليست حالة معزولة. ذات مرة، منذ وقت طويل جدًا، منذ حوالي 8-10 سنوات، قرأت ما يلي، للأسف، لا أتذكر المؤلف: كيف تعلم الشخص لغة برمجة جديدة؟ بسيط جدا. تحتاج إلى منحها لغة والعديد من المهام والحد الأدنى من الوثائق. ثم، بعد شهرين، عندما يبدأ في الكتابة بهذه اللغة على الأقل، قم بتوفير توثيق شامل. سيتم قراءتها خلال أسبوعين مثل رواية بوليسية، وبعد ذلك سيكون الشخص جاهزًا للعمل. وأنا أتفق مع هذا البيان 100٪. في غضون شهرين، من ناحية، ستختفي جميع القضايا البسيطة. سيتم الحصول على الإجابات عليها بشكل مستقل، مما سيزيد من قيمتها بشكل كبير. من ناحية أخرى، سيتم بالفعل تشكيل أسئلة واضحة، وسيتم تقديم الإجابات عليها من خلال الوثائق. وهذا يؤدي إلى الاستنتاج الثاني الذي لا يبدو أقل تناقضا من الأول:

الخلاصة 2. يُنصح بالبدء في تعلم Java بدون كتب مدرسية. وثائق Java API + برنامج Java التعليمي - هذا أكثر من كافٍ.

وثائق Java API أمر لا بد منه. أوصي بشدة بالاحتفاظ به محليًا على القرص. سيكون عليك الاتصال بها أكثر من مرة، وليس مرتين، أو حتى عشرة. أنا شخصياً لا يمر يوم دون أن أذهب إلى هناك. أوصي أيضًا بالاحتفاظ ببرنامج Java التعليمي محليًا. هذه معلومات على مستوى الدخول تحل محل الكتاب المدرسي بالكامل. ومع ذلك، هناك قدر لا بأس به منه هناك. ويجب أن أقول إنه في المجالات التي لا أتعامل معها في العمل، ما زلت أجد شيئًا جديدًا لنفسي. القراءة كثيرًا سيئة. طالما لم يكن هناك طلب، لا يوجد استجابة. القراءة قليلا سيئة أيضا. أين هو الوسط الذهبي؟ ألتزم بهذه القاعدة: أقرأ حتى يبدو لي أنني تلقيت إجابة السؤال. في 90% من الحالات هذا ليس هو الحال. ولكن في هذه اللحظة من الأفضل أن تتوقف وتستمر بنفسك. لقد تم تلقي الزخم الأولي، وحل المشكلة بشكل مستقل سيعطي أكثر من ذلك بكثير. بالطبع، بعد مرور بعض الوقت، يستحق تناول الأدب. ولكن مرة أخرى، بالنسبة للأدب المبتدئ. حتى لو بدا أن كل هذا هراء، فمن المفيد قراءة الفصول الأولية. يمكنني أن أضمن لك تقريبًا أنك ستتعلم شيئًا جديدًا على الأقل. وهذا الشيء قد يتبين فيما بعد أنه في غاية الأهمية. نعم. يبدو أننا توصلنا إلى ما يجب أن نكتب عنه. كيف تكتب - أيضا. ولكن ماذا يجب أن أكتب؟ تذكر أين بدأت هذه المقالة. هل يجب أن أبدأ بكتابة نظام للمراسلة الفورية؟ الخيار لك بالطبع. يبدو لي أن الأمر لا يستحق ذلك. كلما كانت المهمة أكثر تعقيدا، كلما ظهرت أسئلة أكثر. في غياب الخبرة، فإن مثل هذا العدد من الأسئلة سيعطي شعورا باستحالة حلها، يليه شعور بالنقص والغباء وما إلى ذلك. وفي نهاية المطاف، يمكن أن يؤدي هذا إلى اتخاذ القرار "فليذهب الأمر إلى الجحيم..." والتوقف عن تعلم اللغة. أولئك. إلى التأثير المعاكس تمامًا للتأثير المطلوب. هذه ليست سمة من سمات Java بقدر ما هي سمة من سمات عملية التعلم نفسها. لكن لسبب ما ينسون هذا الأمر عندما يتعلق الأمر بتدريس البرمجة. وفي الوقت نفسه، يمكن لمهمة صغيرة مكتملة حتى النهاية أن تمنحك قدرًا أكبر من الرضا ومعرفة أكبر بكثير من النظام الفخم الذي تم التخلي عنه في بداية الرحلة. ومن هنا الاستنتاج الثالث: الاستنتاج 3. يُنصح ببدء تعلم Java بمهام مناسبة لمستوى معرفتك الحالي بـ Java. لا يجب أن تبدأ في تعلم قيادة السيارة على سيارة الفورمولا 1. لا يجب أن تبدأ في تعلم التزلج على جبال الألب على مضمار كأس العالم. وبنفس الطريقة، لا يجب أن تبدأ في إتقان لغة Java عن طريق كتابة شيء ضخم. أنا أفهم أن الطموح يتطلب الكثير. لكن في هذه الحالة لا أساس لها من الصحة. وكلما زادت طموحاتك غير المعقولة، قلت فرصتك في أن تصبح محترفًا. من الغريب أن تكون المنتديات المختلفة من الظواهر الرائعة في مجال التعلم. إذا كنت تستخدمها بحكمة. بحكمة - هذا يعني أنك بحاجة إلى القيام بالعكس، وليس كالمعتاد. وهي عدم طرح الأسئلة بل الإجابة عليها. أي أن لديك القوة للوصول إليه. إذا كنت تعتقد أنني أعرف كل شيء بنفسي، فأنت مخطئ جدًا. نعم، أعرف الكثير. لكن هناك مناطق لم أواجهها من قبل. أو لدي، ولكن القليل جدا. أحد الأمثلة الكلاسيكية من ممارستي هو العمل مع الشهادات: توقيع التعليمات البرمجية، والاتصالات الآمنة، وما إلى ذلك. في عام 1998، عندما كنت أكتب أطروحتي، قمت بذلك، ولكن منذ ذلك الحين تغير كل شيء كثيرًا. على مر السنين، تراكمت لدي أسئلة. حتى أنني بدأت في قراءة بعض الأدب. ولكن، كما قلت أعلاه، لا يمكنك الحصول على المعرفة لاستخدامها في المستقبل. إنه مثل المخل، يدخل من أذن ويخرج من الأخرى. ليس هناك نتيجة سوى ثقب في الرأس. واستمر هذا حتى وقت قريب، عندما تم طرح سؤال في المنتدى حول اتصال SSL مع Tomcat. كانت هناك بعض المشاكل. وهذا السؤال فقط هو الذي دفعني إلى التعمق في الأمر. وإذا كان هناك طلب، هناك أيضا استجابة. لم أكتشف مشكلة الشخص فحسب، بل وجدت أيضًا مجموعة من المعلومات المفيدة الأخرى. لقد فهمت أخيرًا كيفية عمل الشهادات. المقالة المقابلة موجودة في الخطط. وهذا يحدث طوال الوقت. لقد عملت كثيرًا، على سبيل المثال، مع واجهة المستخدم الرسومية. لقد فهمت بعض إمكانيات TextLayout فقط نتيجة لسؤال أحد الأشخاص في المنتدى. قبل هذا السؤال لم يكن لدي أي فكرة عنهم. بنفس الطريقة، اكتشفت مؤخرًا أن JButton يفسر أيضًا html كرأس خاص به. قبل ذلك، اعتقدت أن JLabel فقط يمكنه القيام بذلك. وهذا مرة أخرى بفضل المنتدى. لذلك اتضح: كلما أجبنا على الأسئلة، كلما تعلمنا أنفسنا أكثر. ولهذا لا أتفق مع الرأي السائد القائل بأنه إذا جلس الإنسان في المنتدى فإنه لا يفعل شيئاً. هذا ليس واضحًا ويعتمد بشكل أساسي على سبب وجود الشخص في المنتدى. وماذا يفعل بشكل رئيسي – يسأل أو يجيب. في الواقع، يمكنك حتى أن تسأل. ولكن أيضا بحكمة. لا تسأل عن حل (وخاصة مع التذييل "أرجو من يعرف أن يجيب، ولا يطرح أسئلة!"، وهو ما واجهته منذ بضعة أيام!)، ولكن مرة أخرى، على العكس من ذلك، اطلب تعيين الحل. اتجاه الحركة. من الواضح تماما أن المبتدئين يصعب فهم مكان الحفر، لأنه ببساطة يفتقر إلى الخبرة. وهذا ليس خطأ الشخص، ولا يمثل حتى مشكلة. هذا جيد. لقد مر الجميع بهذا. أنا متضمنة. بالنسبة لي شخصيا، من المهم للغاية أن يريد الشخص أن يتعلم شيئا ما. وليس مجرد الحصول على إجابة، فقط لننسى ذلك بعد خمس دقائق من حضور معمل البرمجة. سأخبرك دائمًا باتجاه الحركة. لو أعرفه بنفسي. وإذا كنت لا أعرف، على الأقل أستطيع أن أخمن. وبالتأكيد سأبحث أيضًا عن الإجابة. لكنني ربما لا أعطي إجابات مباشرة أبدًا، على الأقل لا أتذكر. بالمناسبة، كان بسبب هذا أنني غادرت أحد المنتديات. عندما بدأت في طرح الأسئلة الإرشادية، أوضحوا لي في انسجام تام أنه من المعتاد بالنسبة لهم أن يجيبوا ببساطة. ومع أسئلتي يمكنني أن أذهب أبعد من ذلك. مع الأخذ في الاعتبار أن مستوى المنتدى ترك الكثير مما هو مرغوب فيه، ليس أقلها بفضل هذا النهج! – قررت ألا أضيع المزيد من الوقت. لذا اختر المنتدى الذي يناسبك وانطلق. بالمناسبة، ظهر هذا الموقع على وجه التحديد بفضل أحد المنتديات. بعد التحدث هناك لبعض الوقت، قمت بتجميع قائمة بالمواضيع الأكثر إثارة وأدركت أن مثل هذا الموقع سيكون مطلوبًا. وهكذا حدث. تتم كتابة جميع المقالات تقريبًا في أعقاب بعض المناقشات في المنتدى. أو متابعة المراسلات التي أجريها بانتظام أيضًا. ما هي النتيجة؟ العمل والعمل والعمل مرة أخرى. كلما سمحت لنفسك أن تفعل أكثر بنفسك في المرحلة الأولية، كلما قلت المعرفة التي تكتسبها. وكلما كان الطريق إلى الاحتراف أطول. ولكن أنت وحدك من يستطيع اختيار من تريد أن تكون - قردًا يضغط على الأزرار بلا تفكير أو محترفًا. وأنت وحدك تختار المسار الذي يمكنك من خلاله تحقيق هذا أو ذاك. الطريقة الأولى واضحة. حاولت أن أظهر الثاني. حركتكم أيها السادة! رابط إلى المصدر الأصلي: لنبدأ من البداية أو "مرحبًا، عالم جافا!"
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION