Scrivi il mio approccio alla risoluzione dei problemi su carta? [chiuso]


54

Sono una matricola studente di informatica e abbiamo appena iniziato a realizzare alcuni progetti reali in Python. Ho scoperto di essere molto efficiente quando utilizzo il metodo penna e carta che il mio professore mi ha suggerito in classe. Ma quando non riesco a scrivere il mio problema e elaborare i miei algoritmi su carta, sono davvero lento. Durante i laboratori, mi sembra sempre di dover riportare l'incarico nel mio dormitorio. Quando arrivo lì e lo scrivo, risolvo il problema che mi ha portato l'intera classe in circa 5 minuti.

Forse è perché mi sento stressato nel vedere persone che risolvono i laboratori davanti a me. O forse è il metodo penna e carta.

Stavo navigando nei forum e qualcuno ha scritto che se devi scrivere i tuoi programmi su carta non dovresti essere un programmatore. Sono davvero preoccupato perché sto molto meglio quando posso vedere cosa sta facendo il programma e seguirne la strada prima di digitare il codice reale. Sto facendo qualcosa di sbagliato?

Modifica: mi dispiace di non essere chiaro, ma quando ho detto di scrivere su carta intendevo il mio approccio alla risoluzione dei problemi (ad es. Scrivere esempi, creare tabelle con valori, ecc.) Non il mio codice reale. Uso solo il foglio per far emergere le mie idee.


28
Non vedo nulla di male nel pensare prima al problema sulla carta.
Julien Guertault,


34
Quella persona ha torto. La maggior parte usa una scorciatoia come blocchi UML o pseudocodici, ma qualunque metodo usi per funzionare come funziona la tua mente e apparentemente la tua ha bisogno di carta =) Immagino che Feynman non dovrebbe essere un fisico perché scrive equazioni alla lavagna, giusto?
Patrick Hughes,

10
La sfida per te molto probabilmente sarà imparare a risolvere le cose sulla carta mentre sei effettivamente in laboratorio. Ingegneri e scienziati usano abitualmente quaderni di carta per questo (e come una scia di carta) e mi sono sempre chiesto perché così tante persone IT disprezzino questo approccio. Sono un ingegnere che ha trascorso la mia carriera scrivendo codice e usando sempre quaderni di carta.
Móż,

4
@ ott-- Io e i miei colleghi usiamo tutti penne con i taccuini. Per me, almeno, è un buon trucco che ho imparato al college: non riuscire a cancellare mi costringe a pensarci su di più, quindi non finisco per distribuirlo su pagine aggiuntive. Inoltre, la tentazione di tenere tutto su una pagina e la possibilità di cancellare rende troppo facile cancellare accidentalmente qualcosa che volevi. Approcci errati possono anche essere cancellati, non cancellati, quindi hai un promemoria seduto su ciò che hai provato e ciò che non funziona. La carta è economica, non renderla più difficile con te stesso.
Izkata,

Risposte:


70

Non c'è niente di sbagliato nell'elaborare prima i tuoi algoritmi su carta. Non tanto per la codifica quotidiana, ma per algoritmi più complessi, i programmatori professionisti li elaborano sempre su carta o lavagna, specialmente se un formato grafico lo rende più chiaro. Per uno studente, ogni programma è complesso.

Se vuoi migliorare la progettazione di algoritmi su un computer, tuttavia, ci sono alcune tecniche che puoi praticare. Non iniziare semplicemente scrivendo il codice, scrivi le stesse cose che avresti messo su carta come commenti, quindi espanderlo in codice reale o commenti più dettagliati uno per uno.

Ad esempio, se sto eliminando un elemento dal centro di un elenco collegato, potrei iniziare con qualcosa del tipo:

// find the element
// point the previous element to the next element
//    How do I get a pointer to the previous element?
//        doubly-linked list?
//        another find?
//        keep track during the first find?
// delete the element

Quindi potrei sostituire // find the elementcon una funzione con più pseudocodice e continuare fino a quando non avrò una soluzione completa. Non pensare che il codice debba essere scritto in modo lineare.


Un buon consiglio Karl.
andy256,

2
Combino il metodo sopra con la risoluzione dei problemi di Rubber Duck (il mio è un peluche di SuSE) per fare la maggior parte del mio lavoro complesso. Ho anche il lusso di una lavagna su cui scrivere molte cose.
Deco,

+1. Scrivere domande e poi risposte è come spesso risolvo le cose. Mi costringe a cercare insidie ​​e problemi nei miei piani.
Andy Hunt,

1
Scoprirai che un certo numero di attività guidate dallo sviluppo software avrà superfici scrivibili ovunque. Di solito sono pieni di diagrammi, pseudocodici, note, opere. Ho una forte preferenza per scarabocchiare cose. Se sto ricodificando il codice, lo adoro se riesco davvero a stampare il codice e ad annotarlo. Trovo di sentirmi molto meglio rispetto a leggere e prendere appunti.
Twirrim,

1
Questa tecnica in realtà ha un nome: il processo di programmazione Pseudocodice
roufamatic,

15

Fallo! Se chiamiamo ciò che stai pensando e progettando la tua soluzione, allora ha senso che il tuo processo sarà molto più veloce della semplice espulsione del codice.

Alla gente piace pensare (e ai rumorosi piace dirci) che il loro modo di fare è migliore. Ma l'abilità e il mix di abilità di ognuno sono diversi. Quindi fai ciò che funziona per te. Man mano che acquisisci pratica, probabilmente passerai a fare più lavoro di progettazione nella tua testa e userai la carta per problemi più grandi.

Una cosa a cui prestare attenzione è quale forma assumeranno gli esami. Saranno su carta o saranno basati su computer? Se sono basati su carta, la tua strada ti darà un vantaggio. Se sono basati su computer, allora va bene lo stesso: fai qualsiasi disegno su carta, quindi scrivi il codice. Qualunque cosa funzioni meglio!


1
Posso garantire che pensare e progettare la soluzione richiede meno tempo a lungo termine. Troppo spesso, all'università, vedevo le persone (me compreso) lanciarsi in 2 ore di clacson, solo per scoprire che la loro soluzione era rotta. Prendersi il tempo necessario per progettare e risolvere il problema aiuterà a trovare una soluzione semplice. Abbiamo lavagne, quaderni e "consulti" dove lavoro proprio per questo motivo.
Jamie Taylor,

6

Non scrivo il vero codice sulla carta, ma per qualsiasi cosa non banale parto quasi sempre su una lavagna o un taccuino. Di solito abbozzo:

  • Algoritmi / processo / flusso di controllo
  • Strutture dati
  • Le relazioni
  • Componenti (come posso risolvere questo problema)

Di solito è una combinazione di schizzi, pseudocodice e inglese.

Trovo che in questo modo sia più facile visualizzarlo mentre comincio a scrivere codice. Individuerò anche i difetti prima di iniziare nel codice perché posso vedere tutto di fronte a me (invece di scorrere incessante e saltare le finestre). Non solo, una volta scritto, posso lasciare che le cose si formino nella parte posteriore della mia mente mentre sto lavorando su altri compiti. Posso anche lavorare in modo non lineare, impegnando un'idea sulla carta quando mi colpisce e poi tornarci quando raggiungo il punto in cui ne ho bisogno.

Impegnare qualcosa su carta è di grande aiuto per la conservazione della memoria. La tagline per il marchio di notebook Field Notes è questa:

Non lo scrivo per ricordarlo più tardi, lo scrivo per ricordarlo ora.

Dopo aver adottato un approccio più mirato per scrivere le cose sulla carta, anche se inserisco l'app ToDo sul mio telefono un momento dopo, trovo che il pensiero sia cementato nella mia testa molto meglio del semplice prendere una nota elettronica. IOW, pianificando la mia codifica su carta / lavagna, le idee rimangono meglio nella mia testa.

Serve anche come utile riferimento quando è il momento di documentare ciò che ho scritto.


5

Non penso che ci sia qualcosa di intrinsecamente sbagliato nel redigere il codice (pseudo o altro) sulla carta prima - in realtà non è diverso da scriverlo su una lavagna, cosa che molte persone fanno quando discutono su come affrontare un problema.

Scrivi prima bozze di saggi per lezioni non CS su carta prima di scriverle? In effetti, lo facevo anni fa quando ero ancora uno studente universitario, ma dopo il mio anno di matricola, mi sono costretto a scrivere tutte le bozze su uno schermo, poiché ha reso la scrittura delle bozze successive molto più semplice e si applica la stessa idea alla scrittura del codice.

Ti suggerirei di provare a digitare i tuoi algoritmi, anche se è solo in un editor di testo come Word. Più lo fai, più ti sentirai a tuo agio nel non fare affidamento su carta e penna. E se le tue abilità di battitura sono in qualche modo carenti e questa è in realtà la fonte della tua frustrazione, segui un corso di battitura! Sarebbe la cosa migliore che potresti fare per la tua futura carriera.


3

Risolvere il problema e scrivere il codice che implementa la soluzione sono due attività diverse.

Se non hai familiarità con una lingua, passerai molto tempo sul codice stesso e non abbastanza per trovare una buona soluzione. Se la carta, la lavagna o a partire dal soffitto ti aiutano in questo senso, allora fallo sicuramente.

(Personalmente, mi ritrovo a scendere dal computer e a girare in tondo cercando di trovare una soluzione nella mia mente)


2

Asso interviste! Ti fanno scrivere codice su carta o lavagna. Sono l'esatto contrario. Cercare di scrivere parentesi graffe o tagliare e incollare con una penna è così noioso!

Mio padre ha usato molta carta durante la programmazione di COBOL. Penso che sia solo il tuo stile di pensiero.


0

Avevamo una lezione di due semestri chiamata Le basi della programmazione. Sia i test di metà semestre che gli esami alla fine sono stati fatti su carta. Se hai commesso degli errori di compilazione hai perso una notevole quantità di punti. Se hai fatto enormi errori di compilazione, hai fallito. Tuttavia, ritengo che abbia sviluppato la capacità in noi di dare un'occhiata a qualsiasi codice e trovare linee errate in un tempo relativamente più breve.


0

Non c'è niente di sbagliato in quello che stai facendo, ho imparato a programmare usando anche carta e penna.

Come altri hanno suggerito di fare ciò che funziona per te. Ricordo che il primo programma Java che ho scritto era principalmente su carta e poi ho trascorso due ore a scriverlo e quindici minuti a piangere quando ho visto più di 200 errori del compilatore. Ce n'erano altri, ma il compilatore avrebbe mostrato solo i primi 200! Il punto che sto sottolineando è che scrivendo il codice su carta sono stato in grado di pensare attraverso l'algoritmo e la funzionalità di base per ciò che il programma doveva fare. Il compilatore ha sottolineato i motivi per cui il mio programma non avrebbe funzionato. Il 90% dei problemi erano eccezioni senza limiti con gli array.

Man mano che acquisisci maggiore esperienza e sicurezza, ti ritroverai a usare meno carta e penna. Saprai già come utilizzare concetti di base come per i loop e così via. Avrai esempi in altri programmi, che puoi riutilizzare. Utilizzerai il compilatore e un IDE per trovare ovvi bug durante la scrittura del programma. In questo momento anche se non hai quell'esperienza.

Leggendo la tua domanda, mi chiedo se alcuni dei tuoi problemi potrebbero essere dovuti alla concentrazione. Se l'utilizzo di carta e penna in un ambiente silenzioso ti aiuta a mettere a fuoco, allora ottimo.

Sei ancora al college e stai ancora imparando. Alla fine, tutto ciò che stai facendo è ciò che funziona per te. Se usando carta e penna stai ordinando i tuoi pensieri e pensando chiaramente e con calma, allora stai programmando.


1
come risponde alla domanda posta?
moscerino

L'OP chiede se è corretto usare carta e penna poiché ha letto "qualcuno ha scritto che se devi scrivere i tuoi programmi su carta non dovresti essere un programmatore". Afferma anche che è al college, quindi sta ancora imparando. La mia intenzione era quella di dimostrare che non c'è nulla di sbagliato in ciò che sta facendo e ho imparato a programmare usando anche carta e penna.
Daniel Hollinrake,

-1

Il mio codice è molto meglio organizzato quando scarabocchio appunti e approcci su un blocco note, controllo libri, controllo il web e ci penso. Sono anche molto più una persona visiva, quindi disegnare immagini con strutture dati è molto utile. Non scrivo ogni riga, ma scrivo ciò che considero frammenti "importanti" o funzionalità chiave. Per progetti più grandi accendo Visio. Non sono sicuro del motivo per cui qualcuno vorrebbe saltare direttamente su una tastiera a meno che non siano molto più efficienti o pagati a ore.


-1

Fai ciò che funziona per te. Non scriverei codice su carta. Scrivo pseudocodice e disegno diagrammi di flusso su carta, ma scrivere l'intero codice sembra una perdita di tempo.


-2

Sto anche affrontando lo stesso problema al mio primo giorno di apprendimento delle competenze tecniche.

Ma questa pratica di tipo non dovrebbe dare il 100% di successo perché se stiamo scrivendo codice su carta non c'è alcuna possibilità di correggere errori, c'è possibilità di risolvere errori ed eccezioni durante il lavoro di carta.

Quindi il lavoro di ufficio non fornisce alcuna navigazione per risolvere i problemi e possiamo ottenere la velocità di digitazione come bonus grazie alla pratica del sistema.

Sto anche facendo un lavoro di ufficio ma quando prima di implementare la mia funzionalità faccio solo una stima approssimativa dopo questo inizierò la mia implementazione sul sistema.

Prova a dedicare più tempo alla pratica del sistema. Ciò darà il 100% di confidenza e risultati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.