Mengapa Skema adalah bahasa pertama saya di universitas?

80

Saya mendengar tentang C, C ++, Java setiap hari setiap kali orang mulai berbicara tentang ilmu komputer, tetapi di kelas ilmu komputer pertama kami, kami diminta untuk menulis dalam Skema (DrRacket).

Mengapa demikian?

Apa perbedaan yang akan terjadi pada pemahaman saya tentang pemrograman di masa depan?

PEMBARUAN: Saya telah menyelesaikan masa jabatan pertama saya, tetapi tidak sepenuhnya selesai dengan Skema. Dalam istilah kedua saya (yang sekarang) kami masuk ke pemrograman C. Awalnya merasa frustrasi untuk belajar petunjuk, tetapi sekarang saya merasa jauh lebih baik.

Tidak banyak yang bisa dikatakan selain itu. Saya mencoba untuk mengajar diri saya sendiri Java (atau C ++?) Untuk bagian OOP yang saya lewatkan. Sejauh ini, saya masih suka pemrograman fungsional terbaik. Lambda hanya menarik. :)

Erica Xu
sumber
148
Selamat, kedengarannya (bagi saya) seperti Anda mungkin pergi ke salah satu dari sedikit sekolah yang benar-benar mencoba untuk mengajarkan ilmu komputer. Skema Belajar sebagai bahasa pertama adalah (IMO) hal yang sangat bagus. Tidak, ini tidak komersial seperti banyak orang lain, tetapi ini adalah bahasa yang sangat baik untuk mempelajari esensi nyata dari ilmu komputer.
Jerry Coffin
21
C, C ++ dan Java adalah produk sampingan industri dari ilmu komputer. Seluruh akar skema dalam ilmu komputer. Bahasa-bahasa yang digunakan secara komersial banyak berkaitan dengan ilmu komputer seperti halnya McDonalds berkaitan dengan masakan.
JasonTrue
33
Orang-orang ini benar; Anda membingungkan pemrograman komputer dengan ilmu komputer - seperti kata Dijkstra, itu seperti konstruksi teleskop yang membingungkan dengan astronomi. Skema adalah tentang bahasa terbaik yang ada untuk mempelajari konsep dasar dalam ilmu komputer . Jika Anda berharap mengambil gelar ilmu komputer adalah mempelajari cara menulis aplikasi lini bisnis di Jawa, Anda mungkin terdaftar di program yang salah.
Eric Lippert
29
Untuk alasan yang sama, kursus zoologi mengajarkan biologi evolusi, anatomi, dan perilaku hewan daripada bagaimana membersihkan kandang gajah
jk.
4
Setelah Anda dapat memahami sintaks dasar Skema, coba baca "The Little Schemer". Ini adalah buku yang tipis, tetapi jika Anda dapat memahami semua yang ada di dalamnya, Anda akan memiliki pemahaman yang kuat tentang dasar-dasar bahasa pemrograman fungsional.
Eric Lippert

Jawaban:

91

Kedengarannya seperti sekolah yang hebat! Dialek Lisp mengikuti paradigma matematika dari algoritma jauh lebih dekat. Mereka memaksa programmer untuk mempelajari rekursi dan gaya fungsional. Ini pengalaman yang luar biasa. Sekolah Anda berada di jajaran MIT, yang masih menggunakan Abelson dan Sussman untuk CS 6.001 yang diperlukan.

Anda mungkin menemukan artikel ini membesarkan hati dan membantu dalam memahami masalah ini.

Jonathan Henson
sumber
6
"Memaksa" mungkin bukan kata yang baik untuk digunakan. Bagaimana dengan "melatih"?
Barry Brown
4
Sebenarnya, ada perubahan besar dalam kurikulum EECS MIT selama beberapa tahun terakhir. Kursus intro mereka dibagi menjadi dua kursus sekarang (lihat mit.edu/6.01/mercurial/fall11/www/index.html untuk babak pertama), dan sebagian besar pengajaran bahasa menggunakan Python.
jonsca
4
Saya setuju bahwa Skema adalah bahasa yang hebat dan itu ide yang bagus untuk mempelajarinya. Namun, mari kita hadapi itu; hampir setiap pekerjaan pemrograman dunia nyata menggunakan bahasa yang sangat penting; sebagian besar pekerjaan pemrograman yang sangat serius membutuhkan C ++, dan programmer C ++ biasanya secara aktif mencegah Anda menggunakan semua ide berbasis matematika yang bagus untuk desain program karena satu dan lain alasan. Rekursi tidak akan memainkan peran besar dalam program penting Anda.
Felix Dombek
4
@FelixDombek, apakah Anda yakin? Semua ide? Benarkah? Lingkaran imperatif adalah ide matematika juga, ingatlah.
SK-logic
3
@ FelixDombek, saya hanya bisa melihat alasan untuk menggunakan iterasi daripada rekursi ekor di C ++. Semua bentuk rekursi lainnya disajikan dengan cara yang persis sama dengan implementasi bahasa fungsional. Jadi saya tidak bisa setuju dengan komentar Anda sama sekali. Semakin banyak matematika yang Anda masukkan ke dalam kode C ++, semakin baik. Saya ragu Anda akan mencoba menerapkan, katakanlah, pohon merah-hitam di C ++ tanpa rekursi.
SK-logic
37

Tidak ada yang berharap bahwa sebagai mahasiswa baru Anda akan cukup mahir dalam bahasa apa pun untuk mendapatkan pekerjaan nyata, jadi mengapa tidak mulai dengan yang mudah dipelajari? Mengharapkan pemula untuk belajar pemrograman dengan menggunakan bahasa profesional dalam IDE profesional adalah seperti memberikan pisau bedah kepada mahasiswa kedokteran tahun pertama dan meminta mereka bekerja pada benda hidup.

Jangan khawatir; Anda akhirnya akan belajar Java / C / C ++, mungkin mulai tahun kedua Anda. Jika Anda mulai belajar Java 6 sekarang, pada saat Anda lulus Java 8 akan keluar. Atau itu akan digantikan oleh Python. Atau bahasa lain yang belum ditemukan tetapi mengambil industri dengan badai. Lebih baik menunda belajar hal-hal "populer" selama mungkin sehingga tidak usang ketika Anda keluar dari dunia kerja.

Skema / Racket akan membantu Anda fokus pada konsep-konsep penting: desain algoritma, struktur data, dan manipulasi informasi. Anda tahu, hal-hal yang umum untuk semua bahasa.

Barry Brown
sumber
36

Selamat, Anda sekarang berubah menjadi setara dengan seorang vegan di dunia komputer, dan dalam dua tahun Anda tidak akan dapat mengakhiri diskusi apa pun tanpa memberi tahu orang-orang tentang landasan moral yang lebih tinggi yang Anda perjuangkan. ;)

Pokoknya kamu mendapatkan sekolah yang sangat bagus. Sekolah yang tidak dicambuk industri bagus.
Seperti kata orang lain, mereka mengajarkan Anda ilmu pengetahuan, dari mana Anda mendapatkan kerajinan itu .

Banyak peternakan kode-monyet yang buruk mengajarkan Anda tentang kerajinan itu, dan kemudian Anda dapat menyimpulkan ilmu pengetahuan darinya, tetapi itu tidak dijamin. (dan Anda mungkin berakhir dengan kesalahpahaman yang cukup aneh tentang hal itu)

Bagaimanapun, sebagai anggota terhormat dari kerumunan fungsional, ketika Anda keluar dari sana, Anda akan selalu merasa disalahpahami dan kurang dihargai .

Yang, mari akui saja, untuk ahli komputer rata-rata bukanlah hal baru.

Anda sekarang berada dalam risiko tinggi:

  • mencoba untuk menyelesaikan karir akademik ,
  • memulai mengejar PHD ,
  • ... emacs .

Anda mungkin juga akan menyukai open source, tetapi Anda tidak akan pernah menemukan cukup kolaborator untuk proyek fungsional Anda.

ZJR
sumber
2
Maaf, untuk komentar necro, tapi mengapa emacs? Saya penasaran. Saya berada di kapal yang sama dengan OP (memulai mahasiswa baru musim gugur ini) dan kami akan menggunakan Racket (mirip dengan Skema).
Kevin Johnson
2
@KevinJohnson emacs sering disebut sebagai sistem operasi yang ditulis dalam LISP yang secara tidak sengaja membantu banyak orang mengedit kode . Jika Anda melakukan paradigma fungsional dan (diajarkan untuk) menyukai kata-kata kotor dari sintaks seperti LISP, kemungkinan akan tumbuh pada Anda sebagai editor teks pilihan Anda.
ZJR
1
"mengajarimu sains, darimana kamu mendapatkan kerajinannya": +1
Giorgio
23

Apa perbedaan yang akan terjadi pada pemahaman saya tentang pemrograman di masa depan?

Itu sedikit seperti bertanya bagaimana membaca Shakespeare akan membantu Anda menulis makalah. Pemrograman (dalam bahasa apa pun) hanyalah sarana untuk mengekspresikan ide-ide Anda dalam bentuk yang dapat dieksekusi. Ilmu komputer menyediakan blok bangunan konseptual yang akan memberi Anda sesuatu yang menarik untuk dikatakan. Sintaks skema relatif sederhana, sehingga Anda bisa mendapatkan ide-ide menarik dengan cepat dan tanpa mengalami banyak kesalahan kompiler, perpustakaan standar, dll.

Perhatikan baik-baik di kelas - Anda akan belajar banyak hal menarik semester ini.

Caleb
sumber
14

Sepertinya Anda sangat baru dalam pemrograman yang tidak memiliki pengalaman sebelumnya sama sekali. Jadi, inilah beberapa klarifikasi:

Mengapa Skema dan bukan C / C ++ / Java ...?

Saat mempelajari bahasa pemrograman (analogi dapat dibuat dengan bahasa Inggris) Anda mempelajari sintaks yang harus Anda ikuti sehingga kode Anda benar secara gramatik. Namun bahasa tidak akan mengajarkan Anda logika di balik penyelesaian masalah. Untuk mempelajari logika itu, Anda mempelajari berbagai paradigma pemrograman .

Setiap bahasa dapat menerapkan (kurang lebih akurat) satu atau lebih paradigma. Paradigma adalah cara untuk menyusun logika Anda, dan paradigma yang diterapkan oleh Skema disebut Pemrograman Fungsional (FP).

Jadi pertanyaan sebenarnya yang Anda tanyakan adalah: Mengapa FP?

Seperti yang Anda sebutkan, C, C ++ dan Java (yang tidak menerapkan FP) jauh lebih populer. Sebagai fakta, (dan karena berbagai alasan, semua orang memiliki pendapat mereka) FP tidak terlalu populer di industri.

Di sisi lain, FP sangat dihargai di kalangan akademisi. Ini lebih dekat dengan pendekatan matematika umum, lebih berfokus pada provabilitas dan optimalisasi algoritma, dan kebanyakan orang akan setuju bahwa itu akan membuat Anda seorang programmer yang lebih baik secara umum.

Ini mirip dengan sekolah-sekolah yang mengajarkan bahasa Latin untuk belajar sastra Inggris.

rahmu
sumber
1
Skema tidak harus digunakan secara fungsional, meskipun lebih mungkin Anda melakukannya daripada di C, C ++ dan Java.
Ricky Clarkson
"Ini mirip dengan sekolah yang mengajarkan bahasa Latin untuk mempelajari sastra Inggris.": Atau untuk kelas sistem operasi yang mengajarkan OS mirip Unix dan bukannya OS lain yang lebih luas.
Giorgio
11

Anda seharusnya belajar bagaimana pemrograman dilakukan dan apa konsep dasarnya. Bahasa sehari-hari yang digunakan di sebagian besar bisnis mungkin sangat cocok untuk memproduksi perangkat lunak yang dibutuhkan saat ini, tetapi tidak selalu paling cocok untuk mengajarkan Anda dasar-dasar pemrograman.

Setelah Anda memahami konsepnya, mudah untuk menerapkannya ke bahasa lain.

perdian
sumber
4
"Bahasa sehari-hari yang digunakan di sebagian besar bisnis mungkin sangat cocok untuk memproduksi perangkat lunak yang dibutuhkan saat ini" - Mengingat biaya, kualitas, dan tingkat keberhasilan yang khas, itu pernyataan yang agak optimis :-)
Jörg W Mittag
Itu pasti benar! Itu sebabnya saya menulis "mungkin" bukan "adalah" :-)
perdian
1
"Setelah Anda memahami konsepnya, mudah untuk menerapkannya ke bahasa lain." - Pernyataan ini terlalu benar. Saya menduga itu akan memakan waktu sekitar satu minggu untuk mengambil sintaks dalam hampir semua bahasa baru, dan menjadi mahir. Saya diajari C / C ++ dan Assembly di sekolah, tetapi saya belajar sendiri Python di samping dan Lisp untuk proyek penelitian. Tanpa pemahaman mendasar yang saya peroleh dari Python, Lisp, dan Assembly, saya ragu saya akan hampir menjadi programmer seperti sekarang ini.
Wayne Werner
9

Jika Anda belajar dengan DrRacket, saya berani bertaruh Anda juga menggunakan kurikulum Cara Desain Program.

Inilah yang salah satu penulis (diakui bias) dari HTDP katakan tentang bagaimana mengajar Skema telah mempersiapkan mahasiswa di Northeastern University untuk program pendidikan koperasi ( "co-op": siswa semester alternatif studi akademis dengan semester penuh-waktu pekerjaan).

Sebelum kedatangan saya, Northeastern telah menggunakan kurikulum standar selama dua dekade: tiga istilah dari bahasa yang sedang modis (Pascal, C ++, Java), menggunakan serangkaian latihan yang sangat kaya grafis yang terkait dengan pelajaran tentang aplikasi praktis. Kurikulum ini dipublikasikan secara luas di SIGCSE dan komunitas terkait, tetapi tidak berhasil. Pada puncak gelembung web, hanya sekitar sepertiga dari siswa yang mendapat program pemrograman; kebanyakan yang lain berakhir sebagai "teknisi" sebagaimana mereka menyebut diri mereka sendiri: memindahkan komputer, menjalankan skrip, mengatur router dan jaringan, dll. Dan semua pendidikan ini menghabiskan biaya kuliah $ 150.000.

Setelah setahun di Northeastern, dekan kami meminta saya untuk mengambil alih kursus pertama. Contoh pertama adalah kesuksesan — bertentangan dengan prediksi dari beberapa fakultas lokal. Meskipun telah dianggap sebagai percobaan, kami beralih ke TeachScheme! kurikulum secara permanen; dekan menyarankan agar saya merancang kursus jembatan untuk menghubungkan kursus HtDP ke seluruh kurikulum; ini memulai kolaborasi saya di HtDC dengan Viera Proulx. Lihat catatan tambahan di bawah ini. Dalam beberapa tahun, saya mulai mendengar dari fakultas koperasi kami bahwa bagian dari posisi pemrograman naik. Pada 2007 — terakhir kali saya terlibat dalam kursus — saya diberi tahu bahwa rasio pemrograman pada koperasi pertama naik menjadi dua pertiga dan lebih tinggi. Sementara itu, semua TeachScheme! kursus telah diajarkan oleh banyak anggota fakultas dengan gaya mengajar dan kepribadian yang agak berbeda dari saya sendiri. Rasio co-op pemrograman telah meningkat menjadi tiga perempat dan lebih, dan semua fakultas hilir senang dengan keterampilan pemrograman siswa.

Sunting: bagi mereka yang sangat tertarik dengan alasan di balik kurikulum, inilah penjelasan arsitek utamanya - http://www.youtube.com/watch?v=m3be1PHW5X0

Pidge
sumber
6

Sekolah saya juga mulai dengan Skema. Salah satu alasan yang disebutkan adalah ini membantu meratakan lapangan bermain. Kebanyakan tahun pertama Comp Sci mungkin memiliki beberapa, atau banyak, paparan bahasa yang lebih umum. Lebih kecil kemungkinannya bahwa seseorang memiliki banyak pengetahuan tentang Skema.

fader gelap
sumber
4
Saya setuju; Saya mulai CS mengenal Pascal, C, Basic, x86 Assembler, sementara yang lain memiliki pengalaman dalam berbagai bahasa atau tidak sama sekali. Kami diperkenalkan ke ML yang tidak hanya tidak ada yang memiliki pengalaman sebelumnya dengan tetapi yang memiliki paradigma yang begitu asing sehingga rasanya seperti memulai kembali bahkan untuk yang paling berpengalaman di antara kami. Kemudian, saya pikir ML (paradigma fungsional) adalah hal paling berguna yang saya pelajari di CS.
KaptajnKold
6

Sebenarnya, karena Lisp (Skema menjadi dialek) adalah Grande Dame dari bahasa fungsional (pikirkan F #, Groovy, Clojure, Haskell dll), maka pelatihan ini tidak membuat Anda pada kerugian komersial apa pun, karena ini adalah terpanas topik di blok pengembangan sekarang.

adrianmcmenamin
sumber
4

Skema akan membantu Anda menjadi baik dan berpikir dengan cara yang tepat untuk menggunakan bahasa pemrograman fungsional. Scala misalnya adalah Functional / OO hybrid yang cukup cemerlang, meski agak padat. Bahasa seperti ini menandai masa depan - semoga.

Bahasa-bahasa yang mirip keris meskipun memiliki kemurnian dan kesederhanaan pada desain mereka yang membuat mereka sedikit lebih mudah untuk mengajar. Namun manfaat baiknya adalah Anda akan lebih mudah mempelajari sesuatu seperti Scala sesudahnya.

egervari
sumber
3

Kami menyelesaikan Skema di paruh pertama dan pertama semester kedua. Baru setelah kami benar-benar mulai bekerja dengan C, saya mulai menyadari kekuatan Skema.

Mengenai pertanyaan Anda, mengapa Skema dipilih: jawabannya adalah bahwa itu adalah salah satu bahasa paling sederhana di luar sana dan memungkinkan Anda untuk melakukan banyak hal (terutama ketika kita mulai bermain dengan daftar malas nanti). Selain itu:

  1. Bagi orang yang tidak memiliki pengalaman pemrograman, lebih mudah dipelajari. Tidak banyak detail teknis dan hanya beberapa bentuk khusus.
  2. Ini memungkinkan untuk abstraksi level yang lebih tinggi. Kursus yang baik dapat berfokus pada pengajaran programmer bagaimana berpikir daripada berfokus pada detail teknis yang memungkinkan siswa untuk menjadi programmer yang lebih baik.
  3. Daftarnya luar biasa. Ada begitu banyak yang dapat Anda lakukan dengan mereka. Mobil dan cdr terbukti menjadi alat yang ampuh dan hanya ketika Anda mulai bekerja dengan pointer Anda menyadari bahwa Skema luar biasa dalam menangani daftar.
Avian78
sumber