Saya sedang dalam kesulitan untuk mendaftarkan diri di sekolah untuk mendapatkan gelar CS. Sekolah yang saya cari sebenarnya menawarkan Java dan C ++ - berbasis untuk kursus pengembangan perangkat lunak pengantar (pemrograman berorientasi objek, pola desain, hal semacam itu). Ini adalah pilihan siswa jalur mana yang harus diikuti, tetapi hanya ada waktu untuk mengikuti.
Mengetahui apa yang Anda ketahui sekarang, jika Anda punya pilihan, apakah Anda akan meletakkan dasar kurikulum CS Anda di Jawa atau C ++?
Debat saya saat ini terlihat seperti ini:
Seorang teman yang baik (yang memiliki gelar PhD di bidang AI) sedang menggembar-gemborkan Jawa sebagai pilihan yang lebih baik terlepas dari apa yang saya lakukan, jika hanya untuk membuka lebih banyak kesempatan kerja nanti, meskipun ia mungkin bias karena semua pekerjaannya telah di Jawa (dia menyukainya). Saya tinggal di daerah Boston, MA, USA dan saya melihat jumlah pekerjaan Java dan C yang sama.
Di sisi lain, meskipun saya belum sepenuhnya memutuskan apa yang ingin saya lakukan dengan tingkat ketika saya selesai, preferensi saya adalah untuk mengembangkan untuk Mac, yang saya lakukan sekarang meskipun dalam kapasitas terbatas. Untuk itu, saya sudah mendapatkan beberapa eksposur terbatas ke C ++, tapi saya belum punya dengan Java, dan melihat proyek saya di pekerjaan saya, saya tidak melihat kebutuhan untuk menggunakannya dalam waktu dekat, "segera" diukur setidaknya dua tahun.
Saya mungkin harus mencatat bahwa saya orang dewasa akan kembali ke sekolah setelah 20 tahun (saat ini saya tidak memiliki gelar apa pun) jadi saya mencari untuk memaksimalkan kesempatan dan waktu yang dihabiskan sebaik mungkin. Saya agak condong ke C ++ tapi saya masih ambivalen, dan beberapa saran objektif dari luar akan membantu di sini.
Atau aku bisa berpikir terlalu keras tentang itu.
UPDATE: Ternyata pilihan bahasa tidak begitu jelas seperti yang saya duga sebelumnya. Sementara beberapa mata kuliah inti berfokus pada Jawa, beberapa mata kuliah inti lainnya bekerja terutama di C dan Jawa, tetapi juga beberapa mata kuliah lain dilemparkan untuk mengukur dengan baik. Bahkan, sisa semester saya akan berada di Objective-C setelah menghabiskan waktu di Jawa dan Javascript. Semester terakhir adalah C, Javascript, dan PHP, ditambah beberapa lainnya dilemparkan sebagai tugas yang diperlukan. Karena semuanya terbagi menjadi menengah secara keseluruhan, dan saya masih mendapatkan jawaban untuk hal ini, saya sekarang mencoba untuk mengerjakan kurikulum saya sehingga saya memenuhi semua persyaratan untuk gelar tersebut tetapi untuk menyerap sebanyak mungkin bahasa yang bisa saya tangani secara wajar . Sejauh ini, nilaiku belum menderita saat mencoba melakukan ini.
Jawaban:
Saya pribadi akan menggunakan C ++ karena ini akan memberi Anda wawasan tentang bagaimana bagian-bagian Java bekerja di bawah tenda (Pointer misalnya). Pindah ke Java dari C ++ cukup sepele, sedangkan bergerak sebaliknya mungkin lebih sulit.
Hal yang benar-benar sulit tentang ekosistem Jawa adalah banyaknya kerangka kerja, perpustakaan, dan lain-lain - semuanya tidak mungkin mencakup semua itu di Universitas.
Pada akhir hari itu tidak akan peduli bahwa banyak bahasa apa yang Anda pilih, selama Anda mempelajari prinsip-prinsip.
JUG saya akan membunuh saya karena mendukung C ++ ;-)
sumber
Saya harus tidak setuju dengan kebanyakan orang yang menganjurkan Jawa di sini. Belajar C ++, bahkan jika Anda belum mempelajari arsitektur komputer dan mikroprosesor, memberi Anda begitu banyak wawasan berharga tentang cara program komputer bekerja dan beroperasi.
Nota bene, saya TIDAK menganjurkan Anda tidak harus belajar Java (lebih baik lagi, C #) karena ini adalah modern, pengembangan aplikasi cepat dan kerangka kerja besar telah dibangun di sekitar mereka memberi Anda akses ke banyak fungsi "gratis", seperti akses file yang diabstraksikan dan yang serupa, namun insinyur perangkat lunak sejati harus tahu setidaknya beberapa C ++, C atau setidaknya assembler, karena itulah yang memisahkan Anda dari jenis script-kiddie.
Setelah Anda cukup mahir dengan C ++, percaya diri dengan manajemen memori dan STL, mengambil Java / C # akan sangat mudah.
sumber
Sekolah dan cendekiawan yang mengadvokasi Jawa sebagai pilihan pertama harus diperiksa kepala mereka (atau hanya mendapatkan pekerjaan nyata di luar sana). Saya mengatakan ini sebagai orang yang telah melakukan pengembangan aplikasi dan sistem di Jawa selama 12 tahun terakhir. Jawa adalah bahasa yang mengerikan untuk mengajar.
Alasannya adalah sebagai berikut: kecuali yang berbakat, sebagian besar siswa dapat (dan kemungkinan besar tidak akan pernah) memahami orientasi objek tanpa memahami pemrograman modular. Dan mereka tidak dapat memahami pemrograman modular tanpa terlebih dahulu memahami pemrograman terstruktur dalam bahasa prosedural. Polos dan sederhana. Bukti dari ini (antara lain) adalah bahwa meskipun kita telah mengenal OO selama 3-4 dekade sekarang, orang-orang masih menulis hyper-spaghetti dalam praktiknya.
Selain itu, seseorang yang hanya mengandalkan bahasa berbasis gc (baik itu Java atau .NET) tidak pernah bisa benar-benar dekat dengan perangkat keras. Kecuali jika seluruh ambisi Anda adalah membuat halaman web yang dinamis, coba tebak? Anda harus merasa nyaman dengan dekat dengan bahasa.
Anda pergi ke sekolah CS untuk menjadi ilmuwan dan programmer komputer yang berpengetahuan luas (mudah-mudahan dengan beberapa jam kredit praktik pemrograman langsung dalam banyak bahasa pemrograman). Jika Anda semua yang Anda kenal adalah Java (atau .NET atau C atau Python apa pun) maka Anda adalah "programmer Java" (bukan programmer yang dapat bekerja di Jawa, tetapi "programmer Java"). Dan itu sama masuk akal dengan mengatakan bahwa Anda adalah "tukang kayu palu" atau "mekanik driver sekrup Phillip", bukan.
Sekolah yang bagus akan memaparkan Anda pada C (atau bahasa prosedural lainnya seperti Pascal atau Ada), kemudian C ++ dan sebuah majelis, membuat Anda belajar Java sendiri saat Anda melanjutkan kursus batu penjuru proyek pada tahun junior / senior Anda. Selain itu, harus memberi Anda paparan bahasa fungsional sehingga Anda memahami konsep melewati blok komputasi sebagai argumen, perhitungan efek samping bebas, transparansi lokasi dan sejenisnya (yang memiliki aplikasi praktis nyata, bahkan di web.)
Anda perlu tahu apa itu segfault. Anda perlu tahu apa paging, memori virtual dan semua omong kosong itu artinya. Anda perlu tahu cara menguraikan masalah dalam modul (baik itu berbasis prosedural dan OO). Anda perlu tahu bagaimana sistem OO benar-benar diimplementasikan di bawah tenda (sehingga Anda tahu biaya.) Anda perlu tahu di mana abstraksi OO rusak (dan mereka lakukan karena dunia dan masalah kompleks tidak selalu berorientasi objek.)
Anda perlu mengetahui semua hal itu sehingga Anda menjadi ilmuwan komputer yang berpengetahuan luas yang mampu bekerja baik pada perusahaan atau pada level yang sangat rendah dalam mengimplementasikan hal-hal tingkat sistem, baik untuk sektor komersial maupun sektor publik, baik skala besar maupun kecil. skala.
Para akademisi yang mendorong Jawa sebagai bahasa satu-satunya untuk memerintah mereka semua sama sekali tidak tahu apa yang sebenarnya dibutuhkan industri ini. Tidak mengerti Tidak mengerti yang tidak bisa dimaafkan. Itulah yang terjadi ketika mereka bekerja di menara gading melihat industri dari kejauhan.
Mereka telah mengubah departemen Ilmu Komputer menjadi sekolah kejuruan 4-tahun yang mahal yang menghasilkan kuda-kuda trik satu bahasa pemrograman. Dan itu bisa dimaafkan jika mereka setidaknya bisa mengajarkan siswa keterampilan bisnis / perusahaan / organisasi dasar (yaitu, meninggalkan fasad CS dan mengadopsi kurikulum MIS.) Tetapi mereka bahkan tidak melakukan itu, yang saya pikir itu sangat merugikan untuk industri, ekonomi dan pada akhirnya para siswa.
Saya sarankan Anda membaca karya Joel Spolsky di "Java Schools".
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Singkatnya, jika mereka tidak mengajari Anda bahasa pemrograman prosedural (baik itu bahasa industri seperti C atau Ada atau yang cukup baik untuk mengajar seperti Pascal), dan mereka memberi Anda jika C ++ (jika Anda beruntung) atau Java / C # (jika Anda beruntung), saya akan mencari sekolah lain. Polos dan sederhana, dari seorang lelaki yang telah menggunakan Java untuk hidup di dunia nyata selama beberapa waktu.
sumber
Saya pikir banyak tergantung pada kepribadian Anda. Setidaknya dari sudut pandang saya, Java dan C ++ memiliki orientasi yang sangat berbeda yang menarik bagi orang-orang yang secara substansial berbeda.
Ketika Anda turun ke sana, Java benar-benar sebagian besar perpustakaan kelas besar, dengan cukup bahasa untuk dapat instantiate objek dan memanggil metode dari perpustakaan itu. "Learning Java" terdiri, sebagian besar penghafalan (atau setidaknya menjadi sadar) apa yang ada di perpustakaan dan bagaimana itu diatur, sehingga Anda dapat menemukan hal-hal yang Anda inginkan ketika Anda menginginkannya.
C ++ menempatkan penekanan yang jauh lebih sedikit pada penyediaan kode pra-tertulis. Meskipun tidak termasuk perpustakaan (STL 1 ), perpustakaan itu kurang tentang kode yang disertakan daripada tentang gaya dan serangkaian prinsip. Sangat mungkin untuk menulis kode yang secara jelas dan mudah dikenali sebagai kode "STL", meskipun hanya sedikit atau bahkan tidak ada sama sekali kode yang sudah ditulis sebelumnya.
Ada juga perbedaan yang cukup besar dalam bagaimana bahasa digunakan. Java telah menempatkan penekanan besar pada menjaga bahasa sederhana. Ini membuatnya mudah untuk membangun alat yang memanipulasi kode Java dengan berbagai cara (misalnya, untuk refactoring). Ini juga berarti bahwa Anda cenderung memerlukan alat yang dapat melakukannya, karena refactoring sering melibatkan perubahan yang cukup besar pada sejumlah besar kode.
C ++ adalah jauh bahasa yang lebih kompleks, yang berarti (antara lain) bahwa alat bangunan untuk memanipulasi C ++ source code sangat lebih sulit daripada untuk Java. Keseimbangannya adalah bahwa itu jauh lebih tidak perlu - pekerjaan refactoring yang mungkin melibatkan ratusan perubahan pada puluhan file di Jawa mungkin dapat diselesaikan dengan (misalnya) mengubah parameter templat tunggal di C ++.
Jawa lebih menekankan pada mudah dipelajari. C ++ menempatkan lebih banyak penekanan pada mudah digunakan - tetapi (sayangnya) hanya jika Anda benar-benar tahu apa yang Anda lakukan.
Saya tidak akan membela satu atau yang lain. Pendapat saya tentang bahasa jauh kurang relevan daripada Anda memiliki beberapa gagasan tentang apa yang diharapkan dari masing-masing, dan melihat diri Anda dengan jujur untuk mencari tahu mana yang mungkin lebih cocok untuk Anda.
1 Ya, saya tahu itu tidak terlalu akurat, tetapi saya mencoba untuk tidak mengubahnya menjadi buku ...
sumber
Saya tidak percaya orang menganjurkan C ++ sebagai bahasa pertama! Anda akan menghabiskan sebagian besar waktu Anda menulis piring ketel dan mencoba untuk mengatasi keterbatasan dan kait ikan dalam bahasa daripada benar-benar belajar bagaimana memprogram.
Java adalah bahasa yang jauh lebih sederhana dan tidak akan menghalangi pembelajaran Anda.
Jika Anda harus mempelajari C ++, pelajari konsep-konsepnya dengan Java dan kemudian buka C ++, atau lebih baik lagi, OBJ-C jika Anda ingin menulis perangkat lunak Mac. Java dan OBJ-C tidak terlalu berbeda.
FYI Saya telah menghabiskan 10 tahun sebagai pengembang C ++ komersial.
sumber
Saya akan merekomendasikan C ++. Saya memiliki beberapa kelas di Jawa, dan beberapa di C ++ di perguruan tinggi, dan keterampilan khusus bahasa yang saya pelajari dari C ++ telah membantu saya lebih banyak ketika belajar bahasa tambahan nanti. Selain itu, meskipun saya melihat lebih banyak Java daripada lowongan pekerjaan C ++, kebanyakan mencari tumpukan Java penuh, seperti:
Dan kemungkinan kurikulum berbasis Java tidak akan mempersiapkan Anda jauh lebih baik daripada kurikulum berbasis C ++ terhadap daftar seperti itu.
sumber
Ini sulit karena Java tidak dapat disangkal lebih mudah untuk dipelajari. Anda akan melakukan lebih cepat dengan Java.
C ++ adalah bahasa yang jauh lebih sulit untuk digunakan. Pointer dan manajemen memori sulit secara konseptual dan praktis untuk dikerjakan. C ++ tidak menawarkan Anda jaring pengaman.
Dalam jangka panjang akan sangat berguna untuk memahami semua hal yang diajarkan C ++ kepada Anda. Juga transisi dari C ++ ke Java jauh lebih mudah daripada arah lainnya.
Tapi saya bertanya-tanya apakah ketika memulai dan selama banyak proyek gelar overhead tambahan dan debugging yang harus Anda lakukan untuk mendapatkan sesuatu yang bekerja di C ++ benar-benar akan membuat proyek Anda lebih sulit, tenggat waktu Anda lebih sulit untuk dipenuhi dan hidup Anda jauh lebih membuat frustrasi . Untuk mencapai hal yang sama di C ++ dan Java saya akan mengatakan bahwa dalam hampir setiap kasus Anda akan menyelesaikan pekerjaan lebih cepat di Jawa dan mengalami lebih sedikit masalah yang mengganggu. Itu bisa menjadi masalah yang sangat besar ketika Anda berada di akhir semester dan memiliki lima program yang membutuhkan proyek akhir pada hari yang sama.
Sisi lain dari itu adalah bahwa jika percobaan tersebut tidak menyebabkan Anda menyerah, mereka akan membuat Anda menjadi programmer yang lebih baik jika Anda telah menguasai C ++. Dan jika karir Anda adalah dengan C # atau Java atau python dan Anda tidak perlu menyentuh pointer lain dalam hidup Anda, Anda akan menghargainya lebih banyak lagi ...
sumber
C ++ lebih fleksibel dan menawarkan pemahaman yang lebih dalam. Tidak diragukan lagi, Anda akan mendapatkan lebih banyak dari C ++ daripada dari Jawa. C ++ juga lebih sulit, karena lebih kompleks.
Yang mengatakan, pekerjaan C ++ hampir tidak biasa seperti pekerjaan Java.
Java dan turunannya, C #, adalah solusi standar untuk ruang pengkodean perusahaan-perusahaan besar. Saya sangat merekomendasikan belajar salah satu dari keduanya di tahun kedua Anda dan menjadi sangat nyaman dengan yang itu pada saat Anda menyelesaikan gelar Anda. Ini akan membuat Anda mendapatkan pekerjaan lebih mudah. Itu tidak berarti saya pikir pekerjaan itu rata-rata memiliki minat intelektual yang signifikan. Saya membuat melewati pekerjaan perangkat lunak craigslist di Pegunungan Rocky baru-baru ini dan sebagian besar pekerjaan adalah C # / Java dan terkait dengan apa yang disebut perangkat lunak " CRUD "; IMO itu sangat membosankan.
sumber
Setelah mengajar C ++ dan Java di tingkat perguruan tinggi, saya akan sangat merekomendasikan Java .
Java membantu dalam proses pembelajaran, dan mendorong perilaku pemrograman yang baik. Pustaka bawaan untuk Java bermanfaat dan mudah tersedia di setiap pemasangan. Mampu membuat aplikasi GUI dalam satu kalimat, menggunakan pustaka bawaan yang tersedia di setiap instalasi Java dan yang cocok dengan semua tutorial yang ditemukan siswa dalam pencarian Google, sangat penting untuk membantu siswa melampaui bahasa dan mulai memahami konsep pemrograman .
IDE untuk Java menyediakan dukungan untuk siswa yang baru mulai dan yang melanjutkan. Membawa alat refactoring yang kuat ke dalam percakapan lebih awal (saat membahas OOP, misalnya) akan membantu siswa belajar menulis kode yang bisa dipelihara.
Sementara C ++ adalah bahasa yang berguna untuk diketahui, konsep tambahan yang dipelajari dalam C ++ tidak benar-benar sepadan dengan upaya ekstra dari bahasa secara keseluruhan. Ada satu set ekstra besar "gotcha" yang harus diajarkan di sekitar yang dapat diperkenalkan di lain waktu (masalah manajemen memori dan buffer overflows untuk menyebutkan pasangan). Meminta siswa untuk memahami ini sebelum beralih ke konsep seperti kompleksitas algoritme dan pewarisan memperlambat Anda, cara yang mengharuskan pengemudi untuk memahami tekanan ban sebelum mengemudi akan memperlambat Driver's Ed. Tentu, Anda harus mengetahuinya. Tetapi Anda hanya perlu mengetahuinya sebagai sesuatu yang Anda akan keliru suatu hari nanti, bukan sebagai blok bangunan dari konsep yang lebih besar.
sumber
Saya pikir pertanyaan yang lebih besar untuk ditanyakan pada diri sendiri adalah apakah Anda ingin menjadi programmer yang baik atau fokus pada ilmu komputer. Jika CS adalah tujuan Anda dan Anda ingin berada di rute PHD maka mungkin Jawa adalah jalan yang harus ditempuh. Java menyediakan kelas koleksi Java, yang memiliki banyak struktur dan algoritma data premade. Keuntungannya ada dua: Pertama, Anda harus bermain-main dengan struktur data dan algoritma untuk melihat apa yang mereka lakukan sebelum mengkhawatirkan bagaimana mereka dibangun. Kedua, ini memberikan lebih banyak kesempatan kepada profesor untuk mengajarkan prinsip-prinsip CS yang menggunakan struktur data tanpa harus khawatir tentang seluk beluk. Kemudian mereka dapat kembali dan meminta siswa mereka membuat struktur dari awal.
C ++ di sisi lain adalah bahasa level yang lebih rendah. Ini memaksa Anda untuk mempertimbangkan pointer dan pengumpulan sampah. Kurva belajar sedikit lebih curam tetapi pada akhirnya ketika Anda menemukan diri Anda di jalan pemrograman dengan kerangka kerja eksternal Anda akan merasa kurang seperti Anda hanya mengandalkan sihir tersembunyi. Selain itu, banyak perusahaan besar masih menggunakan C ++. Lebih sulit untuk beralih dari Java ke C ++ daripada C ++ ke Java.
sumber