JavaRush /Java blogi /Random-UZ /Keling, boshidan boshlaylik yoki 'Salom, Java World!'
articles
Daraja

Keling, boshidan boshlaylik yoki 'Salom, Java World!'

Guruhda nashr etilgan
Men ushbu maqolani g'ayrioddiy, bir qarashda, chekinish bilan boshlamoqchiman. Aynan nima uchun keyinroq ma'lum bo'ladi.
Boshidan boshlaylik yoki Salom, Java World!  - 1
Shunday qilib, keling, Kimnidir tasavvur qilaylik. Bu kimdir tog' chang'isini o'zlashtirmoqchi. Va buning uchun u quyidagi qadamlarni qo'yadi:
  • O'qituvchilar, darsliklar, qo'llanmalar va boshqalar. - bularning barchasi yovuzlikdan. Siz chang'i sportini mustaqil ravishda o'rganishingiz mumkin. Bundan tashqari, maktabda u chang'i uchishni yaxshi o'rgangan. Shunga ko'ra, bilimdonroq odamlarning barcha maslahatlari e'tiborga olinmaydi.

  • Eng zo'r uskunalar tanlanadi. Mutaxassis darajasidan past emas. Oyog'ingizga zarar etkazadigan qattiq etiklar. Qattiq chang'ilar egilish uchun juda katta kuch talab qiladi, bu Kimdirning jismoniy tayyorgarligi darajasidan ancha yuqori. Xo'sh, va hokazo.

  • Test treki... deylik, jahon kubogining gigant slalom bosqichiga mezbonlik qiladigan trek. Bu o'qish uchun juda mos keladi.
  • Xuddi shu ruhda davom eting.
Demak, savol shu. Buni kim deb ataysiz? Shaxsan, taxminan 20 yildan beri tog' chang'isi bilan tanish bo'lgan odam sifatida men uni chaqiraman (va bu hali ham juda yumshoq!) - umidsiz. Bunday yondashuv bilan hech narsani o'rganish mutlaqo mumkin emas. Ammo jarohat olishning ishonchli usuli. Va eng ishonchli narsa - chang'i uchish g'oyasidan abadiy voz kechish. O'ylaymanki, siz bu baholashda men bilan rozi bo'lasiz. Qanday bo'lmasin, men deyarli ishonchim komilki, bu Kimdir unga hech qanday yoqimsiz narsa aytilishini kutmaydi. Endi boshqa birovni tasavvur qilaylik. Aytaylik, u informatika talabasi bo'lsin. U C++, C#, Paskal tillarida biroz ma'lumotga ega. U Java tilini o'rganmoqchi. Uning harakatlari:
  • Uning bilim darajasiga to'g'ri keladigan adabiyot (ochig'i, nol daraja) chetga supurib tashlandi. Yuqorida aytib o'tilgan C++, C# va OOP nazariyalari bilan ozgina tanishish asosida.
  • Eng kuchli dasturlash muhiti olinadi. Aytaylik, Eclipse yoki NetBeans. Hamma narsani o'zi bajaradigan, faqat bitta tugmani bosing.
  • Sinov ilovasi sifatida biz tanlaymiz... mayli, chat deylik. Mijoz-server ilovasi, applet ko'rinishidagi mijoz qismi, server qismi - veb-xizmat yoki, eng yomoni, servletlar. Faqat o'qish uchun to'g'ri.
Savol. Buni kim deb ataysiz? Paradoks nima ekanligini bilasizmi? Gap shundaki, bu holatda xolis baholashlar sezilarli darajada kamayadi. Vaziyatlar har jihatdan bir xil bo'lishiga qaramay. Agar ikkinchi holatda sog'liq va hayot uchun oqibatlar kamroq halokatli bo'lmasa. Balki bu muammodir? Vaziyatlar haqiqatan ham juda o'xshash. Men ularni bir xil uslubda alohida tasvirlab berdim. Va g'alati narsa: agar birinchisining bema'niligi aniq bo'lsa, ikkinchi stsenariydan so'ng juda ko'p yangi boshlanuvchilar paydo bo'ladi. Java tilini o'zlashtirish MIDletlar, ma'lumotlar bazalari uchun mijozlar, chatlar, servletlar asosida veb-saytlar yaratishdan boshlanadi... Siz uzoq vaqt davom etishingiz mumkin. Lekin baribir nuqta aniq. Shu bilan birga, boshlang'ich darajadagi adabiyotlar mensimaslik bilan bir chetga suriladi. Buni o'qiyapsizmi? Menga? Ha, men C++ tilida uch yildan beri yozyapman! (Variantlar Paskalda va hatto Visual Basic tilida ham mavjud.) Va men OOPni bilaman! Xo'sh, umuman olganda. Va undan keyin nima? Va keyin bu:
  • 8 baytlik massivni uzunlikka qanday aylantirish mumkin?
  • Nima uchun bu sodir bo'ladi NoClassDefFoundError?
  • Nega men Eclipse ( ) da ilovani ishga tushiraman NetBeans/IDEA/JBuilderva hammasi yaxshi, lekin usiz yozaman java HelloWorld.classva xatolik yuz berdi?
  • Nima uchun qulab tushadi ClassNotFoundException?
  • Nega kutubxona yo'q? Men uni allaqachon classes.zip ga qo'yganman, lekin hammasi befoyda!
  • Nega men ob'ektlar qatorini yarataman, lekin massivning elementidan foydalanmoqchi bo'lganimda men olaman NullPointerException?
  • Nega ...?
  • Nega ...?
  • Nega ...?
Nega nega nega? Lekin, chunki Java C++ yoki Paskal emas. Va Perl emas. Ushbu tillarni bilish nafaqat yordam bermaydi, balki to'sqinlik qiladi. Agar bu tillar butunlay boshqacha mafkuralarga ega bo'lsa. Ammo tashqi o'xshashlik noto'g'ri. Albatta, bu "nima uchun" va "qanday" savollariga kitoblarda javoblar bor. Eng asosiy darajadagi adabiyotda. Lekin uni o'qish dangasa (variantlar: sharmandalik, vaqt yo'q va hokazo). Men yaxshi C++ mutaxassislari tomonidan Java-ga o'tkazilgan juda ko'p stereotiplarni bilaman. Yaqinda bir misol: konstruktorda hech qachon istisno qilmaslik kerak. Nega? Ha, chunki C++ da bunday obyektning holati aniqlanmagan. Shunga ko'ra, xotira oqishi sodir bo'ladi. Java-da axlat yig'uvchining mavjudligi sababli printsipial jihatdan bunday muammo yo'q. Biroq, bunday vaziyatlardan qochishga harakat qiladigan odamlar bor. Faqat singib ketgan stereotipga ko'ra. Va eng yomoni, bu harakatlar natijasida kod ancha murakkablashadi. Sintaksisni o'rganish oson. Va umuman etarli emas. Til mafkurasi muhimroqdir. Va uni eng samarali o'zlashtirish uchun siz boshidan boshlashingiz kerak. Nima uchun aniq va qanday? Va bu boshqa savol. Shunday qilib. Qayerdan va qanday boshlash kerak. Bu nimaga erishmoqchi ekanligingizga bog'liq. Agar siz malakali kodlovchi maymun bo'lishni istasangiz, deyarli hamma narsadan boshlashingiz mumkin. Agar siz professional bo'lishni istasangiz, ishlar biroz murakkabroq. Mening tajribam quyidagilarni aytishimga asos beradi. Professional dasturchi va “koder” o‘rtasidagi farq shundaki, u nima bo‘layotganini tushunadi. U tugmachalarni bosishdan biroz ko'proq narsani qiladi. Kuchli muhit - bu juda yaxshi yordam. Busiz qila oladiganlar uchun. Ammo bu ko'pincha u bilan boshlaganlarning yagona vositasidir. Va u yo'q bo'lganda, kodlovchi maymunning qiymati nolga teng. Chunki bosish uchun tugmalar yo'q. Umuman olganda, tugmani bosish haqiqatan ham dahshatli shakllarga ega bo'lishi mumkin. Mening hamkasblarimdan biri Java-da yozilgan mahsulotni ko'rdi. Uni o'rnatish bo'yicha ko'rsatmalar quyidagi so'zlar bilan boshlandi: "JBuilderni diskdan o'rnating ..." Endi BU allaqachon halokatli. Agar ishlab chiquvchilar mahsulotni ishlab chiqish muhitisiz ishlay olmasalar, u qanday yozilganligini o'ylab, seskanib ketaman. Hech bo'lmaganda, uni havaskorlar yozgan. "Nima bo'layotganini tushundimi?" deganda nimani nazarda tutyapman? Bu shuni anglatadiki, inson quyidagilarni tushunishi kerak:
  • Virtual mashina nima va u nima uchun kerak?
  • Virtual mashina nuqtai nazaridan sinf nima.
  • Paket nima?
  • Kutubxona nima?
  • Virtual mashina sinflarni qanday qidiradi va yuklaydi; sinf yuklagichi nima va u qanday ishlaydi; sukut bo'yicha qancha bor; sinf yo'li nima.
Va hokazo. va h.k. Ro‘yxat davom etadi. Iltimos, shuni yodda tutingki, men ishlab chiquvchining o'ziga xos bilimlarni kiritmaganman. Ip nima, OOP nuqtai nazaridan sinf nima va u ob'ektdan qanday farq qiladi, maket menejerlari qanday ishlaydi - HAR BIR ishlab chiquvchi bularning barchasini bilishi kerak. Men sanab o'tgan hamma narsa ko'proq texnik xususiyatga ega. Ammo ko'pincha ularni bilish nima noto'g'ri ishlayotganini tushunish uchun juda muhim ekanligi ayon bo'ladi. Hayotdan misol. XML bilan ishlash uchun xalan nomli kutubxona mavjud. U bir nechta javax.xml... paketlarni o'z ichiga oladi - parserlar, transformatorlar va boshqalar. Bu kutubxona juda mashhur. Muammo shundaki, xuddi shu paketlar J2SDK da 1.4 versiyasidan beri mavjud. Savol. Kutubxonadan javax.xml.transform.stream.StreamSource sinfiga kirishda qaysi sinf yuklanadi, agar xalan sinf yo'lida ham mavjud bo'lsa - kutubxona yoki J2SDK? Bu savolga javob berish uchun siz sinf yuklovchisi qanday ishlashini bilishingiz kerak. Men bir marta forumlardan birida to'rt kunlik munozarani ko'rdim, u oxir-oqibat ushbu masalaga to'g'ri keldi. Kod to'g'ri ishlamadi, chunki yuklovchi undan kutilgan sinfni olmagan. Men nimaga erishyapman? Gap shundaki: rivojlanish muhiti qanchalik kuchli bo'lsa, u ishlab chiquvchiga shunchalik ko'p yordam beradi - u kamroq o'ylashi kerak. Va bu allaqachon oh, qanchalik yomon. Maymunga juda yaqin. Bu qanchalik paradoksal ko'rinmasin, birinchi xulosaga olib keladi:

Xulosa 1. Java tilini kuchli muhitsiz o'rganishni boshlash tavsiya etiladi.

Men bloknot darajasidagi muharrirlarda yozishni yoqlamayman. Ammo men buni yagona sababga ko'ra qilmayman - ularda, qoida tariqasida, sintaksisni ta'kidlash yo'q. Bu salbiy ta'sir ko'rsatmaydigan ajoyib qulay narsa. Siz Notepad++ kabi biror narsadan foydalanishingiz mumkin , u Java sintaksisini tushunadi va aytmoqchi, bepul. Misol uchun, menda tizimda maxsus ro'yxatdan o'tgan .java fayl turi bor. Shunday qilib, sintaksisni ajratib ko'rsatish va buyruq qatoriga ega matn muharriri. Ikki yoki uch kunlik azob-uqubat - va sinf yo'li nima ekanligini, tarjimon qanday ishga tushirilishini va boshqa bir qancha kichik narsalarni tushunish - buni tushunish abadiy qoladi. Keyinchalik. Mening tajribam kelajakda foydalanish uchun bilim olish mumkin emasligini aytishimga asos beradi. Adabiyotni faqat u javob beradigan savollar mavjud bo'lganda o'qishga arziydi degan ma'noda. Agar siz kitobni savolsiz o'qisangiz, ma'lumot bir hafta ichida yo'qoladi. Men buni juda yaxshi bilaman, shu jumladan o'z tajribamdan ham. Men bir marta servletlar haqidagi kitobni besh marta o'qiy boshladim. Men o'z ishimda ular bilan shug'ullanishni boshlamagunimcha, ma'lumotlar o'zlashtirilmadi. Va bu alohida holatdan uzoqdir. Bir vaqtlar, juda uzoq vaqt oldin, taxminan 8-10 yil oldin, men quyidagilarni o'qiganman, afsuski, muallifni eslay olmayman: Qanday qilib odamga yangi dasturlash tilini o'rgatish kerak? Juda oddiy. Siz unga til, bir nechta vazifalar va minimal hujjatlarni berishingiz kerak. Keyin, bir necha oy o'tgach, u hech bo'lmaganda shu tilda yozishni boshlaganida, to'liq hujjatlarni taqdim eting. Ikki hafta ichida xuddi detektiv roman kabi o'qiladi, shundan so'ng odam ishlashga tayyor bo'ladi. Men bu bayonotga 100% qo'shilaman. Ikki oy ichida, bir tomondan, barcha kichik muammolar o'tib ketadi. Ularga javoblar mustaqil ravishda olinadi, bu ularning qiymatini sezilarli darajada oshiradi. Boshqa tomondan, aniq savollar allaqachon shakllanadi, ularga javoblar hujjatlar tomonidan taqdim etiladi. Bu ikkinchi xulosaga olib keladi, bu birinchisidan kam paradoksal ko'rinmaydi:

Xulosa 2. Java tilini darsliklarsiz o'rganishni boshlash maqsadga muvofiqdir. Java API hujjatlari + Java qo'llanmasi - bu etarli.

Java API hujjatlari majburiydir. Men uni mahalliy, diskda saqlashni tavsiya qilaman. Siz u bilan bir necha marta, ikki marta emas, hatto o'nta murojaat qilishingiz kerak bo'ladi. Shaxsan men u yerga bormasam kun o'tmaydi. Shuningdek, men Java qo'llanmasini mahalliy sifatida saqlashni tavsiya qilaman. Bu darslikni to'liq almashtiradigan boshlang'ich darajadagi ma'lumot. Biroq, u erda uning etarli miqdori mavjud. Aytishim kerakki, ishda men hal qilmaydigan sohalarda men hali ham o'zim uchun yangi narsalarni topaman. Ko'p o'qish yomon. Hech qanday so'rov bo'lmasa, javob bo'lmaydi. Ozgina o'qish ham yomon. Oltin o'rtacha qayerda? Men ushbu qoidaga amal qilaman: men savolga javob olganimdek tuyulguncha o'qiyman. 90% hollarda bunday emas. Ammo ayni paytda to'xtab, o'z-o'zidan davom etish yaxshidir. Dastlabki turtki olindi va muammoni mustaqil hal qilish ko'proq narsani beradi. Albatta, bir muncha vaqt o'tgach, adabiyot bilan shug'ullanishga arziydi. Ammo yana, boshlang'ich darajadagi adabiyot uchun. Bularning barchasi bema'nilik bo'lib tuyulsa ham, dastlabki boblarni o'qishga arziydi. Hech bo'lmaganda yangi narsalarni o'rganishingizga deyarli kafolat beraman. Va bu narsa keyinchalik juda muhim bo'lib chiqishi mumkin. KELISHDIKMI. Biz nima haqida yozishni o'ylab topdik shekilli. Qanday yozish kerak - ham. Lekin nima yozishim kerak? Ushbu maqola qaerdan boshlanganini eslang. Tezkor xabar almashish tizimini yozishdan boshlashim kerakmi? Tanlov, albatta, sizniki. Menimcha, bunga loyiq emas. Vazifa qanchalik murakkab bo'lsa, shunchalik ko'p savollar paydo bo'ladi. Tajriba bo'lmasa, bunday ko'plab savollar ularni hal qilishning iloji yo'qligini his qiladi, keyin o'zining pastligi, ahmoqligi va boshqalarni his qiladi. Oxir-oqibat, bu "do'zaxga ..." qaroriga olib kelishi va tilni o'rganishni to'xtatishi mumkin. Bular. kerak bo'lganidan mutlaqo teskari ta'sirga. Bu Java uchun emas, balki o'quv jarayonining o'ziga xosdir. Lekin dasturlashni o‘rgatishga kelganda negadir bu haqda unutishadi. Shu bilan birga, oxirigacha bajarilgan kichik vazifa sayohatning boshida tashlab qo'yilgan ulkan tizimdan ko'ra ko'proq qoniqish va ko'proq bilim berishi mumkin. Shunday qilib, uchinchi xulosa: Xulosa 3. Java tilini o'rganishni hozirgi Java bilimingiz darajangizga mos keladigan vazifalardan boshlash tavsiya etiladi. Siz Formula 1 avtomashinasida mashina haydashni o'rganishni boshlamasligingiz kerak, Jahon kubogi trekida tog' chang'isini o'rganishni boshlamasligingiz kerak. Xuddi shu tarzda, siz Java-ni o'zlashtirishni katta narsalarni yozishdan boshlamasligingiz kerak. Men shuhratparastlik talab qilishini tushunaman. Ammo bu holda ular asossizdir. Qanchalik asossiz ambitsiyalarga ega bo'lsangiz, professional bo'lish imkoniyati shunchalik kam bo'ladi. O'rganish nuqtai nazaridan ajoyib hodisa, g'alati darajada, turli forumlardir. Agar siz ulardan oqilona foydalansangiz. Donolik bilan - bu odatdagidek emas, aksincha, buni qilish kerakligini anglatadi. Ya'ni, savol berish uchun emas, balki ularga javob berish. Siz erisha oladigan kuchingiz bo'lgan har qanday narsaga. Agar men o'zim hamma narsani bilaman deb o'ylasangiz, juda adashasiz. Ha, men ko'p narsani bilaman. Ammo men hech qachon duch kelmagan hududlarim bor. Yoki menda bor, lekin juda oz. Mening amaliyotimdan klassik misol - sertifikatlar bilan ishlash: kodni imzolash, xavfsiz ulanishlar va boshqalar. 1998 yilda dissertatsiyani yozayotganda men buni qildim, lekin o'shandan beri hamma narsa juda o'zgardi. Yillar davomida savollarim to'planib qoldi. Men hatto ba'zi adabiyotlarni o'qiy boshladim. Lekin, yuqorida aytganimdek, kelajakda foydalanish uchun bilim ololmaysiz. Bu lomga o'xshaydi - bir qulog'idan kirib, ikkinchisidan chiqadi. Boshidagi teshikdan boshqa hech qanday natija yo'q. Va bu yaqin vaqtgacha davom etdi, forumda tomcat bilan SSL ulanishi haqida savol berilganda. Ba'zi muammolar bor edi. Va faqat shu savol meni chuqur qazishga undadi. Va agar so'rov bo'lsa, javob ham bor. Men nafaqat odamning muammosi nima ekanligini tushundim, balki boshqa foydali ma'lumotlar to'plamini ham topdim. Men nihoyat sertifikatlar qanday ishlashini tushundim. Tegishli maqola rejalarda. Va bu har doim sodir bo'ladi. Men, masalan, GUI bilan biroz ishladim. Faqat forumda kimningdir savoli natijasida men TextLayout ning ba'zi imkoniyatlarini tushundim. Bu savoldan oldin men ular haqida hech qanday tasavvurga ega emas edim. Xuddi shu tarzda, men yaqinda JButton html ni o'z sarlavhasi sifatida talqin qilishini bilib oldim. Bundan oldin men buni faqat JLabel qila oladi deb o'ylardim. Va bu yana forumga rahmat. Shunday qilib, shunday bo'ladi: biz savollarga qanchalik ko'p javob bersak, o'zimizni o'rganamiz. SHuning uchun ham odam forumda o'tirsa, hech narsa qilmaydi, degan keng tarqalgan fikrga qo'shilmayman. Bu aniq emas va birinchi navbatda aynan nima uchun odam forumda ekanligiga bog'liq. Va u asosan nima qiladi - so'rang yoki javob bering. Aslida, siz hatto so'rashingiz mumkin. Ammo aql bilan ham. Yechim so'ramang (ayniqsa, men bir kun oldin duch kelgan "Bilganlar, javob beringlar va savol bermanglar!" yozuvi bilan!), aksincha, o'rnatishni so'rang. harakat yo'nalishi. Yangi boshlanuvchilar uchun qaerni qazish kerakligini tushunish qiyin, chunki u shunchaki tajribaga ega emas. Bu odamning aybi emas va hatto muammo ham emas. Bu odatiy. Buni hamma boshdan kechirgan. Men ham shu jumladan. Shaxsan men uchun odam nimanidir o'rganishni xohlashi muhimroq. Va shunchaki javob olish emas, faqat dasturlash laboratoriyasini olgandan keyin besh daqiqa uni unutish uchun. Men sizga har doim harakat yo'nalishini aytib beraman. Agar men uni o'zim bilsam. Va agar men bilmasam, hech bo'lmaganda taxmin qilishim mumkin. Va, albatta, men ham javob izlayman. Ammo men hech qachon to'g'ridan-to'g'ri javob bermayman - hech bo'lmaganda esimda yo'q. Aytgancha, men forumlardan birini shu sababli tark etdim. Men etakchi savollarni berishni boshlaganimda, ular menga oddiygina javob berish odatiy hol ekanligini bir ovozdan tushuntirishdi. Va savollarim bilan men oldinga borishim mumkin. Forumning darajasi ko'p narsani orzu qilganini hisobga olsak, bu yondashuv tufayli emas! - Men boshqa vaqtni boy bermaslikka qaror qildim. Shunday qilib, o'zingizga yoqadigan forumni tanlang va yo'lga chiqing. Aytgancha, ushbu sayt forumlardan biri tufayli aniq paydo bo'ldi. U erda bir muncha vaqt suhbatlashganimdan so'ng, men eng tez-tez ko'tarilgan mavzular ro'yxatini to'pladim va bunday sayt talabga ega bo'lishini angladim. Va shunday bo'ldi. Deyarli barcha maqolalar forumdagi ayrim muhokamalar ortidan yoziladi. Yoki men muntazam ravishda olib boradigan yozishmalarni kuzatib boraman. Natija qanday? Ishlang, ishlang va yana ishlang. Dastlabki bosqichda o'zingiz uchun qancha ko'p narsa qilishga ruxsat bersangiz, shunchalik kam bilim olasiz. Va professionallikka yo'l qanchalik uzoq bo'lsa. Ammo faqat siz kim bo'lishni xohlayotganingizni tanlashingiz mumkin - tugmachani bemalol bosadigan maymun yoki professional. Va u yoki bu narsaga erishishingiz mumkin bo'lgan yo'lni faqat o'zingiz tanlaysiz. Birinchi yo'l aniq. Men ikkinchisini ko'rsatishga harakat qildim. Sizning harakatingiz, janoblar! Asl manbaga havola: Keling, boshidan boshlaylik yoki 'Salom, Java World!'
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION