Come si codifica qualcosa quando non si ha idea di come funzioni effettivamente? [chiuso]

14

Recentemente ho imparato C e voglio iniziare un progetto per consolidare le mie conoscenze. Ho deciso di creare un editor di testo molto semplice, qualcosa di simile a Vim. Il problema che ho di fronte è che non ho davvero idea di come funziona un editor di testo, e non so per cosa google imparare.

La ricerca su google ha portato al repo di GitHub di Vim, che per me è inutile perché il codebase è enorme e il codice mi confonde. Ho anche trovato tutorial per creare un editor di testo in C che funzioni in modo simile a vim.

Anche se ho pensato di seguire i tutorial, mi sembra di barare. Come hanno fatto gli sviluppatori di vim a capire come codificare Vim senza tutorial specifici? Oppure sono partiti da semplici editor di testo? Come l'hanno capito solo dalla conoscenza delle lingue e della loro documentazione?

Di cosa ho bisogno esattamente per iniziare a scrivere questo editor di testo senza seguire direttamente un tutorial? Un altro esempio a cui mi piace pensare è: come hanno fatto Dennis Ritchie e Ken Thompson a codificare Unix? Ho un'idea di come funzioni il SO, ma non ho idea di come metterlo in codice. Cosa mi manca? Come trasferisco questa conoscenza della lingua in uso pratico e pratico?

    
posta Faithlesss 10.02.2018 - 15:40
fonte

4 risposte

17

Se questo è il tuo primo progetto di programmazione, anche un semplice editor di testo può essere troppo complicato. Qualcosa come Vim o un sistema operativo è completamente fuori questione.

Avvicinamento al problema

In generale, il modo di iniziare è approssimativamente simile per la maggior parte dei progetti, tuttavia:

  • Raccogli i tuoi requisiti. Cosa esattamente farà il software?
  • Si inizia con molto alcuni requisiti e poi si aggiungono funzionalità per bit.
  • Decomponi i problemi posti dai tuoi attuali requisiti in sotto-problemi.
  • Continui a scomporre i tuoi sotto-problemi finché non hai qualcosa che sai come implementare.

Esempio

Prendiamo l'esempio dell'editor di testo.

  • Si desidera visualizzare una parte di un file di testo sullo schermo, inserire e rimuovere caratteri e salvare la versione corrente.

  • Inizia semplicemente leggendo un file e visualizzando il suo contenuto.

  • Identificherete (tra gli altri) i seguenti problemi secondari:

    • Come faccio a sapere il nome del file da visualizzare?
    • Dato un nome di file, come posso ottenere il contenuto del file?
    • Dati i contenuti di un file, come li visualizzo?

Una volta raggiunto il punto in cui è stata completata la richiesta (carica e visualizza il file), puoi iniziare a considerare come visualizzare solo una porzione adatta allo schermo, navigare nel file, ecc.

Il passo successivo

Nel tempo, mentre affronti problemi sempre più complessi, ti renderai conto che diventa sempre più difficile trovare i modi adatti per scomporre i tuoi problemi. Noterai inoltre che la modifica del codice può diventare noiosa nel tempo.

A quel punto, è il momento di imparare alcuni concetti basilari di architettura e design.

    
risposta data 10.02.2018 - 16:26
fonte
15

Non lo fai.

Se non hai nemmeno una vaga idea di come fare qualcosa, è un segno che va oltre le tue attuali competenze. Perché se non hai idea di come iniziare, sicuramente non avrai alcuna idea quando si tratta della parte più difficile dell'app.

    
risposta data 10.02.2018 - 15:48
fonte
2

Devi decidere come tu vuoi che il tuo editor di testi funzioni.

Questa è una delle esperienze più aggravanti e gratificanti di sviluppare i tuoi progetti dall'inizio alla fine. Nessuno ti sta inviando requisiti da cui partire. Devi sviluppare i tuoi requisiti.

Questo significa che dovrai fare moltissimo lavoro di progettazione prima di scrivere la prima riga di codice. Dovrai decidere come si presenta l'interfaccia. Dovrai decidere quali funzionalità includere. Entrambe le domande di cui sopra saranno guidate da ciò che ti senti in grado di fare. Se pensi alla situazione "ideale" (come vorresti che l'interfaccia funzionasse), ma non ti senti in grado di codificarla, allora devi iniziare a guardare ad approcci alternativi: Come potrei ottenere questo in lavoro? Questo ti aiuta a focalizzarti sugli approcci di codifica di cui potresti voler saperne di più.

Come altri hanno già detto, provare a copiare vim potrebbe non essere l'approccio migliore dal momento che si tratta di una base di codice ampia e complicata. Stai anche negando a te stesso il lavoro di progettazione che, a mio modesto parere, aiuta a completare il tuo lavoro come sviluppatore.

Questo non significa che avrai bisogno di avere l'intera applicazione progettata dall'inizio alla fine prima di scrivere la prima riga di codice. Va bene che i requisiti cambino nel tempo man mano che impari di più. Va bene aggiungere nuove funzionalità a cui non pensi fino a quando non stai testando / utilizzando la tua applicazione e pensi, "Non sarebbe bello se ..." Va bene iniziare in modo semplice.

    
risposta data 10.02.2018 - 20:05
fonte
1

Scrivere un editor di testo completo da zero senza esperienza di programmazione è folle: sarai scoraggiato e lo abbandonerai prima di imparare molto.

Vengono in mente diverse alternative:

  • Studia il codice di alcuni prodotti con cui hai familiarità. Se sei esperto in vim , guarda oltre e prova a capire qualcosa di piccolo e isolato, come il modo in cui rappresenta i dati, o cerca un singolo carattere (il comando f ).
  • Studia il codice di un programma molto semplice e inizia da lì: cat comando poi wc poi grep poi sed per esempio.
  • Prova a scrivere un programma che faccia una sola funzione dell'editor. Forse cancella il secondo carattere in ogni riga di un file (senza riscriverlo) o visualizza solo le righe da 50 a 70 di un file.
risposta data 10.02.2018 - 20:05
fonte

Leggi altre domande sui tag