È sbagliato o cattivo usare il completamento automatico? [duplicare]

27

Ho un amico a scuola che ha scritto un programma in VB.net nel blocco note, lo ha portato a casa correggendo gli eventuali errori che sono emersi e quindi lo ha compilato. Ha usato un libro di testo per comprendere i metodi e le proprietà relativamente di base di cui avrebbe avuto bisogno (niente di complicato come i socket di rete, ecc.) E poi l'ha scritto senza guardare troppo in alto.

Questo mi fa chiedere se non è corrucciato da usare o fare affidamento sul completamento automatico? In Objective-c i nomi dei metodi sono abbastanza descrittivi, e per lo più so cosa voglio fare e ora approssimativamente il nome del metodo che voglio usare, anche se non necessariamente lettera per lettera.

Potrei, se volessi usare la Documentazione o le intestazioni per trovare i nomi dei metodi, e lo faccio a volte. Ma naturalmente questo è più lento.

Quindi dovrei concentrarmi maggiormente sull'apprendimento di parti della lingua, piuttosto che sulla programmazione per un po ', o è giusto usare molto il completamento automatico?

Inoltre, come seconda sottomissione, è meglio conoscere una lingua senza che sia necessaria una grande quantità di completamento automatico. oppure affidarsi maggiormente all'autompletezza e essere in grado di utilizzare altri linguaggi (anche se non in modo così efficiente e semplice) una volta compresa la sintassi.

    
posta Jonathan. 15.10.2011 - 19:15
fonte

15 risposte

36

Gli strumenti ci sono negli IDE per un motivo. Come Sean ha fatto notare i linguaggi (specialmente quelli .NET) sono dotati di ampie librerie di classi che non puoi sperare di ricordare (nonostante ciò che gli intervistatori vorrebbero che tu credessi). Ti aspetteresti che un word processor arrivi senza un correttore ortografico?

Con il completamento automatico sei più produttivo in quanto puoi trovare l'elenco dei metodi / proprietà / eventi disponibili ecc proprio di fronte a te . Altrimenti dovresti o ricordare (che abbiamo già stabilito è difficile) o andare a cercarlo. Entrambe richiedono tempo, rallentando così.

Devi ancora sapere quale dei metodi / proprietà / eventi disponibili è quello giusto da usare nelle circostanze - nessun IDE può (ancora) scrivere il codice per te - è lì che la tua abilità come un programmatore arriva.

    
risposta data 15.10.2011 - 19:34
fonte
12

Non penso che sia malvisto. Oggigiorno la maggior parte delle lingue ha una grande libreria di classi espansive (o due!) E il commit del nome esatto, a volte del case, non è sempre necessario. Inoltre, sovraccarichi multipli su un metodo lo rendono ancora più complicato.

Alla fine della giornata devi capire cosa stai chiamando / facendo. Il completamento automatico non sarà d'aiuto qui.!

    
risposta data 15.10.2011 - 19:22
fonte
10

Alcuni anni fa ho dovuto affidare un programmatore al mio team perché insisteva nell'usare un editor di testo piuttosto che l'IDE .NET. Per essere onesti, la vera ragione era che era più lento a portare a termine i suoi compiti e che il suo codice era di qualità inferiore e causava problemi di integrazione. È possibile che qualche programmatore-savant abbia fatto un lavoro migliore con un semplice editor di testo, ma la maggior parte di noi gente normale ha bisogno di aiuto come il completamento automatico e il controllo ortografico e grammaticale.

Come mi piace dire, non abbaiare quando puoi assumere un cane per farlo per te.

    
risposta data 15.10.2011 - 20:18
fonte
8

È sbagliato se ne hai bisogno per codificare. Va benissimo se ti aiuta a essere più produttivo.

    
risposta data 15.10.2011 - 19:20
fonte
8

Sono abbastanza vecchio da ricordare quando il completamento automatico è stato inserito nel mio IDE.

Mi ha reso esplorare molto più codice sorgente di quanto non avessi mai fatto prima. Per questo motivo, credo fermamente che mi abbia reso un programmatore migliore.

    
risposta data 15.10.2011 - 23:27
fonte
4

La scuola è diversa dal mondo reale. Lo userei solo a scuola se fosse disponibile durante gli esami. Nel mondo reale, non c'è davvero alcuna ragione per non farlo. È come affidarsi al GPS quando ti sposti in una nuova città. Ti ci vuole più tempo per imparare come muoverti senza, ma lo fai ancora, e nel frattempo ti perdi molto meno.

    
risposta data 15.10.2011 - 20:11
fonte
4

Assolutamente non sarei senza il fantastico completamento automatico di Eclipse.

  • Ti aiuta a navigare attorno a API oscure (è .put() , .add() o .addElement() per aggiungere un elemento a ArrayList ? Qual è l'ordine dei parametri a System.arrayCopy() di nuovo? vai alla pagina della documentazione appropriata, o premi Ctrl-Spazio per visualizzare un rapido elenco di tutti i metodi disponibili).
  • Riduce la quantità di digitazione che devi fare ( System.out.println() vs Sysout + Ctrl-Spazio)
  • Ti consente di sapere immediatamente se hai commesso un errore. Se il completamento automatico smette di funzionare, è un segno sicuro che hai sbagliato qualcosa da qualche parte.

Tutte queste cose si combinano per creare un ambiente molto produttivo per l'ingegneria del software.

    
risposta data 15.10.2011 - 22:23
fonte
2

Ho visto persone che sono in grado di eseguire il codice solo dopo il completamento automatico e il tentativo e l'errore. Questo è male perché non capiscono quello che fanno, non possono risolvere nulla oltre i problemi del giocattolo.

In tutti gli altri casi, tutto ciò che ti aiuta a essere più produttivo è una chiara vittoria.

    
risposta data 15.10.2011 - 21:29
fonte
2

Offrire quella che sembra una visione contraria:

Ricordando : una libreria linguistica sufficientemente "casuale" che è necessario il completamento automatico per aiutare ricordare quale metodo scegliere (es. size o length ?), è rotto. Sarebbe meglio ripararlo, piuttosto che bandirlo. Se non riesci a risolverlo, avvolgilo. (Se non sai cosa significa avvolgere, impara.)

Digitando : conosci già esattamente il nome che desideri e affermi che stai utilizzando il completamento automatico puramente per "salvare le battiture"? Ciò sembra avere senso, anche se semplicemente digitando il nome è più veloce del raggiungere i tasti cursore o le divinità ti aiutano a sfilare il mouse. (Se il nome è veramente quello , vedi sopra: risolvilo o esegui il wrap.)

I programmatori che non riescono a digitare velocemente sono come bambini che vogliono essere giocatori NBA ma non possono effettuare tiri liberi. È un'abilità di base che devi avere. Può essere migliorato se ti interessi e non sei troppo pigro per fare pratica.

Ovviamente ci sono molti programmatori mediocri e giocatori di palla. Essere mediocre è "sbagliato", come dice la domanda? Forse no. Ma la mia risposta è rivolta alle persone che aspirano ad essere più che "non sbagliare", cioè a fare più che non-succhiare. Quale penso fosse lo spirito della domanda.

    
risposta data 16.10.2011 - 01:19
fonte
1

Ricorda che un linguaggio e una struttura sono due cose diverse. Nessuna delle lingue che posso pensare ha così tante forme sintattiche che un programmatore con un po 'di esperienza dovrebbe avere difficoltà a ricordarle.

I moderni quadri applicativi, d'altra parte, tendono ad avere dozzine o centinaia di classi e migliaia di metodi. Potresti essere in grado di memorizzare tutto ciò se lo desideri, ma sarebbe molto simile a fare The Conoscenza meno l'esame di licenza.

Non utilizzare il completamento automatico del tuo IDE come una stampella - dovresti lavorare per una solida comprensione delle classi disponibili e dei metodi che offrono. Se devi mettere in pausa ogni volta che digiti NS o UI in Xcode e trascorri del tempo guardando l'elenco di opzioni, dovresti passare un po 'di tempo con i documenti. Ma non c'è niente di sbagliato nel lasciare che il compilatore completi i nomi per te se sai in pratica cosa stai facendo.

    
risposta data 15.10.2011 - 21:11
fonte
1

Lo vedo accigliato molto da gente che codifica in lingue o lingue dinamiche senza un IDE sofisticato disponibile. I programmatori Java o .NET lo adorano. Anche per le API con cui ho familiarità, risparmia un sacco di tempo quindi non devo ricordare gli elenchi di ortografia o di argomenti per migliaia di metodi o mantenere i javadoc aperti tutto il giorno. Recentemente ho eseguito alcuni Python con Eclipse + PyDev ed è utile, ma limitato. I linguaggi dinamici in generale non sono adatti per il completamento automatico poiché i metodi potrebbero non essere noti in fase di compilazione e gli elenchi degli argomenti potrebbero essere variabili.

    
risposta data 15.10.2011 - 21:57
fonte
1

Il completamento automatico è buono, se sai cosa stai facendo.

Punti a favore:

  1. Non è necessario memorizzare tutte le varie librerie.
  2. Facile vedere cosa è disponibile (lo uso molto in Python dopo aver importato qualcosa, per ricordare a me stesso cosa c'è nel modulo, se sto cercando qualcosa e non so come usarlo)

Punti contro:

  1. Non hai bisogno di memorizzare nulla, quindi è meno probabile che tenti di tenerlo in mente.
  2. In alcuni casi, il completamento automatico può rallentare. Fuori mano, Eclipse e Java vengono in mente - se so cosa sto facendo, i popup di autocomplete mi distraggono e interrompono il flusso.

Punti neutrali da tenere a mente:

  1. Se usi spesso una funzione di libreria, la memorizzerai solo perché la vedi così spesso. Questo può aiutarti a memorizzare l'ortografia corretta perché viene attivata automaticamente o può ostacolare la memorizzazione perché ti stai affidando al completamento automatico per farlo bene.
  2. Se non lo usi abbastanza spesso per memorizzarlo da solo, c'è probabilmente un motivo. In tal caso, è meglio consultare la documentazione per assicurarti di aver compreso la funzione e non limitarti a lanciarla perché è stata trovata automaticamente.
risposta data 15.10.2011 - 23:28
fonte
0

Un metodo per imparare una nuova lingua o un nuovo algoritmo è quello di ridigitare completamente l'esempio (i) da zero. Trovo che ridigitare un algoritmo (anche se l'esempio è cut-n-pasteable) focalizza la mia attenzione e mi fa interrogare ogni operatore, ogni chiamata di funzione. Il completamento automatico in questa circostanza distoglierebbe il mio apprendimento.

Per indirizzare la tua domanda direzione: dipende dalla circostanza. Se stai imparando, o vuoi solo evitare la programmazione Cargo Cult, evita il completamento automatico.

    
risposta data 15.10.2011 - 20:05
fonte
0

In questi giorni vorrei esprimere la domanda al contrario "è sbagliato codificare senza completare automaticamente?". Se stai usando una denominazione descrittiva, è molto probabile che tu abbia sbagliato l'ortografia di alcuni riferimenti. Un buon IDE suggerirà un ragionevole insieme di suggerimenti in qualsiasi momento.

Le cose che stiamo codificando sono diventate estremamente complesse, e sarebbe irragionevole aspettarsi che i programmatori conoscano tutti i componenti di cui hanno bisogno per fare il punto della loro testa e scrivere tutti i riferimenti senza errori. Il completamento automatico semplifica notevolmente l'attività e consente ai programmatori di concentrarsi sulle complessità del codice.

    
risposta data 16.10.2011 - 00:54
fonte
0

I computer sono bravi nell'accurata corrispondenza delle stringhe (specialmente nel caso delle tabelle hash) - gli umani no. I cervelli sono costruzioni associative che richiamano codice spesso usando in-combinazioni delle sue sotto-parole e dei loro sinonimi e non necessariamente nel ordine corretto. Ecco perché esistono gli IDE e perché c'è ancora spazio per miglioramenti in quest'area.

LLVM sta prendendo iniziative innovative (grazie ai soldi di Apple) in questa direzione attraverso la sua libreria di plugin IDE libclang . libclang supporta le correzioni ortografiche fuzzy degli indentificatori basate sulla Levenhstein (Modifica) Distanza .

    
risposta data 15.10.2011 - 23:22
fonte

Leggi altre domande sui tag