Apakah Anda berpikir bahwa paparan BASIC dapat merusak pikiran Anda? [Tutup]

32

Praktis mustahil untuk mengajarkan pemrograman yang baik kepada siswa yang telah memiliki paparan sebelumnya untuk BASIC: sebagai programmer potensial mereka secara mental dimutilasi di luar harapan regenerasi

- Edsger W. Dijkstra

Saya sangat menghormati Dijkstra tetapi saya tidak setuju dengan semua yang dia katakan / tulis. Saya tidak setuju secara khusus dengan kutipan ini di kertas yang terhubung menulis 35 tahun yang lalu tentang implementasi BASIC Dartmouth .

Banyak rekan kerja atau programmer saya yang memulai dengan BASIC, pertanyaan di bawah ini memiliki jawaban yang mengindikasikan banyak programmer memiliki pengalaman pertama mereka dalam pemrograman di BASIC. AFAIK banyak programmer yang baik dimulai pada pemrograman BASIC.

Saya tidak berbicara tentang Visual Basic atau dialek "modern" BASIC lainnya yang berjalan pada mesin yang penuh sumber daya. Saya berbicara tentang masa lalu yang DASAR berjalan pada komputer "mainan", bahwa programmer harus khawatir tentang menghemat angka kecil yang tidak perlu dihitung sebagai string untuk menyimpan byte yang sangat kecil karena komputer hanya memiliki beberapa ratus di antaranya, atau harus menggunakan goto yang dikomputasi karena kekurangan fitur yang lebih kuat, dan banyak hal lain yang mengharuskan programmer untuk berpikir banyak sebelum melakukan sesuatu dan memaksa programmer untuk menjadi kreatif.

Jika Anda memiliki pengalaman dengan BASIC lama pada mesin dengan sumber daya terbatas (perlu diingat bahwa pengontrol mikro sederhana saat ini memiliki lebih banyak sumber daya daripada komputer pada tahun 1975, apakah Anda berpikir bahwa BASIC membantu pikiran Anda untuk menemukan solusi yang lebih baik, untuk berpikir seperti seorang insinyur atau BASIC menyeret Anda ke sisi gelap pemrograman dan memutilasi Anda secara mental?

Apakah baik mempelajari bahasa pemrograman yang berjalan di komputer yang penuh dengan sumber daya di mana programmer pemula dapat melakukan semua kesalahan dan program berjalan tanpa masalah besar? Atau lebih baik belajar di mana programmer tidak salah?

Apa yang dapat Anda katakan tentang BASIC yang telah membantu Anda menjadi programmer yang lebih baik / lebih buruk?

Apakah Anda mengajarkan BASIC lama berjalan pada mesin 2KB (virtual) ke programmer yang akan datang?

Tentu, hanya paparan BASIC yang buruk. Mungkin Anda membagikan pendapat saya bahwa BASIC modern tidak banyak membantu karena BASIC modern, selama bahasa pemrograman lainnya, memberikan fasilitas yang memungkinkan programmer tidak berpikir lebih dalam.

Informasi tambahan: Mengapa BASIC?

suka
sumber
7
Anda menyadari bahwa kutipan itu sekitar 35 tahun, bukan?
MIA
2
Iya nih. Tautan ke Dijkstra memiliki tanggal publikasi.
Maniero
3
Mungkin pertanyaan ini seharusnya tidak dijawab oleh orang yang lebih muda :-)
Maniero
8
35 tahun, dan aku cukup yakin Eddie juga suka troll ketika dia menulisnya. Saya tidak akan terlalu banyak membacanya.
Carson63000
3
Saya setuju dengan @Carson; Saya akan berpikir bahwa kontak lama dengan orang tua yang sinis, sombong, dan pahit akan lebih buruk bagi Anda.
Markus

Jawaban:

37

Dasar-dasar yang populer pada saat kutipan sangat berbeda dari apa yang kita miliki 20 tahun yang lalu. (Apakah Anda menghitung di antara dialek "modern" Anda?;)

Lupakan loop, subrutin, variabel lokal, dan segala sesuatu yang Pemrograman Terstruktur (yang Dijkstra dan Knuth adalah pendukung besar) menekankan. Anda punya GOTO, dan Anda menyukainya .

Dalam konteks ini, pemrogram yang hanya tahu variabel global, menciptakan subrutin mereka sendiri (menggunakan lebih banyak variabel global untuk parameter dan mengembalikan nilai!), Dan menulis GOTO spaghetti benar-benar dimutilasi.

Jika Anda berusia 30-an atau lebih muda hari ini dan Basic adalah bahasa pertama Anda, itu bukan bahasa yang sama yang Dijkstra bicarakan. Bahkan jika Anda lebih tua dan Basic pertama Anda memiliki beberapa fitur ini, seperti komentar Murph di bawah ini, itu masih mungkin bukan bahasa yang sama yang Dijkstra bicarakan.


Anda telah memperbarui pertanyaan dengan konteks yang tidak pernah saya ketahui sebelumnya:

  • Kutipan Dijkstra berasal dari tahun 1975.

  • Tidak sampai versi 6 yang Anda punya prosedur secara terpisah compilable - yang, saya percaya, menunjukkan awal dari pergeseran fokus jauh dari GOTO.

  • "Pada tahun 1976, Steve Garland menambahkan fitur pemrograman terstruktur untuk menciptakan Dartmouth SBASIC, sebuah precompiler yang menghasilkan output versi 6 ..." [ Wikipedia ] Konteks dari kutipan ini jelas sebelum apa yang sekarang kita kenal sebagai struktur kontrol, dan banyak pengguna dari waktu bisa lebih akrab dengan versi kedua hingga terbaru - yaitu dua versi sebelum Garland, yaitu v5 dan sebelum prosedur yang dapat dikompilasi secara terpisah.

  • GOSUB / RETURN masih hanya menangani "subrutin sederhana".

  • "Nama variabel dibatasi hingga A hingga Z, A0 ke A9, B0 ke B9, ..., Z0 hingga Z9, memberikan maksimum 286 kemungkinan variabel berbeda." ... dan semuanya bersifat global.

Roger Pate
sumber
2
Paparan pertama saya adalah BASIC (pada 1979) - tetapi secara paradoksal dialek yang memiliki prosedur parameter dan untuk itu Anda dapat mengedit kode dalam editor teks eksternal, meskipun saya melakukan lebih banyak hal dengan versi yang kurang elegan. Ketika, pada tahun 1982, saya diajarkan Pemrograman Terstruktur (dan Pascal sebagai bahasa untuk mengimplementasikan yang sama) rasanya seperti matahari terbit di pagi hari ... Saya terakhir menggunakan GOTO dalam bahasa "tepat" (DIBOL) di sekitar 1990 ...
Murph
@Murph: Saya akhirnya menggunakan goto beberapa kali setahun ... tetapi dengan token yang sama, "goto dianggap berbahaya" adalah tentang goto global yang saya sebutkan di atas daripada goto lokal.
1
GOTO alias "lompatan acak besar-besaran" - dan saya menghargai bahwa makalah itu bukan tentang "apa" tetapi tentang "bagaimana" yang pada gilirannya adalah mengapa ia salah tetapi itu membuat judul yang bagus untuk meraih generalisasi. (Jika Anda melihat, katakanlah, Fortran IV Anda tidak punya banyak pilihan selain menggunakan goto tetapi, karena dosen saya berusaha menunjukkan - walaupun digagalkan dengan pengenalan Fortran 77 - Anda dapat menulis kode terstruktur dengan baik menggunakan gotos)
Murph
Saya telah berbicara persis tentang dialek BASIC lama. Saya tidak tahu mengapa orang bersikeras berpikir saya sedang berbicara dengan BASIC modern. Bagi saya, BASIC modern memutilasi pikiran programmer. Ini memberi hampir semua yang dimasak dan tidak memerlukan pemikiran yang lebih dalam. Program-program BASIC jarang melampaui 1 atau 2KLOCs dan jarang memiliki lebih dari seratus variabel, hari ini adalah kelas umum untuk memiliki lebih dari ini dan saya melihat beberapa fungsi yang ditulis dengan buruk pada hitungan ini. Pikir saya adalah bahwa Dijkstra memiliki paparan programmer BASIC terburuk. Hanya yang memiliki pengalaman dengan BASIC pada mesin sumber daya terbatas yang tahu.
Maniero
@ Bigown: Tapi apa yang Anda anggap modern, tepatnya? Memanggil bahasa pemrograman berusia 30 tahun "modern" jelas tidak biasa bagi saya untuk mendengar.
31

Seorang pria tidak dapat melakukan apa pun lebih baik daripada makan dan minum dan menemukan kepuasan dalam pekerjaannya.

Saya belajar BASIC sebelum yang lain (baik, kecuali untuk aljabar saya kira). Jika itu tidak serius membengkokkan pikiranku, maka aku tidak yakin bagaimana menjelaskan 18 tahun yang telah mengikuti ...

Yang mengatakan, jadi apa? Dijkstra mungkin mengalami kesulitan mengajari saya apa pun karena paparan jangka panjang saya untuk BASIC, tetapi dia akan lebih sulit mengajari saya apa pun karena paparan jangka panjangnya pada kotak pinus bawah tanah. Dan bahkan dengan faktor-faktor itu dihilangkan, saya masih belum pernah menjadi siswa CS yang serius, seorang siswa matematika yang serius, atau seorang siswa yang serius dalam disiplin ilmu lainnya. Jurang antara seseorang seperti saya dan jenis programmer Dijkstra ingin melihat begitu besar sehingga hampir tak terduga ...

Namun, kami memprogram. Kami yang mengincar BASIC, bermain-main dengan FORTRAN, bereksperimen dengan COBOL dan yang lainnya, kami juga menemukan kegembiraan dan ketertarikan dengan mesin-mesin kecil ini yang, walaupun mungkin sama sekali berbeda dengan yang pertama kali menarik Mr. Edsger ke bidangnya, tidak bukan panggilan, fondasi untuk kerja cinta seumur hidup.

... atau mungkin yang ini hanya apa pikiran dimutilasi akan mengatakan ...

Shog9
sumber
sangat lemah! Serius meskipun ini masalah pendapat
RCProgram
17

Bukan BASIC yang menyakitimu, itu adalah kegagalan untuk mengekspos dirimu ke bahasa lain . "Pemrogram" Monoglot tidak.

Craig Stuntz
sumber
1
benar sekali
RCProgramming
sementara ini benar saya tidak berpikir ini adalah apa yang merujuk ED pada saat itu
jk.
11

BASIC, dari sudut pandang terstruktur, tidak lebih buruk dari assembler atau COBOL. Saat itu, tidak ada kebanyakan bahasa yang diturunkan oleh Algol yang kita miliki sekarang, Pascal menjadi pengantar pertama yang harus dimiliki sebagian besar orang terhadap struktur kontrol yang masuk akal (dan saya tidak terlalu menyukai struktur kontrol Pascal).

Jika BASIC cukup untuk mencelakai orang secara permanen, maka bahasa awal lainnya juga, sehingga kita tidak akan memiliki orang yang tidak terluka cukup untuk mengembangkan semua bahasa yang kita gunakan saat ini.

Ada kemungkinan bahwa Dijkstra kemudian berurusan dengan orang-orang yang bukan programmer yang baik dan tidak akan pernah, yang belajar melakukan beberapa hal dalam BASIC. Itu interpretasi paling dermawan yang bisa saya berikan pada pernyataan itu.

David Thornley
sumber
Assembler adalah representasi dari byte yang Anda beri makan komputer. Anda bisa menggantinya BASICdengan Assemblerkutipan Dijkstra, tetapi saya akan menganggapnya sebagai bahasa komputer, bukan bahasa pemrograman. +1 sekalipun :)
deltreme
1
Pemahaman saya adalah Dijkstra dipilih Dasar di sini untuk kutipan tajam dan akan mencakup lingkungan non-terstruktur lainnya.
2
Tentu saja Dijkstra mungkin telah berbicara tentang BASIC untuk mendapatkan suara yang bagus. Namun, maksud saya, yaitu bahwa bahasa komputer awal tentu tidak lebih baik, dan itu akan menyiratkan bahwa programmer yang baik tidak dapat berkembang sampai sekitar tahun 1960, dan siapa pun yang memulai sebelumnya rusak secara permanen.
David Thornley
5
Jika kalian meluangkan waktu untuk membaca koran dari mana kutipan itu diambil, Anda akan menemukan dia juga menghancurkan bahasa populer lainnya pada waktu itu selain BASIC. Dia juga mengkritik kecenderungan komputer antropomorfis, yang bisa saya mengerti; mereka membenci itu.
Huperniketes
2
@Huperniketes: Ya, tetapi Dijkstra sangat tidak biasa tentang BASIC dan COBOL. Dia meninggalkan perasaan bahwa FORTRAN dan PL / I weenies dapat disembuhkan.
David Thornley
6

Saya belajar dengan BASIC pada TRS-80 dan Apple II c / e, dan menganggap diri saya seorang programmer yang baik. Dua sifat yang menurut saya pribadi menyebabkan tidak dihancurkan dengan mempelajari BASIC terlebih dahulu adalah

  1. Saya terus berusaha mempelajari cara-cara yang lebih baik untuk mencapai apa yang saya inginkan dengan sedikit usaha, yang mengarah pada belajar bahasa lain dan fitur-fitur dalam bahasa-bahasa yang membuat mereka kuat, dan
  2. Saya bertemu dan mengenali masalah dengan BASIC sebagai bahasa, terutama kurangnya subrutin (walaupun saya tidak memiliki pengalaman untuk secara ringkas menggambarkan masalah yang saya lakukan sekarang).

Saya akan mengakui bahwa belajar pemrograman berorientasi objek setelah prosedur murni BASIC adalah perjuangan untuk sementara waktu, tetapi saya tidak tahu apakah itu benar-benar terkait dengan BASIC, karena saya telah belajar cukup banyak C pada saat itu juga .

Caleb Huitt - cjhuitt
sumber
6

Saya juga tidak setuju dengan Dijkstra. Saya hal yang lebih sulit untuk belajar bahasa kedua karena paradigma, bukan karena BASIC.

BASIC adalah bahasa pertama saya di komputer pribadi yang disebut TK (Sinclair like) pada tahun 1985. Itu adalah mesin sumber daya yang sangat terbatas. Pada waktu itu, saya menulis kompiler BASIC dari sebuah buku menggunakan editor hexa-desimal untuk bersenang-senang. Saya membeli buku Z80 dan belajar bahasa mesin 8bit setelah itu. BASIC banyak membantu saya dengan ini.

Setelah saya belajar C dan Pascal dan bermain dengan Assembly untuk 8080/6. MSX-BASIC, Dasar Cepat di MS-DOS kali ... VB, Delphi, beberapa Java di Windows kali ...

Hari ini sebuah karya dengan progress (4gl), .net (C # / VB), php dan saya tidak merasa seperti seorang pengendara sepeda. :HAI)

Pagotti
sumber
5

Saya mulai dengan dasar pada klon apel ketika saya berusia delapan.

Bahkan versi dasar kemudian yang memiliki beberapa ide OOP digulirkan (qbasic, visual basic, dll) tidak akan masuk akal di Eight.

Memulai pemrograman yang awal adalah salah satu alasan saya dapat memikirkan masalah dalam aliran program dan itu adalah sesuatu yang terlalu banyak orang tidak dapat melakukannya dengan baik di industri ini.

Saya pikir awal yang awal sering kali bermanfaat dan bahasa yang SANGAT SEDERHANA diperlukan saat berurusan dengan anak kecil.

Jarak tempuh Anda dapat bervariasi ...

Tagihan
sumber
4

Saya pikir pemaparan ke sebagian besar contoh DASAR di dunia adalah apa yang merusak otak pemrogram, bukan bahasa itu sendiri. Ini seperti C # programmer yang menelusuri MSDN dan tidak berpikir penanganan eksepsi diperlukan atau yang IDisposablejenis tidak benar-benar perlu dibuang.

Jesse C. Slicer
sumber
4

Siapa pun akan memiliki masalah jika mereka tidak dapat mengidentifikasi masalah dalam bahasa mereka saat ini dan tidak hanya dapat bekerja di sekitar mereka, tetapi menemukan yang lain dibangun untuk menyelesaikan masalah.

Dan GOTO hanya buruk jika Anda tidak memiliki penomoran baris;)

JeffO
sumber
Ya! GOTO baik-baik saja; itu label yang jahat ... mwuuuuhahahaha
Mawg
3

Saat ini saya menggunakan BASIC untuk mengajar anak saya menulis permainan sederhana sendiri. Saya tidak pernah menggunakannya, saya memulai operator saya dengan PowerBuilder dan PowerScript dan melompat ke C / C ++ dan kemudian Delphi. Hari ini, saya menggunakan hampir semua bahasa yang tersedia dan saya beradaptasi dengan sangat cepat karena dasar dari semua bahasa adalah rumus matematika yang sama dengan tanda, operator dan simbol yang berbeda. Itu juga yang saya ajarkan kepada putra saya dan karena itu ia sudah bisa membaca dan menjelaskan kode C ++. Anak saya 12 btw.

Henk v. Birsten
sumber
3

BASIC GOTOadalah cara yang bagus untuk mengajarkan cara berpikir dalam bahasa majelis . Itu tidak merusak pikiran seseorang, itu hanya membuat pikiran seseorang semakin jauh dari sinapsis berbasis karbon dan lebih dekat ke transistor berbasis silikon.

Namun, mari kita bandingkan BASIC dengan LOGO. BASIC dapat mengubah anak-anak dari pemrograman, karena untuk menulis program menyenangkan yang sederhana, yang dapat Anda lakukan adalah terus menyalin-mengetik program yang sangat, sangat panjang yang dicetak pada majalah, sedangkan dengan LOGO, satu garis dapat menggambar grafik yang sangat mengesankan, yang sangat penting dalam menarik anak-anak.

rwong
sumber
Saya menurunkan jawaban ini karena pernyataan ini: yang bisa Anda lakukan adalah terus menyalin-mengetik program yang sangat, sangat panjang yang dicetak di majalah. Itu hanya skrip-kiddies hari itu. Calon pengembang sebenarnya sedang belajar dan menulis barang mereka sendiri.
TecBrat
2

Dasarnya bagus - menyenangkan dan cukup sederhana. Ini bisa membuat grafik 2d menyenangkan dan apa yang tidak ... Saya pelajari (atau coba pelajari) bahwa ketika saya berusia sekitar 10 atau 12 tahun, itu adalah bahasa yang menyenangkan yang membuat saya tertarik untuk belajar lebih banyak. tentang komputer ...

aggietech
sumber
2

Beberapa pemrogram terbaik yang saya kenal sejak awal terkena pemrograman di Basic. Ini sedikit lebih "konkret" dan dengan demikian memberikan perasaan yang lebih baik untuk bagaimana mesin tingkat rendah benar-benar bekerja daripada banyak bahasa baru (misalnya itu pengantar HLL yang lebih dekat dengan assembler).

Kutipan Dijkstra berasal dari periode waktu ketika para akademisi berusaha mendorong tren ke arah program terstruktur yang terbukti benar yang dirancang dari spec. Tapi itu bukan cara industri sebagian besar pergi. Sebagai gantinya, banyak programmer era web 2.0 mencoba dengan cepat membuat prototipe sesuatu yang sebagian besar spesifikasi matematisnya ketat untuk membuktikan kode tidak ada, karena hal-hal yang berkembang terlalu cepat untuk spesifikasi agar tetap kompetitif.

Jadi metode pemrograman coba-dan-coba hack-and-slash yang kadang-kadang mendorong pemrograman di Dasar, ketika dibersihkan sedikit dalam metodologi, adalah primer yang berguna untuk pemikiran RAD.

Saya akan mengakhiri dengan mencatat bahwa setidaknya ada 5 penerjemah dasar yang tersedia yang berjalan di iPad, sehingga menjaga bahasa tersedia bahkan pada perangkat terbaru.

hotpaw2
sumber
1

Saya pikir, mengingat bahwa kutipan ini berusia 35 tahun, ini banyak berhubungan dengan kurangnya abstraksi yang tersedia dalam bahasa pemrograman, dan apa yang diperlukan bagi Anda untuk diketahui agar berkembang dengan baik, kembali ketika dikatakan.

Diberi bahasa seperti BASIC mengajarkan Anda sedikit tentang cara memprogram pada tingkat rendah, sesuatu yang jauh lebih penting di masa lalu daripada sekarang, dan akan memberi Anda kesan yang salah bahwa pemrograman lebih sederhana daripada yang sebenarnya.

Saya ingat dengan jelas mencoba mempelajari 'kode mesin' pada usia 15 tahun setelah lebih dari 3 tahun VZ200, C64 dan Apple] [e BASIC, itu adalah panggilan bangun yang kasar.

Namun, belakangan ini, walaupun saya sombong tentang hal-hal ini, dan Anda tidak akan menemukan saya bekerja dengan bahagia dalam bahasa apa pun dengan BASIC dalam namanya (saya cenderung mulai berteriak-teriak pada frasa monitor seperti 'Fisher Price Language' yang bodoh seperti itu. , lagi-lagi, menolak kawat gigi keriting yang ceroboh), saya akui lebih mudah melakukan hal-hal yang produktif dengan bahasa yang mengabstraksi mekanisme CPU daripada 35 tahun yang lalu (atau 25 tahun yang lalu, dalam pengalaman dan contoh pribadi saya sendiri)

John
sumber
1

bagi kita yang memuat kode perakitan ke komputer Speer Micro-LINC satu byte pada satu waktu melalui satu set 8 switch di panel depan dan menyimpannya di kaset PDP kembali pada tahun 1972 saya akan menyatakan dengan tegas bahwa Dijkstra adalah twit yang sombong. Segala sesuatu yang dia benci tentang Basic adalah benar dalam sekop tentang assembler yang saya kerjakan dan saya dan ribuan orang lainnya pulih dari keterpaparan kami terhadap assembler dan kemudian Basic dan Fortran dan Cobol dan C dll.

kloucks
sumber
1

Saya mulai pemrograman dengan GW-BASIC di awal 1990-an. Pikiranku tidak dimutilasi. Saya pindah ke bahasa yang lebih baik seperti Pascal, C, C ++, Java, C #, dan Python.

Saya tidak akan bisa menulis program BASIC hari ini; Saya lupa cara berpikir dalam hal nomor baris. Bukan itu masalahnya.

Tapi pengalaman BASIC saya banyak membantu saya di kuliah Arsitektur Komputer di mana saya harus belajar bahasa assembly (MIPS). Majelis aliran kontrol bahasa adalah banyak seperti BASIC ini: Melompat = GOTO, cabang = IF... GOTO, jal(panggilan) ... jr(ret) = GOSUB... RETURN. Itu semua aliran kontrol yang Anda butuhkan!

Apakah baik mempelajari bahasa pemrograman yang berjalan di komputer yang penuh dengan sumber daya di mana programmer pemula dapat melakukan semua kesalahan dan program berjalan tanpa masalah besar? Atau lebih baik belajar di mana programmer tidak salah?

Menurut saya lebih baik belajar di komputer dengan sumber daya terbatas. Bukan karena "programmer tidak bisa salah" tetapi karena ambang "kesejukan" jauh lebih rendah. Seorang programmer pemula mungkin tidak tahu bagaimana membuat penembak orang pertama yang hebat untuk PC mereka. Tapi mereka bisa menulis game Pac Man yang hebat untuk TI-89 mereka dan menggunakan perangkat keras secara maksimal. Dan itu adalah perasaan berkuasa.

dan04
sumber