Membuat Bahasa Naskah Baru Untuk Pengalaman Belajar? [Tutup]

13

Apakah membuat bahasa scripting untuk pengalaman belajar pribadi saya sepadan?

Alasan saya bertanya adalah bahwa ada begitu banyak bahasa pemrograman yang tersedia, saya tahu bahasa saya tidak akan pernah ada gunanya selain memberikan pengalaman belajar yang baik. Namun, saya melihat kekurangan dengan hanya mencoba menjadikan bahasa scripting sebagai pengalaman belajar: akan membutuhkan banyak waktu dan upaya di mana saya bisa melakukan sesuatu yang lebih "produktif."

Apakah menciptakan bahasa pemrograman (termasuk menulis konsep tujuan, sintaksis, filosofi, interpreter, dll.) Sepadan dengan waktu, upaya, dan pengalaman belajar? Atau adakah proyek lain yang bisa saya manfaatkan lebih banyak?

Ivan
sumber
3
Pilihan lain adalah menerapkan bahasa yang ada. Saya perlahan mengembangkan dialek ECMAScript yang disebut Machete lebih dari satu tahun dan belajar cukup banyak.
ChaosPandion
Menarik, saya tidak memikirkan itu.
Ivan
2
1) Pelajari ini ... www1.idc.ac.il/tecs 2) dan ini ... mitpress.mit.edu/sicp
Joe Internet
Anda juga dapat mempertimbangkan untuk berkontribusi pada proyek yang ada v8, SpiderMonkey atau Python
treecoder
3
IMHO, cara terbaik untuk mempelajari bahasa pemrograman baru adalah dengan mengimplementasikan kompiler untuk mereka (atau setidaknya untuk himpunan bagian signifikan dari bahasa asli). Jadi, ya, itu memang pengalaman belajar yang berguna.
SK-logic

Jawaban:

15

Bangun Keterampilan Anda DAN Portofolio Anda

Menurut saya itu akan menjadi pengalaman belajar yang sangat baik karena akan:

  • memaksamu untuk melihat di bawah tenda ,
  • membimbing Anda untuk belajar bagaimana hal-hal dilakukan secara internal ,
  • mendorong Anda untuk melihat dan membandingkan implementasi lainnya ,
  • menjaga keterampilan algoritmik Anda hingga kecepatan,
  • membuat Anda kode (dan mudah-mudahan mendokumentasikan ) banyak, yang juga tidak buruk,
  • memberi Anda proyek dan basis kode signifikan yang dapat Anda bagikan secara online untuk dilihat semua orang, untuk:
    • kesenangan dan kepuasan pribadi ,
    • menunjukkan keahlian Anda kepada calon majikan,
    • berkomunikasi dan bertukar dengan rekan-rekan yang tertarik pada bidang yang sama,
    • berpotensi membiarkannya tumbuh menjadi sesuatu yang lebih ...

Jadi saya melihat ini sebagai produk, bermanfaat, dan keseluruhan "sepadan".

Memulai

Sekarang Anda dapat menggunakan pendekatan yang berbeda, tergantung pada berapa banyak waktu yang Anda rencanakan untuk dihabiskan untuk ini ...:

  • Jika Anda memiliki kerangka waktu yang terbatas, saya akan mengatakan menyelam dan kode hal itu.
  • Jika Anda memiliki jangka waktu yang lebih luas, maka Anda memang bisa bertele-tele dan menulis spesifikasi, tutorial, manual, dll ...

Mulai dari Kecil

Saya lebih suka Anda memulai dari yang kecil . Tidak ada yang pernah, yang saya tahu, menulis langsung bahasa yang luar biasa begitu saja. Anda tersandung dan jatuh, dan gagal, dan gagal dan gagal . Kemudian Anda berhasil, karena berhasil tetapi masih menyebalkan, jadi Anda mulai dari awal lagi. Dan Anda menambahkan fitur-fitur baru dan akhirnya menjadi keren, tetapi tiba-tiba Anda menyadari bahwa ada konsep dasar yang Anda buat kacau pada awalnya. Jadi Anda mulai lagi ...

Tampaknya sangat mendidik bagi saya.

Silakan (dan bagikan tautannya dengan kami).

Kecil, seperti "pendek"

Tapi sekali lagi, saya sarankan Anda mulai dari yang kecil . Jangan takut jika orang mengatakan akan membutuhkan banyak kode dan waktu. Belum tentu, jika Anda tidak bertujuan untuk bahasa yang rumit. Alan Kay dan insinyur Xerox PARC lainnya diduga mengembangkan versi awal Smalltalk yang sesuai pada selembar kertas , sebagai tujuan untuk keseness (baca Xerox PARC: Dealer Lightning untuk perincian tentang sejarah PARC ). Tampaknya pendekatan yang bagus, mendidik, dan terkendala (asalkan tidak mengorbankan keterbacaan).

Kecil, seperti dalam "dibatasi"

Anda tidak perlu langsung mendukung sistem tipe canggih, fungsi tingkat tinggi dan campuran 42 paradigma yang berbeda. Itu bisa saja bahasa ekspresi matematika.

Gunakan kembali (dan Intip) Pengetahuan Lainnya

Anda mungkin juga ingin melihat alat yang digunakan untuk menulis bahasa dari awal. Anda dapat mengimplementasikan kembali semuanya sendiri, tetapi mungkin perlu juga melihat lexers dan parser generator yang ada, misalnya.

Dan jelas, Anda mungkin ingin membaca tentang konstruksi kompiler pada umumnya.


Sekarang, jika kami mengubah pertanyaan Anda menjadi "apakah ini akan menjadi penggunaan waktu Anda yang PALING produktif?" itu menjadi masalah yang sama sekali berbeda :)

Ada banyak proyek pembelajaran lain yang bisa Anda tangani, dan itu akan melatih dan menunjukkan keterampilan Anda dengan baik, jika tidak lebih baik. Itu tergantung apa yang ingin Anda tuju.

haylem
sumber
2
+1 untuk "Maka Anda berhasil, karena berhasil tetapi masih menyebalkan"
Ivan
1
@Van: Terima kasih :) Itu mungkin bagian lain dari pengalaman belajar: introspeksi, kerendahan hati, dan ketekunan!
haylem
1
Saya setuju dengan haylem. Jumlah yang akan Anda pelajari tentang pemrograman secara umum, bagaimana bahasa bekerja, berbagai metode penerapan hal-hal akan sangat bermanfaat. Ya, Anda mungkin akan menjadi satu-satunya yang pernah melihatnya, tetapi itu akan menjadi proyek kesayangan Anda yang sedang Anda kerjakan untuk meningkatkan diri.
RJay75
3

Saya katakan maju.

Menerapkan bahasa pemrograman mencakup berbagai topik, dan Anda akan belajar banyak tentang cara kerja berbagai hal. Anda mungkin akan hidup melalui setengah lusin upaya yang gagal, tetapi pengalaman belajar sangat berharga.

tammmer
sumber
2

Merancang dan mengimplementasikan bahasa pemrograman (mainan tapi lengkap) sebenarnya adalah salah satu (wajib?) Latihan di salah satu kelas CS divisi atas saya (baik kelas kompiler atau survei bahasa pemrograman, saya lupa yang ...)

Jadi setidaknya satu profesor CS berpikir demikian.

Anda akan berakhir dengan apresiasi yang jauh lebih baik untuk semua "kebiasaan" yang dimiliki bahasa lain.

hotpaw2
sumber
1

Butuh beberapa saat untuk melakukannya. Apakah Anda berencana untuk mempertahankannya?

Apakah menciptakan bahasa pemrograman (termasuk menulis konsep tujuan, sintaksis, filosofi, interpreter, dll.) Sepadan dengan waktu, upaya, dan pengalaman belajar? Atau adakah proyek lain yang bisa saya manfaatkan lebih banyak?

Saya berasumsi status keuangan Anda tidak terbatas, jadi saya akan mengatakan bahwa itu tidak sebanding dengan waktu. Anda dapat menghabiskan waktu Anda untuk proyek-proyek bermanfaat lainnya yang dapat menghasilkan uang bagi Anda. Ingatlah ini mungkin bukan jawaban yang Anda cari, tetapi dari sudut pandang logis, saya akan mengatakan bahwa bahasa pemrograman Anda mungkin bukan proyek yang tepat saat ini. Saya akan mempertimbangkannya jika Anda seorang ilmuwan komputer yang sudah pensiun, dan merasa perlu untuk berkontribusi pada industri. Tampaknya Anda memiliki hasrat yang kuat untuk pemrograman, dan itu hebat. Tapi, membangun bahasa scripting baru? Itu akan menjadi proyek yang sangat panjang. Pada saat itu Anda bisa membangun banyak aplikasi yang dapat Anda masukkan ke dalam portofolio Anda. Saya pikir pertanyaannya adalah:

Ryan
sumber
2
Saya tidak tahu ... satu tenaga besar cinta mengalahkan dua puluh aplikasi yang mungkin membuat Anda seratus dolar masing-masing.
ChaosPandion
Menerapkan bahasa spesifik domain mungkin sebenarnya mempercepat pengembangan proyek praktis secara signifikan. Jadi itu bisa sangat memuaskan secara finansial dan juga estetis.
SK-logic
1
Beberapa orang menciptakan sesuatu karena mereka suka menciptakan sesuatu ... bukan karena tindakan penciptaan tersebut akan memberi mereka uang tunai.
Jetti
@Jetti. Ya saya tahu. Itu sebabnya saya mengatakan jawaban ini mungkin bukan yang Anda cari, dan saya bisa katakan Anda memiliki hasrat untuk pemrograman. Saya menghargai masukan Anda, karena saya sedang menunggu seseorang mengatakan sesuatu seperti apa yang Anda katakan tentang jawaban ini.
Ryan
@Ryan - maaf saya melewatkan bagian itu.
Jetti
-2

Saran saya kepada Anda adalah

Jangan menemukan kembali roda

Inspirasi untuk metafora idiomatik ini terletak pada kenyataan bahwa roda adalah pola dasar kecerdasan manusia, baik berdasarkan kekuatan tambahan dan fleksibilitas yang diberikannya kepada penggunanya, dan juga pada asal-usul kuno yang memungkinkannya untuk mendasari banyak, jika tidak semua , dari teknologi modern. Seperti yang telah ditemukan, dan tidak dianggap memiliki kekurangan operasional, upaya untuk menemukan kembali itu akan sia-sia dan tidak menambah nilai pada objek, dan akan membuang-buang waktu, mengalihkan sumber daya penyelidik dari tujuan yang mungkin lebih layak. yang keterampilannya dapat maju secara lebih substansial.

Anda harus bertanya pada diri sendiri:

  • Mengapa Anda perlu membuat skrip? Apakah skrip yang ada di luar sana tidak cukup baik?
  • Apakah Anda akan memelihara dan menerbitkannya, dan Anda yakin skrip Anda akan digunakan oleh programmer lain? Jika jawaban Anda adalah tidak, jangan lakukan itu.

Saya mengerti bahwa Anda ingin memiliki lebih banyak pengalaman belajar dan untuk alasan itu secara pribadi saya pikir menciptakan kerangka kerja akan memberi Anda lebih banyak pengalaman belajar dan dengan bonus yang Anda / tim Anda / komunitas dapat menggunakannya kembali nanti, daripada membuat skrip.

Dan komik xkcd ini sedikit relevan, cukup ubah "standar" menjadi "bahasa" juga:

masukkan deskripsi gambar di sini

Rudy
sumber
-1, ia dengan jelas mengatakan ini akan menjadi pengalaman belajar pribadi.
GrandmasterB
Hanya ingin jujur ​​bahwa membuat skrip tidak akan memberikan pengalaman dan manfaat pembelajaran pribadi yang nyata, bagi dirinya dan masyarakat. Saya juga menambahkan jawaban saya bahwa membuat kerangka kerja akan lebih bermanfaat baginya dan masyarakat. Saya tidak keberatan mendapatkan lebih banyak suara, jika Anda merasa itu tidak benar.
Rudy
2
Yap, Anda benar - tidak ada programmer baru yang akan menulis pertamanya "Halo, Dunia!" - lagipula, akan lebih baik untuk hanya mengunduh yang sudah ada. Dan apa " kerangka " dalam konteks ini?
SK-logic
5
@ Rudy, menerapkan kompiler atau juru bahasa adalah keterampilan sepele dan dasar yang cukup dekat dengan "Halo, Dunia!". Itu sebabnya wajib dalam kursus CS yang layak. Dan, meskipun sepele, tugas ini mengajarkan sejumlah keterampilan yang sangat berguna, dapat diterapkan dalam praktik di hampir semua bidang. Tidak perlu disebutkan bahwa mengimplementasikan DSL sangat penting (ingatlah Anda - bahwa Hibernate yang Anda sebutkan adalah DSL, dan ada sejumlah penerjemah dan kompiler yang tertanam di dalamnya, beberapa di antaranya sangat kurang diimplementasikan).
SK-logic
3
@ SK-logic - Anda tidak membantu harga diri saya di sini ... :)
ChaosPandion