Apakah semua masalah pemrograman adalah masalah algoritma? [Tutup]

13

Saya suka bagaimana "Pengantar Algoritma" oleh Cormen et al. menyampaikan pengetahuan. Salah satu alasannya adalah bahwa semuanya ada hubungannya dengan masalah pemrograman dan buku tidak diimplementasikan dalam bahasa pemrograman tertentu. Kemandirian bahasa ini memberikan fokus pada ide-ide secara umum.

Jadi pertanyaan saya adalah, seperti yang tertulis di judul. Apakah setiap masalah pemrograman yang dapat dipecahkan dapat dipecahkan dengan berpikir dengan cara algoritmik ini. Tidak peduli bahasa, bidang apa, dll? Jika ya, beri argumen, berikan argumen!

Saya belum menerapkan banyak program kompleks dengan GUI, AI, Grafik, dll ... Tetapi apakah jenis masalah ini juga masalah memikirkan algoritma yang baik?

Wittgenstein
sumber
6
Masalah yang paling umum untuk seorang programmer, imho, adalah: "oh, ITULAH yang Anda maksudkan? Sekarang saya mengerti. Bukan itu yang saya implementasikan, maaf". Apakah itu Masalah Pemrograman?
keppla
1
Pertanyaan ini sangat mirip.
back2dos
Anda perlu membuat laporan dengan klien, menjabarkan persyaratan mereka dan berdasarkan itu Anda harus merancang, menguji, mengimplementasikan, merevisi, mengoptimalkan dan memelihara perangkat lunak. Anda perlu lingkungan untuk menguji, mengembangkan, menyebarkan, menjalankan dan mengukur perangkat lunak. Dalam sistem ini algoritma individu hanyalah detail implementasi.
inf3rno
@Keppla (plus satu) ope, ini masalah persyaratan, penyebab utama dari semua kesengsaraan perangkat lunak
Mawg mengatakan mengembalikan Monica

Jawaban:

29

Itu tergantung pada bagaimana Anda mendefinisikan "Masalah Pemrograman".

Dalam proyek dunia nyata, jawabannya jelas TIDAK. Sebagian besar masalah bahkan bukan masalah teknis, tetapi masalah komunikasi, persyaratan yang tidak jelas, dll.

Kemudian Anda memiliki seluruh mata pelajaran dari kelas masalah yang memerlukan hampir tanpa algoritma. Sebagai contoh, GUI sering langsung ke "program", tetapi masalah sebenarnya yang terlibat adalah memiliki desain yang baik (dari sudut pandang kegunaan, bukan hanya tampilan grafis).

Ada beberapa bidang, di mana masalahnya cenderung jauh lebih algoritmik oleh sifat bidang itu. Sebagai contoh, AI adalah subjek utama, di mana algoritma berada pada intinya. Grafik dapat berupa algoritma yang intensif, tetapi tergantung pada apa yang dimaksud dengan "Pemrograman Grafik".

Secara umum, jika masalah yang Anda selesaikan secara terprogram cocok untuk representasi matematis, maka Anda memasuki area algoritmik. Tentu saja, ini hanya indikator kasar, karena Anda dapat membuat model matematika untuk hampir semua hal. Tetapi untuk sebagian besar hal yang biasanya tidak Anda pertimbangkan untuk melakukannya.

Contoh terakhir: Jika masalahnya adalah membuat GUI yang memungkinkan memasukkan data untuk objek bisnis, Anda tidak akan terlalu memikirkan formulasi matematika. Namun, jika masalahnya adalah membuat GUI yang berubah secara dinamis dan merelokasi elemen berdasarkan beberapa nilai penting, Anda lebih mungkin berakhir dengan model matematika dan implementasi algoritmik.

jujur
sumber
2
Ternyata, itu juga tergantung pada bagaimana Anda mendefinisikan "Algoritma". Saya akan mengatakan bahwa sangat sedikit masalah memerlukan algoritma baru, tetapi karena program komputer hanya memiliki dua bagian - algoritma dan struktur data - semua masalah memerlukan beberapa algoritma, bahkan jika algoritma tersebut sepele. Algoritma bukan model matematika, ini adalah urutan instruksi.
philosodad
Itu benar dalam arti yang paling ketat, tetapi saya, untuk satu, tidak menerima i++sebagai tuan baru kami .. erm .. algoritma.
Frank
Tetapi bagaimana jika kita tidak tahu tentang penambahan. Maka pengenalan tambahan akan menjadi inovasi hebat dalam studi kami tentang algoritma! Dan seterusnya sampai kita menemukan algoritma yang semakin kompleks.
CMCDragonkai
8

Apa yang Anda maksud dengan masalah pemrograman?

Menurut Wikipedia:

Pemrograman komputer (sering disingkat pemrograman atau pengkodean) adalah proses merancang, menulis, menguji, men-debug, dan memelihara kode sumber program komputer.

yang berarti bahwa pemrograman pada umumnya secara inheren lebih besar daripada menerjemahkan algoritma melalui kode.

Sebagai contoh, masalah pemrograman yang saya miliki saat ini adalah saya harus berurusan dengan kode sumber spaghetti lawas dengan menambahkan tes unit, kemudian refactoring . Ini juga melibatkan menambahkan komentar di tempat yang tepat, menormalkan kapitalisasi nama, dll. Ini tidak ada hubungannya dengan algoritma.

Dengan cara yang sama, banyak tugas pengembang tidak terkait dengan algoritma. Contoh: internasionalisasi. Dengan cara yang sama, banyak aplikasi (CRUD, misalnya) tidak menggunakan terlalu banyak algoritma dalam kode sumbernya (tidak berbicara tentang kode yang mendasari kerangka kerja).

Sekarang, jika Anda mengasumsikan bahwa dalam "masalah pemrograman", "pemrograman" adalah sinonim dari terjemahan algoritma melalui kode, maka ya, secara logis masalah apa pun akan menjadi masalah algoritma: A × n = B × njika A = B.

Arseni Mourzenko
sumber
Ada perbedaan antara tugas dan masalah . Masalah Anda bukan untuk menambahkan tes unit atau mempertahankan kode lama, itu adalah solusi untuk masalah yang berada dalam basis kode, bukan perilaku program itu sendiri yang diwakili oleh kode oleh algoritma.
zxcdw
Tugas Anda, seperti yang dijelaskan, tidak mengubah perilaku program. Agaknya ini merupakan pekerjaan persiapan untuk beberapa perubahan lain, yang mungkin atau mungkin tidak melibatkan algoritma. Saya tidak berpikir ada orang di mana saja dibayar hanya untuk refactor kode kerja sepanjang hari.
MarkJ
6

Saya kira jawabannya adalah tegas tidak ada . Algoritma hanya membangun blok dalam keterampilan yang jauh lebih besar.

Saya mendapatkan gelar saya di CS, berspesialisasi dalam AI

Di sana masalah mendasar, setidaknya seperti yang saya lihat, adalah menemukan representasi yang baik untuk informasi. Representasi ini harus mencoba untuk menjadi pasangan yang cocok untuk struktur pengetahuan yang ada di kepala orang, dan harus memfasilitasi jenis manipulasi dan perubahan yang dilakukan pada mereka.

Dalam hal pemrograman sehari-hari, ini berarti masalah mendasarnya adalah mengidentifikasi bahasa-domain-spesifik (DSL) yang tepat untuk situasi yang dihadapi. Ada banyak cara untuk membuat DSL. Pemrograman biasa, di mana kelas, variabel, dan metode didefinisikan sebenarnya membuat DSL karena memungkinkan Anda untuk mengatakan sesuatu (memetakan struktur mental Anda untuk kode) yang Anda tidak bisa mengatakan tanpa mereka.

Algoritma juga penting, tetapi mereka hanya bagian dari cerita.

Mike Dunlavey
sumber
5

Saya kira Anda bisa mengatakan bahwa semua program komputer adalah algoritma, karena Anda meresepkan urutan instruksi untuk mencapai hasil yang diinginkan. Namun, beberapa masalah yang paling sulit tidak dalam mengkomunikasikan suatu program ke komputer, mereka dalam mengkomunikasikan suatu program kepada manusia yang akan menguji dan memodifikasi perangkat lunak.

Dengan kata lain, komputer tidak peduli jika kode Anda benar-benar tidak dapat dipahami manusia. Mereka akan menjalankannya dengan baik. Tantangannya adalah membuat kode cukup jelas sehingga bug apa pun akan menonjol seperti jempol yang sakit.

Menariknya, hal-hal teknis yang saya pelajari di perguruan tinggi tentang algoritma telah lama dikalahkan oleh apa yang saya pelajari sendiri sejak saat itu. Pada titik ini jika saya ingin mendapatkan gelar sarjana ke-3 untuk membantu saya dalam pekerjaan saya, itu akan menjadi komposisi bahasa Inggris.

Karl Bielefeldt
sumber
2

Sebagian besar masalah pemrograman sebenarnya masalah administrasi sistem.

Itu semacam jawaban yang sembrono, tetapi saya telah menemukan ini benar lebih sering daripada yang diharapkan. Saya tidak tahu berapa kali saya mengalami kegagalan karena DNS salah konfigurasi pada mesin uji, proses basi masih berjalan yang memonopoli CPU / memori / port, program ini berjalan dengan ID pengguna yang salah dan dengan demikian memiliki kesalahan izin, disk dipartisi secara tidak benar dan kehabisan ruang, versi yang salah dari file konfigurasi dipasang, dll.

Mendapatkan algoritma yang benar biasanya hanya sebagian kecil dari masalah. Sisanya adalah menempatkan program untuk bekerja memecahkan masalah nyata di dunia nyata.

Stuart Marks
sumber
"Memperbaiki algoritme biasanya hanya sebagian kecil dari masalah" Masalah di kaggle.com JANGAN [TM] cocok dengan deskripsi itu.
Gandalf
Saya setuju, saya hanya memasukkan mereka dalam kategori "plumbing". Bekerja dengan layanan programmer lain, API dan kadang-kadang kerangka kerja hanya menghubungkan hal-hal sebagai orang lain berpikir mereka harus bekerja.
JeffO
2

Saya akan berpikir bahwa ya, semua masalah pemrograman dapat dipecahkan dengan berpikir secara algoritmik. Lagipula algoritma hanyalah seperangkat instruksi yang memberi tahu komputer apa yang harus dilakukan.

Ambil beberapa contoh dari atas

Sebagai contoh, GUI sering langsung ke "program", tetapi masalah sebenarnya yang terlibat adalah memiliki desain yang baik (dari sudut pandang kegunaan, bukan hanya tampilan grafis).

Dari segi pemrograman dan bahkan desain yang akan mengetahui pola / aturan yang mengarah pada desain GUI yang efektif yang ramah pengguna dan efisien. Aturan-aturan ini direduksi menjadi sebuah algoritma yang jika diikuti akan membantu menghasilkan GUI yang ramah pengguna. Bahkan langkah sebenarnya menempatkan kontrol pada GUI juga dapat direduksi menjadi suatu algoritma

Sebagai contoh, masalah pemrograman yang saya miliki saat ini adalah saya harus berurusan dengan kode sumber spaghetti lawas dengan menambahkan tes unit, kemudian refactoring. Ini juga melibatkan menambahkan komentar di tempat yang tepat, menormalkan kapitalisasi nama, dll. Ini tidak ada hubungannya dengan algoritma.

Tetapi cara Anda mendekati menambahkan unit test dapat dijelaskan oleh suatu algoritma seperti

  1. Identifikasi Tes Unit baru
  2. Tes Satuan Tulis
  3. Menerapkan Algoritma Normalisasi Kapitalisasi
  4. Terapkan algoritma Komentar

Contoh: internasionalisasi Ini adalah contoh sempurna dari solusi algoritma. Sebagai yang paling sederhana, Anda mencari kata yang dikenal di kamus dan mengganti dengan bentuk bahasa yang berbeda. (Tentu saja kehidupan nyata melibatkan kalimat dan konteks dan algoritma mungkin melibatkan langkah-langkah untuk memverifikasi dengan penutur asli tetapi dasar-dasarnya tetap berlaku)

Masalah dengan sebagian besar jawaban Ya adalah bahwa orang-orang berpikir tentang algoritma dalam hal QuickSort, Bubble sort bukannya serangkaian instruksi yang mengurangi deskripsi samar-samar dari masalah menjadi serangkaian logika / aturan yang jelas.

armitage
sumber