Björn Straustrup: Masalah dengan pemrograman

gambar

Artikel 2006

Björn Straustrup, penemu bahasa pemrograman C ++, melindungi warisannya dan memberi tahu apa yang salah dengan sebagian besar kode program.

Pada 1980-an dan 90-an, Björn Straustrup mengembangkan dan mengimplementasikan bahasa pemrograman C ++, yang mempopulerkan pemrograman berorientasi objek dan memengaruhi banyak bahasa pemrograman lain, termasuk Jawa.

C ++ tetap merupakan bahasa komputer "tingkat tinggi" yang tipikal (yaitu, bahasa yang mempertahankan fitur-fitur dari bahasa manusia yang alami), dan masih digunakan oleh jutaan pemrogram. Banyak sistem dan aplikasi dari era PC dan Internet telah ditulis dalam C ++. Meskipun demikian, bahasanya tetap kontroversial, sebagian besar karena diketahui sulit dipelajari dan digunakan, dan juga karena desain Straustrup memungkinkan pengembang untuk membuat kesalahan pemrograman yang serius demi menjaga kebebasan mereka.

Straustrup, yang telah bekerja di AT&T Bell Labs selama bertahun-tahun, sekarang menjadi profesor ilmu komputer di Departemen Teknik di Texas A&M University, dekat Houston.

Tinjauan teknologi: mengapa begitu banyak perangkat lunak yang begitu buruk?

Björn Straustrup: Beberapa program sebenarnya cukup bagus menurut standar apa pun. Pikirkan Mars Rovers, Google, dan Proyek Genom Manusia. Ini adalah perangkat lunak berkualitas! Lima belas tahun yang lalu, kebanyakan orang, dan khususnya sebagian besar pakar, akan mengatakan bahwa masing-masing contoh ini tidak mungkin. Peradaban teknologi kita tergantung pada perangkat lunak, jadi jika perangkat lunak itu benar-benar seburuk reputasi terburuknya, kebanyakan dari kita sudah mati.

Di sisi lain, melihat potongan kode "khas" dapat membuat saya menangis. Strukturnya menakutkan, dan programmer jelas tidak berpikir tentang kebenaran, algoritma, struktur data, atau rawatan. Kebanyakan orang tidak benar-benar membaca kode; mereka hanya melihat Internet Explorer melambat.

Saya pikir masalah sebenarnya adalah bahwa "kita" (yaitu, pengembang perangkat lunak) berada dalam keadaan darurat konstan, mencengkeram sedotan untuk melakukan pekerjaan kita. Kami melakukan banyak mukjizat kecil melalui coba-coba, penggunaan kekuatan kasar yang berlebihan dan banyak cobaan, tetapi seringkali ini tidak cukup.

Pengembang perangkat lunak telah menjadi ahli dalam seni kompleks untuk menciptakan sistem yang cukup andal dari bagian yang tidak dapat diandalkan. Masalahnya adalah bahwa seringkali kita tidak tahu persis bagaimana kita melakukannya: sistem hanya "berubah" menjadi sesuatu yang minimal dapat diterima. Secara pribadi, saya lebih suka tahu kapan sistem akan bekerja, dan mengapa itu akan melakukannya.

Tinjauan teknologi: Bagaimana kita dapat memperbaiki kekacauan yang kita hadapi?

Björn Straustrup: Secara teoritis, jawabannya sederhana: mendidik lebih baik pengembang perangkat lunak kami, menggunakan metode desain yang lebih cocok dan menggunakan desain yang fleksibel, berpikir dalam jangka panjang. Hadiahi sistem yang benar, andal, dan aman. Menghukum karena kecerobohan.

Ini sebenarnya tidak mungkin. Orang menghargai pengembang yang perangkat lunaknya murah, bug, dan dirilis pertama kali. Itu karena orang membutuhkan gadget baru. Mereka tidak memerlukan ketidaknyamanan, mereka tidak ingin mempelajari cara-cara baru berinteraksi dengan komputer mereka, mereka tidak ingin keterlambatan pengiriman dan mereka tidak ingin membayar untuk kualitas (kecuali ini jelas, tetapi lebih sering daripada tidak bahkan kemudian). Dan tanpa perubahan nyata dalam perilaku pengguna, penyedia perangkat lunak tidak mungkin berubah.

Kita tidak bisa hanya menghentikan dunia selama satu dekade sementara kita memprogram ulang semuanya dari mesin kopi kita ke sistem keuangan kita. Di sisi lain, terus beroperasi secara acak itu mahal, berbahaya, dan menekan. Perbaikan signifikan diperlukan, dan hanya dapat muncul secara bertahap. Mereka harus maju ke depan; hanya satu perubahan saja tidak cukup.

Salah satu masalah adalah "cerobong akademik" mengganggu: terlalu banyak orang mempromosikan daerah seperti obat mujarab. Metode desain yang lebih efisien dapat membantu, metode spesifikasi yang lebih baik dapat membantu, bahasa pemrograman yang lebih baik dapat membantu, teknologi pengujian yang lebih baik dapat membantu, infrastruktur tingkat menengah yang lebih baik, pemahaman yang lebih baik tentang area aplikasi dapat membantu, pemahaman yang lebih baik tentang struktur data dan algoritma dapat bantuan - dan seterusnya. Sebagai contoh, teori jenis, pengembangan model, dan metode formal tidak diragukan lagi dapat memberikan bantuan yang signifikan di beberapa bidang, tetapi mereka dipromosikan hanya sebagai solusi untuk mengecualikan pendekatan lain, yang masing-masing menjamin penolakan proyek skala besar. Orang mempromosikan apa yang mereka ketahui dan apa yang mereka lihat; bagaimana lagi Tetapi hanya beberapa orang yang memiliki kematangan teknis untuk menyeimbangkan persyaratan dan sumber daya.

Tinjauan Teknologi: Gagasan di balik C ++ adalah bahwa programmer akan bekerja lebih aktif dengan imbalan kode yang lebih efisien. Bell Labs ingin menggunakan bahasa yang akan digunakan beberapa orang yang benar-benar pintar untuk menulis kode yang berfungsi pada komputer seperti Electronic Switching Systems (ESS) yang tidak terlalu cepat. Saat ini ada banyak komputer yang cepat dan banyak pengembang perangkat lunak. Apakah ini berarti bahwa itu meniadakan seluruh esensi C ++?

Björn Straustrup: C ++ tidak dirancang khusus untuk perangkat switching besar, itu dikembangkan untuk sejumlah besar aplikasi. Bell Labs adalah rumah bagi berbagai proyek luar biasa yang mencakup semua skala dan menggunakan hampir semua jenis komputer dan sistem operasi. Tapi ya, rata-rata programmer Bell Labs secara signifikan lebih mampu daripada kebanyakan orang berpikir tentang "programmer rata-rata," dan keandalan dan kinerja (dalam urutan itu) dianggap secara signifikan lebih penting daripada di sebagian besar tempat lain.

Kinerja masih menjadi masalah di banyak aplikasi yang menarik minat saya: responsif antarmuka, waktu startup dan waktu penutupan aplikasi. Pengembang perangkat lunak menetralkan kinerja perangkat keras komputer modern yang menakjubkan dengan menambahkan abstraksi lapis demi lapis yang berlebihan. Tampaknya kita dihadapkan pada keterbatasan akselerasi linear untuk perangkat keras, tetapi dalam banyak kasus kita dapat memenangkan beberapa pesanan dalam perangkat lunak.

Namun, C ++ benar-benar menjadi terlalu "ahli-ramah" sementara tingkat pendidikan formal yang efektif dari pengembang perangkat lunak rata-rata menurun. Namun, solusinya bukan menyederhanakan bahasa pemrograman ke titik absurditas, tetapi menggunakan bahasa pemrograman yang berbeda dan melatih lebih banyak ahli. Para ahli ini perlu menggunakan beberapa bahasa, dan C ++ adalah salah satu dari bahasa ini.

Tinjauan teknologi: Dalam retrospeksi, ketika merancang C ++, apakah keputusan Anda untuk bertukar efisiensi perangkat lunak, keamanan dan keandalannya untuk kinerja kode runtime, kesalahan mendasar?


Björn Straustrup: Ya, saya pikir saya tidak melakukan pertukaran semacam itu. Saya ingin kode yang elegan dan efisien. Terkadang saya mendapatkannya. Dikotomi ini (antara efisiensi dan kebenaran, efisiensi dan waktu seorang programmer, efisiensi dibandingkan dengan tingkat tinggi, dll) adalah fiktif.

Apa yang sebenarnya saya lakukan adalah mengembangkan C ++, terutama sebagai bahasa pemrograman sistem: Saya ingin dapat menulis driver perangkat, embedded system, dan kode lain yang harus saya gunakan secara langsung. Lalu saya ingin C ++ menjadi bahasa yang baik untuk mengembangkan alat. Ini membutuhkan fleksibilitas dan kinerja, serta kemampuan untuk mengekspresikan antarmuka yang elegan. Pendapat saya adalah bahwa untuk membuat level yang lebih tinggi, untuk membuat aplikasi yang lengkap, Anda pertama-tama harus membeli, membangun, atau meminjam perpustakaan yang menyediakan abstraksi yang sesuai. Seringkali, ketika orang memiliki masalah dengan C ++, masalah sebenarnya adalah bahwa mereka tidak memiliki perpustakaan yang sesuai atau mereka tidak dapat menemukan perpustakaan yang tersedia.

Bahasa lain telah mencoba untuk secara lebih langsung mendukung aplikasi tingkat tinggi.

Ini berfungsi, tetapi seringkali dukungan ini datang dengan biaya spesialisasi. Secara pribadi, saya tidak akan mengembangkan alat yang hanya bisa melakukan apa yang saya inginkan - saya berjuang untuk komunitas.

Tinjauan teknologi: Bagaimana Anda menjelaskan fakta bahwa C ++ banyak dikritik oleh banyak programmer, tetapi pada saat yang sama sangat banyak digunakan? Mengapa bahasa ini begitu sukses?

Björn Straustrup: Jawabannya sederhana: hanya ada dua jenis bahasa: bahasa yang dikeluhkan semua orang dan yang tidak ada yang menggunakan.

Ada lebih banyak sistem berguna yang dirancang dalam bahasa yang dianggap mengerikan daripada bahasa yang dipuji karena cantik - dan banyak lagi. Tujuan dari bahasa pemrograman adalah untuk membantu menciptakan sistem yang baik di mana "baik" dapat didefinisikan dalam banyak cara. Definisi singkat saya adalah: sesuatu itu benar, didukung, dan cukup cepat. Estetika penting, tetapi pertama-tama, bahasa harus bermanfaat; itu harus memungkinkan para programmer dunia ini untuk mengekspresikan ide-ide realistis secara ringkas dan murah.

Alasan utama kesuksesan C ++ adalah karena ia memenuhi tujuan desain yang terbatas: ia dapat secara efisien mengekspresikan sejumlah besar ide secara langsung.
C ++ tidak dimaksudkan untuk melakukan satu hal dengan sangat baik atau untuk mencegah orang melakukan hal-hal yang dianggap "buruk." Sebaliknya, saya fokus pada generalitas dan kinerja.

Saya yakin bahwa untuk setiap programmer yang tidak suka C ++, ada seseorang yang menyukai bahasa ini. Namun, teman saya pergi ke konferensi, di mana pembicara utama meminta peserta untuk berdemonstrasi dengan mengangkat tangan mereka: yang pertama, berapa banyak orang yang tidak suka C ++, dan yang kedua, berapa banyak orang yang menulis program dalam C ++. Kelompok pertama memiliki dua kali lebih banyak orang daripada yang kedua. Ungkapan permusuhan terhadap sesuatu yang tidak Anda kenal biasanya disebut prasangka. Selain itu, mereka yang mengeluh selalu lebih keras dan lebih percaya diri daripada pendukung - orang yang berakal mengakui kekurangannya. Saya pikir saya tahu lebih banyak tentang masalah dengan C ++ daripada tentang siapa pun, tapi saya juga tahu bagaimana cara menghindarinya dan bagaimana menggunakan kekuatan bahasa ini.

Dan, tentu saja, Anda tidak berharap bahwa pendukung bahasa yang kalah bersaing dengan C ++ akan bersikap sopan terhadap fakta ini. Pengembangan perangkat lunak tidak memiliki tingkat profesionalisme seperti itu, meskipun saya berharap ini pada akhirnya akan terjadi. Dalam hal ini, sains berbeda: ketika alat baru, teknik atau teori menang, orang melihatnya sebagai kemajuan. Dalam perangkat lunak, kontribusi pesaing dan pendahulu belum menerima pengakuan, apresiasi, atau bahkan pemahaman yang luas.

Tinjauan teknologi: Dalam “Desain dan Evolusi C ++,” Anda berpendapat bahwa Kierkegaard memengaruhi konsep bahasa Anda. Apakah ini lelucon?

Björn Straustrup: Mungkin pernyataan yang agak sok, tapi bukan lelucon. Banyak pemikiran tentang pengembangan perangkat lunak difokuskan pada kelompok, tim, perusahaan. Hal ini sering dilakukan sedemikian rupa sehingga seseorang benar-benar tenggelam dalam "budaya" perusahaan tanpa keluar untuk bakat dan keterampilan yang unik. Praktik korporat dapat memusuhi orang-orang dengan keterampilan luar biasa dan inisiatif teknis. Saya menemukan manajemen teknisi ini kejam dan boros. Kierkegaard adalah pendukung kuat individu terhadap "kerumunan" dan serius mengangkat masalah pentingnya estetika dan perilaku etis. Saya tidak dapat menunjukkan fitur spesifik dari bahasa tersebut dan mengatakan: "Anda lihat, ada pengaruh seorang filsuf abad kesembilan belas," tetapi itu adalah salah satu akar dari keengganan saya untuk menghilangkan "level ahli", menghapus "penyalahgunaan" dan membatasi kemampuan untuk mendukung hanya aplikasi yang seperti yang saya tahu mereka akan berguna. Namun, saya tidak terlalu menyukai filosofi agama Kierkegaard.

Ulasan teknologi: Apa yang paling Anda sesali?

Björn Straustrup: Saya tidak menyesal! Yah, tentu saja, saya bermimpi tentang apa yang bisa saya lakukan secara berbeda dan lebih baik, tetapi serius, siapa saya untuk menemukan kembali, katakanlah, vintage Björn 1984? Dia mungkin kurang berpengalaman daripada saya, tetapi dia tidak kurang cerdas, mungkin lebih pintar, dan dia memahami kata-kata tahun 1984 lebih baik daripada saya. C ++ digunakan untuk membuat banyak sistem yang meningkatkan kehidupan kita, dan ini memiliki dampak positif yang signifikan pada bahasa dan sistem selanjutnya. Ini sesuatu yang bisa dibanggakan.

Source: https://habr.com/ru/post/id412881/


All Articles