Apakah pengetahuan yang mendalam tentang C ++ membantu Anda dalam mempelajari bahasa lain lebih cepat / mudah? [Tutup]

9

Adakah kemungkinan bahwa seseorang yang telah mempelajari semua aspek kunci C ++ dan mengetahui dasar-dasar bahasa dengan sangat baik, akan mempelajari bahasa lain (seperti, Python, Perl, Java) lebih cepat dan lebih mudah?

aku ..
sumber
9
Saya berpendapat bahwa C ++ cukup berbeda dari kebanyakan bahasa lain untuk membuatnya lebih membingungkan untuk mengambil sesuatu yang lain (jika itu satu-satunya bahasa yang Anda tahu). Banyak bahasa berbagi sintaksis C ++, tetapi sedikit yang berevolusi ke arah yang sama. C ++ memiliki banyak sejarah cruft yang hanya spesifik untuk C ++. Taruhan terbaik Anda untuk mengambil bahasa baru dengan cepat adalah dengan hanya fokus mempelajari berbagai bahasa dari berbagai paradigma. Semakin banyak paradigma yang Anda kenal, semakin cepat Anda akan mengambil hal-hal lain dari paradigma tersebut.
KChaloux
3
Saya tidak berpikir bahwa mengetahui C ++ memberi Anda keuntungan untuk mempelajari bahasa lain secara umum. Itu benar-benar tergantung pada bahasa lain apa yang akan Anda pelajari. Profesor bahasa pemrograman saya dulu mengatakan bahwa kita harus berkonsentrasi pada pemahaman konsep-konsep umum: ini pasti akan membuat belajar bahasa individu lebih mudah.
Giorgio
9
Mempelajari satu bahasa secara mendalam adalah awal yang baik menuju pembelajaran pemrograman secara umum, kecuali bahwa Anda mungkin membingungkan pengetahuan khusus bahasa dengan pengetahuan umum. Modern C ++ adalah bahasa yang hebat, tetapi begitu Anda telah naik ke tingkat menengah, Anda akan mendapat untung besar dari mengenal perspektif lain - mungkin lihatlah OCaml dan Ruby bahkan jika Anda tidak akan pernah menggunakannya dengan serius. Setelah Anda seorang programmer yang mantap dan dapat membedakan antara hal-hal yang spesifik-bahasa dan umum, menjadi produktif dalam bahasa-bahasa baru menjadi cukup mudah, meskipun penguasaan selalu membutuhkan waktu.
amon
1
Dibandingkan dengan apa? Belajar bahasa lain dengan baik, tahu C ++ dengan baik tetapi tidak dalam, tidak tahu apa-apa?
Telastyn
2
Ya, tetapi juga sebaliknya. Mengetahui Ocaml atau Skema membuat banyak fitur baru C ++ 11 lebih mudah dipahami
Basile Starynkevitch

Jawaban:

12

Secara umum

Pengetahuan yang mendalam tentang bahasa pemrograman apa pun kemungkinan akan membantu Anda lebih cepat mempelajari bahasa lain. Itu sebagian karena pemrograman adalah cara berpikir lebih daripada belajar sintaksis. Sebagian besar praktik pemrograman akan berlaku untuk sebagian besar bahasa pemrograman lainnya. Itu sebabnya orang mengatakan bahwa Anda selalu belajar bahasa pemrograman kedua lebih cepat daripada yang pertama.

Dalam Ketentuan Tertentu

C ++ adalah bahasa yang memungkinkan untuk 'kontrol' yang jauh lebih besar daripada bahasa lain. Ini bisa baik dan buruk. Misalnya pistol asli lebih baik daripada pistol udara ketika Anda pergi di hutan (karena Anda benar-benar dapat menembak sesuatu dengan itu), tetapi juga lebih berbahaya bagi Anda dan orang-orang di sekitar Anda. C ++ memiliki konsep seperti manajemen memori, yang tidak perlu Anda khawatirkan di sebagian besar bahasa lain. Namun, memiliki pemahaman yang kuat tentang konsep-konsep ini jauh dari sia-sia bahkan ketika bekerja dengan bahasa manajemen memori otomatis. Anda juga dapat melakukan operasi bitwise dan jauh lebih rendah ke 'logam' dengan bahasa seperti C ++. Bahkan pemahaman dasar dalam bidang-bidang itu dapat banyak membantu Anda sebagai programmer dalam bahasa apa pun.

Opini pribadi

Saya pribadi belajar Java terlebih dahulu selama hampir 3 tahun sebelum belajar C ++, dan saya harus mengatakan bahwa saya agak menyesalinya (tentu saja ...). Ini membuat belajar C ++ (saya masih belajar - jauh dari pengetahuan 'mendalam': D) tidak semudah yang saya inginkan. Jika saya melakukannya sebaliknya saya akan mengatakan bahwa itu akan jauh lebih mudah bagi saya. Terutama ketika Anda tahu MENGAPA sesuatu dilakukan dengan cara tertentu, dan tidak hanya yakin pada keajaiban-otomatis bahasa. Jika saya diizinkan untuk memberikan pendapat, saya akan menyarankan: C (untuk paradigma pemrograman dasar dan universal) -> C ++ (untuk pemahaman dasar tentang OOP bersama dengan manajemen memori) -> Kemudian Anda dapat masuk ke bahasa OOP 'nyata' apa pun dengan dasar yang baik atau Anda dapat melanjutkan dengan topik yang lebih maju di C ++, semua tergantung pada apa yang Anda

G.Rassovsky
sumber
3
Saya senang universitas saya menyuruh kami memulai dengan pascal. Kemudian kami berkembang ke C (untuk bagian manajemen memori dan operasi bit) dan akhirnya maju ke java untuk oop (walaupun tentu saja ini bisa jadi bahasa lain). Sejujurnya, saya merasa cukup mengganggu berapa banyak universitas mulai dengan java. Anda pasti akan belajar java (dan yang lebih penting, OOP) salah, karena OOP sebenarnya terlalu rumit untuk pemula yang masih berjuang dengan perbedaan antara ORdanAND
Lovis
2
@Doval: Pengumpulan sampah memberi Anda ilusi tidak perlu khawatir tentang manajemen memori. Lihat saja seberapa sering program kode terkelola mendapatkan kebocoran memori karena beberapa referensi tetap valid di tempat yang tidak terduga (koleksi adalah pelaku abadi) untuk melihat seberapa ilusi ini sebenarnya.
Mason Wheeler
1
@Doval: Ukuran, tempat, pelurusan yang salah: bagaimana tepatnya seseorang melakukan hal-hal ini dalam bahasa berorientasi objek ketika ukuran yang tepat diketahui oleh kompilator dan pengalokasi menangani penempatan dan pelurusan? Membebaskan lebih awal: ini adalah persis apa yang seharusnya dicegah oleh GC, jadi mengatakan itu tidak relevan dengan diskusi ini adalah langsung tidak benar. Tetapi ia melakukannya dengan biaya mengubah setiap alokasi menjadi kebocoran memori. Dan tidak menginjak data objek lain adalah masalah pemeriksaan batas , bukan masalah pengumpulan sampah.
Mason Wheeler
2
C ++ menuntut begitu banyak pembelajaran yang spesifik implementasi C ++ tetapi tidak akan pernah digunakan di luar C ++ karena quirks tak berujung itu, itu perpustakaan, dan berbagai sistem. Dalam pengalaman saya semua orang yang menulis C ++ pada dasarnya setuju semua C ++ ditulis dengan buruk dan penuh dengan keanehan dan keanehan yang sebagian besar spesifik C ++. Mempelajari cara Anda mengatasi ranjau tidak akan menghasilkan apa pun yang berguna dalam bahasa lain saat sebagian besar bahasa tidak memiliki banyak masalah yang dimiliki C ++.
Jimmy Hoffa
2
@Doval: Ya, itulah intinya: semua ini secara algoritmik tidak dapat diputuskan dalam kasus umum , itulah sebabnya mereka perlu ditangani oleh orang yang cerdas, bukan algoritma, agar ditangani dengan benar. Dan mengatakan "itu bukan kebocoran, ini adalah program yang tidak efisien" hanyalah pemisah rambut semantik; bagi pengamat luar, perilaku program sama dengan perilaku program yang membocorkan memori, terutama dalam konteks sistem multitasking di mana memori yang terjepit di bawah beban dapat menyebabkan masalah parah.
Mason Wheeler
9

Sayangnya tidak ada. Ini sebenarnya masalah besar ketika mengajar C ++ di kelas pemrograman, terutama kelas tingkat pemula: Anda bisa belajar prinsip-prinsip pemrograman, atau Anda bisa belajar bahasa C ++, tetapi bahasa C ++ memiliki terlalu banyak jebakan dan gotcha bodoh untuk belajar keduanya secara efektif di dalam ruang lingkup kelas satu semester!

Ada banyak hal yang dicoba di C ++ dan akhirnya menjadi idiomatis dalam bahasa melalui inersia belaka, yang cukup banyak setiap bahasa lain sejak telah melihat dan menolak karena ternyata menjadi kesalahan besar. Yang utama adalah Template C ++ dan model objek C ++ (objek sebagai tipe nilai tidak pernah merupakan hal yang baik, karena ia merusak substitusi Liskov dan thous OOP itu sendiri.)

Jadi, jika Anda mendapatkan pengetahuan yang mendalam tentang C ++ terlebih dahulu, dan kemudian Anda ingin mempelajari bahasa pemrograman lain, akan ada banyak hal yang berbahaya dan kontraproduktif yang harus Anda hapus untuk menjadi efektif di bahasa pemrograman lain.

Mason Wheeler
sumber
4
Ada alasan mengapa Java dan C # memiliki sistem template yang sangat lemah, tetapi itu karena mereka membutuhkan meta-data lengkap tentang segalanya. Dan saya akan tertarik pada penjelasan bagaimana objek sebagai nilai merusak sesuatu. Apalagi mengingat ada referensi ...
Deduplicator
3
@Deduplicator: Java dan C # memiliki sistem generik yang sama sekali berbeda , karena pengalaman menunjukkan bahwa templat menyebabkan semua jenis masalah serius, banyak di antaranya muncul karena sistem Templat tidak direncanakan dengan baik sejak awal. (Turing-selesai secara tidak sengaja , untuk memberikan satu contoh yang jelas!) Dan objek sebagai nilai memecahkan substitusi Liskov karena jika Anda memiliki kelas Berasal yang induknya adalah Basis, dan itu menimpa metode virtual pada Basis, dan Anda meneruskannya secara default lewat ke sebuah fungsi yang mengambil Basis dan memanggil metode virtual, itu tidak akan memanggil versi yang diturunkan.
Mason Wheeler
2
@MasonWheeler: Ah, Anda mengacu pada mengiris .
Fred Larson
2
@ FredLarson: Saya seharusnya menebak masalah yang lazim dan merusak seperti itu akan memiliki nama spesifik untuk itu. (Dan, ini adalah C ++, nama yang konyol pada saat itu. Ketika seorang programmer di luar dunia C ++ mendengar "slicing," dia cenderung berpikir tentang slicing slicing !: P
Mason Wheeler
4
Meskipun saya setuju dengan banyak hal yang Anda tulis, saya pikir Anda memiliki sudut pandang yang sangat bias ;-) IMHO belajar C ++ tidak membuat orang bodoh.
Doc Brown
8

Tidak. Mengetahui C ++ dengan baik akan membuatnya lebih mudah untuk belajar bahasa lain seperti C ++. Tapi itu akan membosankan. Mengapa Anda ingin tahu dua bahasa yang sama? Itu tidak membelikanmu apa-apa. (Perhatikan bahwa ini tidak spesifik untuk C ++. Ini berlaku untuk bahasa apa pun. Bandingkan dengan bahasa alami: belajar bahasa Italia tidak akan membuatnya lebih mudah untuk belajar bahasa lain. Ini akan membuatnya lebih mudah untuk belajar bahasa Spanyol, Prancis atau Portugis, dan belajar tiga dari mereka akan membuatnya lebih mudah untuk belajar yang keempat, tetapi bahkan mempelajari semua bahasa Roman tidak akan membantu Anda sedikitpun belajar Bahasa Finlandia, Cina, Hindi, Ibrani, Arab, Pashtu, Yunani, dll.)

Bahasa pemrograman menerapkan paradigma. Peter van Roy telah mengumpulkan poster 34 paradigma pemrograman utama .

Paradigma, pada gilirannya, terdiri dari konsep. Poster itu mencantumkan sekitar 18 konsep.

Semua paradigma (atau setidaknya yang ada di poster) disusun dari konsep-konsep itu. Semua bahasa menerapkan satu atau lebih paradigma yang terdiri dari konsep-konsep itu. Jadi, jika Anda mempelajari konsep-konsep itu, Anda akan (dalam beberapa hal) mempelajari setiap bahasa pemrograman sekaligus.

Tentu saja masih banyak quirks khusus bahasa (sintaks di antara mereka). Juga, poster itu benar-benar mengabaikan pengetikan, dan tentu saja ada perbedaan yang signifikan antara Sistem F <: ω sistem tipe-gaya, sistem tipe-gaya Scala, atau sistem tipe bebek-dinamis, apalagi sistem tipe dependen à la Idris, Agda, Coq, Guru, atau ATS.

Jörg W Mittag
sumber
Hindi , bukan Hindu . Tidak ada sama sekali yang akan membantu Anda dalam "belajar Hindu", apalagi bahasa Italia atau C ++ ;-) +1.
PKG
Sebenarnya, mempelajari bahasa yang berbeda, meskipun sangat mirip, masih memperluas pikiran Anda dan dengan demikian sedikit membantu Anda untuk bahasa yang lebih jauh.
dyesdyes
Saya harus tidak setuju dengan perbandingan dengan bahasa alami karena C ++ adalah bahasa multi-paradigma tidak seperti bahasa alami. Selain itu, mempelajari fitur bahasa secara terperinci, Anda akan tahu keputusan desain untuk fitur itu dan kemungkinan besar memahami pro dan kontra dari implementasi lainnya. Misalnya, coba pelajari templat c ++ secara mendalam tanpa mempelajari manfaat dan kelemahannya vs generik dinamis. Bahkan jika Anda tidak menemukan C # (sulit saat ini), Anda masih tahu apa itu generik dinamis dan langsung tahu keterbatasan generik C # ketika mempelajari tentang itu sesudahnya
Rado
5

Saya akan mengatakan bahwa mengetahui setiap bahasa pemrograman secara mendalam akan membantu dengan belajar orang lain, setidaknya bahasa lain dalam keluarga yang sama. Misalnya, pengetahuan C ++ tidak akan banyak membantu dengan LISP atau Haskell, tetapi untuk bahasa prosedural berorientasi objek, itu akan. Pendekatan saya adalah mencoba dan belajar bahasa dari masing-masing keluarga yang berbeda (prosedural, fungsional, berorientasi objek, dll.) Dari bahasa dengan baik, maka pengetahuan itu dapat terbawa ke bahasa lain dalam keluarga itu. Di sisi lain, pengetahuan yang mendalam tentang APL tidak akan membantu dengan hal lain ...

Jim Nutt
sumber
3
Saya telah melihat seperti apa kode Self atau Smalltalk atau Ruby yang ditulis oleh seseorang yang mempelajari bahasa C ++ sebagai bahasa pertama. Saya sebenarnya akan mengatakan, mengetahui C ++ agak berbahaya untuk belajar OO. Saya pikir Self atau Newspeak akan jauh lebih cocok untuk itu. BTW, pengetahuan yang mendalam tentang APL setidaknya akan membantu dengan bahasa seperti J dan K. Ini juga akan membantu dalam memikirkan abstraksi dan liftig tingkat tinggi, yang mungkin akan membantu dengan pemrograman MapReduce atau gaya Hadoop, dan juga memikirkan Functors , Aplikasi, Monad, dan Kategori.
Jörg W Mittag
1
@ JörgWMittag: Sudah diketahui orang bisa menulis COBOL dalam bahasa apa pun ... apa gunanya?
Deduplikator
@Duplikator Jika bahasa pertama Anda adalah COBOL, Anda akan lebih cenderung menulis COBOL dalam bahasa lain.
Doval
Sebenarnya, saya harus setuju dengan hal COBOL. Saya memiliki seorang pria yang bekerja untuk saya bertahun-tahun yang lalu yang menulis COBOL di Pascal ...
Jim Nutt
5

Saya akan mengambil interpretasi yang berbeda di sini.

C ++ adalah bahasa yang baik untuk belajar tentang memori dan struktur data, karena itu memaksa Anda untuk berpikir dengan hati-hati tentang konsep-konsep seperti kepemilikan objek dan umur. Dan belajar tentang memori dan struktur data adalah salah satu bagian penting dari kurikulum rekayasa perangkat lunak.

Tetapi Anda harus belajar tentang struktur data. Jika Anda hanya "belajar C ++," Anda tidak akan benar-benar mendapatkan banyak, dan itu mungkin memperlambat proses belajar bahasa lain dalam jangka pendek.

Ketika saya masih di perguruan tinggi, Struktur Data adalah kursus tingkat mahasiswa baru yang diperlukan, diambil setelah CS1 (yang setidaknya setengah dari kelas telah ditempatkan). Itu sulit. Format kursus pada dasarnya adalah "Berikut adalah struktur data yang belum pernah Anda lihat sebelumnya [misalnya tumpukan kiri ]. Terapkan dalam C ++ dalam seminggu dan buat output Anda sesuai dengan hasil yang kami harapkan dengan tepat, byte-untuk-byte, jadi kami dapat menilai secara otomatis. " Lalu, minggu depan Anda akan mendapatkan struktur data baru dan tugas baru. Saya mungkin belajar lebih banyak dalam satu kursus itu daripada gabungan semua kursus saya yang lain.

Itulah jenis pembelajaran yang perlu Anda lakukan agar C ++ berharga.

Kevin
sumber
2

Setiap bahasa yang Anda pelajari membuat bahasa berikutnya lebih mudah dipelajari, terutama dalam paradigma yang sama. Mereka saling meminjam satu sama lain, dan setelah beberapa saat Anda sampai pada titik di mana bahasa baru tampak seperti sekumpulan fitur dari bahasa lain, dengan beberapa tikungan unik.

Saya tidak berpikir C ++ lebih baik atau lebih buruk daripada bahasa lain dalam hal itu. Ini adalah salah satu yang lebih verbose bahasa yang saya tahu, dan membuat beberapa hal sulit yang mudah dalam kebanyakan bahasa lain, tapi itu tidak perlu diterjemahkan ke dalam membuat bahasa berikutnya lebih mudah untuk belajar . Namun, ini biasanya membuat bahasa berikutnya terasa lebih mudah digunakan . Ada perbedaan.

Karl Bielefeldt
sumber
0

No Sebuah pengetahuan yang mendalam tentang C , atau subset dari C ++ yang "pada dasarnya C", akan membantu ketika belajar bahasa lain, setidaknya ketika membayangkan apa implementasi mereka harus lakukan. Pengetahuan mendalam tentang C ++ , di sisi lain, sebagian besar akan menjadi informasi yang membingungkan atau tidak relevan ketika belajar bahasa lain; jika Anda mempelajari orientasi objek C ++ lebih dari level permukaan, misalnya, saat Anda beralih ke Perl / Python / Ruby Anda akan menghabiskan lebih banyak waktu untuk tidak mempelajari apa yang Anda ketahui daripada menggunakannya, karena objek dalam bahasa tersebut diimplementasikan dalam cara yang sama sekali berbedadaripada di C ++. Hal yang sama berlaku pada tingkat yang lebih besar atau lebih kecil untuk sebagian besar bahasa lain, dan untuk fitur bahasa lainnya (misalnya, template C ++ dan polimorfisme Haskell pada dasarnya adalah fitur yang sama, dengan, sekali lagi, implementasi yang sama sekali berbeda). Jadi pengetahuan yang mendalam tentang C ++ sebagian besar akan menjadi spesifik C ++.

Jonathan Cast
sumber
posting ini agak sulit dibaca (dinding teks). Maukah Anda mengeditnya menjadi bentuk yang lebih baik?
Agak