Pourquoi l'écriture d'un programme dans des fichiers texte ou via le terminal est-elle une meilleure option que d'utiliser des IDE comme Visual Studio sous Windows? Existe-t-il les fonctionnalités fournies par IDE (par exemple, l'affichage des erreurs de compilation) ou s'agit-il d'un processus manuel?
Ce type d’hypothétique pourrait faire mieux sur Programmers.SE car il est probable qu’il soit plutôt unilatéral ici. Cela étant dit, j'ai été développeur .NET pendant quelques années et j'ai commencé à dépendre de Visual Studio. Cela fait beaucoup pour vous et oui, j'aime particulièrement le débogueur intégré ... Cependant, je pense qu'il y a plusieurs raisons pour lesquelles les gens choisissent Linux:
Ubuntu est gratuit. Windows et VS peuvent être extrêmement coûteux.
Ubuntu est gratuit . Windows et VS vous donnent très peu de contrôle sur la façon dont vous les utilisez.
Ubuntu est un environnement de programmation directement prêt à l'emploi. Des outils tels que Bash, grep
, sed
, awk
. Windows est historiquement une grande douleur dans le fond de script. Les fichiers batch sont horribles et même avec PowerShell, l'expérience en ligne de commande de Windows n'a plus aucune importance, comparée à Bash et aux outils GNU. Vous pouvez en transférer une partie sur Windows, mais l'expérience n'est pas la même.
Les configurations compliquées sont faciles à automatiser et à reproduire via apt-get
, des outils tels que Puppet , Chef , Juj , Fabric et simple. script.
Certaines choses n'ont pas besoin d'EDI compliqués. Je suis un Python développeur ces jours-ci et je suis parfaitement satisfait de ses propres outils intégrés et de son débogueur. J'utilise un éditeur de texte, la ligne de commande et la structure ... Et je contrôle bien plus que je ne l'étais sous .NET. Je peux créer, tester, valider et déployer mes applications Web avec une seule commande Fabric.
Cela ne veut pas dire qu'il n'y a pas d'IDE monolithiques. Eclipse et Netbeans. MonoDevelop. KDevelop4 et QT Creator. Ils ont tous leurs utilisateurs qui ne jurent que par eux.
Ubuntu est-il meilleur pour vous ? Qui sait. C'est un système très capable et très personnalisable. Si vous lui donnez une chance et modifiez votre flux de travail pour lui permettre de vous aider, vous devriez pouvoir le faire tenir.
Je voudrais cependant ajouter une autre raison importante; Ubuntu est idéal pour expérimenter de nouvelles bibliothèques, langages, IDE et compilateurs. Tout est une apt-get away.
Vous avez donc entendu parler d'un langage sophistiqué appelé Haskell :
Sudo apt-get install ghc
nano hello.hs
<copy-paste hello world example>
ghc -o hello hello.hs
./hello
Hello World!
Oh, vous avez entendu un éditeur de fantaisie pour Haskell:
Sudo apt-get install <fancy-editor-for-haskell>
La même chose avec les bibliothèques C / C++ , vous les apt-get install
, les fichiers binaires et les en-têtes vont dans les bons dossiers, et vous pouvez simplement les #include
dans vos fichiers source sans même avoir besoin de vérifier où ils sont placés!
En substance, il ne s'agit pas de la rapidité avec laquelle vous pouvez configurer votre environnement de travail quotidien. Il s’agit également de la rapidité avec laquelle vous pouvez configurer un environnement expérimental. Je crois que c'est ce qui accélère l'expérience d'apprentissage sous Linux.
Voici un avis d'un développeur de plate-forme principalement Microsoft. Si vous ne ciblez pas l'écosystème .NET, je dirais que votre meilleure option est Ubuntu. Vous aurez beaucoup plus de facilité à obtenir, configurer et utiliser des outils pour presque toutes les autres plates-formes/langues si vous utilisez Ubuntu au lieu de Windows.
L’intérêt de la chaîne d’outils de Microsoft est qu’elle est HAUTEMENT intégrée. Du IDE au contrôle de source, à la gestion de projet, à la construction, au déploiement, à la base de données, à l'infrastructure en nuage, ad nauseum. Microsoft rend la tâche TRÈS facile si vous utilisez pleinement leur plate-forme.
Comme certains l’ont mentionné, s’écarter de Microsoft Way peut s’avérer pénible. Utiliser .NET pour votre code et Oracle pour votre base de données ... ça va être pénible.
Vous voulez créer une application Web .NET et la déployer sur Amazon Web Services ... pas très simple.
Mais si vous restez dans l'écosystème Microsoft ... ce bébé chantera pour vous comme un oiseau moqueur. Dans les mains d'un développeur de logiciel compétent, la plate-forme Microsoft est comme un PED pour un athlète de talent. Cela ne va pas permettre à un programmeur amateur de créer le prochain Facebook. Mais cela donnera un avantage à un développeur talentueux qui comprend comment les pièces s’assemblent.
L'argument en faveur du coût gratuit (comme dans le cas de la bière) de la mise en route avec Ubuntu est en train de s'ouvrir, il existe un certain nombre de programmes offerts par Microsoft qui vous permettent de démarrer avec leurs outils gratuitement. Y compris Bizspark qui donne à votre entreprise en démarrage 3 ans de licences (y compris les licences d’utilisation en production de leurs outils). Et Dream spark qui le donne aux étudiants gratuitement.
Cela étant dit, si vous souhaitez explorer et apprendre de nouvelles langues et de nouvelles plateformes, vous trouverez de meilleurs outils pour commencer à utiliser Ubuntu. Si vous souhaitez travailler en dehors de l'écosystème Microsoft, vous devez vous familiariser avec. avec Ubuntu.
J'utilise les deux outils, les IDE et les éditeurs de texte avec C ommand - L ine I nterface (ci-après appelé CLI), pour écrire des programmes.
Ce que Linux propose est un CLI utile à partir de l’installation par défaut. Si vous n'en avez pas besoin et que vous utilisez simplement un IDE de toute façon, alors il n'y a plus beaucoup de différence (IMHO).
Je fais souvent mon prototypage avec des outils textuels. Plus tard, quand il y aura plus de fichiers à gérer, j'apprécie les refactoring outils qu'un IDE m'offre.
Je vais lancer ma réponse sur le ring (même si je pense que ce sont aussi des bons).
La réponse la plus élémentaire que vous puissiez obtenir est que tout est une question de philosophie.
Dans le monde Microsoft, c'est un peu religieux - Vous avez les dieux au mont. Redmond qui doit être sollicité si vous voulez quelque chose mis en œuvre. Parfois, ils écouteront, d'autres fois, vos sacrifices et vos demandes tomberont dans l'oreille d'un sourd. Peut-être qu'ils étaient à la chasse. Microsoft contrôle l’ensemble de l’écosystème: il possède le système d’exploitation, l’IDE et les associe d’une manière probablement inappropriée pour un réseau SE. Même au sein du IDE, les éléments sont étroitement couplés - on peut l'appeler intégré mais je pense que couplé est plus précis. Si vous souhaitez modifier un peu les choses, Gates vous interdit de modifier quelque chose d'une manière que les concepteurs de Windows ou de Visual Studio ne l'ont pas expressément autorisée. Et ensuite, introduisez des technologies telles que IE, IIS, les serveurs Microsoft, MS SQL Server et Office ... et tout est une belle et heureuse famille heureuse. Mais si vous voulez laisser une partie de la famille derrière vous? frissonne !
D'autre part, vous avez Linux, qui hérite de la philosophie Unix selon laquelle chaque composant devrait être responsable de sa propre petite sphère de responsabilité. Il devrait faire une chose et le faire bien. Et de préférence, la communication devrait se faire au moyen de chaînes de texte. Comme d'autres l'ont fait remarquer, sed
name__, awk
name__, grep
name__, etc. en sont des exemples parfaits. Ils font la une chose pour laquelle ils sont conçus, et ils le font très bien. Si vous devez faire deux choses, vous combinez les deux outils. Ce qui est très facile à faire.
Comme sed
n'attend rien d'autre que l'entrée qui entrera sera du texte, cela signifie que tout ce qui peut générer du texte ne doit pas nécessairement réinventer la roue. Ils peuvent simplement utiliser sed
name__. Et comme sed
produit du texte, tout ce qui peut lire texte peut utiliser le résultat de sed
name__. Le texte est très universel (à quelques exceptions près), et il est très facile de combiner ce genre de choses.
Non seulement il est facile de les combiner, mais il est également très facile de les séparer - si je décide que je n'ai plus besoin de modifier un flux, mais que je souhaite filtrer les résultats plutôt que de transmettre mon texte à sed
name__, je peux transmettez-le à grep
à la place.
Or, c’est la philosophie fondamentale du développement dans un environnement Linux. Ainsi, même si vous remontez à partir de là, , de nombreux outils fournissent des types d’interfaces similaires. Ils vous permettent de les décomposer en plusieurs parties ou d'interagir avec eux via la ligne de commande, les ports ou HTTP.
Et même si c'était pas le cas, vous avez également un logiciel open source. La plupart des logiciels (sinon tous) de la plate-forme Linux sont à code source ouvert. Donc, si vous n'aimez pas la façon dont vous écrivez, vous êtes tout à fait capable de changer le logiciel vous-même. C'est incroyablement habilitant. Vous ne pouvez pas séparer ce IDE comme vous le souhaitez? Effectuez les modifications et renvoyez-les en amont, ou branchez le projet. Vous ne savez pas pourquoi quelque chose se comporte comme ça? tilisez la source, Luke! Besoin d'automatiser quelque chose via la ligne de commande? Modifiez le projet et collez vos modifications. Vous rencontrez un bogue ou un problème de sécurité? Hey, devinez quoi - vous pouvez résoudre ce problème vous-même, vous n'avez pas à attendre que SP3.432vb89234.startdate1eQ soit publié.
Vous pouvez combiner les outils que vous voulez et dont vous avez besoin. Et si quelque chose se trouve sur votre chemin, vous êtes à 100% en mesure de faire changer cela. Même si vous n'en avez pas la capacité, vous pouvez certainement payer quelqu'un pour développer ce changement - ou même le suggérer à quelqu'un d'autre qui possède le savoir-faire.
La raison pour laquelle cela convient mieux à la programmation est que, lorsque vous rencontrez friction , vous pouvez l'éliminer de votre flux de travail. Parce que le développement est difficile , il faut penser à beaucoup de choses pour être un programmeur accompli, et plus vous devez penser au - plus difficile de penser à autre chose .
L'élimination des frictions est la clé.
Donc si le Microsoft ecostystemla religion est l'endroit où vous vous sentez à la maison et vous appréciez tellement les outils qu'elle ne vous cause pas beaucoup de frictions ... eh bien, c'est probablement très bien alors.
Mais si vous ne correspondez pas au Microsoft Mold (tm), brevet en instance, vous risquez des frictions. Le développement sera une douleur. Chaque fois que vous souhaitez vous pouvez faire quelque chose, mais vous ne pouvez pas, cela drainera de précieuses ressources cognitives. Et si tel est le cas, un environnement de développement Linux est probablement pour vous.
J'aimerais apporter mes réflexions plus générales à la question:
"Pourquoi Linux est-il un meilleur environnement pour la programmation?"
Je pense que la raison la plus importante pour développer Linux est parce que vous avez un aperçu complet de la plupart des composants internes du logiciel. Vous êtes capable d'apprendre comment les choses fonctionnent réellement si cela vous intéresse. Cela vous permet d'apprendre et d'adapter les bonnes ou les mauvaises pratiques en les voyant en action. Cela permet plus de diversité pour vos idées.
Outre Visual Studio et Xcode, qui servent leurs objectifs spécifiques, les IDE les plus populaires sont multiplateformes. Il peut sembler qu'il existe des milliards d'IDE pour des dizaines de langues, mais la plupart d'entre elles sont finalement basées sur Eclipse , IntelliJ IDEA ou NetBeans =. Ce qu'ils ont en commun, c'est qu'ils sont tous basés sur Java. Java fonctionne plus efficacement sous Linux que sur tout autre système d'exploitation utilisant le même matériel. En fait, Java est jusqu'à 20% plus rapide sous Linux que sous OS X sur le même matériel. Bon nombre de ces IDE sont prêts à être installés en un seul clic dans Ubuntu Software Center.
GCC est devenu la norme de l'industrie. Il ne fait aucun doute que sa plate-forme principale est Linux, où elle est mieux prise en charge. Et c'est gratuit et libre de droits.
Linux fournit des outils uniques, non disponibles sur d’autres plateformes, comme par exemple Valgrind (un outil de débogage de la mémoire, de détection des fuites de mémoire et de profilage). Linux est également livré avec des outils de débogage tels que strace et ltrace , qui peuvent être utilisés pour déboguer même du code de production (c'est-à-dire non compilé avec des symboles de débogage). Les outils équivalents pour Windows sont inexistants ou très coûteux et n'offrent pas les mêmes fonctionnalités.
Ubuntu a un excellent gestionnaire de paquets. Dans la plupart des cas, l’installation du logiciel n’est que de apt-get install package-name
(vous pouvez également le faire avec une interface graphique, Ubuntu Software Center ou Synaptic). Une fois installés, ils sont automatiquement mis à jour par le système avec les versions corrigées. Le système de paquets garde également automatiquement une trace des dépendances, vous évitant ainsi de vous inquiéter des autres paquets nécessaires; ils seront installés automatiquement.
D'autre part, sous Windows, vous devez télécharger et installer manuellement des packages, et s'ils nécessitent d'autres packages, vous devez également le faire manuellement. Il n'y a pas non plus de mise à jour à l'échelle du système, chaque progiciel implémente son propre programme de mise à jour gênant ou ne se met pas à jour du tout.
Si vous faites de la programmation pour le back-end, le web, le cloud, etc., il est très probable que vos machines cibles soient Linux. Il y a beaucoup moins de mauvaises surprises lorsque vous développez sur le même type d'OS que votre machine cible.
Bien sûr, vous développez peut-être une application de bureau pour Windows, mais il s’agit aujourd’hui d’une sorte de marché de niche pour les programmeurs.
Pourquoi l'écriture d'un programme dans des fichiers texte ou via le terminal est-elle une meilleure option que d'utiliser des IDE comme Visual Studio sous Windows?
Ce n'est pas, je peux dire que c'est tout le contraire. En règle générale, les gens préfèrent les outils pour lesquels ils sont meilleurs. Le type d’outils que vous utilisez pourrait améliorer la facilité d’écriture de programmes. Ainsi, par exemple, je peux écrire des programmes Java parfaitement avec vim, mais il est vraiment contre-productif, contrairement à un IDE à part entière, comme Eclipse ou IntelliJ. Jon Skeet a donné une excellente réponse à la question Pourquoi utiliser un IDE .
Pour revenir à votre question initiale, la seule chose que Linux est meilleure en programmation C est. Tout ce que vous pouvez faire sur Linux, vous pouvez également le faire sur Windows et vice-versa (en termes de programmation). La programmation en C est meilleure sous Linux pour des raisons historiques, elle offre un excellent ensemble d’outils (que vous pouvez obtenir sur Windows BTW mais c’est beaucoup plus facile de configurer Linux pour cela). De même, si vous écrivez en C # et aimez .NET, Windows est un meilleur choix pour des raisons évidentes. Tout le reste est totalement subjectif et vous entendrez le pour et le contre des deux côtés.
Quels outils (éditeur de texte ou IDE) vous utilisez pour la programmation est une question de choix. De manière générale, vous pouvez dire: les débutants et les très petits projets ont tendance à utiliser de meilleurs éditeurs de texte, comme du texte sublime ou une version modifiée de gedit. Tout simplement parce que vous en apprenez plus lorsque vous utilisez des éditeurs de texte brut. Les IDE peuvent gâcher votre processus d’apprentissage en automatisant des choses (comme le fait Visual Studio;)).
Quand il s’agit de professionnels qui manipulent de nombreux outils et langages, les IDE sont utiles, car ils peuvent faire beaucoup plus pour vous, si vous le leur permettent. Il existe de nombreux IDE parmi lesquels choisir, en fonction de la langue dans laquelle vous souhaitez programmer. Il y en a de meilleurs et de moins en moins pratiques.
Mon expérience personnelle est qu’un système d’exploitation Ubuntu est de loin plus rapide et plus facile à configurer pour le développement que Windows. Je suppose que c'est parce que la plupart des outils et programmes que j'utilise sont construits sous Linux et que je n'ai pas à rechercher sur Internet des liens de téléchargement vers mes programmes préférés. C'est juste un 'apt-get installer programme1 programme2 programme3' loin. En comparaison: il me faut 3 jours ouvrables pour installer et configurer une nouvelle installation Windows avec tout ce dont j'ai besoin pour la programmation (entreprise, pas privée, ce serait plus rapide), mais il ne reste qu'un jour pour la même tâche sous Ubuntu.
Mon expérience est que les programmeurs, qui passent à Linux pour la programmation, ont (la plupart du temps) une compréhension plus profonde des contextes techniques et du fonctionnement des bases. Les utilisateurs de Mac et Windows ont tendance à ne pas savoir pourquoi quelque chose fonctionne de cette manière ou pas. Je ne sais pas si vous pouvez réellement apprendre quelque chose en travaillant avec Linux ou si vous voulez apprendre à passer à Linux.
J'espère que mon "blafasel" aide un peu ...
Je dirais qu'une distribution Linux est un IDE.
Pour commencer, Unix a été conçu dès le départ pour être un environnement de développement. Il a été écrit par des programmeurs pour des programmeurs. La plupart des Unix et Linux sont toujours livrés avec les outils de développement dans leur configuration par défaut. Et les parties manquantes ne sont plus qu’à apt-get
(ou l’équivalent). Windows, d’autre part, constitue un environnement de développement épouvantable jusqu’à ce que vous installiez un IDE peu coûteux ou un processus trivial.
Un IDE est plus intégré, en ce sens que les IDE sont plus étroitement couplés que d'utiliser GCC, Git et Vi (par exemple). Un couplage étroit permet à des choses comme "intellisense" de mieux fonctionner. Mais d’autre part, le couplage lâche présente de nombreux avantages (par exemple, flexibilité, interchangeabilité, manque de verrouillage).
Et les avancées dans la conception des compilateurs (des compilateurs avec des interfaces frontales facilement séparables telles que LLVM) pourraient éventuellement signifier une meilleure prise en charge de fonctionnalités telles que la mise en évidence des erreurs de syntaxe, même dans des environnements faiblement couplés.
Sur le plan de la philosophie: Ubuntu/Linux permet au programmeur d’accéder directement aux ressources internes et au matériel, alors que Windows est une sorte de portier. C'est une question philosophique importante en matière de programmation. Ainsi, sur le plan philosophique, cette caractéristique sera un avantage selon que l'utilisateur est suffisamment informé ou techniquement conscient de son importance.
En ce qui concerne la programmation: Toute l’architecture système d’Ubuntu/Linux repose sur la tradition Unix qui consiste à faire de petits programmes simples, puis à les relier pour faire des choses plus complexes. Pour un programmeur cette architecture est incroyablement puissante et, à mon avis, est la raison pour laquelle Unix l'emportera à long terme sur toutes les autres architectures logicielles sur toutes les plateformes. Le bureau est l’un des rares endroits où Unix n’est pas dominant, mais cela changera avec le temps. Des distributions comme Ubuntu aident à suivre cette évolution.
Je ne conteste pas, cependant, qu'il existe de très bons environnements de programmation sous Windows. Pour la programmation dans un environnement d'entreprise, ceux-ci dominent souvent.
Je pense que votre vraie question pourrait être: "Existe-t-il des alternatives à Visual Studio qui fonctionneront sur Ubuntu, dans la mesure où cela ne fonctionne pas?"
MonoDevelop.
C'est faisable, mais vous allez détester si vous êtes habitué à VS et à toutes les fonctionnalités.
Il n'y a AUCUN avantage à utiliser un éditeur de texte. Rappelez-vous cette belle chose appelée Intellisense? Cela ne se produit pas (mais MonoDevelop a quelque chose comme ça). J'espère que cela t'aides.
La vitesse est la bonne réponse.
Je trouve que, avec un IDE graphique, comme Visual Studio ou QtCreator, j'utilise trop la souris lorsque je devrais utiliser des raccourcis. Chaque fois que vous changez de contexte, vous devez mettre votre cerveau en pause, concentrez-vous sur votre cible et attendez l'action. Tandis que l'appui sur F5 est infiniment plus rapide.
Maintenant, si vous utilisez vim, Emacs ou quelque chose d'autre qui n'a pas de boutons à la recherche de Nice, vous serez concentré sur les pressions sur les touches, vous avez une méthode et vous devenez plus rapide grâce à sa routine.
Les erreurs sont présentées de manière plus détaillée avec une interface en ligne de commande, que je préfère, et cela donne également des informations en retour lors de la compilation. Une chose que je déteste à propos de Visual Studio est le défaut, c’est une petite icône indiquant qu’elle compile, puis vous obtenez une liste d’erreurs.
Avec une vue étroite que vous garderez à la largeur de 80 colonnes, ce qui facilite la lisibilité, j'ai vu du code s'étendre sur une largeur de 200 colonnes. Avec un code correspondant à 80 colonnes, vous pouvez ouvrir 4/5 fenêtres à la fois.
Avec un éditeur de ligne de commande, vous pouvez coder à distance, pas besoin d’une session RDP lente (comparée à du texte) à votre Visual Studio. Vous pouvez coder sur un lien GSM.
Le type de développement de forme visuelle est nul. Un avantage que vous pourriez avoir sur une interface graphique IDE est que vous pouvez dessiner vos écrans et sa rapidité. Cependant, selon mon expérience, c'est bien pour un prototype, mais vous obtenez souvent de meilleurs résultats si vous le faites manuellement dans le code. L'analyseur de code VS2012 de ce matin vient de m'avertir de plus de 200 problèmes de code générés automatiquement par Visual Studio?!?!?