I neofiti dovrebbero utilizzare il completamento automatico IDE (Intellisense)? [chiuso]

35

Spesso lo incontro quando sto dando una mano a qualcuno che è nuovo alla programmazione e l'apprendimento per la prima volta. Sto parlando di neofiti davvero nuovi, ancora imparando a conoscere OOness, costruendo oggetti, chiamate di metodi e cose del genere. Di solito hanno la tastiera e sto solo offrendo una guida.

Da una parte, la funzione di completamento automatico degli IDE aiuta a dare loro il feedback sul fatto che stanno facendo le cose nel modo giusto e che in poco tempo gli piace e si affidano ad essa.

D'altra parte, temo che la prima dipendenza dal completamento automatico dell'IDE li farebbe non capire i concetti o non essere in grado di funzionare se un giorno si trovano solo con un semplice editor.

Qualcuno con più esperienza in questo senso può condividere la sua opinione? Quale è meglio per un principiante, completamento automatico o digitazione manuale?

Aggiorna

Grazie per l'input a tutti!

Molte risposte sembrano concentrarsi sull'uso principale del completamento automatico, come il completamento dei metodi, la ricerca di metodi e la documentazione, ecc. Ma oggigiorno gli IDE sono molto più simili.

  • Durante la creazione di un oggetto di tipo List, un IDE si autocompleta automaticamente alla nuova ArrayList sul lato destro. Potrebbe non essere immediatamente chiaro a un principiante perché non può essere una nuova lista, ma hey funziona, così vanno avanti.
  • Parametri del metodo di riempimento basati su variabili locali nel contesto.
  • Esecuzione di cast di oggetti
  • Aggiunta automatica di istruzioni "import" o "using"

e molto altro. Questi sono i tipi di cose che intendo. Ricorda che sto parlando di persone che stanno facendo la programmazione 101, in realtà solo all'inizio. Ho visto l'IDE fare queste cose di cui non hanno idea, ma si limitano a continuare.

Si potrebbe obiettare che li aiuta a concentrarsi sul flusso del programma e ad afferrare le cose prima di approfondire e comprendere le sfumature della lingua, ma non ne sono sicuro.

    
posta codinguser 26.01.2011 - 15:54
fonte

16 risposte

10

Penso che l'uso dell'IDE contribuisca al processo di apprendimento. Metodi, proprietà, parametri, sovraccarichi e simili sono rilevabili. Con le librerie enormemente gigantesche, Intellisense aiuta a gocciolare la conoscenza del JIT. Nell'attuale ambiente di programmazione, è impossibile imparare tutto in anticipo e l'apprendimento JIT è spesso l'unico modo pratico per diventare rapidamente produttivi.

Capisco che l'utilizzo di un IDE può essere una stampella se lo usi ciecamente, ma penso che i benefici superino di gran lunga i negativi.

L'uso dei modelli senza capire cosa è stato pre-costruito per te, d'altra parte, è più un problema. Penso che quelli possano essere usati come uno strumento di apprendimento se lo sviluppatore si prende il tempo di leggere il codice del codice. Ma la maggior parte delle persone non si preoccupa. Potrebbe essere un ottimo strumento di apprendimento, però.

    
risposta data 26.01.2011 - 14:39
fonte
74

Capire i concetti e memorizzare decine di centinaia di classi e metodi di librerie stupide sono due cose completamente diverse. L'Intellisense aiuta a liberare completamente dalla tua mente tutta quella conoscenza inutile, e prima lo fai, meglio è. Lascia più spazio per i concetti utili, non sprecare le risorse limitate sulle API.

Per rispondere a una parte aggiornata di una domanda: pochi dettagli di sintassi, layout di file, compilazione e invocazione di linker sono anche poco importanti rispetto ai concetti di programmazione generici. Una volta capito, un novizio-non-più può approfondire la comprensione di come funziona veramente la roba di basso livello. È meglio farlo quando conosci già le basi, altrimenti è probabile che raccoglierai una serie di pericolose superstizioni magiche.

Ad esempio, DrScheme IDE ha una grande esperienza nell'insegnamento della programmazione, e il suo successo è principalmente dovuto alla sua capacità di aiutare a concentrarsi su ciò che è veramente importante.

    
risposta data 26.01.2011 - 16:17
fonte
16

L'utilizzo del completamento automatico non è affatto male.

È semplicemente per velocità, e per me sarebbe un segno di qualcuno che inizia a prendere confidenza con l'IDE e lo usa bene.

Non capisco come NON utilizzarlo possa aiutarli ad imparare OO ad esempio.

    
risposta data 26.01.2011 - 13:11
fonte
13

Avendo insegnato e tutorato gli studenti che sono nuovi alla programmazione, trovo che l'autocomplete / intellisense a volte causa più danni che benefici. Sì, possono scrivere un programma usando questo. Sì, compila e corre e potrebbe anche fare la cosa che abbiamo chiesto loro di fare. Ma loro non capiscono cosa stanno facendo.

Quando non capiscono cosa sta succedendo, diventa meno programmazione e più hacking una soluzione insieme per ottenere i voti. Ho scoperto che è successo molto con gli studenti, dal momento che ciò che chiedevamo loro di fare è diventato più difficile, hanno solo hackerato fino a quando non ha funzionato. Questo è sempre diventato chiaro quando è arrivato il periodo intermedio e agli studenti è stato chiesto di scrivere semplici metodi a mano ... non potevano.

Sì autocomplete / intellisense ci aiuta (sviluppatori professionisti) molto b / c ci accelera. Non dobbiamo memorizzare tutti i diversi metodi e liste di parametri, ma allo stesso tempo possiamo anche azzardare un'ipotesi sui parametri che un metodo sta per prendere in b / c, abbiamo l'esperienza con la programmazione da conoscere.

I neofiti no. Aspetteranno il loro IDE per tirare fuori un elenco di metodi, scorreranno lungo quella lista finché non troveranno uno che forse è ciò di cui hanno bisogno, guarderanno i parametri di cui ha bisogno e vedranno se li hanno in consegna. ..e alla fine avranno hackerato qualcosa insieme da poter consegnare.

E alla fine del corso quando hanno ottenuto il loro pass, si sarebbero allontanati dalla loro classe di programmazione con una vittoria superficiale, molti di loro non avrebbero mai più preso un'altra classe CS b / c non capivano nulla di ciò che facevano o perché lo hanno fatto

    
risposta data 26.01.2011 - 15:28
fonte
9

Il problema con gli IDE e gli ambienti di sviluppo in generale non sono tanto le cose come il completamento automatico come l'uso di soluzioni basate su modelli (file | nuovo | progetto) dove molte cose "interessanti" sono già state fatte per te e sono, a variazioni gradi, nascosti.

Per qualcuno che, a grandi linee, capisce cosa sta succedendo sotto il cofano questo è utile - ma per qualcuno che impara ciò di cui hanno bisogno è piuttosto meno.

C'è anche la questione del tempo impiegato per attivare un IDE pesante ...

Penso quindi che usare qualcosa di più leggero ed essere in grado di eseguire applicazioni in cui hai scritto tu stesso ogni riga di codice ha un merito considerevole - specialmente se usare un editor di testo e un compilatore dimostra il punto importante che non si è " Ho bisogno di un IDE ecc per scrivere software ma che non significhi che voglio usare un editor di testo a lungo e che presenta sfide in termini di debug - vuoi essere in grado di fare breakpoint e vuoi essere in grado di eseguire un singolo passaggio attraverso il codice, in quanto ciò renderà più facile capire cosa sta succedendo.

Ovviamente possiamo ulteriormente confondere il problema considerando cose come Python dove hai una linea di comando "live" ...

Buona domanda, nessuna singola buona risposta - eccetto il fatto che vuoi far progredire l'apprendimento e iniziare con un editor di testo e un compilatore (o un interprete della riga di comando) ti permetterà di concentrarti sulle basi della sintassi e della logica prima di te progredire verso cose più complesse che saranno più facili da fare con un ambiente di sviluppo più potente.

    
risposta data 26.01.2011 - 13:58
fonte
4

Imparare nel modo più duro di solito rimane con te.

Come novellino, per favore NON usare IDE. Usa la riga di comando, impara dai tuoi errori. Questo ti aiuterà anche a capire più da vicino le opzioni del compilatore e del linker.

Quindi quando usi IDE? Quando si progetta qualcosa di enorme o si lavora su un'enorme base di codici con un sacco di classi, metodi e variabili.

    
risposta data 26.01.2011 - 14:00
fonte
4

Sarei il primo a dire che gli IDE sono un vantaggio per la produttività, anche se spesso mi lamento delle loro stranezze. Tuttavia, ho imparato BASIC, C, C ++, Java, Python, Perl, PHP e diverse altre lingue senza altro che un editor di evidenziazione del testo e il compilatore / interprete per la lingua. Ho davvero imparato Java in Blocco note!

Imparare un propulsore IDE "magico" - l'idea che "funziona, non importa come". L'astrazione è buona; la magia è cattiva Un programmatore dovrebbe sapere o essere in grado di scoprire tutto ciò che accade in un progetto. Un buon IDE è progettato per prendersi cura del piano di cottura, non controllando il progetto. Utilizzato correttamente è un ottimo strumento. Ma quale artigiano inizia usando un router CNC?

Penso che il modo in cui ho imparato (dover scrivere tutto e conoscere bene il compilatore per costruire un progetto) mi abbia aiutato in modo incommensurabile quando finalmente ho iniziato a utilizzare gli IDE. Ad esempio, un progetto Java non è una piccola cartella nel progetto Eclipse, ma una raccolta di classi in una struttura del pacchetto con alcuni file XML per i percorsi, la configurazione e la distribuzione. Non vorrei creare una grande applicazione aziendale senza IDE, ma posso costruirne di piccole. Questo rende più facile capire la struttura di quelli grandi, e quando voglio un comportamento specifico nella build, ad esempio, so come funziona javac, così posso modificare l'effettiva richiesta di build piuttosto che cercare di trovare quella combinazione magica che non funziona Esistono nella configurazione di build. Credo anche di avere una comprensione più profonda dei messaggi di errore e di come trovarli e correggerli. Gli IDE promuovono la sensazione che, dal momento che non ci sono segni di sottolineatura rossi, il codice sia corretto.

Non insegnerei a usare un IDE. Penso che i progetti iniziali siano abbastanza piccoli da rendere discutibili gli argomenti per la gestione della complessità. Ad esempio, se stai insegnando Java, puoi inserire tutte le tue classi nella stessa cartella e javac *.java . Non hai bisogno di un IDE per questo! Ciò significa mantenere piccoli i progetti, poco più che la prova dei concetti. Riduci al minimo il sovraccarico e concentrati sull'insegnamento del concetto di cui gli studenti hanno bisogno. I progetti più grandi in cui un IDE sarebbe utile appartengono a classi SE più avanzate oa progetti dedicati.

Per quanto riguarda l'aiuto nella ricerca di classi e ricerche API, ancora una volta, credo che questo sia discutibile se i progetti vengono mantenuti piccoli. Ancora in Java, javadoc è molto facile da leggere. Nessuno può tenere l'intera API in testa comunque, e sarà un momento in cui sarà necessario ricercare un'API senza il beneficio di un IDE. Come, in altre lingue, o se si tratta di servizi remoti in un server in cui non è possibile aprire l'IDE. Insegna come trovare la documentazione, non "premere". " e puoi vedere quali sono i metodi di un oggetto. "

Qualsiasi programmatore può imparare un IDE, ma conoscere un IDE non ti rende un buon programmatore. Black humor a parte, "magic" non è mai una buona parola da usare per un programmatore.

    
risposta data 26.01.2011 - 15:37
fonte
4

Forse un novizio dovrebbe semplicemente lavorare prima su problemi più semplici. E no, quei problemi non dovrebbero richiedere o incoraggiare l'uso di un IDE per completare l'attività. C'è ancora molto da guadagnare a lungo termine comprendendo i concetti di base. Gli strumenti dovrebbero venire dopo.

Nessun artigiano della lavorazione del legno salterà direttamente sull'uso di una pialla a superficie elevata senza comprendere le complessità sia del tipo di legno che del piano della mano.

(Nota: il completamento automatico e l'intellisense sono due cose drasticamente diverse).

Intellisense, di per sé, non è male. È solo brutto quando viene usata una stampella per indovinare la funzionalità senza leggere o comprendere la documentazione o l'implementazione sottostante.

Punto laterale: se la lingua richiede un codice IDE per te, probabilmente il linguaggio è al livello di astrazione sbagliato per i problemi che stai cercando di risolvere.

    
risposta data 26.01.2011 - 16:06
fonte
3

Quando cresciamo da bambino, non ci viene detto che dobbiamo capire le intricate regole della lingua inglese prima di poter parlare. Non ci viene detto che dobbiamo comprendere appieno l'uso corretto delle preposizioni, delle congiunzioni e di evitare frammenti di frasi. Impariamo facendo. Impariamo attraverso il successo e il fallimento.

Un IDE con completamento automatico aiuta il nuovo programmatore a prendere confidenza facilitando la creazione di programmi, pur non lottando con il ricordo di ogni miriade di funzioni di una vasta moltitudine di librerie.

Se si dovesse davvero estrapolare la vista che il completamento automatico danneggi il nuovo programmatore perché lo rende troppo facile per loro, allora si potrebbe obiettare che i libri di riferimento non dovrebbero essere usati per la programmazione mentre , perché i concetti all'interno dovrebbero essere prima affidati alla memoria, in quanto non averli memorizzati li rallenta e non consente loro di comprendere appieno i concetti per primi.

Il completamento automatico è uno strumento, viene utilizzato per rendere il programmatore più produttivo. Proprio come con l'apprendimento di una lingua per la prima volta, dopo aver acquisito sicurezza e un livello di successo con ciò che stiamo imparando, lavoriamo per migliorare le nostre conoscenze.

    
risposta data 26.01.2011 - 17:21
fonte
2

All'inizio, è abbastanza difficile costruire qualcosa che funzioni, quindi tutto ciò che aiuta il marchio Noobie, meglio è. Un nuovo programmatore avrà bisogno di qualcuno più anziano per convincerli a decidere se gli elenchi rilegati degli array o le liste collegate saranno la soluzione migliore per il problema in questione. Ciascuno ha i suoi punti di forza e di debolezza.

Indipendentemente dal fatto che il principiante abbia un IDE o che stia navigando online con i documenti API, non ci sarà alcuna reale differenza tra il codice che creano. Mentre affrontare il dolore della scrittura degli errori di sintassi può essere un'esperienza di apprendimento, c'è molto da imparare a preoccuparsi di ciò all'inizio.

Non impari a camminare sul filo del rasoio andando direttamente al filo dell'alta tensione senza rete. Si inizia camminando su una corda che è a pochi centimetri da terra. Mi azzarderei a dire che molti di noi lavorano con un IDE e una sorta di script di compilazione (lo script di build di Visual Studio è creato dall'IDE ma è lì). Molti di noi non costruiscono le nostre classi a mano con un editor di testo, quindi invocano il compilatore a mano. Perché dovremmo imporlo a un principiante che ha molto più da imparare?

    
risposta data 26.01.2011 - 14:16
fonte
2

Non vedo alcuna necessità di soffrire il dolore degli strumenti precedenti, anche quando uno sviluppatore sta imparando. Credo che il tempo extra e gli sforzi necessari per scrivere il codice senza gli strumenti sarebbero meglio spesi nell'apprendimento di come scrivere test di unità e debug. Una volta che un utente sa come testare il proprio codice ed eseguirlo durante la sua esecuzione, imparerà molto su ciò che effettivamente sta facendo.

Inoltre, non è come usare un IDE significa che il codice si scrive da solo. Uno sviluppatore inesperto o principiante sta per scrivere codice che non funziona indipendentemente dal fatto che utilizzi un IDE o meno.

Ho appena visto l'IDE come un altro livello di astrazione durante la codifica. Se sto scrivendo Java, generalmente non ho bisogno di capire come funziona il bytecode che genera. Se un nuovo programmatore utilizza le librerie Java, non è necessario conoscere il pacchetto in cui si trovano se l'IDE può aggiungerlo automaticamente per loro. In entrambi i casi, se un bug o un problema al livello più basso può sorgere (ad esempio un conflitto di nome classe) che causa un errore, allora è tempo che lo sviluppatore lo guardi manualmente.

    
risposta data 26.01.2011 - 16:09
fonte
0

Molte altre buone risposte quindi non considerano questa una risposta completa, ma è una buona cosa per i neofiti e gli utenti esperti di vedere un quadro completo di quali funzioni hanno a loro disposizione.

In Delphi posso premere ctrl-j e vedrò una lista di tutte le possibili cose che potrei mai sintatticamente aspettarmi di lavorare.

Non sono necessariamente d'accordo, ma ho letto argomenti in base ai quali i programmatori non dovrebbero nemmeno guardare ai membri della classe privata degli oggetti che usano e in questo modo, il completamento automatico fornisce a ogni utente un riferimento API istantaneo.

Gli IDE più recenti consentono agli utenti e agli sviluppatori di linguaggi di mettere metadati nel loro intellisenso, il che migliora ulteriormente la capacità di leggere e capire cosa fanno le funzioni, senza leggere la fonte (che è qualcosa che non dovrebbero comunque fare).

Forse è meglio che i neofiti leggano e comprendano tutto ciò che implementano. Ma forse sarebbe una domanda migliore se ai neofiti dovrebbe essere permesso di includere o importare qualunque spazio dei nomi o unità che desiderano senza documentare il motivo per cui lo stanno includendo.

    
risposta data 26.01.2011 - 15:07
fonte
0

Nella mia esperienza, l'utilizzo di un IDE per apprendere le basi di OO è ottimo perché nasconde una parte della complessità della scrittura effettiva del codice, consentendo al nuovo sviluppatore di concentrarsi sulla logica del programma. Tuttavia, subito dopo aver imparato a programmare e seguendo i principi di base di OO, sono stato costretto a comprendere con maggiore precisione quali parti dovevano interagire tra loro nei file di origine (senza dimenticare le istruzioni import, creare istanze delle classi corrette, ecc.) Da un corso di programmazione dove dovevamo usare solo terminali macchine Unix.

Questo è possibile a scuola perché qualcuno ha l '"autorità" per costringerti a usare gli strumenti lo-fi. Sarebbe molto più difficile da ottenere in un ambiente aziendale o aziendale.

    
risposta data 26.01.2011 - 17:00
fonte
0

Ho due pensieri su questo. Il primo è che per imparare veramente qualcosa credo che devi sapere cosa sta realmente accadendo. E con quanto è stato ottenuto da IntelliSense, può nasconderne un po 'a un nuovo sviluppatore. Ad esempio, ho frequentato un corso di ingegneria del web al college, dove abbiamo effettivamente creato i nostri framework web per costruire le nostre app finali in aggiunta. Sono uscito da quella classe con quella capacità di adattarsi a quasi tutti i framework web perché ho avuto la comprensione di ciò che era al di sotto di tutto per cominciare. L'utilizzo di un IDE non è del tutto a quel livello ma, il punto è ancora lì, credo.

Tuttavia, l'utilizzo di un IDE può anche fare cose come l'apertura di API ai nuovi sviluppatori. Quando ho iniziato seriamente la codifica, l'IDE che ho usato mi aiuta enormemente perché farei cose come digitare un oggetto, usare il completamento automatico per vedere quali metodi aveva e poi ricercarli usando i documenti disponibili. Tutto ciò è stato fatto all'interno dell'IDE ed è stato un ottimo strumento di apprendimento.

Quindi, sì, credo che sia giusto usarne uno a patto che si impieghi anche il tempo per capire cosa sta succedendo. Solo l'uso di un cast di oggetti senza capire perché è necessario farlo è davvero pessimo, ma, se un nuovo sviluppatore vede che è possibile utilizzare un cast di oggetti e poi guarda perché non vedo nulla di sbagliato.

    
risposta data 26.01.2011 - 17:06
fonte
0

L'apprendimento richiede pratica. La programmazione può essere un compito molto frustrante quando non hai idea di cosa puoi fare e di come funzionano le cose.

Non è pratico, ad esempio, leggere molti libri sui principi di programmazione senza scrivere una singola riga di codice; non si impara qualcosa in questo modo.

Intellisense è molto utile per dare ai nuovi programmatori l'aiuto di cui hanno bisogno per continuare a programmare, continuare a esercitarsi e quindi a imparare.

Come già detto, l'apprendimento di API specifiche non equivale all'apprendimento dei principi di programmazione. Quello che accadrà senza dubbio è che i nuovi programmatori commettano errori (indipendentemente da Intellisense), e come scelgono di correggere quegli errori è ciò che li porterà a diventare dei buoni programmatori o dei poveri.

Se stai cercando di insegnare a qualcuno come programmare, farò in modo che utilizzino Intellisense e giochino finché non si bloccheranno. Ecco quando proverei a costruire una fondazione insegnando loro il motivo per cui sono rimasti bloccati.

    
risposta data 26.01.2011 - 18:22
fonte
0

IMO, gli IDE ti renderanno più produttivo. Ma per i principianti non è generalmente una buona idea iniziare a programmare con IDE. Gli editor di testo come Notepad ++, Blocco note, ecc. Sarebbero sufficienti.

Inoltre, generalmente non è considerata una buona idea iniziare a imparare la programmazione con un linguaggio di alto livello. Ti suggerirei di iniziare con il linguaggio assembly. Questo ti insegnerà le basi e la pazienza.

    
risposta data 26.01.2011 - 19:25
fonte

Leggi altre domande sui tag