Bagaimana Anda membuat kode sesuatu ketika Anda tidak tahu cara kerjanya? [Tutup]

14

Saya baru-baru ini belajar C dan ingin memulai sebuah proyek untuk memperkuat pengetahuan saya. Saya telah memutuskan untuk membuat editor teks yang sangat sederhana, seperti vim. Masalah yang saya hadapi adalah saya benar-benar tidak tahu bagaimana cara kerja editor teks, dan saya tidak tahu apa yang harus dipelajari google untuk mempelajarinya.

Googling tentang hal itu menyebabkan repo GitHub vim, yang tidak berguna bagi saya karena basis kode sangat besar dan kode membingungkan saya. Saya juga menemukan tutorial untuk membuat editor teks di C yang berfungsi seperti vim.

Meskipun saya berpikir tentang mengikuti tutorial, rasanya seperti curang. Bagaimana para pengembang vim mengetahui cara membuat kode vim tanpa tutorial khusus? Atau apakah mereka mulai dari editor teks yang lebih sederhana? Bagaimana mereka mengetahui hal itu hanya dari pengetahuan bahasa dan dokumentasinya?

Apa sebenarnya yang saya butuhkan untuk mulai menulis editor teks ini tanpa langsung mengikuti tutorial? Contoh lain yang saya suka pikirkan adalah: bagaimana Dennis Ritchie dan Ken Thompson membuat kode Unix? Saya punya ide bagaimana fungsi OS, tapi saya tidak tahu bagaimana memasukkannya ke dalam kode. Apa yang saya lewatkan? Bagaimana cara mentransfer pengetahuan bahasa ini ke penggunaan praktis dan aktual?

Orang yang tidak beriman
sumber
14
Anda membandingkan diri Anda dengan proyek dengan sejarah panjang, dan orang-orang luar biasa. Unix berasal dari kelompok penelitian dengan pengalaman bertahun-tahun dalam pemrograman tingkat sistem, dan mendapat keuntungan dari pengalaman dengan OS Multics yang lebih kompleks. Vim didasarkan pada vi yang didasarkan pada ed. Program-program ini tidak tiba-tiba muncul, mereka adalah evolusi, yang dibangun oleh ratusan orang. Jadi, jangan frustrasi ketika Anda merasa sulit untuk melewatkan semua sejarah itu. Tidak ada yang bisa. Sebaliknya, cobalah untuk melakukan proyek yang berada di ujung pemahaman Anda - hanya dalam genggaman Anda, tetapi masih menantang.
amon
8
Anda baru saja belajar memainkan beberapa nada pada gambang, dan sekarang Anda ingin bermain di orkestra internasional yang besar? Ayo, kamu terlalu banyak berharap. Pemrograman seperti memainkan alat - Anda mulai dengan melodi kecil dan sederhana dan setelah beberapa tahun berlatih Anda belajar memainkan simfoni.
Doc Brown
3
Sepakat. Ambillah sebagai kesempatan bagi Anda untuk mempelajari sesuatu yang dipelajari banyak pemula dengan cara yang sulit. Mulai sedikit . Dan jangan membaca kode vim juga. Anda dapat belajar banyak membaca kode yang ada.
Laiv
17
Masalah mendasar Anda adalah kurangnya kejelasan dalam pemikiran Anda. Anda mengatakan "editor teks kecil sederhana seperti vim", dan kemudian segera tindak lanjuti dengan mencatat bahwa basis datanya sangat besar dan membingungkan. Ini harus menjadi sinyal kuat bagi Anda bahwa tidak ada yang mirip dengan vim sederhana . Bahkan programmer yang berpengalaman jatuh ke dalam jebakan mental Anda. Hal-hal yang belum Anda pahami tidaklah sederhana . Mereka rumit . Pemrograman komputer mengubah logika mental menjadi kenyataan; mulailah dengan berpikir lebih jernih tentang pemrograman.
Eric Lippert
4
Juga, berhentilah khawatir tentang "kecurangan". Ini bukan game. Anda memiliki tujuan, dan itu adalah tujuan yang baik. Lakukan apa yang perlu Anda lakukan untuk mencapai tujuan itu . Anda pikir pemrogram komputer profesional tidak melihat sumber ketika mereka ingin belajar bagaimana sesuatu bekerja? Mempelajari cara belajar dari sumber yang tidak Anda tulis adalah salah satu keterampilan pemrograman yang paling penting, jadi mulailah berlatih.
Eric Lippert

Jawaban:

17

Jika ini adalah proyek pemrograman pertama Anda, bahkan editor teks sederhana mungkin terlalu rumit. Sesuatu seperti vim atau OS benar-benar keluar dari pertanyaan.

Mendekati Masalah

Secara umum, cara memulai kira-kira sama untuk sebagian besar proyek, meskipun:

  • Anda memenuhi persyaratan Anda. Apa sebenarnya yang akan dilakukan perangkat lunak?
  • Anda mulai dengan sangat beberapa persyaratan dan kemudian menambahkan fungsionalitas sedikit demi sedikit.
  • Anda menguraikan masalah yang ditimbulkan oleh persyaratan Anda saat ini menjadi sub-masalah.
  • Anda terus membusuk sub-masalah Anda sampai Anda memiliki sesuatu yang Anda tahu cara menerapkannya.

Contoh

Mari kita ambil contoh editor teks.

  • Anda ingin menampilkan sebagian dari file teks di layar, menyisipkan dan menghapus karakter dan menyimpan versi saat ini.

  • Mulailah dengan hanya membaca file dan menampilkan isinya.

  • Anda akan mengidentifikasi (antara lain) sub-masalah berikut:

    • Bagaimana saya tahu nama file yang akan ditampilkan?
    • Diberi nama file, bagaimana cara saya mendapatkan konten file?
    • Diberikan konten file, bagaimana cara menampilkannya?

Setelah Anda mencapai titik di mana kebutuhan Anda (memuat file & menampilkannya) selesai, Anda dapat mulai mempertimbangkan bagaimana hanya menampilkan bagian yang sesuai dengan layar, menavigasi dalam file Anda, dll.

Langkah selanjutnya

Seiring waktu, saat Anda menghadapi masalah yang semakin kompleks, Anda akan menyadari bahwa semakin sulit untuk menemukan cara yang cocok untuk menguraikan masalah Anda. Anda juga akan melihat bahwa mengubah kode dapat menjadi membosankan dari waktu ke waktu.

Pada titik itu, saatnya mempelajari beberapa konsep arsitektur dan desain dasar.

dua kali kamu
sumber
Hai, terima kasih atas sarannya! Saya pikir saya akan mengambil pendekatan ini. Saya agak keras kepala ketika datang untuk mengubah pikiran saya, tetapi dari apa yang Anda sarankan, saya pikir saya akan mencoba melihat bagaimana membuat file viewer. Mungkin juga menambahkan cara untuk menunjukkan file metadata dengan cara tertentu? Saya mungkin bisa memikirkannya sendiri. Terima kasih banyak!
Faithlesss
2
Untuk menambah ini, "bagaimana cara menampilkannya" mungkin dapat dipecah lebih lanjut untuk menulis karakter tertentu ke posisi tertentu di layar (jika kita berbicara tentang editor baris perintah), yang seharusnya menjadi sesuatu yang dapat dengan mudah menemukan jawaban untuk online.
Dukeling
2
"bahkan editor teks sederhana mungkin terlalu rumit" editor teks ternyata sangat rumit. Bayangkan mengedit file 20 MB. Cukup besar untuk membutuhkan buffering, tetapi tidak cukup besar untuk dikenakan pajak ke komputer modern. Anda harus dapat menggulirnya, menyisipkan dan menghapus teks, membuat teks mengatur ulang sendiri secara real-time, pembaruan penanda bar gulir secara real time sebagai model di baliknya. Jika Anda memiliki jenis pemformatan apa pun, ini menjadi semakin rumit.
15

Kamu tidak.

Jika Anda bahkan tidak memiliki gagasan yang kabur tentang bagaimana melakukan sesuatu, itu adalah tanda bahwa itu di luar kemampuan Anda saat ini. Karena jika Anda tidak tahu bagaimana memulainya, Anda tentu tidak akan tahu ketika datang ke bagian tersulit dari aplikasi.

Telastyn
sumber
Apa yang akan menjadi proyek yang baik untuk memulai? Saya sudah membuat permainan algojo saya sendiri (di terminal), serta permainan tic tac toe. Saya hanya tidak melihat cara untuk melanjutkan jadi saya pikir editor teks akan menjadi ide yang bagus.
Faithlesss
3
@faithlesss - sesuatu yang membaca dan menulis file sepertinya langkah menengah dasar.
Telastyn
9
Sebuah file viewer mungkin proyek yang baik kemudian, misalnya pager seperti less, moreatau viewprogram. Mereka berbagi beberapa aspek editor, tanpa kompleksitas buffer edit yang bisa berubah.
amon
@ Telastyn, saya mendapatkan Anda. Akan melihat membuat penampil file kemudian, mungkin yang sederhana yang dapat membaca format teks dasar, dan kemudian pindah ke mencari tahu cara membaca sesuatu seperti, mungkin file json atau csv? Seharusnya tidak sulit untuk menguraikannya, hanya harus benar-benar melihat dokumentasi string.h kurasa. Terima kasih atas sarannya!
Faithlesss
2
@ Faithlesss Juga melihat fitur editor baris , pendahulu program editor teks
Bergi
2

Anda perlu memutuskan bagaimana Anda ingin editor teks Anda bekerja.

Ini adalah salah satu pengalaman yang paling menjengkelkan dan bermanfaat dalam mengembangkan proyek Anda sendiri dari awal hingga selesai. Tidak ada yang mengirimi Anda persyaratan untuk membangun. Anda perlu mengembangkan persyaratan Anda sendiri.

Ini berarti Anda harus melakukan banyak pekerjaan desain sebelum Anda menulis baris kode pertama. Anda harus memutuskan seperti apa antarmuka itu. Anda harus memutuskan fungsionalitas apa yang akan dimasukkan. Kedua pertanyaan di atas akan dipandu oleh apa yang Anda rasa mampu lakukan. Jika Anda memikirkan situasi "ideal" (bagaimana Anda ingin antarmuka berfungsi), tetapi Anda tidak merasa mampu mengodekannya, maka Anda perlu mulai melihat pendekatan alternatif: Bagaimana saya bisa membuatnya bekerja? Itu membantu memfokuskan Anda pada pendekatan pengkodean yang mungkin ingin Anda pelajari lebih lanjut.

Seperti yang dikatakan orang lain, mencoba menyalin vim mungkin bukan pendekatan terbaik karena basis kode yang besar dan rumit. Anda juga menyangkal karya desain yang, menurut pendapat saya yang sederhana, membantu melengkapi Anda sebagai pengembang.

Ini tidak berarti Anda harus memiliki seluruh aplikasi yang dirancang dari awal hingga selesai sebelum Anda menulis baris kode pertama Anda. Tidak apa-apa jika persyaratan berubah seiring waktu saat Anda belajar lebih banyak. Tidak apa-apa untuk menambahkan fitur baru yang tidak Anda pikirkan sampai Anda menguji / menggunakan aplikasi Anda sendiri dan Anda berpikir, "Bukankah lebih baik jika ..." Tidak apa-apa untuk memulai dengan sederhana.

Randall Stewart
sumber
1

Menulis editor teks berfitur lengkap dari awal tanpa pengalaman pemrograman adalah bodoh: Anda akan berkecil hati dan meninggalkannya sebelum belajar banyak.

Beberapa alternatif muncul di pikiran:

  • Pelajari kode beberapa produk yang Anda kenal. Jika Anda mahir vim, lihat itu dan coba untuk memahami sesuatu yang kecil dan terisolasi, seperti bagaimana itu mewakili data, atau mencari satu karakter ( fperintah).
  • Mempelajari kode program yang sangat sederhana dan cara kerja Anda dari sana: catperintah maka wckemudian grepkemudian sedmisalnya.
  • Cobalah untuk menulis program yang hanya memiliki satu fitur editor. Mungkin menghapus karakter kedua di setiap baris file (tanpa menulis kembali), atau hanya menampilkan baris 50 hingga 70 file.
wallyk
sumber
1
Tanpa mengetahui sedikit tentang pola umum, saya pikir memahami bahkan bagian kecil dari proyek besar seperti vim akan sia-sia. Melihat proyek open source yang sangat kecil adalah ide yang bagus. Saya akan menambahkan bahwa berusaha membuat perubahan yang ditargetkan untuk program semacam itu akan menjadi cara yang bagus untuk belajar. Keuntungan: Anda akan mempelajari beberapa pola yang digunakan dalam program dunia nyata. Kerugian: Anda mungkin belajar anti-pola juga.
gandakan kamu