Banyak dari kita mulai melihat fenomena ini dengan jQuery sekitar setahun yang lalu ketika orang-orang mulai bertanya bagaimana melakukan hal-hal yang benar-benar gila seperti mengambil string kueri dengan jQuery . Perbedaan antara perpustakaan (jQuery) dan bahasa (JavaScript) tampaknya hilang pada banyak programmer, dan menghasilkan banyak kode yang tidak tepat dan berbelit-belit yang ditulis di tempat yang tidak perlu.
Mungkin itu hanya imajinasiku, tapi aku bersumpah aku mulai melihat uptick dalam sejumlah pertanyaan di mana orang-orang meminta untuk melakukan hal-hal gila yang sama dengan Linq, seperti menemukan rentang dalam array yang diurutkan . Saya tidak bisa melupakan betapa tidak pantasnya ekstensi Linq untuk menyelesaikan masalah itu, tetapi yang lebih penting adalah kenyataan bahwa penulis hanya berasumsi bahwa solusi ideal akan melibatkan Linq tanpa benar-benar memikirkannya (sejauh yang saya tahu). Tampaknya kita mengulangi sejarah, membiakkan generasi baru .NET programmer yang tidak dapat membedakan antara bahasa (C # / VB.NET) dan perpustakaan (Linq).
Apa yang bertanggung jawab atas fenomena ini? Apakah ini hanya hype? Kecenderungan murai? Apakah Linq mendapatkan reputasi sebagai bentuk sihir, di mana alih-alih menulis kode, Anda hanya perlu mengucapkan mantra yang benar? Saya hampir tidak puas dengan penjelasan itu tetapi saya tidak bisa memikirkan hal lain.
Lebih penting lagi, apakah itu benar-benar masalah, dan jika demikian, apa cara terbaik untuk membantu mencerahkan orang-orang ini?
sumber
Jawaban:
Ini pada dasarnya karena pemrograman pada dasarnya sulit. Dibutuhkan banyak pemikiran logis dan terstruktur sedemikian rupa sehingga banyak orang tidak tahu bagaimana melakukannya. (Atau tidak bisa melakukannya, tergantung pada siapa yang Anda dengarkan.)
Hal-hal seperti LINQ dan jQuery membuat tugas manipulasi data umum tertentu jauh lebih mudah. Itu bagus untuk kita yang tahu apa yang kita lakukan, tetapi efek samping yang disayangkan adalah efeknya menurunkan standar. Itu membuatnya lebih mudah bagi orang-orang yang tidak tahu apa yang mereka lakukan untuk mulai menulis kode dan membuat semuanya berfungsi. Dan kemudian ketika mereka bertemu dengan kenyataan, dan menemukan sesuatu yang secara fundamental sulit sehingga teknik tingkat abstraksi sederhana dan tinggi mereka tidak cocok untuk itu, mereka hilang, karena mereka tidak memahami platform yang menjadi dasar perpustakaan mereka dibangun.
Pertanyaan Anda agak di jalur yang benar, tetapi seperti kontroversi abadi tentang video game kekerasan "mengubah anak-anak kekerasan," itu memiliki arah tautan ke belakang. Teknik pemrograman yang mudah tidak membuat programmer bodoh; mereka hanya menarik orang-orang bodoh ke pemrograman. Dan benar-benar tidak banyak yang dapat Anda lakukan.
sumber
Bagi saya itu adalah fenomena mainan baru. Sesuatu yang baru keluar (LINQ) dan sekarang setiap pengembang ingin bermain dengannya.
Mereka melihat LINQ sebagai palu dan setiap masalah adalah paku. Siapa yang peduli jika lebih mudah melakukannya dengan cara lain? LINQ harus menjadi jawabannya! Seperti ketika semua orang menggunakan XML untuk SEMUANYA! File konfigurasi? XML Menyimpan Data? XML Dll
sumber
Saya pikir LINQ menawarkan peluang yang sangat bagus dalam C # untuk menyelesaikan masalah menggunakan pendekatan yang lebih fungsional. Kita tidak boleh mengabaikan gaya baru pemecahan masalah hanya karena kita sudah memiliki sesuatu yang berhasil.
Berasal dari latar belakang SQL yang berat, saya suka memiliki opsi untuk menggunakan logika berbasis set di C # saya untuk lebih menggambarkan maksud operasi saya.
Yang mengatakan; konteks adalah raja, dan apa pun bisa digunakan secara berlebihan.
sumber
LINQ dan jQuery adalah "mainan" terbaru dan pengembang senang memamerkan bagaimana mereka dapat melakukan hal-hal menggunakan hal-hal terbaru.
sumber
Jika Anda menggunakan Linq dengan benar, dan memahaminya di bawah tenda, Anda akan menemukan segala macam teknik pemrograman mutakhir.
Jadi jika Anda berpikir mendalam tentang perangkat tambahan, saya berpendapat bahwa itu membuat Anda seorang programmer yang lebih baik. Apakah programmer yang diberikan benar-benar melakukan ini atau tidak, itu bukan kesalahan Linq.
Argumen yang sama dapat dibuat untuk Object-Relational Mappers. Apakah ada yang benar-benar menulis query SQL mentah terhadap tabel database lagi? :)
sumber
Beberapa hal gila itu adalah karena orang menggunakan palu yang salah, yang lain karena mereka sedang membangun palu super yang sangat elegan, tetapi mereka telah mengalami detail aneh yang perlu diatasi.
Sebagai contoh, jika Anda melihat pertanyaan tentang menggunakan LINQ untuk menghasilkan LINQ dinamis untuk digunakan terhadap LINQ non-dinamis sembilan dari sepuluh orang itu hanya ingin tahu apakah mungkin, atau menggonggong pohon yang salah, tetapi ada beberapa hal-hal yang dapat Anda pecahkan dengan cara ini yang sulit hingga tidak masuk akal untuk dipecahkan.
Saya mengambil pertanyaan-pertanyaan semacam ini dalam dua bagian:
Saya telah menemukan bahwa saya hampir selalu melakukannya dalam urutan itu. Ini menjawab pertanyaan dan juga membantu Anda membuat penjelasan yang lebih baik untuk alternatif potensial.
sumber
Saya tidak tahu tentang efek mati rasa pada pikiran pengembang, tetapi lihat di sini untuk efek alat / bahasa yang berpikiran kosong pada tarif. Bicara tentang menurunkan bilah!
sumber
Saya setuju dengan Mason Wheeler. Namun, tidak sepenuhnya gila untuk mencoba menyelesaikan https://stackoverflow.com/questions/3762202/get-range-of-integers-with-linq dengan mengoperasikan "urutan". Masalahnya adalah iterator Java dan .Net tidak mendukung semua 3 operasi: nilai saat ini, nilai berikutnya, dan pindah ke berikutnya. Clojure dapat melakukan semua 3, dan saya menduga bahwa di Clojure lebih mudah untuk melakukan ini dengan benar. Python juga memiliki co-rutin, dan saya ingin mencoba memecahkannya. http://clojure.org/ berikutnyaences http://www.try-clojure.org/
Bahkan, jika inputnya adalah urutan yang tak terbatas, seperti http://oeis.org/A007401 , maka malas adalah satu-satunya cara.
sumber
System.Linq
namespace.yield
pernyataan itu ada sebelum Linq, seperti halnya delegasi. Penutupan datang dalam rilis yang sama dengan Linq, tetapi beberapa operasi "Linq" murni sebenarnya membutuhkan tangkapan variabel lokal. Bertanya "Bagaimana saya bisa melakukan [deskripsi operasi / fungsi sepenuhnya iteratif] dengan Linq?" mengkhianati ketidaktahuan yang mendalam dari kedua Linq itu sendiri (apa artinya itu harus dilakukan) dan bahasa itu sendiri.