Apakah mempelajari cara menggunakan C (atau C ++) merupakan persyaratan untuk menjadi programmer yang baik (luar biasa)? [Tutup]

25

Ketika saya pertama kali mulai belajar bagaimana memprogram, programmer nyata dapat menulis perakitan dalam tidur mereka. Setiap sekolah serius dalam ilmu komputer akan mencakup sedikit pelatihan dan praktik dalam pemrograman menggunakan perakitan. Sejak itu telah berubah, ke titik di mana saya melihat gelar Ilmu Komputer dengan perakitan, jika dimasukkan sama sekali, diturunkan ke satu tugas, dan satu bab, untuk total dua minggu bekerja dari sekolah 4 tahun.

Pemrograman C / C ++ tampaknya telah mengikuti jalur yang sama. Saya tidak lagi terkejut mewawancarai lulusan universitas yang tidak menghabiskan lebih dari dua minggu pemrograman C ++, dan hanya membaca C dalam sebuah buku di suatu tempat. Sementara gelar CS yang paling serius tampaknya masih mencakup waktu belajar yang signifikan dan menggunakan salah satu atau kedua bahasa, trennya jelas terhadap C / C ++ yang kurang ditegakkan di sekolah.

Jelas mungkin untuk membuat karier menghasilkan karya yang baik tanpa pernah membaca atau menulis satu baris kode C atau C ++.

Mengingat semua itu, apakah mempelajari kedua bahasa sepadan dengan usaha? Apakah mereka dituntut untuk unggul? (di luar saran khusus non-bahasa yang jelas, seperti "pilihan bahasa yang baik mungkin penting untuk pendidikan komprehensif", dan "mungkin ide yang bagus untuk terus mencoba dan mempelajari bahasa baru sepanjang karier seorang programmer, hanya untuk meregangkan sel abu-abu ")

blueberryfields
sumber
8
C ada di mana-mana dalam infrastruktur perangkat lunak saat ini. Mempelajarinya pasti akan memberi Anda pemahaman yang lebih dalam tentang apa yang sebenarnya terjadi dalam perangkat lunak yang Anda tulis. (Lihat programmers.stackexchange.com/questions/14744/… ).
Charles Salvia
Saya juga menemukan jawaban di sini relevan: programmers.stackexchange.com/questions/29109/…
blueberryfields
Tangensial: seorang programmer yang baik merasa nyaman dengan berbagai paradigma pemrograman, ini berarti telah mempelajari (dan menggunakan) beberapa bahasa.
Matthieu M.
Mempelajari lebih banyak bahasa tidak ada salahnya.
Maks.
4
Tidak ada C / C ++. Hanya ada C dan C ++. Mereka bahasa yang sangat berbeda, dan jawabannya mungkin sangat berbeda tergantung pada yang Anda bicarakan.
Caleb

Jawaban:

63

Joel Spolsky (yeah, bahwa Joel) beberapa waktu lalu berpendapat bahwa programmer yang tangguh tahu bagaimana menggunakan bahasa yang lebih sulit (seperti C, C ++ dan Lisp) dan konstruksi mereka (seperti pointer dan fitur fungsional), dan bahwa bahasa tingkat yang lebih tinggi biasanya tidak 'cukup keras' untuk menunjukkan kompetensi Anda.

Saya bisa mengerti maksudnya bahwa orang yang tahu C dan C ++ dan yang benar-benar pandai itu tahu lebih banyak tentang apa yang terjadi di bawah tenda daripada orang-orang yang, misalnya, program di Ruby (dan hanya di Ruby). Saya akan mengatakannya seperti ini: jika Anda tahu bahasa "keras", itu mungkin bukti yang baik bahwa Anda dapat memprogram sambil menghargai kendala yang berat atau bahwa Anda menguasai cara berpikir yang rumit. Jika Anda mahir dalam bahasa tingkat tinggi, Anda mungkin bisa memprogram sambil menghargai kendala yang berat, tetapi tidak ada buktinya.

Saya tidak berpikir belajar C atau C ++ akan merusak otak Anda (beberapa orang tampaknya percaya ini). Sebenarnya, belajar hanya untuk menghargai bahasa tingkat tinggi yang lebih baik mungkin merupakan ide yang baik.

zneak
sumber
34

Ya, mengetahui C (atau C ++) diperlukan untuk menjadi programmer yang sangat baik (di zaman kita saat ini).

Itu bukan bahasa itu sendiri, itu lingkungan.

Program tidak berjalan dalam ruang hampa. Pemrogram yang hebat tahu lingkungannya, seperti pemahat hebat yang tahu materinya. Lingkungan pemrograman kami saat ini (sistem operasi, kompiler, jaringan, dll) dibangun di atas C / C ++.

Pemrogram yang hebat menulis program yang efisien dan mendebug mereka dalam situasi kehidupan nyata. Dia harus tahu lingkungan - dan saat ini membutuhkan pengetahuan C / C ++.

Sunting: Tidak dapat menolak menambahkan referensi Matrix. Morpheus mungkin bertanya: apakah Anda ingin mengambil pil Jawa dan terus hidup di dunia yang nyaman yang disediakan oleh mesin virtual? Atau apakah Anda minum pil C dan melihat seberapa dalam lubang kelinci?

Maglob
sumber
9
+1 untuk referensi Matrix, saya akan menyimpannya untuk kemungkinan penggunaan di masa depan :-)
Konamiman
20

Saya harus merujuk ke artikel Joel lain. Dalam The Law of Leaky Abstractions , belajar bahasa seperti C, Lisp, C ++, dan bahasa yang melibatkan manajemen memori juga melibatkan pembelajaran cara berpikir yang mendefinisikan kita selama sisa karier kita.

Profesor saya di kelas Struktur Data dan Algoritma saya, William Spears, mengatakan kepada sekelompok mahasiswa Ilmu Komputer yang skeptis mengapa kami tidak mempelajari alat terbaru. Para siswa mengeluh bahwa mereka merasa tidak siap untuk "dunia nyata" karena kami tidak belajar Jawa. Kami tidak belajar JavaScript. Tidak ada kelas di HTML. Kami tidak belajar [[MASUKKAN TEKNOLOGI DI SINI]].

Mengapa kita tidak mempelajari alat terbaru? Menurut profesor kami, teknologi berubah begitu cepat sehingga dalam 4 tahun, alat yang kami pelajari mungkin sudah usang. Nah, setelah beberapa tahun di industri ini, saya harus mengatakan saya setuju dengan penilaiannya.

Tujuan dari pendidikan Ilmu Komputer adalah untuk belajar cara belajar. Mencari solusi untuk banyak masalah dalam pengembangan seringkali memerlukan kemampuan untuk berpikir di luar kotak yang hanya dapat berasal dari pembelajaran dasar, mendasar, di bawah tenda, Ilmu Komputer mentah yang berasal dari bekerja dengan C, C ++, dan Lisp.

Ketika abstraksi-abstraksi di dunia nyata bocor, dan mereka akan, pemahaman tentang dasar adalah apa yang memisahkan rata-rata dari yang terbaik.

jmort253
sumber
3
Saya pasti melewatkan sesuatu. Apa yang harus dilakukan Lisp dengan mempelajari dasar-dasar? Ini inversi abstraksi terbesar yang pernah ditemukan. Salah satu tujuan desain dasarnya yang mendasar adalah "mari kita berpura-pura kita tidak benar-benar menggunakan mesin Turing dan melihat seberapa banyak kita dapat menyederhanakan banyak hal dengan melakukan itu."
Mason Wheeler
6
@Mason: Belajar Lisp akan mengajarkan Anda tentang apa pun tentang komputer dunia nyata. Ini akan mengajarkan Anda banyak tentang teori perhitungan. Ilmu komputer mentah adalah tentang lebih dari komputer mentah.
David Thornley
2
@Mason Wheeler Learning lisp memperkenalkan beberapa konsep canggih, termasuk: data / kode dapat dipertukarkan, kode refleksi / modifikasi sendiri, dan pentingnya mempertimbangkan kompiler Anda / menjadi bagian dari produk akhir Anda
blueberryfields
@blueberryfields: ... yang semuanya dianggap berbahaya dan atau kerentanan keamanan pada tingkat tertentu oleh coders yang lebih berpengalaman. Hal-hal yang sangat buruk untuk diajarkan kepada pemula.
Mason Wheeler
2
@Mason Saya tidak mengerti konteks komentar Anda - kita berbicara tentang programmer hebat di sini, bukan pemula. Saya tidak akan menganggap seorang programmer, yang tidak memiliki pemahaman menyeluruh tentang konsep-konsep ini, dan menerapkannya dengan tepat (dan secara teratur) dalam pekerjaannya, untuk menjadi seorang ahli.
blueberryfields
18

Biarkan saya begini. Katakanlah Anda perlu merekrut seseorang untuk melakukan pekerjaan C ++, dan seseorang berlaku yang melakukan satu proyek C ++ di perguruan tinggi tetapi hanya diprogram di Jawa sejak lulus. Sebaliknya, Anda perlu mempekerjakan seseorang untuk beberapa pekerjaan Java, dan seseorang melamar yang melakukan proyek Java di perguruan tinggi tetapi hanya diprogram dalam C ++ sejak lulus.

Siapa yang akan Anda lebih nyaman mempekerjakan? Saya berpendapat pria C ++, karena pindah ke menggunakan bahasa pengumpulan sampah jauh lebih mudah daripada menjauh dari satu. Demikian juga untuk konsep lain dan bahasa lain, seperti berpindah dari dikompilasi ke ditafsirkan, atau dari pengetikan statis ke dinamis. Di hampir setiap fitur dengan perbandingan fitur yang dapat Anda buat di antara bahasa, C ++ muncul di ujung yang sulit, yang membuatnya sulit untuk diprogram, tetapi juga merupakan dasar yang sangat baik untuk menilai seorang programmer.

Bisakah Anda berkembang dalam karier tanpa pernah menyentuh kode C atau C ++? Tentu, tetapi saya masih tidak ingin mempekerjakan seseorang yang tidak mampu atau takut melakukannya.

Karl Bielefeldt
sumber
3
Argumen yang tidak mengesankan. Jika saya perlu pekerjaan Java selesai, saya akan mempekerjakan seseorang dengan pengalaman Java. Jika saya perlu melakukan pekerjaan C ++, saya akan mempekerjakan seseorang dengan pengalaman C ++. Jika saya harus menyewa orang Jawa untuk posisi C ++ maka saya mungkin menghabiskan waktu wawancara tambahan menanyai dia pada pointer dan manajemen memori dan RAII; sama halnya, jika saya harus menyewa seorang pria C ++ untuk posisi Java maka saya akan menghabiskan lebih banyak waktu dalam wawancara untuk bertanya tentang kegugupan, pola desain, refleksi, dll. Baik keterampilan tampaknya membutuhkan lebih banyak kecerdasan, hanya pengalaman. Lagipula sebagian besar kurva belajar ada di perpustakaan.
Aaronaught
13

Tidak, itu tidak diperlukan untuk belajar C atau C ++ untuk menjadi programmer yang baik tetapi memahami itu akan membantu untuk menghapus beberapa konsep dasar seperti Manajemen Memori.

Rachel
sumber
7

Apakah mempelajari kedua bahasa sepadan dengan usaha?

Jelas mungkin untuk membuat karier menghasilkan karya yang baik tanpa pernah membaca atau menulis satu baris kode C atau C ++.

S.Lott
sumber
6

Singkatnya, tidak, mereka tidak. Mereka adalah bahasa yang berguna untuk dipelajari, tetapi Anda dapat dengan mudah menjadi programmer yang hebat tanpa menyentuh garis C atau C ++. Kebanyakan programmer yang hebat mungkin akan menyentuh mereka tetapi itu intinya - dalam banyak aplikasi saat ini mereka tidak digunakan sebanyak .NET dan Java, dan karena itu kebutuhan mereka agak menurun.

Perhatikan bahwa saya tidak mengatakan mereka tidak layak untuk dipelajari, saya pikir mereka berdua bahasa yang penting untuk dipelajari, terutama jika Anda berencana untuk berkarir di luar pemrograman. Tetapi bisakah Anda menjadi programmer yang baik tanpa pernah menyentuhnya? Yakin.

berry120
sumber
5

Itu Tergantung pada Minat Anda.
Jika Anda ingin berada dalam pemrograman sistem ya Anda harus belajar C / C ++ karena mereka adalah bahasa default CS. Untuk membiasakan diri dengan konsep-konsep OS, Compiler, Struktur data, manajemen memori dll Anda harus tahu C / C ++. Selain itu, banyak teks, buku, dan artikel bagus tersedia di C / C ++ yang akan mengoptimalkan keterampilan pemrograman Anda. Beberapa hari yang lalu di / * Programmer * / saya membaca jawaban yang bagus untuk Mengapa C - Karena Dekat dengan Logam .
Sebaliknya jika Anda ingin membatasi diri pada pemrograman aplikasi tidak perlu menggunakan C / C ++, Langsung mulai dengan C # (.Net) / Java dan Anda akan mendapatkan pekerjaan pengembang yang baik. Tetapi jika Anda benar-benar menyukai pemrograman hardcore, saya yakin suatu hari Anda akan mulai belajar C / C ++.

Ranger
sumber
Dekat dengan logam! Suka komentar itu.
Wajih
3

Ini benar-benar tergantung pada domain aplikasi yang ingin Anda gunakan. Jika Anda ingin bermain di lanskap yang disematkan maka Anda perlu tahu C atau C ++. C ++ juga mungkin merupakan bahasa yang paling umum digunakan dalam pengembangan game. Jika ingin bekerja pada aplikasi web maka C atau C ++ mungkin tidak sepenting itu. Tidak ada bahasa yang memegang prestise karena dituntut untuk tahu sebagai prioritas untuk mendefinisikan seorang insinyur perangkat lunak yang baik.

Pemda
sumber
3

C telah dinamai "majelis portable" yang sangat benar. Itu dirancang untuk membuat Unix portable di seluruh prosesor, dan menggambarkan kode sangat dekat dengan set instruksi prosesor yang mendasarinya.

Jika Anda menemukan bahwa Anda ingin bekerja dekat dengan perangkat keras yang sebenarnya, berada di perangkat lunak tertanam atau driver perangkat dll, tidak ada jalan lain C. Jika Anda ingin bekerja dalam bahasa yang lebih umum, bahasa tingkat tinggi adalah ide yang lebih baik karena banyak fitur yang membuat C powerfull juga membuat C berbahaya sehingga telah dikurangi atau dihilangkan begitu saja.

Secara pribadi saya akan menganggap sangat penting untuk memahami apa yang nantinya akan diperlukan untuk menjalankan program Anda, karena banyak keputusan desain tergantung pada hal ini, jadi Anda setidaknya harus terbiasa dengan cara memetakan kode ke set instruksi perakitan dan cara kerjanya dalam aktual perangkat keras. Hal-hal yang Anda anggap remeh sebenarnya membutuhkan waktu untuk dilakukan dan mengapa.

Karena itu saya paling tidak menyarankan Anda melihat C dan beberapa kode aritmetika pointer canggih, sehingga Anda tahu apa yang tidak harus Anda hadapi setiap hari.

pengguna1249
sumber
1

C bermanfaat untuk dipelajari karena dekat dengan silikon. Bahasa C atau assembly akan memberi Anda perasaan yang baik tentang apa yang dapat dilakukan komputer dan bagaimana mereka melakukannya, dan ini mungkin berguna dalam memahami apa yang mungkin dan apa yang praktis. Selain itu, ada banyak kode C di luar sana yang Anda mungkin tertarik, dan banyak lagi bahasa modern menggunakan banyak sintaks dan semantiknya.

C ++ adalah bahasa tingkat yang lebih tinggi yang memiliki beberapa fitur yang sangat menarik di dalamnya. Ini memiliki banyak kegunaan yang baik, dan merupakan bahasa yang kuat. Di sisi lain, ada banyak bahasa lain yang kuat dan berguna di luar sana.

Jadi, saya sangat merekomendasikan belajar tentang apa yang terjadi di tingkat bawah, dan C adalah cara terbaik untuk mempelajarinya, jadi saya sangat merekomendasikan belajar C. C ++ adalah opsional; mempelajarinya akan mengajarkan Anda banyak hal, tetapi ada cara lain untuk mempelajari sebagian besar dari mereka, dan jika Anda sudah bekerja dalam bahasa umum ada bahasa yang lebih baik untuk belajar mengambil konsep baru.

David Thornley
sumber
0

Tergantung pada jenis perangkat lunak yang Anda pikir akan Anda buat. Gim sering ditulis dalam C / C ++ karena secara klasik bahasa ini lebih optimal dalam hal kode yang dapat dieksekusi. Apa yang Anda kode hanya tentang apa yang Anda dapatkan, dengan cara tertentu.

Yang sedang berkata, C # juga telah digunakan untuk program permainan. C # adalah mungkin salah satu yang bahasa terbaik untuk pengembangan aplikasi desktop, setidaknya pada platform Windows.

Seiring dengan Visual Studio, C # telah menjadi hampir satu-satunya bahasa pengembangan perangkat lunak yang saya gunakan (bahasa alasan seperti SQL dan PHP dll) karena itu untuk semua maksud dan tujuan, sangat fantastis menurut saya.

Jika Anda mengembangkan pada Windows, saya sangat merekomendasikan belajar C # .NET bersama hal lain.

Saya tidak percaya C + + adalah persyaratan per se, tetapi itu bagus untuk memiliki pengetahuan yang lebih rendah dari pointer, manajemen memori dan konsep lainnya.

Nick Bedford
sumber
1
@ Nick: Dunia Komputer berada di luar jendela dan C #.
Ranger
2
Karenanya mengapa saya berkata, "Jika Anda berkembang di Windows" .
Nick Bedford
0

@Nick Bedford benar tentang domain tempat Anda bekerja. Rekan perangkat lunak saya menulis driver perangkat dan perangkat lunak tertanam. C adalah cara untuk pergi ke sana. Dan jangan menganggap C ++ sebagai bahasa kedua, mereka memiliki tumpang tindih yang besar.

Brian Carlton
sumber
3
Jika Anda tidak menganggap C ++ sebagai bahasa yang berbeda dari C, Anda benar-benar tidak tahu C ++ dengan baik. Bekerja hanya dalam tumpang tindih adalah mungkin tetapi tidak disarankan.
David Thornley
Mungkin saya melebih-lebihkan kesamaannya. Tetapi mereka lebih sama bahwa, misalnya, C dan Perl.
Brian Carlton
0

Banyak yang mengatakan bahwa C baik untuk belajar manajemen memori dan saya setuju. Menurut pendapat saya tentang belajar C adalah sangat baik untuk belajar demi mempelajari cara men-debug suatu program. Banyak yang bisa salah dalam menulis untuk C yang mengharuskan Anda untuk berpikir tentang bagaimana Anda harus men-debug program Anda. Saya jarang menggunakan alat debugging di salah satu pemrograman saya (dalam bahasa C atau lainnya) hanya karena C mengajari saya cara menambahkan utilitas debugging bawaan ke dalam program.

Apakah belajar C / C ++ diperlukan untuk karier? Tidak, tapi saya juga melihat banyak pengembang Java yang tidak tahu banyak dasar pemrograman karena mereka hanya mempelajari Java. Sama dengan programmer Perl. Mempelajari lebih dari satu bahasa harus menjadi persyaratan untuk berkarir, apakah C / C ++ adalah salah satu dari bahasa tersebut atau tidak.

Arcege
sumber
+1 - Melihat konsep serupa yang disajikan dengan cara berbeda dalam berbagai bahasa membantu saya lebih memahami konsep-konsep itu dan melihatnya dengan cara baru.
jmort253
0

Pada awalnya, saya biasanya berpikir bahwa universitas saya adalah generasi Dennis M. Ritchie karena memasukkan C selama 2 semester ketika ada banyak bahasa yang relatif baru seperti Java, Visual Basic, dan sebagainya. Tetapi faktanya adalah, atau setidaknya sekarang saya percaya, C adalah salah satu bahasa terbaik yang membantu Anda memahami konsep dasar pemrograman.

Dan tentang karir tanpa belajar C (atau C ++) - Ya, itu mungkin, tetapi belajar C akan menunjukkan pengetahuan Anda dalam pemrograman.

Tuan Programmer
sumber
0

Jawaban saya adalah ya. Baik C dan C ++ adalah program wajib dalam program gelar CS saya, dan saya memegang keyakinan bahwa memiliki CS atau gelar terkait adalah persyaratan minimum untuk menjadi "programmer yang baik". Lebih jauh lagi, menjadi "programmer yang baik" berarti mampu merasionalisasi masalah yang terjadi dan memahami mengapa sesuatu tidak berfungsi seperti yang diharapkan. Terlalu sering dalam karier saya, saya telah menyaksikan orang-orang bingung dengan masalah dan berpikir ada kekuatan supernatural yang bekerja melawan mereka ... itu konyol.

IMO, mengetahui C menunjukkan kemampuan untuk memahami bahasa imperatif apa pun dan memecahkan masalah menggunakan salah satu alat paling kuat yang pernah ditemukan oleh umat manusia.

sesteel
sumber
0

Seorang programmer yang berpengetahuan luas memiliki beberapa kantong trik di lengan bajunya, dan ini termasuk:

1) Pemrograman tingkat rendah ... C minimal. Beberapa orang tidak akan terluka.

2) Pemrograman fungsional ... Bahasa fungsional murni, bukan hibrida - Skema berfungsi di sini.

3) OOP ... Biasanya saya akan mengatakan smalltalk, tapi saya kira kita bisa pergi dengan Jawa sekarang.

kotoran merah
sumber
0

C adalah ibu dari semua bahasa pemrograman .... knowlesdge ahli dalam C membuat Anda tahu banyak tentang bahasa lain seperti Java dalam waktu singkat.

C ++ adalah permainan bola yang sepenuhnya berbeda dan merupakan yang paling kompleks di antara semuanya.

bhasinusc
sumber
0

Tidak perlu belajar C atau C ++ untuk menjadi programmer yang baik (excellent) namun perlu belajar Assembly untuk menjadi programmer yang baik (excellent). Pemrograman yang sangat baik berarti mengoptimalkan seluruh memori, Mhz, bandwidth, kendala daya dan kemudian memilih desain dan / atau implementasi terbaik untuk menyelesaikan tugas yang ada. Di antara para ilmuwan komputer, kelemahan utama masih, setelah beberapa dekade teknologi berkembang, dengan mengelola data secara optimal. Ini adalah seperangkat keterampilan yang diajarkan dengan menulis Majelis (majelis apa pun; bisa ARM, atau MIPS, atau x86, atau mikrokontroler, atau DSP, atau bahkan lebih rendah dari itu, melalui Verilog / VHDL).

Jonathan Cline IEEE
sumber
0

Setelah mahir menggunakan c, c ++, assembly, dan Lisp saya akan mengatakan itu tidak masuk akal harus belajar bahasa tertentu sama sekali untuk menjadi programmer yang baik. Pengalaman saya dengan apa yang membuat seorang programmer yang baik adalah mampu berpikir dengan cara yang memecahkan masalah. Bahasa hanya memungkinkan Anda untuk mengekspresikan keterampilan pemecahan masalah Anda. Misalnya, kesederhanaan C memungkinkan Anda untuk dengan mudah mengekspresikan algoritma, sementara Lisp memungkinkan Anda untuk menyelesaikan masalah secara rekursif. Jadi bahasa tidak menjadikan Anda seorang programmer. Anda harus menjadi pemecah masalah terlebih dahulu sebelum Anda menjadi programmer yang baik. Bahasa hanyalah alat yang Anda gunakan untuk menyelesaikan masalah.

annoying_squid
sumber
-1

Perlu belajar C dengan baik hanya untuk mendapatkan pemahaman yang kuat tentang manajemen memori. Ditto untuk C ++ kecuali dengan tujuan mempelajari struktur data.

aqua
sumber
Tidak masalah bahasa apa yang digunakan seseorang untuk mempelajari struktur data.
kirk.burleson
Saya percaya itu karena di banyak bahasa lain struktur data digunakan tanpa mengetahui bagaimana mereka ditangani dalam memori. C ++ (tanpa menggunakan STL) memaksa programmer untuk belajar bagaimana struktur data ditangani pada level rendah.
aqua
-1

Tidak. Ada banyak programmer yang buruk yang menulis kode C / C ++. Apa yang akan membuat Anda seorang programmer yang baik adalah memahami kapan dan mengapa Anda perlu menulis sesuatu dalam C / C ++

Mengenakan
sumber