JavaRush /وبلاگ جاوا /Random-FA /بیایید از ابتدا شروع کنیم یا "سلام، دنیای جاوا!"
articles
مرحله

بیایید از ابتدا شروع کنیم یا "سلام، دنیای جاوا!"

در گروه منتشر شد
من می خواهم این مقاله را با یک انحراف غیرمعمول و در نگاه اول شروع کنم. بعداً مشخص خواهد شد که چرا دقیقاً.
بیایید از اول شروع کنیم یا سلام، جاوا جهان!  - 1
بنابراین، بیایید کسی را تصور کنیم. این کسی می خواهد در اسکی آلپاین تسلط پیدا کند. و برای این کار مراحل زیر را انجام می دهد:
  • مدرسان، کتاب های درسی، راهنماها و غیره - این همه از آن شیطان است. شما می توانید اسکی را به تنهایی یاد بگیرید. علاوه بر این، در مدرسه اسکی صحرانوردی را به خوبی یاد گرفت. بر این اساس، تمام توصیه های افراد آگاه تر نادیده گرفته می شود.

  • جالب ترین تجهیزات انتخاب می شود. پایین تر از سطح کارشناسی نیست. چکمه های سخت که به پاهای شما آسیب می زند. اسکی‌های سختی که برای خم شدن به تلاش فوق‌العاده‌ای نیاز دارند، بسیار فراتر از سطح آمادگی جسمانی Somebody. خوب و غیره

  • پیست آزمایشی... خوب، فرض کنید، پیست میزبان مرحله جام جهانی در غول اسلالوم است. این فقط برای مطالعه مناسب است.
  • با همین روحیه ادامه دهید.
بنابراین سوال اینجاست. اسم این کسی را چه می گذارید؟ من شخصاً به عنوان فردی که حدود 20 سال است با اسکی آلپاین آشنا هستم، او را (و این هنوز بسیار خفیف است!) - ناامید می نامم. یادگیری چیزی با این روش کاملا غیرممکن است. اما راهی مطمئن برای صدمه دیدن و مطمئن ترین چیز این است که ایده اسکی را برای همیشه کنار بگذارید. فکر می کنم در این ارزیابی با من موافق باشید. در هر صورت، من تقریباً مطمئن هستم که این کسی انتظار نخواهد داشت که هیچ چیز ناخوشایندی متوجه او شود. حالا بیایید یک نفر دیگر را تصور کنیم. بگذارید مثلاً دانشجوی علوم کامپیوتر باشد. او تا حدودی از C++، C#، Pascal اطلاعات دارد. او می خواهد جاوا را یاد بگیرد. اعمال او:
  • ادبیات مربوط به سطح دانش او (سطح صفر، صادقانه بگویم) کنار گذاشته شده است. بر اساس کمی آشنایی با C++، C# و تئوری OOP ذکر شده.
  • قوی ترین محیط برنامه نویسی گرفته شده است. فرض کنید Eclipse یا NetBeans. کسی که همه کارها را خودش انجام می دهد، فقط یک دکمه را فشار دهید.
  • به عنوان یک برنامه آزمایشی، ما ... خوب، بیایید بگوییم چت. یک برنامه کلاینت-سرور، بخش سرویس گیرنده به شکل یک اپلت، بخش سرور - یک وب سرویس یا در بدترین حالت، servlets. فقط برای درس خوندن
سوال اسم این کسی را چه می گذارید؟ آیا می دانید پارادوکس چیست؟ واقعیت این است که در این مورد ارزیابی های بی طرفانه به میزان قابل توجهی کمتر خواهد بود. علیرغم اینکه شرایط از همه نظر یکسان است. مگر اینکه عواقب آن برای سلامتی و زندگی در مورد دوم کمتر کشنده باشد. شاید مشکل این باشد؟ شرایط واقعاً بسیار شبیه به هم هستند. من به طور خاص آنها را به همان سبک توصیف کردم. و یک چیز عجیب: اگر پوچ بودن اولی آشکار باشد، سناریوی دوم توسط تعداد نگران کننده ای از توسعه دهندگان تازه کار دنبال می شود. تسلط بر جاوا با نوشتن MIDlet ها، کلاینت ها برای پایگاه های داده، چت ها، ایجاد وب سایت ها بر اساس servlet ها شروع می شود... شما می توانید برای مدت طولانی ادامه دهید. اما نکته با این وجود واضح است. در عین حال، ادبیات سطح ابتدایی با تحقیر کنار گذاشته می شود. این را بخوان؟ به من؟ بله، من الان سه سال است که در C++ می نویسم! (گزینه ها در پاسکال و حتی در ویژوال بیسیک هستند.) و من OOP را می دانم! خوب، به طور کلی. بنابراین، بعدی چیست؟ و بعد این:
  • چگونه یک آرایه 8 بایتی را به طولانی تبدیل کنیم؟
  • چرا این اتفاق می افتد NoClassDefFoundError؟
  • چرا برنامه را در Eclipse ( NetBeans/IDEA/JBuilder) اجرا می کنم و همه چیز خوب است، اما بدون آن تایپ می کنم java HelloWorld.classو خطایی وجود دارد؟
  • چرا خراب میشه ClassNotFoundException؟
  • چرا کتابخانه نیست؟ قبلاً آن را در classes.zip قرار داده‌ام، اما فایده‌ای نداشت!
  • چرا آرایه ای از اشیاء ایجاد می کنم، اما وقتی سعی می کنم از عنصری از آرایه استفاده کنم، دریافت می کنم NullPointerException؟
  • و چرا ...؟
  • و چرا ...؟
  • و چرا ...؟
چرا چرا چرا؟ اما چون جاوا C++ یا پاسکال نیست. و نه پرل. دانستن این زبان ها نه تنها در اغلب موارد کمکی نمی کند، بلکه مانع می شود. اگر فقط به این دلیل که این زبان ها ایدئولوژی های کاملاً متفاوتی دارند. اما شباهت بیرونی گمراه کننده است. البته همه این «چراها» و «چگونه»ها در کتابها پاسخ دارند. در ادبیات ابتدایی ترین سطح. اما خواندن آن تنبل است (گزینه ها: شرم، بدون وقت و غیره). من کلیشه های زیادی را می شناسم که توسط متخصصان خوب C++ به جاوا منتقل شده اند. یک مثال اخیر: شما هرگز نباید یک استثنا در یک سازنده ایجاد کنید. چرا؟ بله، زیرا در C++ وضعیت چنین جسمی تعریف نشده است. بر این اساس، نشت حافظه رخ می دهد. در جاوا اصولاً به دلیل وجود زباله جمع کن چنین مشکلی وجود ندارد. با این حال، افرادی هستند که سعی می کنند از چنین موقعیت هایی اجتناب کنند. فقط طبق یک کلیشه ریشه دار. و بدترین چیز این است که در نتیجه این تلاش ها، کد بسیار پیچیده تر می شود. سینتکس به راحتی قابل یادگیری است. و کاملا کافی نیست. ایدئولوژی زبان بسیار مهمتر است. و برای اینکه به بهترین نحو بر آن مسلط شوید، باید از همان ابتدا شروع کنید. چرا دقیقا و چگونه؟ و این یک سوال دیگر است. بنابراین. از کجا و چگونه شروع کنیم. بستگی به این دارد که می خواهید به چه چیزی برسید. اگر می خواهید به یک میمون کدنویس ماهر تبدیل شوید، می توانید تقریباً با هر چیزی شروع کنید. اگر می خواهید حرفه ای شوید، همه چیز کمی پیچیده تر است. تجربه من دلیلی برای گفتن موارد زیر به من می دهد. تفاوت بین یک توسعه دهنده حرفه ای و یک "کدنویس" این است که او می داند چه اتفاقی در حال رخ دادن است. او کمی بیشتر از فشار دادن دکمه ها انجام می دهد. یک محیط قدرتمند کمک بسیار خوبی است. برای کسانی که می توانند بدون آن کار کنند. اما اغلب تنها ابزار کسانی است که با آن شروع کرده اند. و در غیاب آن، مقدار میمون کدنویس صفر است. زیرا هیچ دکمه ای برای فشار دادن وجود ندارد. به طور کلی، فشار دادن دکمه می تواند اشکال واقعاً هیولایی به خود بگیرد. یکی از همکارانم محصولی را دید که به زبان جاوا نوشته شده بود. دستورالعمل نصب آن با این جمله آغاز شد: "JBuilder را از روی دیسک نصب کنید..." اکنون THIS قبلاً کشنده است. اگر توسعه دهندگان نمی توانستند محصول را بدون محیط توسعه کار کنند، از این که فکر کنم چگونه نوشته شده است، می لرزم. حداقل توسط آماتورها نوشته شده است. منظور من از "می فهمد چه خبر است؟" این بدان معنی است که شخص باید موارد زیر را درک کند:
  • ماشین مجازی چیست و چرا به آن نیاز است؟
  • کلاس از دیدگاه ماشین مجازی چیست؟
  • پکیج چیست؟
  • کتابخانه چیست؟
  • چگونه ماشین مجازی کلاس ها را جستجو و بارگذاری می کند. کلاس لودر چیست و چگونه کار می کند. چه تعداد به طور پیش فرض وجود دارد. classpath چیست
و غیره. و غیره لیست ادامه دارد. لطفاً توجه داشته باشید که من دانش خاص خود توسعه دهنده را درج نکردم. موضوع چیست، کلاس از نقطه نظر OOP چیست و چه تفاوتی با یک شی دارد، مدیران طرح بندی چگونه کار می کنند - هر توسعه دهنده ای باید همه اینها را بداند. هر چیزی که لیست کردم بیشتر جنبه فنی دارد. اما اغلب معلوم می شود که دانستن آنها برای درک اینکه چه چیزی اشتباه کار می کند حیاتی است. نمونه ای از زندگی یک کتابخانه برای کار با XML به نام xalan وجود دارد. شامل چندین بسته javax.xml... - تجزیه کننده، ترانسفورماتور و ... می باشد. این کتابخانه بسیار محبوب است. مشکل اینجاست که همین بسته ها از نسخه 1.4 در J2SDK وجود داشته اند. سوال کدام کلاس هنگام دسترسی به کلاس javax.xml.transform.stream.StreamSource از کتابخانه بارگذاری می شود، اگر xalan در classpath - کتابخانه یا از J2SDK نیز وجود داشته باشد؟ برای پاسخ به این سوال، باید بدانید که کلاس لودر چگونه کار می کند. من یک بار یک بحث چهار روزه را در یکی از انجمن ها دیدم که در نهایت به این موضوع رسید. کد دقیقاً درست کار نمی کند زیرا لودر کلاسی را که از آن انتظار می رفت نگرفته است. من به چه چیزی می رسم؟ نکته اینجاست: هر چه محیط توسعه قدرتمندتر باشد، بیشتر برای توسعه دهنده مفید است - کمتر باید فکر کند. و این قبلا آه، چقدر بد است. خیلی نزدیک به میمون این منجر به اولین نتیجه می شود، مهم نیست که چقدر متناقض به نظر می رسد:

نتیجه گیری 1. توصیه می شود یادگیری جاوا را بدون محیط قدرتمند شروع کنید.

من از نوشتن در ویرایشگرهای سطح دفترچه یادداشت دفاع نمی کنم. اما من این کار را به تنها دلیل انجام نمی دهم - آنها، به عنوان یک قاعده، برجسته سازی نحوی ندارند. این یک چیز فوق العاده راحت است که تأثیر منفی ندارد. می توانید از چیزی مانند Notepad++ استفاده کنید ، نحو جاوا را درک می کند و به هر حال، رایگان است. به عنوان مثال، من نوع فایل .java را در سیستم به طور خاص برای آن ثبت کرده ام. بنابراین، یک ویرایشگر متن با برجسته سازی نحو و یک خط فرمان. دو یا سه روز عذاب - و فهمیدن اینکه مسیر کلاس چیست، مترجم چگونه راه اندازی می شود و یک سری چیزهای کوچک دیگر - درک این موضوع برای همیشه باقی خواهد ماند. به علاوه. تجربه من دلیلی به من می دهد که بگویم کسب دانش برای استفاده در آینده غیرممکن است. به این معنا که خواندن ادبیات تنها زمانی ارزش دارد که سوالاتی وجود داشته باشد که به آنها پاسخ دهد. اگر کتابی را بدون داشتن سوال در مورد آن بخوانید، اطلاعات در عرض یک هفته ناپدید می شود. من این را به خوبی می دانم، از جمله از تجربه خودم. من یک بار شروع کردم به خواندن یک کتاب در مورد سرولت ها پنج بار. تا زمانی که در کارم با آنها برخورد نکردم، اطلاعات جذب نشد. و این به دور از یک مورد مجزا است. روزی روزگاری، خیلی وقت پیش، حدود 8-10 سال پیش، مطلب زیر را خواندم، متأسفانه نویسنده را به خاطر ندارم: چگونه به یک فرد یک زبان برنامه نویسی جدید آموزش دهیم؟ بسیار ساده. شما باید به آن یک زبان، چندین کار و حداقل مستندات بدهید. سپس بعد از یکی دو ماه که شروع به نوشتن حداقل به این زبان کرد، مستندات جامع ارائه کنید. دو هفته دیگر مانند یک رمان پلیسی خوانده می شود و پس از آن فرد آماده کار می شود. من با این جمله 100% موافقم. در عرض دو ماه، از یک طرف، همه مسائل جزئی از بین خواهند رفت. پاسخ آنها به طور مستقل به دست خواهد آمد که ارزش آنها را بسیار افزایش می دهد. از سوی دیگر، سؤالات روشنی از قبل شکل می گیرد که پاسخ آنها توسط مستندات ارائه می شود. این منجر به نتیجه دوم می شود که کمتر از اولی متناقض به نظر نمی رسد:

نتیجه گیری 2. شروع یادگیری جاوا بدون کتاب درسی توصیه می شود. مستندات Java API + آموزش جاوا - این بیش از حد کافی است.

مستندات Java API ضروری است. من به شدت توصیه می کنم آن را به صورت محلی، روی دیسک نگه دارید. شما باید بیش از یک بار، نه دو بار، یا حتی ده بار با او تماس بگیرید. شخصاً روزی نمی‌گذرد که من آنجا نروم. همچنین توصیه می کنم آموزش جاوا را به صورت محلی نگه دارید. این اطلاعات سطح ابتدایی است که به طور کامل جایگزین کتاب درسی می شود. با این حال، مقدار مناسبی از آن در آنجا وجود دارد. باید بگویم در زمینه هایی که در کار با آنها سروکار ندارم، باز هم چیز جدیدی برای خودم پیدا می کنم. زیاد خواندن بد است. تا زمانی که درخواستی وجود نداشته باشد، پاسخی نیز وجود ندارد. کمی خواندن هم بد است. میانگین طلایی کجاست؟ من به این قانون پایبند هستم: تا زمانی که به نظرم می رسد که پاسخ سؤال را دریافت کرده ام مطالعه می کنم. در 90 درصد موارد اینطور نیست. اما در این لحظه است که بهتر است متوقف شوید و خودتان ادامه دهید. انگیزه اولیه دریافت شده است و حل مشکل به طور مستقل بسیار بیشتر خواهد بود. البته بعد از مدتی ارزش این را دارد که به سراغ ادبیات برویم. اما باز هم برای ادبیات سطح ابتدایی. حتی اگر به نظر می رسد که همه اینها مزخرف است، خواندن فصل های اولیه ارزش دارد. تقریباً می توانم تضمین کنم که حداقل چیز جدیدی یاد خواهید گرفت. و این چیزی ممکن است بعداً بسیار مهم باشد. خوب. به نظر می رسد فهمیدیم در مورد چه چیزی بنویسیم. نحوه نوشتن - همچنین. اما چی بنویسم؟ به یاد داشته باشید که این مقاله از کجا شروع شد. آیا باید با نوشتن یک سیستم پیام فوری شروع کنم؟ البته انتخاب با شماست. به نظر من که ارزشش را ندارد. هرچه کار پیچیده تر باشد، سوالات بیشتری ایجاد می شود. در غیاب تجربه، چنین تعدادی از سؤالات احساس عدم امکان حل آنها را ایجاد می کند و به دنبال آن احساس حقارت، حماقت و غیره خود را ایجاد می کند. در نهایت، این می تواند به تصمیم "به جهنم ..." و توقف یادگیری زبان منجر شود. آن ها دقیقاً تأثیری برعکس از آنچه لازم بود. این ویژگی نه چندان برای جاوا که خود فرآیند یادگیری است. اما به دلایلی در مورد آموزش برنامه نویسی این موضوع را فراموش می کنند. در همین حال، یک کار کوچک که تا انتها انجام شود می تواند رضایت بسیار بیشتر و دانش بسیار بیشتری نسبت به یک سیستم بزرگ که در همان ابتدای سفر رها شده است به ارمغان آورد. از این رو نتیجه سوم: نتیجه 3. توصیه می شود یادگیری جاوا را با کارهایی شروع کنید که با سطح دانش فعلی شما از جاوا کافی است. شما نباید شروع به یادگیری رانندگی با ماشین در ماشین فرمول 1 کنید. شما نباید شروع به یادگیری اسکی آلپاین در پیست جام جهانی کنید. و به همین ترتیب، شما نباید با نوشتن چیزی بزرگ شروع به تسلط بر جاوا کنید. من درک می کنم که جاه طلبی خواهان است. اما در این مورد آنها بی اساس هستند. و هر چه جاه طلبی های نامعقول بیشتری داشته باشید، شانس کمتری برای حرفه ای شدن خواهید داشت. یک پدیده قابل توجه از نظر یادگیری، به اندازه کافی عجیب، انجمن های مختلف است. اگر عاقلانه از آنها استفاده کنید. عاقلانه - این بدان معنی است که شما باید برعکس عمل کنید، نه طبق معمول. یعنی نه برای پرسیدن سوال، بلکه برای پاسخ دادن به آنها. هر چیزی که قدرت رسیدن به آن را دارید. اگر فکر می کنید من خودم همه چیز را می دانم، سخت در اشتباهید. بله، من خیلی چیزها را می دانم. اما مناطقی وجود دارد که من هرگز با آنها برخورد نکرده ام. یا دارم ولی خیلی کم. یک مثال کلاسیک از تمرین من کار با گواهی ها است: امضای کد، اتصالات امن و غیره. در سال 1998، هنگام نوشتن پایان نامه، این کار را انجام دادم، اما از آن زمان همه چیز بسیار تغییر کرده است. در طول سال ها، من سوالاتی انباشته شده ام. حتی شروع به خواندن ادبیات کردم. اما، همانطور که در بالا گفتم، شما نمی توانید دانشی برای استفاده در آینده کسب کنید. مثل یک خرقه است - در یک گوش می رود و از گوش دیگر بیرون می آید. هیچ نتیجه ای جز سوراخ در سر وجود ندارد. و این تا چندی پیش ادامه داشت که در انجمن سوالی در مورد اتصال SSL با تامکت پرسیده شد. مشکلاتی وجود داشت. و فقط همین سوال مرا وادار کرد تا عمیق تر شوم. و در صورت وجود درخواست، پاسخ نیز وجود دارد. من نه تنها متوجه شدم که مشکل آن شخص چیست، بلکه یک سری اطلاعات مفید دیگر را نیز پیدا کردم. بالاخره فهمیدم گواهینامه ها چگونه کار می کنند. مقاله مربوطه در طرح ها موجود است. و این همیشه اتفاق می افتد. من مثلاً با رابط کاربری گرافیکی کمی کار کردم. فقط در نتیجه سوال کسی در انجمن بود که برخی از قابلیت های TextLayout را فهمیدم. قبل از این سوال من هیچ ایده ای در مورد آنها نداشتم. به همین ترتیب، اخیراً متوجه شدم که JButton نیز html را به عنوان هدر خود تفسیر می کند. قبل از این، من فکر می کردم که فقط JLabel می تواند این کار را انجام دهد. و این دوباره به لطف انجمن است. بنابراین معلوم می شود: هر چه بیشتر به سؤالات پاسخ دهیم، خودمان بیشتر یاد می گیریم. به همین دلیل است که من با این نظر رایج موافق نیستم که اگر فردی در یک انجمن بنشیند، پس هیچ کاری انجام نمی دهد. این کاملاً واضح نیست و در درجه اول به این بستگی دارد که چرا دقیقاً آن شخص در انجمن حضور دارد. و عمدتاً چه کاری انجام می دهد - بپرسد یا پاسخ دهد. در واقع، شما حتی می توانید بپرسید. بلکه عاقلانه. راه حل نپرسید (و مخصوصاً با پس‌نویس «لطفا کسانی که می‌دانند، جواب بدهند و سؤال نپرسند!» که همین روز پیش با آن برخورد کردم!)، اما باز هم برعکس، بخواهید که تنظیم شود. جهت حرکت کاملاً قابل درک است که برای یک مبتدی درک مکان حفاری دشوار است ، زیرا او به سادگی فاقد تجربه است. این تقصیر شخص نیست و حتی مشکلی هم نیست. این خوبه. همه این را پشت سر گذاشته اند. من را شامل می شود. برای من شخصاً خیلی مهمتر است که انسان بخواهد چیزی یاد بگیرد. و نه فقط جواب گرفتن، فقط پنج دقیقه بعد از رفتن به یک آزمایشگاه برنامه نویسی آن را فراموش می کنم. من همیشه جهت حرکت را به شما خواهم گفت. اگر خودم او را بشناسم. و اگر نمی دانم، حداقل می توانم حدس بزنم. و مطمئناً به دنبال پاسخ خواهم بود. اما من احتمالاً هرگز پاسخ مستقیم نمی دهم - حداقل به یاد ندارم. اتفاقاً به همین دلیل بود که یکی از انجمن ها را ترک کردم. وقتی شروع به پرسیدن سوالات اصلی کردم، آنها به صورت هماهنگ به من توضیح دادند که مرسوم است که به سادگی پاسخ دهند. و با سوالاتم می توانم جلوتر بروم. با توجه به اینکه سطح تالار بسیار مورد نظر باقی مانده است، حداقل به لطف این رویکرد! - تصمیم گرفتم دیگر زمان را تلف نکنم. بنابراین یک انجمن را به دلخواه خود انتخاب کنید و بروید. به هر حال، این سایت دقیقاً به لطف یکی از انجمن ها ظاهر شد. پس از مدتی صحبت در آنجا، لیستی از موضوعاتی که اغلب مطرح می شود جمع آوری کردم و متوجه شدم که چنین سایتی مورد تقاضا خواهد بود. و همینطور هم شد. تقریباً همه مقالات در پی برخی بحث ها در انجمن نوشته می شوند. یا پیگیر مکاتباتی که من هم مرتب انجام می دهم. نتیجه چیست؟ کار، کار و دوباره کار. هرچه بیشتر به خودتان اجازه دهید در مرحله اولیه برای خودتان انجام دهید، دانش کمتری به دست می آورید. و راه حرفه ای شدن طولانی تر است. اما فقط شما می توانید انتخاب کنید که می خواهید چه کسی باشید - میمونی که دکمه فشار می دهد یا حرفه ای. و فقط شما خودتان مسیری را انتخاب می کنید که در آن می توانید به این یا آن دست یابید. راه اول روشن است. سعی کردم دومی را نشان دهم. حرکت شما آقایان! پیوند به منبع اصلی: بیایید از ابتدا شروع کنیم یا 'سلام، دنیای جاوا!'
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION