Quali vantaggi ha Ubuntu su Windows come ambiente per la programmazione?

59

Perché scrivere un programma in file di testo o tramite il terminale è un'opzione migliore (come ho letto) rispetto all'utilizzo di IDE come Visual Studio su Windows? Le funzionalità fornite da un IDE esistono lì (ad es. Mostrando errori di compilazione) o si tratta di un processo manuale?

    
posta muhammad 17.10.2013 - 10:15

13 risposte

85

Questa sorta di ipotetica potrebbe fare meglio su Programmers.SE perché è probabile che sia piuttosto unilaterale qui. Detto questo, sono stato uno sviluppatore .NET per alcuni anni e sono arrivato a dipendere da Visual Studio. Fa molto per te e sì, mi piace particolarmente il debugger integrato ... Tuttavia, penso che ci siano alcune ragioni per cui le persone scelgono Linux:

  • Ubuntu è gratuito. Windows e VS possono essere estremamente costosi.

  • Ubuntu è gratuito . Windows e VS ti danno un controllo molto piccolo su come li usi.

  • Ubuntu è un ambiente di programmazione immediatamente fuori dagli schemi. Strumenti come Bash, grep , sed , awk . Windows è storicamente un grande dolore nella parte inferiore da cui scrivere script. I file batch sono orribili e persino con PowerShell, l'esperienza della riga di comando in Windows diventa insignificante rispetto a Bash e agli strumenti GNU. Puoi portarne un po 'su Windows ma non è la stessa esperienza.

  • Le configurazioni complicate sono facili da automatizzare e replicare con apt-get , strumenti come Puppet , Chef , Juju , Fabric e scripting semplice.

  • Alcune cose non hanno bisogno di IDE complicati. Sono uno sviluppatore Python in questi giorni e sono perfettamente soddisfatto dei suoi strumenti e debugger integrati. Io uso un editor di testo, la riga di comando e la trama ... E ho molto più controllo di quanto non lo fossi sotto .NET. Posso costruire, testare, eseguire il commit e distribuire le mie webapps con un singolo comando Fabric.

    Questo non vuol dire che non ci siano IDE monolitici. Eclipse e Netbeans. MonoDevelop. KDevelop4 e QT Creator. Hanno tutti i loro utenti che giurano su di loro.

Ubuntu è migliore per te ? Chissà. È un sistema molto capace e molto personalizzabile. Se gli dai un'opportunità e modifichi il tuo flusso di lavoro per permetterti di aiutarti, dovresti riuscire a farlo rimanere.

    
risposta data Oli 17.10.2013 - 10:42
37

Vorrei aggiungere un altro motivo importante; Ubuntu è ottimo per sperimentare nuove librerie, linguaggi, IDE e compilatori. Tutto è azzeccato.

Quindi hai sentito parlare di un linguaggio di fantasia chiamato Haskell :

sudo apt-get install ghc
nano hello.hs
<copy-paste hello world example>
ghc -o hello hello.hs
./hello
Hello World!

Oh, hai sentito un editor di fantasia per Haskell:

sudo apt-get install <fancy-editor-for-haskell>

Lo stesso con C / C ++ librerie, solo apt-get install e i binari e gli header vanno alle cartelle giuste, e puoi solo #include nei tuoi file sorgente senza nemmeno dover controllare dove sono mettiti in posizione!

In sostanza, non si tratta di quanto velocemente è possibile impostare il tuo ambiente di lavoro giorno per giorno. Si tratta anche di quanto estremamente veloce è possibile impostare un ambiente sperimentale. Credo che sia ciò che accelera l'esperienza di apprendimento sotto Linux.

    
risposta data enobayram 17.10.2013 - 14:42
20

Ecco un parere di uno sviluppatore di piattaforme principalmente Microsoft. Se non stai mirando all'ecosistema .NET, direi che la tua opzione migliore è Ubuntu. Avrai un tempo molto più facile per ottenere, configurare e usare strumenti per quasi tutte le altre piattaforme / linguaggi se sei su Ubuntu invece che su Windows.

Il valore della toolchain di Microsoft è che è ALTAMENTE integrato. Dall'IDE al controllo del codice sorgente, gestione dei progetti, build, distribuzione, database, infrastruttura cloud, nauseum . Microsoft rende MOLTO facile se stai andando a pieno ritmo con la loro piattaforma.

Come alcuni hanno già detto, deviare da Microsoft Way può essere un problema. Usando .NET per il tuo codice e Oracle per il tuo database ... d'oh sarà un dolore.

Vuoi creare un'applicazione Web .NET e distribuirla su Amazon Web Services ... non molto semplice.

Ma se resti all'interno dell'ecosistema Microsoft ... quel bambino canterà come un uccello beffardo per te. Nelle mani di uno sviluppatore di software competente, la piattaforma Microsoft è come PED per un atleta di talento. Non consentirà a un programmatore amatoriale di creare il prossimo Facebook. Ma darà un vantaggio a uno sviluppatore di talento che capisce come si integrano i pezzi.

L'argomento per il costo gratuito (come nella birra) di iniziare con Ubuntu è fuori dalla porta, ci sono un certo numero di programmi offerti da Microsoft che ti permettono di iniziare con i loro strumenti gratuitamente. Incluso Bizspark che offre alla tua azienda di avvio 3 anni di licenze (incluse le licenze di utilizzo di produzione dei loro strumenti). E la scintilla del sogno che dà gratis agli studenti.

Detto questo, se vuoi esplorare e imparare nuove lingue e piattaforme, troverai strumenti migliori per iniziare su Ubuntu e se stai cercando lavoro al di fuori dell'ecosistema Microsoft, avrai bisogno avere familiarità con Ubuntu.

    
risposta data Michael Brown 18.10.2013 - 00:29
15

Uso entrambi gli strumenti, gli IDE e gli editor di testo con C ommand- L ine I nterface (muggito indicato come CLI ), per scrivere programmi.

Ciò che Linux offre è una utile CLI a partire dall'installazione predefinita. Se non ne hai bisogno e comunque stai usando un IDE, allora non c'è più molta differenza (IMHO).

IDE

  • Gli IDE sono molto buoni quando si tratta di integrare molte funzionalità e presentarle in una GUI grafica.
  • Il lato negativo è che può sopraffare qualcuno di nuovo in questo. Ora avrai due cose da imparare: l'IDE e il linguaggio di programmazione.

Editor di testo e strumenti CLI

  • Gli editor di testo e gli strumenti CLI non richiedono molto tempo per imparare.
  • Se qualcosa non funziona, è facile vedere quale strumento non funziona come previsto.
  • È anche più facile cercare problemi con Google dato che tutto è basato sul testo.
  • La programmazione con editor di testo e strumenti CLI è più veloce e più reattiva, specialmente se confrontati con hardware precedente.
  • Puoi lavorare con loro anche su schermi a bassa risoluzione.
  • Ti consente di programmare e eseguire il debug con risorse minime su un server remoto.

Faccio spesso la mia prototipazione con strumenti basati su testo. Più tardi, quando ci sono più file da gestire, apprezzo gli strumenti di refactoring che un IDE mi sta offrendo.

    
risposta data MadMike 17.10.2013 - 10:32
12

Getterò la mia risposta sul ring (anche se credo che anche queste siano buone)

La risposta più semplice che puoi ottenere è che riguarda la filosofia.

Nel mondo Microsoft, è un po 'religioso - Hai gli dei sul monte. Redmond che deve fare una petizione se vuoi che qualcosa sia implementato. A volte ascoltano, altre volte i tuoi sacrifici e le tue suppliche cadranno nel vuoto. Forse erano fuori a caccia. Microsoft controlla l'intero ecosistema: possiede il sistema operativo, possiede l'IDE e li accoppia tutti in modi probabilmente non appropriati per parlare di una rete SE. Anche all'interno dei pezzi IDE sono strettamente accoppiati - potrebbe essere chiamato integrato ma penso che l'accoppiamento sia più accurato. Se si desidera modificare un po 'le cose, Gates vieta di modificare qualcosa in un modo che i progettisti di Windows o Visual Studio non consentivano espressamente. E poi lanciare tecnologie come IE, IIS, server Microsoft e MS SQL Server e Office ... e tutto è una bella famiglia felice. Ma se dovessi voler lasciare una parte della famiglia alle spalle? brivido

D'altra parte, hai Linux, che eredita dalla filosofia Unix che ogni pezzo dovrebbe essere responsabile della sua piccola sfera di responsabilità. Dovrebbe fare una cosa, e farlo bene. E preferibilmente, la comunicazione dovrebbe avvenire tramite stringhe di testo. Come altri hanno sottolineato, sed , awk , grep , ecc. Sono esempi perfetti di questo. Fanno la one cosa che sono progettati per fare e lo fanno molto bene. Se devi fare due cose, allora combini i due strumenti. Che è molto facile da fare.

Poiché sed non si aspetta nulla oltre l'input in arrivo sarà testo, ciò significa che qualsiasi che può produrre testo non deve reinventare la ruota. Possono semplicemente usare sed . E poiché sed produce testo, tutto ciò che può leggere testo può utilizzare l'output da sed . Il testo è molto universale (ci sono alcune eccezioni a questo) ed è molto facile combinare questi tipi di cose insieme.

Non solo è facile combinarli, ma è anche molto facile separarli - se decido che non è più necessario modificare un flusso, ma voglio filtrare i risultati, piuttosto che passare il mio testo a sed , posso passarlo a grep invece.

Questa è la filosofia fondamentale alla base dello sviluppo in un ambiente Linux, quindi anche se sali da lì, gli molti strumenti forniscono un'interfaccia simile. Ti permettono di scomporli in parti o di interfacciarli con la riga di comando o le porte o HTTP.

E anche se fosse non il caso, hai anche un software open source. La maggior parte (se non tutti) il software sulla piattaforma Linux è open source. Quindi se non ti piace come è scritto sei completamente, totalmente, assolutamente in grado di cambiare il software da solo. Questo è incredibilmente potente. Non puoi smembrare quell'IDE come preferisci? O apportare le modifiche e inviarle di nuovo a monte, o biforcare il progetto. Non sei sicuro del perché qualcosa si comporta come fa? Usa la fonte, Luke! Devi essere in grado automatizzare qualcosa attraverso la linea di comando? Attacca il progetto e attacca i cambiamenti. Vieni a scoprire un bug o un problema di sicurezza? Ehi, indovina un po '- puoi aggiustarlo tu stesso, non devi aspettare che SP3.432vb89234.startdate1eQ esca.

Puoi combinare gli strumenti che desideri e di cui hai bisogno. E se c'è qualcosa che ti ostacola, sei al 100% in grado di cambiarlo. Anche se non hai le capacità, potresti certamente pagare qualcuno per sviluppare quel cambiamento - o addirittura suggerirlo a qualcun altro che abbia il know-how.

Il motivo per cui è meglio per la programmazione è perché quando ti imbatti in attrito , puoi eliminarlo dal tuo flusso di lavoro. Poiché lo sviluppo è difficile ci sono molte cose a cui devi pensare per essere un programmatore di successo, e più devi pensare a più difficile è pensare ad altre cose .

Eliminare l'attrito è la chiave.

Quindi, se la religione Microsoft ecostystem è dove ti senti a casa, e ti piacciono così tanto gli strumenti che non ti danno molto / nessun attrito ... beh, probabilmente è solo bene allora.

Ma se non si adatta Microsoft Mold (tm), in attesa di brevetto, allora si incontreranno attriti. Lo sviluppo sarà un dolore. Ogni volta che desideri potresti fare qualcosa, ma non puoi, questo svuoterà preziose risorse cognitive. E se questo è il caso, allora un ambiente di sviluppo Linux è probabilmente per te.

    
risposta data Wayne Werner 17.10.2013 - 17:02
9

Vorrei fornire i miei pensieri più generali alla domanda:

"Perché Linux è un ambiente migliore per la programmazione?"

Penso che la ragione più importante per lo sviluppo su Linux sia perché hai una visione completa della maggior parte dei software interni. Sei in grado di imparare come funzionano le cose se sei interessato. Ciò ti consente di apprendere e adattare le buone o cattive pratiche vedendole in azione. Ciò consente più diversità per le tue idee.

    
risposta data schmijos 17.10.2013 - 15:18
8

Perché Linux è migliore per la programmazione

IDE

Oltre a Visual Studio e Xcode, che servono ai loro scopi specifici, gli IDE più popolari sono multipiattaforma. Potrebbe sembrare che ci siano miliardi di IDE per dozzine di lingue, ma alla fine molti di essi sono basati su Eclipse , IntelliJ IDEA o NetBeans . Quello che hanno in comune è che sono tutti basati su Java. Java funziona in modo più efficiente su Linux, rispetto a qualsiasi altro sistema operativo sullo stesso hardware. Infatti, Java è più veloce del 20% su Linux, rispetto a OS X sullo stesso hardware. Molti di questi IDE sono pronti per l'installazione con un clic in Ubuntu Software Center.

Compiler

GCC è diventato uno standard del settore. Al di là di ogni dubbio la sua piattaforma principale è Linux, dove è meglio supportata. Ed è gratuito e senza royalty.

Strumenti aggiuntivi

Linux fornisce strumenti unici, non disponibili su altre piattaforme, come ad esempio Valgrind (uno strumento per il debug della memoria, memoria rilevamento perdite e profilazione). Linux include anche strumenti di debug come strace e ltrace , che può essere utilizzato per eseguire il debug di codice di produzione anche (cioè non compilato con simboli di debug). Gli strumenti equivalenti per Windows sono inesistenti o molto costosi e non forniscono la stessa funzionalità.

Facilità di installazione di OSS

Ubuntu ha un eccellente gestore di pacchetti. Nella maggior parte dei casi l'installazione di software è solo apt-get install package-name (puoi farlo anche con GUI, Ubuntu Software Center o Synaptic). Una volta installati, vengono automaticamente aggiornati dal sistema con versioni di bugfix. Il sistema di pacchetti tiene automaticamente traccia delle dipendenze, quindi non devi preoccuparti di altri pacchetti necessari; saranno installati automaticamente.

D'altra parte, in Windows devi scaricare e installare manualmente i pacchetti, e se richiedono altri pacchetti, devi farlo anche manualmente. Inoltre, non vi è alcun aggiornamento a livello di sistema, ogni pacchetto software implementa il proprio fastidioso aggiornamento o non si aggiorna affatto.

Le macchine di produzione sono molto probabilmente Linux

Se stai facendo qualsiasi tipo di programmazione per il back-end, per il web, per il cloud, ecc. è molto probabile che i tuoi computer target siano Linux. Ci sono molte meno sorprese quando sviluppi lo stesso tipo di SO della tua macchina target.

Naturalmente, potresti sviluppare un'applicazione desktop per Windows, ma al giorno d'oggi è una specie di mercato del lavoro di nicchia per i programmatori.

    
risposta data vartec 17.10.2013 - 17:45
7
  

Perché scrivere un programma in file di testo o tramite il terminale è un'opzione migliore (come ho letto) rispetto all'utilizzo di IDE come Visual Studio su Windows?

Non lo è, posso dire che è tutto il contrario. Generalmente, tuttavia, le persone tendono a preferire strumenti in cui sono più bravi. Il tipo di strumenti che utilizzi potrebbe giovare alla facilità di scrittura dei programmi. Così, ad esempio, posso scrivere programmi Java con Vim, ma è davvero controproducente rispetto a un IDE completo come Eclipse o IntelliJ. Jon Skeet ha dato un'ottima risposta alla domanda Perché utilizzare un IDE .

Tornando alla tua domanda iniziale, l'unica cosa che Linux è meglio è la programmazione in C. Tutto il resto che puoi fare su Linux lo puoi fare anche su Windows e viceversa (programmazione saggia). La programmazione C è migliore su Linux per ragioni storiche, offre un grande set di strumenti (che è possibile ottenere su Windows BTW ma è molto più semplice configurare Linux per questo). Allo stesso modo, se stai scrivendo C # e like .NET, Windows è una scelta migliore per ovvi motivi. Tutto il resto è completamente soggettivo e sentirai pro e contro di entrambe le parti.

    
risposta data Daniel 17.10.2013 - 15:18
6

Quali strumenti (editor di testo o IDE) utilizzati per la programmazione è una questione di scelta. In generale puoi dire: principianti e progetti molto piccoli tendono a utilizzare migliori editor di testo, come il testo sublime o una versione modificata di gedit. Solo perché si impara di più quando si usano editor di testo normale. Gli IDE possono rovinare il processo di apprendimento automatizzando le cose (come fa Visual Studio;)).

Quando si tratta di professionisti, che utilizzano molti strumenti e linguaggi, gli IDE sono utili, perché possono fare molto di più per te, se li lasci fare. Ci sono molti IDE tra cui scegliere, a seconda della lingua in cui desideri programmare. Ce ne sono di migliori e anche meno convenienti.

La mia esperienza personale è che un sistema operativo Ubuntu è molto più veloce e facile da configurare per lo sviluppo di Windows. Presumo, questo è perché la maggior parte degli strumenti e dei programmi che uso sono costruiti su Linux e perché non devo cercare in internet i collegamenti per il download ai miei programmi preferiti. È solo un 'apt-get install program1 program2 program3' away. In confronto: ho bisogno di 3 giorni lavorativi per installare e configurare una nuova installazione di Windows con tutto ciò di cui ho bisogno per la programmazione (azienda, non privata, che sarebbe più veloce), ma è solo un giorno per lo stesso compito in Ubuntu.

La mia esperienza è che i programmatori che passano a Linux per la programmazione hanno (il più delle volte) una più profonda comprensione dei contesti tecnici e di come funzionano le basi. Gli utenti Mac e Windows tendono a non sapere perché qualcosa funziona in questo modo o perché no. Non sono sicuro che tu possa effettivamente imparare qualcosa lavorando con Linux o se solo quelli che vogliono imparare passino a Linux.

Spero che il mio "blafasel" aiuti un po '...

    
risposta data mondjunge 17.10.2013 - 10:42
1

Direi che una distribuzione Linux è un IDE.

Per cominciare, Unix è stato progettato fin dall'inizio come un ambiente di sviluppo. È stato scritto da programmatori per programmatori. La maggior parte degli Unix e Linux sono ancora disponibili con gli strumenti di sviluppo nella loro configurazione predefinita. E le parti mancanti sono solo un apt-get (o l'equivalente) di distanza. Windows, d'altra parte, è un ambiente di sviluppo terribile finché non si installa un IDE, che non è economico, o un processo banale.

Un IDE è più integrato, nel senso che gli IDE sono più strettamente accoppiati rispetto all'uso di GCC, Git e Vi (per esempio). L'accoppiamento stretto consente a cose come "intellisense" di funzionare meglio. D'altro canto, l'accoppiamento libero ha molti vantaggi (ad esempio flessibilità, intercambiabilità, mancanza di blocco).

E i progressi nella progettazione del compilatore (compilatori con front-end facilmente separabili come LLVM) potrebbero alla fine significare un supporto migliore per funzionalità come l'evidenziazione degli errori di sintassi anche in ambienti con accoppiamento limitato.

    
risposta data david25272 18.10.2013 - 01:08
1

Per quanto riguarda la filosofia: Ubuntu / Linux consente al programmatore di accedere direttamente agli interni e all'hardware, mentre Windows è una sorta di gatekeeper. Questo è un problema filosofico importante quando si tratta di programmazione. Quindi, filosoficamente parlando, questa caratteristica è un vantaggio dipenderà dal fatto che l'utente sia sufficientemente informato o tecnicamente consapevole dell'importanza di esso.

Sulla questione della programmazione: L'intera architettura di sistema di Ubuntu / Linux è basata sulla tradizione Unix di piccoli programmi semplici che fanno una cosa sola e poi li collegano per fare cose più complesse. Per un programmatore questa architettura è incredibilmente potente e, a mio avviso, è la ragione per cui Unix prevarrà a lungo termine contro ogni altra architettura software su ogni piattaforma. Uno dei pochi posti in cui Unix non è attualmente dominante è il desktop, ma questo cambierà nel tempo. Distribuzioni come Ubuntu stanno aiutando a vedere questa evoluzione.

Non discuto, tuttavia, che ci siano alcuni ottimi ambienti di programmazione su Windows. Per la programmazione all'interno di un ambiente aziendale, questi spesso dominano.

    
risposta data AsymLabs 18.10.2013 - 12:17
0

La velocità è la risposta di tipo.

Trovo che con un IDE grafico come Visual Studio o QtCreator io uso troppo il mouse quando dovrei usare scorciatoie. Ogni volta che cambi contesto, devi mettere il cervello in pausa, concentrarti sul tuo obiettivo e attendere l'azione. Mentre premere F5 è infinitamente più veloce.

Ora, se stai usando vim, Emacs o qualcos'altro che non ha pulsanti di bell'aspetto, ti concentrerai sulla pressione dei tasti, hai un metodo e diventi più veloce perché è una routine.

Gli errori sono presentati in modo più dettagliato con un'interfaccia a riga di comando, che preferisco, e fornisce anche un feedback durante la compilazione. Una cosa che odio di Visual Studio è che l'impostazione predefinita è una piccola icona che indica che sta eseguendo una compilazione, quindi viene visualizzata una lista di errori.

Con una vista ristretta manterrai la larghezza di 80 colonne che aiuta la leggibilità, ho visto il codice che si estende fino alla larghezza di 200 colonne. Con il codice che si adatta a 80 colonne puoi avere 4/5 finestre aperte alla volta.

Con un editor CLI puoi codificare in remoto, senza bisogno di una sessione RDP lenta (rispetto al testo) per il tuo Visual Studio. Puoi codificare su un collegamento GSM.

Il tipo di sviluppo del form visivo di fa schifo. Un vantaggio che potresti avere su un IDE GUI è che puoi disegnare i tuoi schermi e il suo più veloce. Tuttavia nella mia esperienza va bene per un prototipo, ma spesso ottieni risultati migliori con il farlo manualmente in codice. L'Analizzatore di codice VS2012 questa mattina mi ha appena avvisato di oltre 200 problemi con il codice che è stato generato automaticamente da Visual Studio?!?!?

    
risposta data Phil Hannent 18.10.2013 - 11:17
0

Penso che la tua vera domanda potrebbe essere, "Ci sono alternative di Visual Studio che verranno eseguite su Ubuntu, dal momento che non lo faranno?"

MonoDevelop.

È fattibile, ma ti odierà se sei abituato a VS e a tutte le funzionalità.

Non c'è alcun vantaggio nell'usare un editor di testo. Ricorda quella cosa carina chiamata Intellisense? Non succede (ma MonoDevelop ha qualcosa del genere). Spero che questo aiuti.

    
risposta data Xavier J 09.01.2014 - 02:40

Leggi altre domande sui tag