EDIT: Pertanyaan ini pada awalnya tampaknya bashing Java, dan saya kira pada titik ini agak. Namun, poin yang lebih besar yang saya coba utarakan adalah mengapa satu bahasa tunggal dipilih sebagai ujung semua semua solusi untuk semua masalah. Java adalah yang digunakan sehingga yang harus saya kalahkan di sini, tapi saya tidak sengaja merobek Java yang baru :)
Saya tidak suka Java di sebagian besar pengaturan akademik. Saya tidak mengatakan bahasanya sendiri buruk - ia memiliki beberapa aspek yang sangat diinginkan, yang paling penting kemampuan untuk berjalan tanpa kompilasi ulang pada sebagian besar platform apa pun. Tidak ada salahnya menggunakan bahasa untuk Aplikasi Berikutnya Anda ^ TM. (Bukan sesuatu yang secara pribadi akan saya lakukan, tapi itu lebih karena saya memiliki lebih sedikit pengalaman dengannya, daripada desainnya yang buruk)
Saya pikir itu sia-sia bahwa kursus CS tingkat tinggi diajarkan menggunakan Java sebagai bahasa. Terlalu banyak rekan siswa saya yang tidak dapat memprogram apa pun, karena mereka tidak tahu bagaimana bekerja di dunia yang tidak dikoleksi sampah. Mereka pada dasarnya tidak memahami mesin yang mereka pemrograman. Ketika seseorang dapat bekerja di luar dunia pengumpulan sampah, mereka dapat bekerja di dalam satu dunia, tetapi tidak sebaliknya. GC adalah alat, bukan penopang. Tetapi cara itu digunakan untuk mengajar siswa ilmu komputer adalah sebagai penopang.
Ilmu komputer tidak seharusnya mengajarkan seluruh rangkaian program yang dirancang untuk satu bahasa. Siswa pergi dengan gagasan bahwa semua desain yang baik adalah desain Java idiomatik, dan bahwa Desain Berorientasi Objek adalah SATU CARA YANG BENAR YANG HANYA CARA HANYA DAPAT DILAKUKAN. Bahasa lain, setidaknya salah satu dari mereka bukan bahasa sampah yang dikumpulkan, harus digunakan dalam pengajaran, untuk memberikan lulusan pemahaman yang lebih baik tentang mesin.
Sangat memalukan bahwa seseorang dengan PHD di CS dari lembaga yang disegani tidak bisa memprogram jalan keluar dari kantong kertas.
Yang lebih buruk, adalah ketika saya berbicara dengan para profesor CS yang benar-benar memahami bagaimana berbagai hal beroperasi, mereka berbagi perasaan seperti ini, bahwa kami melakukan tindakan yang merugikan siswa kami dengan melakukan segala sesuatu di Jawa. (Perhatikan bahwa di atas akan sama jika saya menggantinya dengan bahasa lain, umumnya menggunakan satu bahasa adalah masalahnya, bukan Java itu sendiri)
Secara total, saya merasa saya tidak bisa lagi menghormati gelar apa pun - ketika saya tidak bisa melihat orang-orang di sekitar saya bisa memprogram jalan keluar dari masalah fizzbuzz.
Kenapa / bagaimana bisa seperti ini?
sumber
Jawaban:
Ini bukan masalah Java, ini masalah mengajar. Tidak tahu bagaimana program bukan kesalahan bahasa, itu kesalahan siswa. Hal yang sama berlaku untuk semua masalah Anda, GC, pengetahuan mesin dasar, cara kerja "di balik tudung".
Keluhan utama Anda tentang pengumpulan sampah membuat saya sedikit. Kecuali Anda melakukan pengumpulan sampah C atau C ++ biasanya sangat baik dan tidak menjadi masalah. Apakah Anda lebih suka mereka semua belajar perakitan? Bahasa tingkat tinggi yang ketat sangat berguna untuk pengajaran. Ini memberi Anda fleksibilitas perpustakaan, paket, dan kemudahan lain ketika Anda membutuhkannya, tanpa ada bahasa "gula" yang membingungkan hadir di sebagian besar bahasa tingkat tinggi lainnya (PHP, Ruby, Python, Perl).
sumber
Apakah universitas benar - benar melakukan ini? Atau apakah ini hanya persepsi yang didapat orang ketika mereka mendapatkan kandidat wawancara kerja yang buruk?
Saya mendapatkan gelar CS saya 4 tahun yang lalu dan sementara Java digunakan di kelas intro, itu tidak terlalu ditekankan setelah itu. Dari atas kepala saya, inti diperlukan kursus mengharuskan Anda untuk belajar Java, C, C ++, SML (bahasa pemrograman fungsional), assembly, matlab dan CAST (bahasa deskripsi sirkuit). Ini tidak memperhitungkan semua kursus CS matematika dan teoretis dan tentu saja, setengah lusin kursus CS pilihan yang akan membuat Anda terpapar lebih banyak. Dari berbicara dengan teman-teman di sejumlah universitas yang berbeda, tidak terdengar seperti apa yang mereka lakukan jauh berbeda.
Jika ada universitas yang hanya mengajarkan Jawa, maka itu memang sebuah tragedi. Bukan karena Java buruk, tetapi karena Java hanyalah salah satu dari sekian banyak alat yang harus tersedia untuk seorang programmer. Pengembang yang hanya mengenal Java sama dengan tukang kayu yang hanya tahu cara menggunakan palu. Namun, saya sulit percaya itu benar-benar terjadi, setidaknya untuk universitas ternama. Saya menduga bahwa ini hanyalah persepsi dari melihat kandidat yang buruk dan menyalahkan sekolah karena ketidakmampuan kandidat daripada kurangnya dorongan / motivasi / rasa ingin tahu / profesionalisme profesional / dll.
sumber
Saya benar-benar terkejut dengan situasi seperti ini di banyak sekolah. Ketika saya mendapatkan gelar CS saya, saya memiliki serangkaian kursus bahasa yang di antaranya mencakup semua bahasa populer saat itu (ini hampir 40 tahun yang lalu): assembler (Univac 1108 dan MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp , dan Algol 68. Saya tidak bisa membayangkan hanya memiliki satu bahasa yang diajarkan. Atau bagaimana saya bisa menghargai apa yang harus dilakukan oleh kompiler tanpa menulis beberapa program assembler.
Kami memang menggunakan Algol dan FORTRAN untuk sebagian besar kursus data dan algoritma. Saya ingin menghabiskan lebih banyak waktu dengan Lisp - alih-alih kami hanya memiliki pengantar dan sekarang mencoba mempelajari kembali beberapa konsep. Kami menggunakan SNOBOL4 untuk menulis parser - dan pola yang cocok dengan backtracking membangun fondasi yang baik untuk kemudian bekerja perpustakaan regex termasuk dengan banyak bahasa modern.
Pengantar setengah lusin bahasa ini memicu minat pada saya yang terus berlanjut sejak itu.
sumber
Untuk mendapatkan alasan sebenarnya, Anda harus bertanya kepada orang-orang yang menjalankan lembaga-lembaga tersebut (dan bahkan kemudian, mereka mungkin tidak memberi tahu Anda).
Beberapa kemungkinan alasan (dan saya tidak membela atau menuduh siapa pun di sini, hanya menebak):
Anda bisa menyelesaikan sesuatu di Jawa
Java adalah bahasa tujuan umum dan dengan demikian dapat digunakan untuk memecahkan banyak masalah.
Banyak guru mengerti Jawa
Sulit untuk mengajarkan bahasa yang Anda tidak mengerti
Java populer
Yang berarti bahwa ada banyak sumber daya Java - buku, komunitas aktif, perpustakaan kode dll.
Jawa itu mudah
Anda tidak perlu memahami banyak hal atau teori tingkat rendah untuk melakukan Java. Anda mungkin tidak melakukannya dengan baik , tetapi setidaknya Anda bisa menyelesaikan sesuatu.
Java meresap
Anda dapat menjalankannya pada lebih atau kurang apa saja.
Ada pekerjaan untuk programmer Java
Ada banyak pekerjaan yang membutuhkan Jawa - guru seharusnya mempersiapkan siswa untuk dunia nyata.
Ada waktu terbatas
Pada banyak kursus, tidak ada waktu untuk mengajar banyak bahasa, teori, konsep tingkat rendah dll.
Itu yang diinginkan siswa
Banyak siswa telah mendengar (dan bahkan menggunakan) Java. Mereka suka karena sudah tidak asing lagi.
sumber
Itulah yang diminta industri. Ada kekurangan pengembang Java sehingga sekolah mulai membuat mereka. Perusahaan mendapat pengembang yang dapat mulai bekerja segera setelah mereka berjalan melewati pintu.
Bagaimanapun, bahasanya tidak masalah. Mereka bisa mengajar bahasa non-GC dan masih menghasilkan programmer yang buruk. Penggunaan sekolah bahasa adalah detail implementasi. Sekolah harus mengajarkan konsep. Jika ini bukan masalahnya, maka sekolahlah yang menjadi masalah, bukan bahasa yang mereka ajarkan. Hanya karena seseorang tidak tahu apa itu pointer, bukan berarti mereka tidak bisa menjadi programmer yang efektif.
Lagipula, GC adalah jalan masa depan.
sumber
Motif kemalasan dan keuntungan. Java membuat sebagian besar orang mencapai 80%, dengan upaya 20%. Namun, ini sering menghasilkan "codec monyet", pembuat kode voodoo yang tidak memiliki pemahaman mendalam tentang apa yang terjadi, dan tidak dapat menggali lebih dalam daripada alat tingkat tinggi.
Mengajar C / C ++ dengan benar sulit. Bahkan ketika dilakukan dengan baik, beberapa tidak akan sepenuhnya memahami konsep tingkat rendah seperti petunjuk (ada studi tentang ini). Selain itu, tampaknya tidak langsung relevan di pasar kerja.
sumber
Saya sebagian besar setuju tetapi pada tingkat tertentu.
Jika Anda ingin mengajarkan keberanian CS yang berfokus pada struktur data atau algoritma. Menyingkirkan sebagian besar barang yang tidak perlu adalah hal yang baik. Anda tidak ingin siswa berurusan dengan siswa tingkat rendah ketika mempelajari konsep tingkat tinggi.
Di sisi lain, hal-hal tingkat rendah juga harus diajarkan. Supaya kita mendapatkan lebih banyak programmer semua-sekitar.
sumber
Seperti biasa, ini adalah pertanyaan tentang apa yang ingin Anda ajarkan dan berapa lama Anda harus melakukannya.
Melakukan hal-hal di Jawa berarti Anda tidak harus berurusan dengan pointer liar dan bebas / malloc. Itu berarti lebih sedikit bug yang sulit ditemukan.
Ini tidak berarti bahwa Anda tidak boleh belajar tentang mesin yang mendasarinya - yang Anda harus pandai dalam perdagangan - tetapi mungkin Anda harus memilih alat yang tepat untuk pekerjaan itu. Algoritme tingkat tinggi mungkin bukan topik terbaik untuk kursus assembler.
sumber
Apakah terlalu berlebihan untuk bertanya bahwa mereka diajari sesuatu tentang bagaimana komputer benar-benar bekerja? Tidak masuk akal bagi saya bahwa garis besar kursus CS tidak akan mencakup sesuatu dari sistem operasi dan arsitektur komputer. Saya tidak mengatakan Anda harus dapat merancang komputer di bagian belakang amplop, tetapi gambaran umum menempatkan semua bahasa ke dalam perspektif. Maksudku, Java berjalan di mesin virtual!
sumber
Dalam semua kejujuran saya tidak berpikir bahwa Anda harus kehilangan rasa hormat untuk semua derajat dan terutama bukan CS karena satu-satunya bahasa yang diajarkan adalah Jawa.
Setiap perusahaan yang layak. siswa sci memahami bahwa gelar CS-nya tidak lebih dari selembar kertas dan bahwa pengetahuan nyata akan datang dari proyek pribadi dan studi pribadi. Saya ingin berpikir bahwa siswa yang baik tahu mereka perlu tahu C dan belajar bagaimana menyelesaikan sesuatu di Linux / Unix dan belajar bagaimana TIDAK memegang tangan mereka dengan bahasa modern.
sumber
Saya tidak melihat masalah dengan menggunakan Java. Masalah terbesar (seperti yang Anda sebutkan) adalah ketika universitas mengajarkan program imperatif sebagai cara terbaik dan satu-satunya untuk menyelesaikan semua masalah Anda. Ini sangat jauh dari kebenaran. Sebagai contoh, alih-alih menggunakan tiga bahasa imperatif (atau bahkan bahasa terburuk yang sama) untuk tiga kursus berbeda, mereka harus menggunakan tiga paradigma pemrograman yang berbeda. Contohnya adalah Java (imperatif), Prolog (deklaratif), dan Haskell (fungsional).
Adapun mengapa ini terjadi, saya pikir itu adalah kombinasi dari (1) politik - ketua tidak berpikiran terbuka atau memiliki keuntungan / sponsor pribadi, dan (2) kemalasan - profesor pernah menjadi mahasiswa dan mereka mengajar apa pun yang mereka tahu atau sukai.
sumber
Calvin college di Grand Rapids Mi. Begitu mereka beralih dari Jawa ke Python untuk kelas-kelas pemrograman pengantar, profesor yang tidak percaya menyebutkan kepada sekelompok kami di dekat akhir semesternya, "Banyak dari mereka benar-benar dapat memprogram, ini luar biasa". Ketakjubannya berbeda dengan pengalaman sebelumnya dengan Jawa. Ini tidak membuat Java bahasa yang buruk, hanya sulit untuk mengambil dari awal. Saya berpendapat hal yang sama tentang C, atau C ++ atau bahasa apa pun yang membutuhkan pengetahuan mendalam tentang skema atau tipe alokasi memori.
sumber
Saya mendapat gelar dalam rekayasa sistem komputer, jadi saya melakukan studi perakitan, mikroprosesor, VHDL, apa gerbang logika dan bagaimana membuat flip-flop dari mereka, saya mempelajari sirkuit listrik, penguat operasional, filter low-pass, amplitudo modulasi, membangun sirkuit di laboratorium yang akan terdengar seperti keypad telepon, kacau dengan penganalisa logika, mengambil beberapa kelas fisika. Di sisi Linux - saya mengkompilasi ulang kernel sebelumnya, menulis driver perangkat kecil, dan sistem file pekerjaan rumah.
Tetapi kemudian saya menyadari bahwa saya lebih menyukai barang-barang tingkat tinggi. Saya lebih suka Python daripada C. Saya suka C # dan saya suka pengumpul sampah. Saya suka matematika dan algoritma dan struktur data, tapi saya bukan penggemar pointer - saya bisa mengacaukannya; Aku hanya tidak mau.
Jadi, Anda berpikir bahwa universitas harus mengajar lebih banyak C, lebih sedikit Jawa. Orang lain berpikir bahwa mereka harus mengajarkan semuanya dalam Skema. Spolsky akan mengambil keduanya.
Ya, memang benar bahwa gelar sarjana hanyalah selembar kertas, tetapi "jangan biarkan sekolah menghalangi pendidikan Anda". Selalu ada Wikipedia, Stack Overflow, Coursera.org, dll. Sepertinya universitas tradisional akan menjadi kurang penting.
Jika saya bisa melakukan sarjana di seluruh, maka saya akan pergi ke sekolah yang berbeda, saya tidak akan mempelajari hal-hal teknik listrik, melainkan Matematika, CS + minor dalam Fisika dan Prancis. Scratch French; Saya seharusnya belajar di luar negeri di Swiss dan belajar 5 bahasa alami saat itu. Saya juga akan kembali dan menemukan seseorang yang meyakinkan saya bahwa saya benar-benar harus mengambil beberapa pengantar ke kelas ekonomi di perguruan tinggi untuk bertahan hidup di dunia nyata dan memukul kepalanya dengan koleksi buku-buku Milton Friedman (hanya sedikit buku tentang masalah ekonomi yang saya baca yang tidak payah). Saya juga tidak akan membayar uang untuk buku Freakonomics 1 atau buku tentang bahasa Perl.
Kalau dipikir-pikir, saya akan melakukan banyak hal secara berbeda. Yang bisa saya lakukan sekarang, dan saya merekomendasikan ini kepada Anda, adalah memilih petualangan Anda sendiri: http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html
Setelah melihat ke belakang, saya akan menghasilkan 100 miliar dolar di pasar saham saat ini, dan saya akan menginvestasikannya dalam penelitian kanker, saya akan mempekerjakan para ilmuwan untuk membersihkan dunia dari limbah plastik; Saya akan menyumbangkan cukup uang untuk kampanye Ron Paul sehingga perang di Timur Tengah akan lebih dari 3 tahun yang lalu.
Kenali sekarang bahwa Anda tidak akan pernah mendapatkan waktu kembali, jadi cobalah untuk menghabiskannya dengan bijak.
sumber
Beberapa tahun yang lalu saya membaca di suatu tempat bahwa, di Inggris, keputusan Java dibuat untuk menarik lebih banyak siswa ke pemrograman. Rupanya itu lebih mudah di otak karena kurangnya petunjuk jahat dan manajemen memori dll ... Saya kira ini adalah alasan mengapa Python dengan cepat diadopsi sebagai 'alat pembelajaran' yang baru. Saya berpendapat bahwa program uni Anda tidak akan membuat Anda menjadi seorang programmer. Yang harus dilakukan adalah mempersenjatai Anda dengan sejumlah pengetahuan dan mengutamakan Anda untuk pemrograman. Hari dimana seseorang dapat memanggil diri sendiri seorang programmer umumnya datang sedikit waktu setelah uni dan ketika waktu itu datang, pointer, pengumpulan sampah dan paradigma pemrograman selain OOP, seharusnya tidak menjadi masalah.
sumber
Mengapa Java digunakan?
Tiga alasan:
Java menggunakan sintaks C-style. Banyak programmer yang akrab dengannya, sehingga mengurangi kurva belajar.
Uang dihabiskan untuk memasarkan Jawa sebagai keren dan modern. Tetapi dibandingkan dengan lisp, java hidup di zaman batu.
JVM. JVM adalah satu hal keren tentang java yang sah, bukan hanya pemasaran hype. Meskipun JVM harus dipuji sebagai platform untuk menjalankan program, itu tidak dengan sendirinya pantas keberadaan bahasa Jawa. Anda secara teoritis dan praktis dapat mengkompilasi banyak bahasa yang berbeda untuk JVM.
sumber
Pertanyaan Anda mendukung temuan orang lain yang menulis makalah yang mengatakan Java sangat keren tetapi tidak cukup berat untuk komputasi ilmiah. Saya pikir dia hanya harus menggunakan Desimal Besar dengan semua persyaratannya, NAN, dll. Dan lanjutkan.
Saya hanya ingin hidup di dunia pengumpulan sampah otomatis. Lebih sehat, lebih bersih, lebih rapi, estetis, mencegah uang terbuang untuk biaya kesehatan, lebih diinginkan - tidak perlu menandai sesuatu sebagai yang tidak diinginkan - hanya dengan mendereferensi atau menyetelnya ke nol atau ketika saya keluar dari ruang lingkup item secara otomatis ditandai untuk pengumpulan sampah ..
Ok, sekarang saya berbicara tentang Jawa saja tetapi akan sangat membantu jika ini bekerja dalam skenario sampah nyata juga. Java ditulis sekali dijalankan di mana saja yang cukup baik bagi saya untuk digunakan sebagai bahasa di sekolah. Tidak ada memori yang bocor dan disukai oleh programmer yang senang yang tidak ingin menghabiskan waktu menandai setiap objek yang mereka gunakan dan berhenti menggunakan itu sendiri adalah logika yang baik atas nama Java.
Java memiliki pointer - yah kita menyebutnya referensi .. String s1 = "Hello"; String s2 = "Halo"; String s3 = String baru ("Halo");
s1 dan s2 akan menunjuk ke objek String yang sama - yaitu dengan referensi s1 == s2, s1.equals (s3) tetapi s1 == s3 salah karena s3 adalah objek referensi baru - ini adalah aritmatika referensi dari java dan saya mengerti semua ini, maaf, saya tidak ingin dilabeli sebagai seseorang yang tidak memahami kompleksitas aritmatika pointer dari C atau C ++.
sumber