Apa yang harus saya lakukan untuk menjadi agnostik bahasa?

52

Sekarang saya bekerja dengan asp.net dan C #. Saya telah melakukan pekerjaan yang layak di Jawa juga. Saya merencanakan karir saya sedemikian rupa sehingga saya harus menjadi agnostik bahasa suatu hari nanti. Apa hal yang perlu saya pelajari?

Pertama akan paradigma OOP ketika berbicara tentang desain Kelas. Apakah ada yang lain?

Gopi
sumber
2
Apakah Anda mencoba untuk: jangan dilabeli, memiliki fleksibilitas pekerjaan, atau melakukan beberapa pencarian visi?
JeffO
2
@ Jeff Ya! untuk menghindari pelabelan dan bukan untuk memperjuangkan bahwa bahasa saya adalah YANG TERBAIK;)
Gopi
Saya akan lebih cenderung mempekerjakan pria dengan opini kuat yang tidak setuju dengan saya. Karena dengan begitu dia bisa menulis Java.
Erik Reppen
Jika Anda melakukannya, perekrut akan melewati resume Anda.
gonzobrains

Jawaban:

67

Untuk menjadi agnostik bahasa, Anda harus memiliki pengalaman dalam semua gaya dan jenis bahasa yang sama.

  • Sebuah keharusan bahasa (Anda memberitahu apa yang harus dilakukan, langkah demi langkah Misalnya -. C)
  • Sebuah deklaratif bahasa (Anda mengatakan itu tujuan Anda, angka keluar apa yang harus dilakukan Misalnya -. SQL / HTML / Prolog)

Juga:

  • Sebuah fungsional bahasa (Fungsi adalah kunci, menghindari negara dan efek samping adalah tujuan Misalnya -. Haskell / OCaml / Lisp / F #)
  • Sebuah berorientasi objek bahasa (Arsitektur mana obyek merangkum data terkait dan metode yang bertindak pada mereka). Misalnya - Java / C #)

Beberapa gaya pengetikan:

  • Sebuah statis diketik bahasa (jenis data didefinisikan dan diperiksa pada waktu kompilasi Misalnya -. C #)
  • Sebuah dinamis mengetik bahasa (jenis Data diperiksa saat runtime Misalnya -. Python / Javascript)
    Pengalaman kuat vs lemah mengetik juga berguna.

Beberapa gaya runtime yang berbeda:

Barang tingkat rendah:

  • Sesuatu yang levelnya cukup rendah (Misalnya - C)
  • Beberapa dialek perakitan (Misalnya - NASM)

Selain itu saya akan mengatakan Anda perlu pengalaman beberapa pemrograman bersamaan dan sesuatu yang didorong oleh peristiwa . Anda mungkin juga harus memastikan Anda tahu sesuatu tentang berbagai domain seperti pemrograman web (klien & server), pengembangan klien kaya / desktop, game. Anda mungkin juga ingin belajar tentang pemrograman tertanam, atau perangkat keras khusus (seperti konsol game), dan pengembangan seluler menjadi domain yang semakin relevan.

Yang lain juga menyebutkan bahwa ada baiknya mendapatkan beberapa pengalaman pemrograman Generik dan pendekatan pemrograman Meta .

Ketika Anda mempelajari paradigma ini hindari hanya belajar sintaks dan menulis dengan gaya lama Anda. Saya telah melihat banyak C # devs menulis JavaScript seolah diketik secara statis. Jangan lakukan ini, cobalah mempelajari paradigma bahasa dan merangkulnya.

Jika Anda telah melakukan semua ini, perbedaan antar bahasa akan menjadi sebagian besar sintaksis sehingga peralihan akan menjadi latihan yang cukup sederhana untuk mempelajari beberapa sintaks baru.

Jangan lupa bahwa pemrograman modern hampir selalu bergantung pada suatu kerangka kerja, jadi membiasakan diri Anda dengan kerangka kerja umum dan populer untuk setiap bahasa yang Anda pelajari juga sangat penting. Mengetahui C # tidak relevan tanpa .net.

Simon P Stevens
sumber
9
Bagaimana deklaratif HTML dalam arti yang diberikan? "Sasaran -> Aksi"? Itu tidak benar-benar melakukan apa-apa.
Felix Dombek
3
Bahasa deklaratif yang bagus yang saya hanya bisa merekomendasikan melihat adalah Prolog. Ini berbeda dari yang lain - tidak ada fungsi (tapi hubungan yang bekerja sebaliknya), tidak ada aliran kontrol eksplisit (penerjemah menyelesaikan segalanya untuk Anda), hanya satu struktur data yang hebat (syarat, tidak ada lagi yang diperlukan.) Ini sangat cepat dalam apa yang dilakukannya, melakukan jutaan unifikasi dan inferensi per detik - dan waktu yang dibutuhkan untuk mengembangkan sesuatu adalah sependek dalam Python dibandingkan dengan C / C ++.
Felix Dombek
3
@ Feliks: HTML, goal = "Saya ingin label dan kotak teks". Action = Tata letak & mesin gambar menggambarkan cara menggambarnya. Rinciannya tergantung pada masing-masing browser. Anda hanya mendefinisikan apa yang Anda inginkan bukan bagaimana melakukannya. Lihat di sini . Saya setuju, itu bukan "bahasa" seperti itu. Prolog adalah contoh yang lebih baik, saya akan memperbarui.
Simon P Stevens
1
+1 Untuk daftar jenis yang baik, pilihan bahasa agak jauh dari paradigma di beberapa tempat, tetapi secara keseluruhan sangat baik.
Orbling
2
Ngomong-ngomong, Anda harus menambahkan "Berbagai domain / level abstraksi": web, web interaktif, alat desktop, game desktop, game tahan tidak dibangun dengan cara yang sama karena kendala dan jarak ke perangkat keras berbeda, membuat pilihan bahasa ( atau bahkan keberadaan) lebih jelas bagi orang yang ingin memahami apa artinya menjadi agnostik.
Klaim
4

Saya tidak berpikir Anda bisa menjadi agnostik bahasa yang sesungguhnya. Saya menemukan bahwa saya "berpikir" dalam bahasa saya saat ini (saat ini C #).

Namun, setelah mengatakan itu, saya pikir Anda mungkin dapat memisahkan desain dari kode dengan mencoba berpikir dalam kode pseudo daripada bahasa tertentu, dan benar-benar menuliskannya dalam format ini. Ini dapat membantu Anda berkonsentrasi pada keputusan desain dan arsitektur daripada implementasi dalam bahasa Anda saat ini. Kelemahan dari hal itu - seperti yang ditunjukkan oleh Simon - adalah bahwa bahasa dan kerangka kerja yang Anda gunakan akhirnya akan mempengaruhi desain. Jadi saat desain Anda berkembang, ia akan semakin terikat dengan bahasa & kerangka kerja.

ChrisF
sumber
+1 untuk "Anda tidak bisa benar-benar agnostik bahasa". Tapi saya tidak setuju dengan paragraf kedua Anda. Saya pikir penting untuk mendesain bahasa & kerangka kerja yang akan Anda gunakan.
Simon P Stevens
@Simon - Anda punya poin bagus tentang mendesain kerangka kerja. Saya akan memperbarui jawabannya.
ChrisF
3

Membaca pertanyaan Anda dan beberapa jawaban yang orang dapat memiliki kesan bahwa Anda sama dengan "agnostisisme bahasa" dengan "mengetahui setiap paradigma di bumi".

Saya tidak yakin apakah mengetahui setiap paradigma yang ada atau mengetahui berbagai macam bahasa, mencakup beberapa paradigma dan jenis bahasa membuat Anda "agnostik bahasa".

Ini seperti mengatakan bahwa mempraktikkan semua agama menjadikan diri Anda agnostik secara agama.

Saya pikir orang agnostik bahasa mengenai bahasa pemrograman haruslah seseorang yang tidak tahu bagaimana memprogram dalam bahasa apa pun atau tidak peduli bahasa apa yang dia minta untuk diprogram.

Yang mengatakan, beberapa orang mengatakan programmer sejati dapat memprogram dalam bahasa apa pun yang diberikan akses ke dokumentasi bahasa itu.

Jika itu yang Anda maksud dengan "agnostik bahasa" maka hampir semua programmer berpengalaman dapat memprogram dalam bahasa apa pun yang ia paksa untuk bekerja dengannya, diberikan akses ke dokumentasi bahasa.

Mungkin Anda ingin menjadi "politeis bahasa".

Saya sendiri kompeten dalam beberapa paradigma bahasa tapi saya lebih suka OOP ketika itu berlaku. Jadi saya kira saya bukan agnostik.

Anda akan sulit menemukan orang yang tidak suka paradigma atau bahasa tertentu yang diberi kebebasan untuk memilih.

Tulains Córdova
sumber
0

Bukan hanya bahasa, Java itu sendiri memiliki begitu banyak mode yang Anda dapat menghabiskan waktu bertahun-tahun hanya mempelajari semuanya. Anda bisa belajar:

  • Fitur J2EE seperti Messaging and Persistence dan berbagai server
  • jsp dan toolkit berorientasi Apache
  • semut, pakar dan sistem membangun lainnya (Bahasa sendiri).
  • Seluruh dunia Groovy / Grails
  • semua API apache commons
  • sistem pengujian (Mengejek, JUnit)
  • Pembangun GUI seperti Swing, GWT ...

Dan seratus hal yang saya lewatkan - HANYA di dalam java.

Jika Anda menghabiskan waktu bertahun-tahun untuk membahas luasnya (mempelajari setiap bahasa) Anda akan kesulitan mendapatkan kedalaman untuk bekerja secara efektif di salah satu dari mereka.

Saya tidak mengatakan bahwa belajar bahasa baru adalah masalah, Anda harus aktif melakukannya! Saya mencoba untuk memilih pekerjaan berikutnya berdasarkan apa yang dapat saya pelajari (apa yang belum saya lakukan), tetapi saya tidak sering memilih bahasa acak dan mempelajarinya lagi - Terakhir kali saya mencobanya adalah dengan Scala dan saya meninggalkan agak rendah hati ...

Bill K
sumber
Untuk "seluruh dunia Groovy / Grails" Anda bisa menambahkan ", seluruh dunia Scala / Play! 2, seluruh dunia JRuby / Rails, dan seluruh dunia Clojure / Noir".
Vorg van Geir
1
Saya setuju, menulis itu beberapa waktu lalu dan hanya menarik sesuatu dari atas kepala saya - walaupun saya mungkin hanya memilih salah satu kerangka kerja web dan melakukannya.
Bill K