Con il find&replace di un IDE puoi fare cose del tipo cambiare il nome di una variabile senza toccare lo stesso nome fuori dallo scope che stai considerando. Puoi ugualmente fare il search con le regex.
Una buona guida (anche su Inforge se c'è) per compilare senza IDE dove posso trovala?
Se parli di C e C++, digita "man gcc" e "man g++" sul terminale.
Per altri linguaggi, riferisciti sempre alla pagina di manuale del compilatore, e eventualmente anche a Google.
Ci tengo a sottolineare che quanto detto da
@SpeedJack è molto discutibile.
Certamente, ho specificato all'inizio che può essere utile un IDE per migliorare la produttività. I pro di un IDE sono ovvi e innegabili, ma i contro non sono altrettanto ovvi, però comunque esistono, e ne ho fatto una lista. Poi imho credo che sia meglio non avere proprio a che fare con gli IDE, fanno troppo e nel modo in cui lo hanno pensato gli sviluppatori, meglio un editor di testo con eventualmente dei plugin che si possono caricare dinamicamente e scegliere accuratamente.
Gli IDE sono degli strumenti costruiti dai programmatori per i programmatori, il fatto che li usano anche i pivelli è un altro discorso.
Che siano fatti (inevitabilmente) da programmatori non li rendono migliori. Proprio per evitare di diventare pivelli IDE-dipendenti sostengo che chi deve imparare non deve usare IDE.
perché imparare a memoria gli argomenti da passare a un compilatore quando posso scrivere un software che mi automatizza questo processo?
Non ho detto che non bisogna automatizzare. In fondo i Makefile che fanno? automatizzano la compilazione. La differenza però tra un Makefile e un IDE è che il Makefile devi scriverlo tu, e quindi fa esattamente quello per cui lo hai progettato, mentre l'IDE ha solo dei parametri di default preimpostati, e lancia sempre solo il compilatore con quei parametri. Inoltre un Makefile è molto meno "blackbox" di un IDE: basta un "cat Makefile" per vedere esattamente cosa succede quando si da il comando "make", mentre un IDE tiene molto più nascosto cosa succede quando si clicca su "Compila".
Ma va bene anche utilizzare un IDE per compilare, ma bisogna sempre sapere cosa succede esattamente dietro le quinte quando si preme su "Compila" e bisogna sempre sapere come compilare senza IDE per quando ce ne sarà bisogno.
Perché devo scrivere il noioso codice pieno di coordinate per disegnare l'interfaccia grafica quando posso automatizzare anche questo?
Gli strumenti RAD hanno inevitabilmente dei limiti. Va bene usarli, ma bisogna anche qui sapere esattamente cosa fanno ed essere in grado di scrivere interfacce grafiche direttamente da codice: altrimenti se un giorno lo strumento RAD non basta per fare ciò che si vuole si finisce per progettare interfacce pessime.
nel momento in cui abbiamo davanti un sorgente spezzettato in tanti file, ognuno in una cartella diversa e in gran parte scritto da altre persone, un IDE diventa quasi indispensabile.
Non è assolutamente vero. Basta guardare i progetti open-source: fanno quasi tutti uso dei Makefile ed è pieno di sviluppatori che rifiutano l'uso di IDE e si affidano a editor semplici, con l'eventuale aggiunta di plugin. Un esempio è Linus: usa microemacs e lavora a progetti (Linux, git, subsurface, ecc.) decisamente grandi e spezzettati in tantissimi file. E come lui, tanti altri.
Perché devo fare avanti e indietro tra i files per vedere quali sono i metodi di una classe e i parametri di una funzione, quando qualcuno ha scritto un programma che ti apre un popup con tutte le informazioni che ti possono servire e magari ti reindirizza pure alla documentazione?
Non c'è comunque bisogno di un IDE: ci sono plugin per gli editor o si possono fare script per la shell in grado di farlo. Con la differenza che sono molto più personalizzabili di quello di un IDE. Poi è chiaramente una funzionalità che può tornare spesso utile, e che tutti gli IDE implementano, e bene: è uno strumento utile che non porta effetti collaterali. Ma un IDE è molto di più: è troppo.
Per quanto riguarda il programmatore novizio che sta imparando credo che in fondo anche uno strumento come questo è invece meglio evitarlo: se deve cercarsele manualmente le cose gli restano più impresse e impara di più. Uno strumento che quando digiti "printf" mostra i parametri che accetta e le loro descrizioni e la descrizione della funzione, spiega senz'altro molto meno che andarsi a vedere il codice e i commenti proprio dove la printf è implementata. E si impara di più. (ho fatto un esempio con "printf" ma mi riferisco a qualsiasi funzione scritta da chinque).
Chi impara molto bene è anche in grado di colmare quel dubbio (eg. che argomenti devo passare al compilatore) in poco tempo.
Se uno ha imparato molto bene, appunto, ha imparato. Vuol dire che ha usato e imparato a usare il compilatore da linea di comando. Se un programmatore novizio usa sempre e solo il tasto "Compila" finisce a non sapere nemmeno cos'è un compilatore. Ed ecco perché chi deve imparare non deve usare IDE.
È davvero così indispensabile ricordarsi ogni cavillo sintattico (eg. la definizione del main con i parametri nel C) quando il compito vero dovrebbe essere incentrato sulla semantica?
È quantomeno indispensabile sapere che il main accetta dei parametri e sapere perché li accetta e a cosa servono e come usarli. Chi impara usando IDE e senza mai aver a che fare con la linea di comando può finire anche a non sapere nemmeno che può avviare un programma da terminale passandogli dei parametri.
Ma gli IDE sono pensati per fare esattamente l'opposto, te lo fanno risparmiare il tempo. Per ogni secondo che perdi per un problema proprio dell'IDE, c'è un ora che risparmi. Se non è così allora devi semplicemente cambiare l'IDE perché quello che stai usando è troppo buggato.
Ovviamente: ho soltanto elencato una possibile problematica degli IDE. È più facile che abbia problemi un IDE pieno di componenti e molto complesso che un semplice editor di testo. Poi sicuramente l'IDE accellerà lo sviluppo - ma talvolta capita che l'IDE abbia dei problemi e bisogna accettare di conviverci. Un trade-off sicuramente vantaggioso comunque ma ne va tenuto conto.
Gli strumenti di versioning sono già pensati per risolvere questo tipo di problemi, pensa al .gitignore. Vanno in direzione di standardizzare la directory tree e ormai la maggior parte degli IDE automatizza anche l'uso di questi tools.
Ci sono IDE che inseriscono comandi per "se stessi" all'interno del codice (solitamente in commenti). Non si può usare .gitignore in questi casi (non si può dire a git di ignorare righe specifiche del codice). Questi commenti autogenerati, oltre a sporcare il codice e dar fastidio a chi non usa IDE, possono dar problemi a chi usa lo stesso IDE o IDE diversi che comunque valutano quei commenti.
Ok, è il programmatore a dover far attenzione affinché questa roba non finisca nel repository, ma è un lavoro in più per il programmatore, e una svista può sempre starci (però questa svista può causare problemi che fanno perdere talvolta anche molto tempo).
Se si lavora in team o a progetti open è ben non usare IDE e comunque al massimo strumenti poco invasivi sul codice e sul progetto: è importante aver ben chiaro e visibile cosa verrà caricato sul repository.
se il programmatore è "lo stupido" allora tutto diventa un aspetto negativo, ma se il programmatore è "il programmatore" allora è una feature molto utile.
Ancora: è perciò che un IDE deve tutt'al più utilizzarlo un programmatore già esperto, e non un novizio. Un novizio finisce per accettare i consigli sul codice senza considerare la possibilità che l'IDE non stia consigliando la soluzione ottimale e magari finisce pure per imparare da questi consigli e a ripetere sempre l'approccio consigliato dall'IDE.
Chi è esperto è valuta bene prima di accettare consigli, allora è un altro discorso.
Con il find&replace di un IDE puoi fare cose del tipo cambiare il nome di una variabile senza toccare lo stesso nome fuori dallo scope che stai considerando. Puoi ugualmente fare il search con le regex.
Chi ci dice che sotto il find e replace non ci sia proprio grep e sed?
Al massimo lo strumento dell'IDE può essere potente quanto grep e sed, non di più (grep e sed permettono già di per se praticamente qualsiasi cosa). Considerato poi che grep e sed sono strumento da linea di comando (e non a sola interfaccia grafica come lo strumento dell'IDE) permettono la combinazione con altri programmi e perciò sono, già per questo, inevitabilmente più flessibili dello strumento dell'IDE.
Chi ci dice che l'IDE non ti permetta di avere un mini terminale dal quale lanciare direttamente i comandi?
E a questo punto si esce fuori dall'IDE e si finisce appunto per usare il terminale. Non si sta usando l'IDE in questo caso.
E, se non fosse così, perché non possiamo aprire un terminale, fare i "lavori complessi" con grep, sed e tutto il resto, per poi tornare all'IDE
[...]
Alla fine è uno strumento di automazione e va visto come tale, puoi metterlo momentaneamente da parte se preferisci usare altro.
Certo che si può, e va benissimo: ma bisogna saperlo fare. Chi impara solo a usare l'IDE non saprà mai usare grep, sed e le altre utility. E inoltre, per poterle usare in modo veramente efficiente, bisogna tenersi allenati con esse. Usarli frequentemente o sempre al posto degli strumenti dell'IDE, mantiene allenati.
La negligenza dei programmatori non è da attribuire agli IDE. Se qualcuno è così in gamba da postare cose che non funzionano (per qualsiasi ragione), probabilmente non dovresti interessarti ad usare quella roba.
Questi programmatori così in gamba sono così in gamba spesso proprio perché hanno imparato fin dal principio a usare solo l'IDE. Non rilascerebbero programmi non funzionanti se avessere imparato a programmare fuori dall'IDE.
E questo vale anche nel momento in cui io vengo a metterti sotto le mani un ambiente Windows e addio a bash, coreutils, gcc, gdb e compagnia cantante. Molte di queste cose sono cross platform mi dirai, beh... lo sono anche molti IDE. Tu stesso stai consigliando di passare a Linux, in teoria il sistema operativo (così come l'IDE o text editor che sia) non fa il programmatore.
Yep. Io consiglio a qualsiasi sviluppatore di passare a Linux per diversi aspetti di design del sistema che evitano allo sviluppatore sbattimenti e gli semplificano il lavoro (come "everything is a file" e la predominanza del terminale sull'interfaccia grafica). Poi chiaramente un programmatore veramente completo dovrebbe essere in grado di sviluppare in qualsiasi OS e dovrebbe studiare su tutti (almeno principali). Ma per quanto le cose si fanno per conto proprio o si lavora in progetti open-source o progetti generici non legati a un OS specifico, lavorare da Linux imho aiuta molto lo sviluppatore. Resta il fatto che nel momento che c'è bisogno di usare un altro OS il programmatore deve essere in grado di lavorarci, ma per quando non ci sono esigenze particolari, avere come scelta di "default" Linux secondo me è un'ottima cosa.
Alcune considerazioni le ho fatte anche solo per dare un secondo punto di vista, giusto per far vedere anche l'altro lato della medaglia. A dire il vero io stesso utilizzo un text editor (per una serie di motivi che credo di aver spiegato in un altro thread), però sono consapevole di quali sono i benefici degli IDE ed è per questa ragione nella guida che ho linkato nel post precedente (e che consiglio a tutti di leggere) ho consigliato di partire direttamente da un IDE (uno buono però!). Se si deve imparare qualcosa, tanto vale imparare ciò che si usa nel mondo professionale.
Come ho già detto i vantaggi di un IDE sono innegabili e ovvi. Ma bisogno sempre tenere conto che niente è gratis e i vantaggi degli IDE sono un trade-off: ci sono degli aspetti negativi, che talvolta possono diventare anche pericolosi, in particolar modo per i più inesperti.
Sul consigliare a chi deve imparare di partire direttamente da un IDE invece sono totalmente in disaccordo: prima di tutto è necessario imparare a programmare, non imparare come funzionano le cose nel mondo professionale (che poi, anche nel mondo professionale volendo si può benissimo far a meno degli IDE). Usare un IDE è una cosa che, volendo, deve essere fatta solo dopo. Non quando ancora non si è imparato a programmare.
Per la tua guida: la lessi quando la postai e sì, consiglio anche io a chinque deve iniziare (e quindi all'OP) di leggerla.
Il fatto che alcuni processi siano automatizzati non va assolutamente visto come uno svantaggio, saranno anche automatizzati, ma non vuol dire che non vadano imparati.
È necessario però sapere bene cosa fanno e come. Chi ancora sta imparando non lo sa.
È altrettanto dannoso imparare a memoria memoria i comandi da passare al terminale per fare una qualsiasi cosa. Chi non sa cosa sta facendo, IDE o non IDE, al primo problema che incontra si ritrova bloccato.
Certamente: bisogna sapere sempre cosa si sta facendo. Ma l'IDE tende più a nascondere tutto ciò che sta sotto.
Non c'è niente che gli IDE fanno e che si può ottenere senza IDE. Alla fine, chinque (penso) proveniente da IDE che impara a lavorare senza, dopo un po' non sente minimamente la mancanza dell'IDE. Si può inoltre automatizzare anche al di fuori degli IDE, in modo molto più flessibile e senza alcun "effetto blackbox" che può risultare dannoso.
Per cui: sconsiglio fortemente a chi deve ancora imparare l'uso di IDE. Sconsiglio a questi anche l'uso di editor avanzati come vim che richiedono tanto per imparare (magari, a questi, ci si passa in futuro). Mentre consiglio editor più semplici come gedit. O se qualcuno non riesce a far a meno di qualche comodità ci sono alcuni editor come SublimeText e altri che possiedono molte feature, ma comunque non troppe come un IDE.
Poi, per chi invece è esperto, dovrebbe avere da sé la capacità di scegliere se usare un IDE o no. Ma credo che se ha imparato come deve, senza IDE, poi non sentirà alcuna necessità di alcun IDE. Inoltre anche per gli esperti che usano IDE, è bene che facciano attenzione e si tengano allenati anche su quelle cose che l'IDE automatizza.