JavaRush /Blog Java /Random-MS /Mari kita mulakan dari awal atau 'Hello, Java World!'
articles
Tahap

Mari kita mulakan dari awal atau 'Hello, Java World!'

Diterbitkan dalam kumpulan
Saya ingin memulakan artikel ini dengan penyimpangan yang luar biasa, pada pandangan pertama. Nanti akan menjadi jelas mengapa sebenarnya.
Mari kita mulakan dari awal atau Hello, Java World!  - 1
Jadi, mari kita bayangkan Seseorang. Seseorang ini ingin menguasai ski alpine. Dan untuk ini dia mengambil langkah-langkah berikut:
  • Pengajar, buku teks, manual, dll. - ini semua dari si jahat. Anda boleh belajar bermain ski sendiri. Di samping itu, di sekolah dia belajar ski merentas desa dengan baik. Sehubungan itu, segala nasihat daripada orang yang lebih arif tidak diendahkan.

  • Peralatan yang paling keren dipilih. Tidak di bawah tahap pakar. Kasut keras yang menyakitkan kaki anda. Ski keras yang memerlukan usaha yang hebat untuk membengkok, jauh melebihi tahap kecergasan fizikal Seseorang. Nah, dll.

  • Trek ujian adalah... baiklah, katakanlah, trek yang menganjurkan pentas slalom gergasi Piala Dunia. Ini hanya sesuai untuk belajar.
  • Teruskan dengan semangat yang sama.
Jadi inilah soalannya. Apa yang anda akan panggil ini Seseorang? Secara peribadi, sebagai orang yang sudah biasa dengan ski alpine selama kira-kira 20 tahun, saya akan memanggilnya (dan ini masih sangat ringan!) - putus asa. Adalah mustahil untuk mempelajari apa-apa dengan pendekatan ini. Tetapi cara yang pasti untuk terluka. Dan perkara yang PALING pasti ialah meninggalkan idea bermain ski selama-lamanya. Saya fikir anda akan bersetuju dengan saya dalam penilaian ini. Walau apa pun, saya hampir pasti bahawa Seseorang ini tidak akan mengharapkan apa-apa yang tidak menyenangkan untuk ditujukan kepadanya. Sekarang mari kita bayangkan Seseorang yang lain. Biar dia, katakan, menjadi pelajar sains komputer. Dia mempunyai sedikit pengetahuan tentang C++, C#, Pascal. Dia mahu belajar bahasa Jawa. Tindakan beliau:
  • Sastera yang sepadan dengan tahap pengetahuannya (tahap sifar, terus terang) diketepikan. Berdasarkan sedikit kebiasaan dengan teori C++, C# dan OOP yang disebutkan.
  • Persekitaran pengaturcaraan yang paling berkuasa diambil. Katakan Eclipse atau NetBeans. Yang melakukan segala-galanya sendiri, hanya tekan satu butang.
  • Sebagai aplikasi percubaan, kami memilih... baik, katakan sembang. Aplikasi pelayan-pelanggan, bahagian klien dalam bentuk applet, bahagian pelayan - perkhidmatan web atau, paling teruk, servlet. Tepat untuk belajar.
soalan. Apa yang anda akan panggil ini Seseorang? Adakah anda tahu apa itu paradoks? Hakikatnya ialah dalam kes ini akan terdapat lebih sedikit penilaian saksama. Walaupun keadaannya adalah sama dalam semua aspek. Melainkan akibat untuk kesihatan dan kehidupan dalam kes kedua kurang membawa maut. Mungkin ini masalahnya? Situasinya sangat serupa. Saya secara khusus menggambarkan mereka dalam gaya yang sama. Dan perkara yang pelik: jika kemustahilan yang pertama jelas, maka senario kedua diikuti oleh bilangan pemaju pemula yang membimbangkan. Menguasai Java bermula dengan menulis MIDlets, pelanggan untuk pangkalan data, sembang, mencipta laman web berdasarkan servlet... Anda boleh meneruskan untuk masa yang lama. Tetapi perkara itu tetap jelas. Pada masa yang sama, sastera peringkat permulaan diketepikan dengan penghinaan. Baca ini? Kepada saya? Ya, saya telah menulis dalam C++ selama tiga tahun sekarang! (Pilihan ada dalam Pascal, malah dalam asas visual.) Dan saya tahu OOP! Nah, secara umum. Jadi, apa yang seterusnya? Dan kemudian ini:
  • Bagaimana untuk menukar tatasusunan 8 bait kepada panjang?
  • Mengapa ini berlaku NoClassDefFoundError?
  • Mengapa saya melancarkan aplikasi dalam Eclipse ( NetBeans/IDEA/JBuilder), dan semuanya baik-baik saja, tetapi tanpanya saya menaip java HelloWorld.class, dan terdapat ralat?
  • Mengapa ia ranap ClassNotFoundException?
  • Kenapa tidak ada perpustakaan? Saya telah pun memasukkannya ke dalam classes.zip, tetapi semuanya sia-sia!
  • Mengapa saya mencipta pelbagai objek, tetapi apabila saya cuba menggunakan elemen tatasusunan yang saya dapat NullPointerException?
  • Dan mengapa ...?
  • Dan mengapa ...?
  • Dan mengapa ...?
Kenapa kenapa kenapa? Tetapi kerana Java bukan C++ atau Pascal. Dan bukan Perl. Pengetahuan tentang bahasa-bahasa ini bukan sahaja paling kerap tidak membantu, tetapi juga menghalang. Jika hanya kerana bahasa-bahasa ini mempunyai ideologi yang sama sekali berbeza. Tetapi persamaan luaran adalah mengelirukan. Sudah tentu, semua "mengapa" dan "bagaimana" ini mempunyai jawapan dalam buku. Dalam kesusasteraan tahap paling asas. Tetapi membacanya adalah malas (pilihan: malu, tiada masa, dll.). Saya tahu banyak stereotaip yang telah dipindahkan ke Java oleh pakar C++ yang baik. Satu contoh terkini: anda tidak boleh membuang pengecualian dalam pembina. kenapa? Ya, kerana dalam C++ keadaan objek sedemikian tidak ditakrifkan. Sehubungan itu, kebocoran ingatan berlaku. Di Jawa, pada dasarnya tidak ada masalah seperti itu, kerana kehadiran pemungut sampah. Walau bagaimanapun, terdapat orang yang cuba mengelakkan situasi sedemikian. Hanya mengikut stereotaip yang sudah sebati. Dan perkara yang paling teruk ialah hasil daripada usaha ini, kod menjadi lebih rumit. Sintaksnya mudah dipelajari. Dan sama sekali tidak mencukupi. Ideologi bahasa adalah lebih penting. Dan untuk menguasainya dengan paling berkesan, anda harus bermula dari awal lagi. Kenapa sebenarnya dan bagaimana? Dan ini satu lagi soalan. Jadi. Di mana dan bagaimana untuk bermula. Ia bergantung kepada apa yang anda ingin capai. Jika anda ingin menjadi monyet pengekodan yang mahir, anda boleh bermula dengan hampir semua perkara. Jika anda ingin menjadi seorang profesional, perkara menjadi lebih rumit. Pengalaman saya memberi saya alasan untuk mengatakan perkara berikut. Perbezaan antara pembangun profesional dan "pengekod" ialah dia memahami perkara yang berlaku. Dia melakukan lebih sedikit daripada menekan butang. Persekitaran yang kuat adalah bantuan yang sangat baik. Bagi mereka yang boleh melakukannya tanpanya. Tetapi ia selalunya satu-satunya alat mereka yang memulakannya. Dan dalam ketiadaannya, nilai monyet pengekodan adalah sifar. Kerana tiada butang untuk ditekan. Secara umum, menekan butang boleh mengambil bentuk yang benar-benar mengerikan. Salah seorang rakan sekerja saya melihat produk yang ditulis dalam Java. Arahan untuk memasangnya bermula dengan perkataan: "Pasang JBuilder dari cakera..." Kini INI sudah membawa maut. Jika pembangun tidak dapat membuat produk itu berfungsi tanpa persekitaran pembangunan, maka saya gementar memikirkan bagaimana ia ditulis. Sekurang-kurangnya, ia ditulis oleh amatur. Apakah yang saya maksudkan dengan "memahami apa yang sedang berlaku?" Ini bermakna seseorang mesti memahami perkara berikut:
  • Apakah mesin maya dan mengapa ia diperlukan?
  • Apakah kelas dari sudut pandangan mesin maya.
  • Apakah pakej?
  • Apakah perpustakaan?
  • Cara mesin maya mencari dan memuatkan kelas; apakah pemuat kelas dan bagaimana ia berfungsi; berapa banyak yang ada secara lalai; apa itu classpath.
Dan lain-lain. dan sebagainya. Senarai itu diteruskan. Sila ambil perhatian bahawa saya tidak memasukkan pengetahuan khusus kepada pembangun itu sendiri. Apakah benang, apakah kelas dari sudut pandangan OOP dan bagaimana ia berbeza daripada objek, cara pengurus susun atur berfungsi - MANA-MANA ​​pembangun harus mengetahui semua ini. Semua yang saya senaraikan adalah lebih kepada teknikal. Tetapi selalunya ternyata bahawa mengetahui mereka adalah penting untuk memahami perkara yang salah. Contoh dari kehidupan. Terdapat perpustakaan untuk bekerja dengan XML yang dipanggil xalan. Ia mengandungi beberapa pakej javax.xml... - parser, transformer, dsb. Perpustakaan ini sangat popular. Masalahnya ialah pakej yang sama ini telah hadir dalam J2SDK sejak versi 1.4. soalan. Kelas manakah yang akan dimuatkan apabila mengakses kelas javax.xml.transform.stream.StreamSource daripada perpustakaan, jika xalan turut terdapat dalam classpath - perpustakaan atau dari J2SDK? Untuk menjawab soalan ini, anda perlu mengetahui cara pemuat kelas berfungsi. Saya pernah melihat perbincangan selama empat hari di salah satu forum yang akhirnya menyentuh isu ini. Kod tidak berfungsi dengan tepat kerana pemuat tidak mengambil kelas yang dijangka daripadanya. Apa yang saya dapat? Inilah perkaranya: lebih berkuasa persekitaran pembangunan, lebih banyak ia memberi kesan kepada pembangun - semakin kurang dia perlu berfikir. Dan ini sudah oh, betapa teruknya. Begitu dekat dengan monyet. Ini membawa kepada kesimpulan pertama, tidak kira betapa paradoksnya:

Kesimpulan 1. Adalah dinasihatkan untuk mula belajar Java TANPA persekitaran yang kuat.

Saya tidak menganjurkan penulisan dalam editor peringkat notepad. Tetapi saya tidak melakukan ini untuk satu-satunya sebab - mereka, sebagai peraturan, tidak mempunyai penyerlahan sintaks. Ini adalah perkara yang sangat mudah yang tidak mempunyai kesan negatif. Anda boleh menggunakan sesuatu seperti Notepad++ , ia memahami sintaks Java dan, dengan cara itu, adalah percuma. Sebagai contoh, saya mempunyai jenis fail .java yang didaftarkan dalam sistem khusus untuknya. Jadi, editor teks dengan penyerlahan sintaks dan baris arahan. Dua atau tiga hari siksaan - dan memahami apa itu classpath, bagaimana penterjemah dilancarkan dan sekumpulan perkara kecil yang lain - memahami perkara ini akan kekal selama-lamanya. Selanjutnya. Pengalaman saya memberi saya alasan untuk mengatakan bahawa adalah mustahil untuk memperoleh pengetahuan untuk kegunaan masa depan. Dalam erti kata bahawa ia bernilai membaca sastera hanya apabila terdapat soalan yang akan dijawab. Jika anda membaca buku tanpa bertanya tentangnya, maklumat itu akan hilang dalam masa seminggu. Saya tahu ini dengan baik, termasuk dari pengalaman saya sendiri. Saya pernah mula membaca buku mengenai servlets lima kali. Sehingga saya mula berurusan dengan mereka dalam kerja saya, maklumat itu tidak diserap. Dan ini jauh dari kes terpencil. Pada suatu masa dahulu, pada masa yang sangat lama dahulu, kira-kira 8-10 tahun yang lalu, saya membaca yang berikut, malangnya, saya tidak ingat penulisnya: Bagaimana untuk mengajar seseorang bahasa pengaturcaraan baru? Sangat ringkas. Anda perlu memberikannya bahasa, beberapa tugasan dan sekurang-kurangnya dokumentasi. Kemudian, selepas beberapa bulan, apabila dia mula menulis sekurang-kurangnya dalam bahasa ini, sediakan dokumentasi yang komprehensif. Ia akan dibaca dalam dua minggu seperti novel detektif, selepas itu orang itu akan bersedia untuk bekerja. Saya bersetuju dengan kenyataan ini 100%. Dalam dua bulan, di satu pihak, semua isu kecil akan hilang. Jawapan kepada mereka akan diperoleh secara bebas, yang akan meningkatkan nilai mereka. Sebaliknya, soalan yang jelas akan terbentuk, jawapannya akan disediakan oleh dokumentasi. Ini membawa kepada kesimpulan kedua, yang nampaknya tidak kurang paradoks daripada yang pertama:

Kesimpulan 2. Adalah dinasihatkan untuk mula belajar Java TANPA buku teks. Dokumentasi Java API + tutorial Java - ini sudah lebih daripada cukup.

Dokumentasi Java API adalah satu kemestian. Saya sangat mengesyorkan menyimpannya secara tempatan, pada cakera. Anda perlu menghubunginya lebih daripada sekali, bukan dua kali, malah sepuluh. Secara peribadi, tiada hari berlalu saya tidak pergi ke sana. Saya juga mengesyorkan menyimpan tutorial Java secara tempatan. Ini adalah maklumat peringkat permulaan yang menggantikan buku teks sepenuhnya. Walau bagaimanapun, terdapat jumlah yang adil di sana. Saya mesti mengatakan bahawa dalam bidang yang saya tidak berurusan di tempat kerja, saya masih mencari sesuatu yang baru untuk diri saya sendiri. Banyak membaca adalah tidak baik. Selagi tiada permintaan, tiada jawapan. Membaca sedikit pun tidak baik. Di manakah maksud emas? Saya mematuhi peraturan ini: Saya membaca sehingga saya mula kelihatan bahawa saya telah menerima jawapan kepada soalan itu. Dalam 90% kes ini tidak berlaku. Tetapi pada masa inilah yang terbaik untuk berhenti dan teruskan sendiri. Dorongan awal telah diterima, dan menyelesaikan masalah secara bebas akan memberi lebih banyak lagi. Sudah tentu, selepas beberapa ketika ia bernilai mengambil sastera. Tetapi sekali lagi, untuk kesusasteraan peringkat permulaan. Walaupun nampaknya semua ini karut, ia patut membaca bab awal. Saya hampir boleh menjamin bahawa anda akan belajar sekurang-kurangnya sesuatu yang baru. Dan sesuatu ini kemudiannya mungkin menjadi sangat penting. OKEY. Kami seolah-olah telah memikirkan apa yang hendak ditulis. Cara menulis - juga. Tetapi apa yang harus saya tulis? Ingat di mana artikel ini bermula. Perlukah saya mulakan dengan menulis sistem pemesejan segera? Pilihannya, sudah tentu, milik anda. Nampaknya saya tidak berbaloi. Semakin kompleks tugasan, semakin banyak persoalan yang akan timbul. Dengan ketiadaan pengalaman, sejumlah soalan sedemikian akan memberikan perasaan ketidakmungkinan untuk menyelesaikannya, diikuti dengan perasaan rendah diri, kebodohan, dll. Akhirnya, ini boleh membawa kepada keputusan "ke neraka dengannya..." dan berhenti mempelajari bahasa itu. Itu. dengan betul-betul kesan yang bertentangan daripada yang diperlukan. Ini adalah ciri-ciri Java yang tidak begitu banyak daripada proses pembelajaran itu sendiri. Tetapi atas sebab tertentu mereka melupakan perkara ini apabila mengajar pengaturcaraan. Sementara itu, tugas kecil yang diselesaikan hingga akhir boleh memberikan kepuasan yang lebih besar dan pengetahuan yang jauh lebih besar daripada sistem hebat yang ditinggalkan pada awal perjalanan. Oleh itu kesimpulan ketiga: Kesimpulan 3. Adalah dinasihatkan untuk memulakan pembelajaran Java dengan tugasan yang mencukupi untuk tahap pengetahuan semasa anda tentang Java. Anda tidak sepatutnya mula belajar memandu kereta dengan kereta Formula 1. Anda tidak sepatutnya mula belajar ski alpine di trek Piala Dunia. Dan dengan cara yang sama, anda tidak sepatutnya mula menguasai Java dengan menulis sesuatu yang besar. Saya faham bahawa cita-cita itu menuntut. Tetapi dalam kes ini mereka tidak berasas. Dan semakin banyak cita-cita yang tidak munasabah yang anda miliki, semakin sedikit peluang anda untuk menjadi seorang profesional. Fenomena yang luar biasa dari segi pembelajaran ialah, anehnya, pelbagai forum. Jika anda menggunakannya dengan bijak. Dengan bijak - ini bermakna anda perlu melakukan sebaliknya, bukan seperti biasa. Iaitu, bukan untuk bertanya, tetapi untuk menjawabnya. Mana-mana yang anda mempunyai kekuatan untuk mencapai. Jika anda fikir saya sendiri tahu segala-galanya, anda sangat silap. Ya, saya tahu banyak. Tapi ada kawasan yang saya tak pernah jumpa. Atau saya ada, tetapi sangat sedikit. Contoh klasik daripada amalan saya ialah bekerja dengan sijil: tandatangan kod, sambungan selamat, dsb. Pada tahun 1998, semasa menulis tesis saya, saya melakukan ini, tetapi sejak itu semuanya telah banyak berubah. Selama bertahun-tahun, saya mempunyai soalan terkumpul. Saya juga mula membaca beberapa literatur. Tetapi, seperti yang saya katakan di atas, anda tidak boleh mendapatkan pengetahuan untuk kegunaan masa hadapan. Ia seperti linggis - ia masuk ke dalam satu telinga dan keluar yang lain. Tiada hasil kecuali lubang di kepala. Dan ini berterusan sehingga baru-baru ini, apabila soalan ditanya dalam forum tentang sambungan SSL dengan tomcat. Terdapat beberapa masalah. Dan hanya soalan ini yang mendorong saya untuk menggali lebih dalam. Dan jika ada permintaan, ada juga jawapannya. Saya bukan sahaja mengetahui masalah orang itu, tetapi saya juga menemui banyak maklumat berguna yang lain. Saya akhirnya faham cara sijil berfungsi. Artikel yang sepadan ada dalam rancangan. Dan ini berlaku sepanjang masa. Saya bekerja agak sedikit, sebagai contoh, dengan GUI. Hanya hasil daripada soalan seseorang dalam forum saya memahami beberapa keupayaan TextLayout. Sebelum soalan ini saya tidak tahu tentang mereka. Begitu juga, saya baru-baru ini mendapati bahawa ternyata JButton juga mentafsirkan html sebagai pengepalanya sendiri. Sebelum ini, saya fikir hanya JLabel yang boleh melakukan ini. Dan ini sekali lagi terima kasih kepada forum. Jadi ternyata: lebih banyak kita menjawab soalan, lebih banyak kita belajar sendiri. Itulah sebabnya saya tidak bersetuju dengan pendapat popular bahawa jika seseorang duduk di forum, maka dia tidak melakukan apa-apa. Ini adalah jauh dari jelas dan bergantung terutamanya pada sebab sebenarnya orang itu berada di forum. Dan apa yang dia lakukan terutamanya - bertanya atau menjawab. Malah, anda juga boleh bertanya. Tetapi juga dengan bijak. Jangan minta penyelesaian (dan terutamanya dengan postscript "Tolong mereka yang tahu, berikan jawapan, dan jangan tanya soalan!", yang saya temui pada hari yang lain!), Tetapi sekali lagi, sebaliknya, minta untuk menetapkan arah pergerakan. Ia benar-benar difahami bahawa sukar bagi seorang pemula untuk memahami di mana untuk menggali, kerana dia hanya kekurangan pengalaman. Ini bukan salah orang itu, malah ia bukan masalah. Ini baik. Semua orang pernah lalui ini. Saya termasuk. Bagi saya secara peribadi, adalah lebih penting seseorang itu ingin mempelajari sesuatu. Dan bukan hanya mendapat jawapan, hanya untuk melupakannya lima minit selepas mengambil makmal pengaturcaraan. Saya akan sentiasa memberitahu anda arah pergerakan. Kalau saya sendiri kenal dia. Dan jika saya tidak tahu, sekurang-kurangnya saya boleh meneka. Dan saya pasti juga akan mencari jawapannya. Tetapi saya mungkin tidak pernah memberikan jawapan langsung-sekurang-kurangnya, saya tidak ingat. By the way, ia adalah kerana ini bahawa saya meninggalkan salah satu forum. Apabila saya mula bertanya soalan utama, mereka menjelaskan kepada saya secara serentak bahawa adalah kebiasaan bagi mereka untuk menjawab sahaja. Dan dengan soalan saya, saya boleh pergi lebih jauh. Memandangkan tahap forum meninggalkan banyak yang diingini, tidak kurang terima kasih kepada pendekatan ini! – Saya memutuskan untuk tidak membuang masa lagi. Jadi pilih forum mengikut kesukaan anda dan pergilah. Dengan cara ini, laman web ini muncul dengan tepat terima kasih kepada salah satu forum. Selepas bercakap di sana untuk beberapa lama, saya mengumpulkan senarai topik yang paling kerap dibangkitkan dan menyedari bahawa tapak sedemikian akan mendapat permintaan. Dan begitulah ia berlaku. Hampir semua artikel ditulis berikutan beberapa perbincangan dalam forum. Atau mengikuti surat-menyurat yang juga saya lakukan secara berkala. Apakah keputusannya? Kerja, kerja dan kerja lagi. Lebih banyak anda membenarkan diri anda melakukan untuk diri sendiri pada peringkat awal, semakin kurang pengetahuan yang anda peroleh. Dan semakin panjang jalan menuju profesionalisme. Tetapi hanya anda yang boleh memilih siapa anda mahu menjadi - monyet yang menekan butang tanpa berfikir atau profesional. Dan hanya anda sendiri yang memilih jalan di mana anda boleh mencapai ini atau itu. Cara pertama adalah jelas. Saya cuba menunjukkan yang kedua. Langkah anda, tuan-tuan! Pautan ke sumber asal: Mari kita mulakan dari awal atau 'Hello, Java World!'
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION