Je dois réconcilier ces 2 faits:
- Je ne me sens pas à l'aise pour travailler sur Linux;
- J'ai besoin de développer un logiciel pour Linux.
Quelques antécédents: J’ai plus de 10 ans d’expérience en programmation sous Windows (presque exclusivement en C / C ++, mais aussi en .NET), j’utilisais FreeBSD depuis environ 3 ans à la maison (il fallait ensuite revenir à la version précédente). Windows), et je n’ai jamais eu beaucoup de chance avec Linux. Et maintenant, je dois développer un logiciel pour Linux. J'ai besoin d'un plan.
Sous Windows, vous pouvez vous contenter de connaître un langage de programmation, une API avec laquelle vous codez, votre IDE (VisualStudio) et des outils de base pour le dépannage (Depends, ProcessExplorer, DebugView, WinDbg). Tout le reste vient naturellement.
Sur Linux, c'est une histoire très différente. Comment diable pourrais-je savoir quelle DLL (désolé, Shared Object) se chargerait si je la reliais à partir du plugin Firefox? Quel est l'équivalent Linux d'insérer __asm int 3 / DebugBreak () dans le source et d'exécuter le programme, puis de laisser le système d'exploitation appeler un débogueur? Pourquoi les builds de version infernale utilisent-ils quelque chose, appelé appLoader, alors que les builds de débogage fonctionnent d'une manière ou d'une autre? Le pire de tout: comment provisionner l'environnement de développement Linux?
Donc, compte tenu du fait que la haine est généralement associée à un manque de connaissances, que recommanderiez-vous? Je suis d'accord avec Emacs et GCC. Je dois me former en tant qu'administrateur / utilisateur de Linux et apprendre les outils de dépannage appropriés (strace is cool, d'ailleurs), équivalents à ceux que j'ai mentionnés ci-dessus.
Dois-je faire Linux à partir de zéro? Ou dois-je simplement lire quelques livres (j'ai lu "Environnement de programmation UNIX" de Kernighan et "Programmation avancée ..." de Stevens, mais j'ai besoin d'apprendre quelque chose de plus pratique)? Ou ai-je besoin d'une distribution Linux sur mon ordinateur personnel?
man
est votre ami. Je voudraisman nm
etman ld
comme point de départ.Réponses:
Vous trouverez peut-être intéressant l'article sur les liens dynamiques dans Linux et Windows , qui explique comment chaque système d'exploitation crée des liens dynamiques. L'article Chemins de recherche de bibliothèques partagées explique comment les bibliothèques sont trouvées. Les bibliothèques Linux statiques, partagées dynamiques et chargeables sont également très bonnes. Une bonne chose à propos des bibliothèques Linux est qu’elles prennent mieux en charge le contrôle de version et qu’il existe plusieurs versions d’une bibliothèque par rapport à Windows (autant que je sache, je ne fais pas Windows). Reportez-vous à la rubrique Versionnage de l'interface de bibliothèque dans Solaris et Linux pour plus d'informations. Ces articles devraient vraiment vous couvrir avec des bibliothèques.
La GDB est très puissante. Une bonne introduction est probablement le didacticiel gdb de RMS . Vous voudrez peut-être lire sur les points d'arrêt conditionnels. Pour que les équivalents
__asm(int 3)
voient la question Définir un point d'arrêt dans le code C ou C ++ par programme pour gdb sous Linux .Le livre Advanced Unix Programming de Marc Rochkind est un must-read, IMHO. A beaucoup d'exemples et couvre tous les sujets POSIX / SUS d'une manière très bien expliquée. C'est le meilleur livre sur ce sujet que j'ai lu jusqu'à présent.
Mais pour vous simplifier la vie, je recommande en fait d’utiliser une API de haut niveau qui résume des éléments pour vous, comme Qt. Il est également beaucoup plus facile d’écrire sur plusieurs plates-formes.
Faire Linux From Scratch vous aide à comprendre comment un système Linux est composé, mais je pense que cela n’améliorera pas beaucoup vos connaissances à ce sujet du point de vue des développeurs. Cela vous rend cependant plus à l'aise avec Linux, car vous apprendrez quelles sont les parties présentes dans un environnement Linux (et en partie aussi pourquoi ). Un Linux ne sera plus une grosse boîte noire après avoir travaillé avec Linux From Scratch.
la source
Si vous aimez
strace
, n'oubliez pasltrace
: l'équivalent pour les appels de bibliothèque.En outre, oui, je recommande Linux From Scratch . C'est un bon exercice pour définir les éléments centraux du système d'exploitation et leur intégration.
Pour un traitement de référence de programmation système complet et moderne, je vous recommande de choisir l' interface de programmation Linux .
la source
Le Mac OS X est comme une Mercedes. c'est la plus jolie et la plus propre, mais ça coûte cher. Windows est comme une Toyota. ça va vous amener là-bas et revenir.
Linux est comme un hot rod; C’est aux gens de creuser, de démonter et de remonter. Linux n'est pas pour quelqu'un qui veut juste utiliser l'ordinateur; c'est pour les gens qui aiment les ordinateurs. Les gens qui n'aiment pas les ordinateurs devraient rester à l'écart.
Les éléments que vous avez appris sous Windows ne se traduiront pas très bien, non. Mais vous pouvez voir les internes et regarder le moteur tourner.
Essayez de prendre Linux comme un nouveau jouet, avec lequel vous pouvez jouer, explorer et voir ce qui se passe. Les choses faciles sous Windows sont plus difficiles sous Linux; les choses impossibles sous Windows sont possibles sous Linux.
Si vous aimez les ordinateurs, vous pouvez aimer Linux; Si vous n'aimez pas les ordinateurs, pourquoi programmez-vous?
la source
Que diriez-vous de développer Mono avec Monodevelop? Cela vous permettrait de démarrer assez facilement en réutilisant votre expérience dans .NET.
la source
C'est un défi de taille dès le départ (comme si vous étiez un développeur Linux chargé de développer Windows). Je voudrais aborder ce problème à la fois.
Surtout, laissez tous vos avis subjectifs à la porte. Et non, vous n'avez pas besoin d'être un gourou pour développer sous Linux, je sais assez pour me déplacer, et pas tout - mais je suis à l'aise avec ça ...
la source
The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.
Combien de temps avez-vous mis à maîtriser le travail dans un environnement Windows? Vous pourriez dire que c'était facile, vous venez de commencer. Mais vous avez travaillé quelques années avec Windows auparavant. Depuis combien de temps utilisez-vous Windows avant d’écrire votre premier programme? Cela faisait 8 ans pour moi, bien que j'utilise maintenant Linux presque exclusivement depuis 5 ans. Je maîtrise maintenant mieux Linux que Windows. Vous devriez vous donner au moins autant de temps pour vous familiariser avec un nouveau système.
Commencez par la liste des applications que vous ne pouvez pas utiliser dans Windows et recherchez des alternatives dans le monde * nix. http://alternativeto.net/ et les sections de lectures supplémentaires de Wikipedia peuvent être utiles ici.
Voici une liste de logiciels alternatifs qui pourraient s'avérer très utiles. Voici quelques alternatives aux choses que vous avez mentionnées.
Autres ressources utiles pour passer d'un système à un autre
Pour devenir un meilleur utilisateur expérimenté ou un utilisateur admin, jetez un coup d'œil à ces ressources
On dirait également que cela fait longtemps que vous n’avez pas regardé le monde * nix. Je recommanderais certaines des nouvelles distributions de fedora , suse , debian ou de mon poste de travail préféré Ubuntu .
Vous pouvez maintenant probablement vous en sortir sans connaître les éléments internes du système et seulement les bases, comme dans Windows. Je ne voudrais pas simplement essayer de sortir avec le minimum. Si vous considérez Linux comme un outil qui vous assiste réellement dans votre développement et non comme un système d’exploitation dans lequel vous développez, il serait utile.
Linux From Scratch sera beaucoup plus important si vous développez spécifiquement pour Linux est un sens très spécifique et technique. Par exemple, vous souhaitez développer le noyau ou transférer votre programme sur un super-ordinateur fonctionnant sous Linux. Ce serait très utile quand même. Je pense que vous pourriez probablement laisser cela quelques mois pendant que vous essayez simplement de vous lancer dans Ubuntu. Ubuntu sera aussi proche des choses que le travail monde de Mac et Windows.
la source
Je pense que vous avez répondu à votre question dans la question:
"Sous Windows, vous pouvez vous contenter de connaître un langage de programmation, une API avec laquelle vous codez, votre IDE (VisualStudio) et des outils de base pour le dépannage (Depends, ProcessExplorer, DebugView, WinDbg). Tout le reste est naturel. "
Gues quoi, sous Linux, vous pouvez vous contenter de connaître un langage de programmation, une API (ou un couple), votre IDE (Eclipse ou NetBeans, voire Geany, Emacs ou vim, si vous préférez) et quelques outils de base pour le dépannage ( gdb, outils de traçage, charpie, htop, ps).
Vous avez beaucoup de connaissances investies dans l'écosystème de programmation Windows. La plupart de ces connaissances sont (espérons-le) abstraites (qu'est-ce qu'un compilateur, un débogueur, une bibliothèque partagée, un processus, un fil de discussion? Que font-elles?) Qui se traduiront facilement, une fois que vous maîtriserez les différents outils. Certaines sont spécifiques à un domaine (quelle DLL est liée lorsque j'ajoute X à un projet?), Mais même passer d'une classe de langue à une autre dans Windows nécessiterait un nouvel apprentissage.
Installez Ubuntu ou Fedora dans une machine virtuelle, lisez des didacticiels C ++ Hello World dans Eclipse ou NetBeans et des procédures de débogage dans des didacticiels Eclipse / NetBeans, et laissez la capacité naturelle de votre cerveau à s'adapter prendre le dessus. Si vous vous détendez et que vous le mettez au travail, il traduira vos idées.
la source
J'ai appris Unix en général en lisant les pages de manuel. Vous devriez au moins les écrémer. Oui, je veux dire tous. La méthode que je l’utilise pour entrer dans les répertoires des pages de manuel et les attaquer section par section.
J'utilise ceci:
... en remplaçant le .1 par le numéro de la section que vous lisez, .2, .3, etc. Appuyez sur ctrl-Z ctrl-C pour sortir de la boucle. Votre kilométrage peut varier si votre distribution linux enregistre les choses différemment, c.-à-d. Pas sous le nom nom_commande.1.gz.
Passez simplement par les descriptions, et plus si c'est quelque chose d'intéressant. Les sections 1, 2 et 3 sont les plus importantes pour un programmeur. 1 couvre les commandes utilisateur générales, y compris vos outils de compilation, et divers utilitaires d’investigation. 2 correspond aux appels système et 3 aux appels à la bibliothèque.
la source
xman
comme une interface plus «conviviale». Sélectionnez une section, cliquez sur la page de manuel, lisez-la. Rincez, répétez.Ne vous forcez pas à faire quelque chose que vous n'aimez pas. Utilisez Windows comme environnement de développement, écrivez un code portable, compilez-le pour Linux et ne le testez que de temps en temps sur une machine virtuelle.
la source
Je ne suis pas sûr que cela fonctionne pour les plates-formes, mais pour les langages de programmation, j'ai trouvé utile de réfléchir à la façon dont je me suis familiarisé et que je suis à l'aise avec ceux pour lesquels je suis bon et d'essayer de rejouer ces expériences et activités pour ce que j'ai '. J'essaie d'apprendre.
Peut-être quelque chose sur ces lignes?
De manière générale cependant, mon intérêt et ma confiance pour GNU / Linux sont apparus comme étant beaucoup plus faciles à bricoler (et nécessitant des bricolages dans les premiers jours) que Windows. J'avais besoin de bricoler beaucoup de choses pour que ça fonctionne et cela m'a aidé à apprendre beaucoup de choses. Les choses vont beaucoup mieux maintenant, mais toutes ces heures m'ont aidé.
la source
J'étais l'un des deux chargés de quelque chose de similaire, mais différent. Je travaille dans un district scolaire de la maternelle à la 12e année et le système commercial (ressources humaines, finances, etc.) est en train de migrer d'une base de données HP3000 / TurboImage vers une plate-forme Linux / MS SQL. Je suis à l'aise avec le côté MS SQL. Mais pas le côté Linux. Nous sommes tous les deux du côté de l’administrateur, pas du côté de la programmation. La programmation est faite à l'extérieur - Application d'entreprise tierce pour les organisations de la maternelle à la 12e année.
J'ai suivi un cours d'introduction à Linux (Redhat) de 5 week-ends, principalement en mode ligne de commande, et cela en valait la peine, car je pouvais me lancer rapidement dans la façon de faire de Linux. Évidemment YMMV selon la classe / l'enseignant.
Vous avez mentionné «Le pire de tout: comment provisionner un environnement de développement Linux? Puisque vous connaissez déjà très bien Windows, je vous suggère fortement de vous procurer une copie de vmWare Workstation. Avec cela, vous pouvez garder Windows comme station de travail et installer Linux comme système invité - supprimez, rincez et répétez autant de fois que nécessaire. Lorsque vous avez une bonne configuration, je pense que vous pouvez la prendre en instantané, mais je ne peux pas dire avec certitude quelles versions sont capables de l’aspect prise d’instantané. Et si vous utilisez la route vmWare Workstation pour activer plusieurs configurations de développement, augmentez définitivement la mémoire.
Cela ne me dérange pas non plus de recommander l'utilisation de CentOS comme système d'exploitation Linux pour les invités. D'après ce que j'ai compris, c'est comme RedHat sans la stratégie de marque et / ou l'argumentaire de vente et / ou les coûts de support. Je ne connais pas bien les autres versions de Linux, je ne peux donc pas y contribuer.
Greg
la source
J'aime les deux plates-formes et pour toutes les différences dans l'interface utilisateur et dans l'éco-système dev, je les trouve plus similaires que différentes. En fait, pour la plupart des concepts Windows, vous pouvez en trouver un équivalent à Linux simplement en effectuant une recherche sur Internet.
Ceci dit, je suggère fortement d’apprendre à faire les choses de la "manière Unix". Utilisez la ligne de commande plutôt que des interfaces graphiques boguées (je parle principalement de gdb ici); ne cherchez pas d'IDE et apprenez plutôt à utiliser un ensemble d'outils spécialisés. Choisissez un bon éditeur (montrant vim) et apprenez-le bien. Lisez comment
make
fonctionne même si vous ne prévoyez pas de devenir un expert. Peut-être que vous aimerez même Linux. C'est un geek convivial et amusant à jouer.la source
Considérez ceci: vous ne saviez autrefois rien de Windows, mais vous l’avez appris et, avec le temps, vous en êtes habitué.
Ensuite, MS a changé le système de programmation avec lequel vous étiez habitué. NET et vous ne connaissiez plus rien des DLLS, COM, et peu importe, vous deviez apprendre des choses comme des assemblys, des GAC et des domaines d'application. Vous avez appris ces ok.
Alors, pourquoi vous inquiétez-vous maintenant de faire la même chose avec Linux?
Il existe de nombreux didacticiels sur le Web pour commencer à utiliser tous les environnements de programmation. Maintenant, vous dites GCC, je vais donc assumer le développement C ++. Procurez-vous Eclipse, installez CDT (c dev tools) au-dessus de votre plate-forme Eclipse (Eclipse est un IDE polyvalent, vous pouvez l'utiliser pour C ++, PHP, Java, peu importe, mais vous devez installer les outils pour votre langue. comme vous ne voudriez pas vraiment tout pré-installé comme VS et prendre 3 jours pour l’installer :))
Il existe des didacticiels faciles à utiliser sur le Web. IBM en a un ici assez complet.
Outils de débogage ... eclipse est intégré ( tutoriel ), mais vous pouvez trouver de nombreux outils comme ceux que vous avez mentionnés, il suffit de rechercher sur le Web et vous trouverez de nombreuses options. Il vous faudra un peu de temps pour comprendre comment lire un dump principal (par opposition à un userdump Windows par exemple), mais vous y arriverez.
Il pourrait également être intéressant de créer un blog avec vos expériences. Cela vous permettra non seulement de vous rappeler ce que vous avez fait (par exemple, en configurant éclipse à votre guise, vous oublierez que vous devez le refaire dans un environnement différent. année), mais cela aidera les autres dans votre situation.
la source
Je ne pense pas que vous deviez faire Linux à partir de Scratch. Si j'étais vous, je choisirais Ubuntu. C’est plus confortable, et étant basé sur debian, il ya beaucoup de matériel technique disponible.
Si vous voulez vous plonger plus avant dans Linux, Gentoo est une bonne option. Il vous faut beaucoup lire sur la configuration et les noyaux, mais cela vous donne également un système assez fonctionnel pour travailler en af
la source
Google "L'art de la programmation Unix" et lisez-le. OMI, votre principale difficulté est la philosophie différente, et ce livre est une excellente lecture pour cela.
Il vous présente également certaines différences non évidentes mais très importantes d'un point de vue technique entre les systèmes * n * x et Windows - elles sont essentielles pour comprendre pourquoi il est logique d'utiliser des méthodes différentes sous Linux.
la source
La première question que je poserais est qu'est-ce que vous voulez développer? S'il s'agit d'une application basée sur une interface graphique, cela peut être différent de devoir écrire quelque chose comme une extension de noyau.
Dans le cas d'une application graphique, la méthode la plus simple consiste à utiliser Qt, qui possède son propre environnement de développement (Qt-Creator). De plus, étant multi-plateforme, vous ne pouvez apprendre qu'une seule API utilisable pour Windows / Linux. / OSX et même le développement mobile. Comme Visual Studio sous Windows ou XCode sous OSX, vous pouvez créer et mettre en forme des fenêtres et des éléments à partir d'un éditeur graphique. L'API est très facile à utiliser avec de nombreux exemples d'applications.
Si vous avez besoin de passer à un niveau inférieur, une fois que vous maîtriserez linux en ligne de commande, sachez comment parcourir les répertoires, manipuler les fichiers, comprendre les autorisations, etc., puis commencez à lire comment compiler un programme simple avec gcc, comment lier des fichiers et exécuter l'exécutable, puis comment déboguer avec gdb.
Alternativement, si cela semble un peu intimidant, vous pouvez télécharger Eclipse ou un autre IDE, mais vous deviendrez probablement beaucoup plus à l'aise avec Linux à long terme, si vous mettez d'abord du temps et des efforts dans la ligne de commande.
la source