Je sais qu'il y a des questions similaires ici, que j'ai lues, mais j'ai récemment lu ce post de Joel Spolsky:
Et cela m'a fait réfléchir à ma façon d'apprendre et à savoir si cela pourrait être nocif à long terme.
J'ai essayé divers langages mais C # est mon premier sérieux, j'ai lu "Head First C #" et créé quelques projets. Mais après avoir lu le post ci-dessus, j'ai trouvé un peu décourageant de me tromper, je respecte évidemment l'opinion de Joel, ce qui m'a un peu égaré.
J'ai commencé à lire "Code" comme recommandé dans la liste de lecture et je trouve cela assez difficile, bien que agréable. J'ai l'impression que cela a fait briller mon "piratage de noobish about" dans Visual Studio.
Alors maintenant, je ne sais pas quel chemin prendre? Dois-je prendre du recul et suivre les conseils de Joel et commencer à lire?
Je suppose que mon objectif principal est simplement de devenir un bon programmeur, comme tout le monde, mais je ne veux pas me lancer dans de mauvaises pratiques en apprenant un langage .NET lorsque quelqu'un que je respecte estime que c'est nuisible.
Pensées?
J'ai tamponné avec différents langages mais C # est mon premier sérieux, j'ai lu "Head First C #" et créé quelques projets. Mais après avoir lu le post ci-dessus, j'ai trouvé un peu décourageant de me tromper, je respecte évidemment l'opinion de Joel, ce qui m'a un peu égaré.
Je respecte également les opinions de Joel, mais ce ne sont que cela: opinions. Il n'y a absolument rien de mal à utiliser C # comme langage de départ.
Le plus grand conseil que je puisse vous donner, ou à quiconque fait de la programmation n'importe laquelle (même s'ils commencent dans Vanilla C!) Est de ne pas stagner et ne pas être religieux =. Je m'en fiche quoi langage de programmation avec lequel vous commencez, ou à quel point ce langage est pur ou juste - de nos jours, vous ne pouvez pas vous permettre de vous asseoir dans le seul monde de la programmation.
Par exemple, j'ai commencé à programmer avec PHP3 à l'adolescence. J'ai construit quelques petites applications Web et quelques sites Web avec elle; Je pensais que j'étais un programmeur génial et que je pouvais faire n'importe quoi avec PHP3, et fronçais les sourcils sur les gens qui étaient tous sur ASP ou BASIC. Garçon, avais-je tort.
Je n'ai pas vraiment commencé à m'épanouir en tant que développeur avant de commencer à élargir mes horizons et à étudier d'autres langages et concepts de programmation. Au lycée, j'ai appris du RealBASIC, puis du Visual Basic. Après l'école de commerce, quand je suis devenu développeur professionnel, j'ai commencé à apprendre sérieusement le C # et le Javascript.
Maintenant, ne vous méprenez pas ici - je pas préconisant que vous essayez d'être un Jack of All Trades. Dans le cœur et dans le commerce, je suis toujours un programmeur PHP. PHP est mon pain et mon beurre, et je le connais à l'intérieur comme à l'extérieur. Cependant, mes compétences PHP ne sont pas devenues ce qu'elles faisaient juste PHP. Voici quelques concepts très importants que je n'ai pas compris de PHP, bien que j'y travaille professionnellement.
Je pourrais continuer ainsi que beaucoup d'autres sur ce site pendant des jours. Même si je suis un programmeur PHP PHP, j'ai pu ramener tous ces autres concepts merveilleux avec moi dans le travail que je fais tous les jours.
Quel est mon point? Apprenez C #. Devenez un maître de C # - vous aurez une longue carrière réussie et vous accomplirez probablement des choses incroyables. Mais ne le faites pas vous-même. Voyagez et goûtez à d'autres langues, environnements et concepts.
quand quelqu'un que je respecte respecte pense que c'est nocif.
Cela me rappelle une histoire impliquant Richard Feynman. Un étudiant de Caltech a demandé à l'éminent cosmologiste Michael Turner quel était son "parti pris" en faveur d'un type de particule comme candidat pour comprendre la matière noire, et Feynman a cassé et a dit "Pourquoi voulez-vous savoir son = biais? Formez le vôtre! ... Ne faites pas attention aux autorités, pensez par vous-même. "
Les programmeurs viennent de tous les horizons. Java est enseigné dans de nombreux lycées et collèges aujourd'hui, mais il n'avait même pas été inventé lorsque Joel Spolsky était à l'école. Il n'y a pas "un seul vrai chemin" quand il s'agit de devenir un bon programmeur. Il y a certainement des classiques comme SICP que la plupart des programmeurs rencontrent à un moment donné, mais il n'y a pas de norme stricte et rapide. L'essentiel est de commencer quelque part et de se concentrer sur la construction de concepts. Un excellent programmeur une fois dit quelque chose comme:
Les mauvais programmeurs se concentrent sur le code, les bons programmeurs se concentrent sur les algorithmes.
Je pense que C # est un bon langage pour commencer, mais je vous préviens de vous méfier de Visual Studio. C'est un formidable IDE, mais si vous faites glisser un DropDownList
et liez un GridView
à un ObjectDataSource
et utilisez un contrôle Button
pour créer un DropDownList
recherche basée, alors la plupart du travail est effectué par le IDE et vous n'êtes pas vraiment en train de programmer. Profitez des outils des IDE, mais essayez toujours de construire des concepts et de développer des connaissances.
Je suis juste un junior, mais avec toute l'humilité et le respect pour ceux qui sont infiniment plus expérimentés, je dois avouer que je n'ai pas cette attitude non plus.
Un programmeur a commenté ci-dessous la réponse de Joel: " en tant que quelqu'un qui a dû se cogner la tête sur le bureau par rapport aux" programmeurs "qui étaient fortement recommandés pour leurs capacités C #, mais ne pouvaient pas faire des choses simples comme implémenter une classe de base très bien documentée, trouver des fuites de mémoire dans les programmes c et c ++ " ...
Mais pourquoi la recherche de fuites de mémoire dans les applications C++ doit-elle être simple pour quelqu'un qui jamais prétend connaître le C++? :) Je ne comprends pas. C'est comme critiquer un psychologue pour son manque de compétences dentistes. Je ne suis sûrement pas un bon programmeur, mais je pense que ce n'est pas parce que je ne connais pas le C++ - c'est parce que je ne connais pas assez bien le framework et les langages que j'utilise am.
"ne pouvait pas faire des choses simples comme implémenter une classe de base très bien documentée (...) ou simplement résoudre un problème par lui-même ou apprendre une nouvelle idée même à un rythme modéré"
D'accord, mais - la corrélation ne signifie pas la causalité, et qu'est-ce qui nous fait supposer que leur manque de compétences générales en programmation - ce dont je ne doute pas - est un résultat de leur choix de langue?
Ou un effet de C # étant leur premier langage de choix, d'ailleurs?
Je peux voir d'autres explications plausibles (peut-être que C # est juste à la mode, et donc il attire beaucoup de novices ... la plupart des gens pour qui C # est la première langue n'ont pas programmé très longtemps pas du tout, et c'est plus un handicap en soi que de ne jamais programmer dans une autre langue ... etc., etc.).
Pour moi, ces trucs dans cet autre article semblaient un peu radoteurs élitistes. Oui, je recommande fréquemment SICP aux développeurs sérieux qui veulent vraiment s'améliorer, mais seulement à ceux qui veulent aller au-delà de la "norme" et apprendre la profondeur la magie. En effet, pendant des années SICP était le texte de programmation standard MIT freshman; mais, beaucoup de programmeurs qui fonctionnaient bien n'avaient jamais eu le possibilité de fréquenter cette institution fine mais chère et très sélective.
Alors que je recommande, en réponse à votre question? Commencez avec ce que vous avez et apprenez à penser comme un programmeur, plutôt que d'apprendre simplement un langage spécifique.
S'il vous arrive d'avoir une implémentation C # disponible, eh bien, je peux vous dire que c'est un langage parfaitement bien pour un travail rigide comme moi, tout comme Java, JavaScript, Python, Ruby, Scala, Scheme et les nombreux autres langages que j'ai appris au fil des ans. En fin de compte, j'essaie de sélectionner les bonnes langues et les bons outils pour le travail spécifique à accomplir, ce qui signifie changer de langue comme les chapeaux.
Il n'y a rien de mal à utiliser des façons amusantes d'apprendre, comme approcher Ruby via Why's Poignant Guide et Shoes (comme je l'ai recommandé dans - n autre post récent ). Il y a des voies mystérieuses et mystérieuses, comme se cogner la tête contre Le petit intrigant et Le intrigant chevronné sur le chemin de - SICP . De nombreux penseurs modernes voudraient que vous ignoriez tous ces trucs universitaires et "d'entreprise" plus anciens et que vous plongiez directement dans JavaScript, JQuery et HTML5 à la place. Il existe de nombreuses façons pour commencer alors ne perdez pas trop de temps. Choisissez-en un et obtenez le codage!
De façon réaliste, je crois que peu de professionnels travaillant de nos jours vous enverraient en arrière pour apprendre Assembleur ou C/C++ en premier. Franchement, s'ils le faisaient, je ne pense pas qu'ils vous rendraient beaucoup de services.
Donc, pour embellir un peu "commencez avec ce que vous avez", j'ai trois autres conseils:
J'ai commencé avec FORTRAN IV et QBASIC et si ceux-ci ne me ruinaient pas, C # ne vous ferait pas de mal non plus! Bonne chance et assurez-vous de vous amuser pendant que vous apprenez!
Le centre de votre question et de nombreuses réponses ici est sur C #. De Wikipedia :
Le langage C # est destiné à être un langage de programmation simple, moderne, polyvalent et orienté objet.
Sur cette base, il semble sûr de dire que vous pourriez apprendre le C # comme première langue sans causer de dommages à long terme à votre cerveau. Je ne pense pas que Joel condamnait la langue entière, cependant, quand il a écrit :
Les tentatives de prendre un raccourci et d'aller directement à l'apprentissage de la chose exacte que vous voulez apprendre maintenant (comme commencer avec C # et ASP.NET) sont condamnées.
Le problème n'est pas la langue, il prend des raccourcis. Trop souvent, les gens essaient de prendre un chemin rapide vers leur objectif final en suivant des didacticiels pas à pas ou des livres "tout apprendre en 24 heures". Vous n'avez pas besoin de passer trop de temps sur Stack Overflow avant de commencer à remarquer qu'il y a beaucoup de questions du type: "Je n'ai jamais écrit de ligne de code de ma vie, mais j'entre dans l'iPhone programmation! Quelqu'un peut-il me donner des instructions étape par étape pour faire exactement ce que je veux faire? Merci! " Je ne dis pas que vous adoptez cette approche, mais c'est quelque chose contre lequel vous devez vous prémunir.
Si vous souhaitez développer de solides compétences en programmation, vous devez commencer par acquérir des compétences fondamentales. Si vous essayez de passer directement à OOP et applications GUI et autres, vous allez probablement manquer ces principes fondamentaux. Les livres que Joel a pointés sont en effet très bons. Je n'ai fait que parcourir le - Livre jaune C # (PDF), mais il semble que ce soit probablement une meilleure introduction à la programmation que la plupart des livres C # que je vois dans les magasins.
Je dirais qu'apprendre une langue et s'en tenir à est plus une erreur que de décider avec quelle langue vous devriez commencer. Il y a certaines langues que vous pouvez apprendre qui sont plus faciles bien sûr, mais il est préférable d'essayer de commencer à en apprendre une que vous utiliserez beaucoup (dans une école, le choix de la langue est déjà fait par l'école). Après avoir correctement appris un langage et l'avez utilisé activement après quelques mois, vous devriez essayer un autre langage de programmation et comparer.
Dans .NET, vous pouvez facilement utiliser deux ( sorte de) langages de programmation différents, car vous pouvez basculer entre Visual Basic et C #. Ainsi, vous pouvez apprendre Visual Basic et voir quelles sont les différences. À ce niveau, vous devez maîtriser le codage procédural de base avec les trois structures de programmation de base, si vous pouvez être créatif avec elles toutes (et savoir comment utiliser les variables), alors vous êtes sur le point de devenir un excellent programmeur:
Peu importe si votre langage de programmation secondaire sera le plus actif ou non, sachant simplement que les langages de programmation (spécialement s'ils suivent le même paradigme) sont très similaires les uns aux autres et qu'il y a de petites nuances, cela va vraiment loin. pour vous faire comprendre le fonctionnement de la programmation logicielle.
À partir de cela, au moins une fois par an, essayez d'apprendre un nouveau langage de programmation qui en suivent un autre paradigme de programmation . Vous n'avez pas besoin de suivre complètement la nouvelle langue, mais il existe certains avantages à connaître d'autres paradigmes. Il existe plusieurs paradigmes, et certains langages de programmation se mélangent entre plusieurs (notez que C # a en fait des sous-ensembles des trois suivants):
Les choses les plus importantes que vous devriez apprendre sont que de nombreux langages de programmation suivent leur propre ensemble d'idiomes et une API de base. Donc, lorsque vous apprenez une nouvelle langue, essayez de bien apprendre ces idiomes et API et tout ira bien lorsque vous construirez des choses. Une bonne raison est que vous deviendrez meilleur dans la conception et la résolution de problèmes de programmation. Certains idiomes dans une langue peuvent vous donner un aperçu de la façon de résoudre un problème dans votre langue principale.
Sachez également qu'il existe également une autre très bonne raison pour laquelle vous devriez apprendre d'autres langages de programmation, autres que le langage principal que vous utiliserez le plus: Vos chances d'emploi sont bien plus grandes.
Je pense que le meilleur conseil que j'ai jamais vu en ce qui concerne les gens qui demandent "Quelle langue dois-je apprendre?" c'est tout simplement: un bon programmeur peut travailler dans n'importe quelle langue.
Il y a des arguments contre cette affirmation, j'en suis sûr, mais le fait est: apprenez d'abord à être un bon programmeur, au lieu d'un expert en langue. Les constructeurs ne se spécialisent pas dans la construction sur exactement une parcelle de terrain, ils apprennent les compétences de leur métier et les appliquent sur la parcelle de terrain sur laquelle ils sont requis.
Parfois, je soupçonne que les langues de choix ont beaucoup plus à voir avec nos personnalités et leur manière d'être câblées et beaucoup moins à faire avec des considérations pratiques ou académiques que nous aimerions l'admettre.
Cela dit, apprendre de nouvelles choses n'est jamais dangereux. Vous saurez le jour où vous avez franchi le seuil vers un cerveau évolué ou peut-être brisé (tout cela est une question de perspective, je suppose) lorsque vous commencez à réaliser que tout a un manuel. Vous pouvez finalement vraiment faire tout ce que vous voulez si vous avez du talent et êtes réellement intéressé par le faire plutôt que par l'aspect être d'un programmeur.
Au moins jouer avec Python et JavaScript. C'est un avantage d'apprentissage certain de pouvoir vraiment écrire du code et le regarder s'exécuter immédiatement dans un environnement de console accessible aux E/S de fichiers comme IDLE ou un sandbox environnement comme un navigateur. Ce que je n'aime pas à propos de C # et Java c'est qu'ils veulent que tout soit confiné aux classes même si vous écrivez simplement une fonction simple avec des wrappers inutiles autour pour garder votre pairs ou un compilateur trop restrictif heureux. L'autre chose que j'aime à propos de JS et Python est qu'ils vous permettent vraiment de définir votre propre paradigme. Un peu trop flexible par beaucoup de préférences des développeurs. Je ' Je ne sais toujours pas quoi penser de la sagesse de surcharger les opérateurs de base, mais je suis presque sûr que j'aime Python pour avoir autorisé l'option.
Ne tombez pas non plus dans le mensonge cruel de choisir la langue principale avec le plus d'offres d'emploi. Il vaut mieux être un gros poisson dans les eaux moyennes qui fait ce que vous aimez qu'un membre d'une horde de poissons insupportables pour la plupart merdiques qui transforment chaque recherche d'emploi en une loterie plus qu'un processus d'appariement.
C # n'est pas aussi mauvais que Java par un tronçon considérable. Ils ont un meilleur support pour de nombreux concepts comme la programmation fonctionnelle, la programmation générique, la destruction déterministe et les types de valeur, la surcharge d'opérateur, etc. Leur support pour ces Les fonctionnalités pourraient encore utiliser beaucoup de travail, bien sûr, mais c'est bien mieux que Java, même s'il ne s'agit pas de C++.
Deuxièmement, je pense que vous avez mal lu ce que Joel a dit. Si vous pouvez maîtriser les pointeurs et la récursivité, peu importe la langue que vous utilisez maintenant. Le plus important serait d'utiliser un peu de code unsafe
, de maîtriser unsafe quicksort
ou quelque chose, puis revenir au reste du C # normal.
Oh, et lisez :)
Le premier langage productif pour moi était C #. Même si j'avais joué avec Foxpro à l'école et un peu de C au Collège. C # est un bon point de départ pour tout le monde. Il suit les principes généraux de la programmation comme le typage fort, l'encapsulation, l'héritage, etc. que je crois qu'il faut toujours apprendre, peu importe s'ils les utilisent ou non. Plus tard, vous pouvez toujours passer à d'autres langages comme Python qui ne suit pas la standardisation de la programmation fondamentale.
L'autre facteur d'ajout que les gens n'ajoutent pas vraiment à l'aspect d'apprentissage de C # est la disponibilité du meilleur IDE pour n'importe quelle langue que j'ai vue. Eclipse IDE c'est bien aussi, mais une fois que vous aurez utilisé Visual Studio, vous remercierez Microsoft.
C # étant amélioré par rapport à C, vous évite d'avoir à apprendre d'autres langues au préalable. Tous les langages sur une dizaine d'années ont évolué à partir de la nature du C, même le Java.
Donc, le verdict est, C # est un excellent point de départ qui vous permet d'apprendre rapidement d'autres langues à l'avenir
Apprendre le C # comme première langue n'est pas une erreur tant que vous passez tôt ou tard à l'apprentissage d'une deuxième langue. C'est beaucoup plus important. Encore mieux si cette seconde langue est quelque peu différente de C # (javascript ou Ruby serait à cet égard meilleur que Java). Chaque langue a ses avantages et ses inconvénients, et ce sont les différences qui vous feront un meilleur programmeur à long terme.
Ne vous inquiétez pas du fait que vous avez appris le C # en premier. C'est comme s'inquiéter que votre premier pas ait été fait avec votre pied gauche ou droit. La seule différence entre l'apprentissage d'une langue gérée en premier est que vous retardez simplement lorsque vous devez apprendre des pointeurs et une gestion détaillée de la mémoire. Cela peut réellement fonctionner en votre faveur, car quand il est temps d'apprendre C, la seule nouvelle chose dont vous vous inquiétez est la gestion de la mémoire - vous ne jonglerez pas également avec la tentative d'apprendre les structures de contrôle, le concept de fonctions, etc. pouvoir se concentrer entièrement sur les pointeurs et la gestion de la mémoire.
Le stéréotype existe parce qu'il y a des programmeurs de langage managé qui n'ont jamais fait cette deuxième partie et appris le C et C++, puis appliqué aux travaux C et C++.
C'est comme apprendre un instrument de musique - le premier est difficile parce que vous essayez d'apprendre les mécanismes de lecture de la musique écrite ET les mécanismes physiques d'articulation d'un instrument pour faire ce que vous voulez. Pour le deuxième instrument et les suivants, vous apprenez que vous pouvez vous concentrer uniquement sur ce qui rend cet instrument différent de ce que vous connaissez déjà.
C'est dur pour le novice, sans aucun doute. J'ai fait vb, javascript, PL/SQL, T-SQL, Uniface et un peu de C # pour n'en nommer que quelques-uns.
Quelqu'un a mentionné précédemment Visual Basic comme l'endroit où ils ont appris la programmation orientée objet, et pour être honnête, VB.NET a la syntaxe la plus facile à comprendre de tous les langages que j'ai jamais vus. La meilleure caractéristique est que les mots clés correspondent étroitement aux concepts décrits.
par exemple. Fonction myHandler () gère myButton.click
ou Class Human Extends mammifère implémente intelligentLifeform
Sérieusement, pour plus de lisibilité lorsque vous êtes novice, à quoi voudriez-vous que la syntaxe ressemble?
Lorsque vous recherchez des propriétés et des méthodes (et distinguez les sous-fonctions et les fonctions), il est beaucoup plus facile de lire dans VB.
De même lors de la déclaration de variables
Dim myString As string - évident quel est le type et quelle est l'instance
La sensibilité à la casse C # encourage ce qui est pour moi une très mauvaise habitude - avoir le même nom pour la classe et l'instance avec un en majuscule et un en bas.
par exemple.
Humain humain
si vous appelez human.think, il serait facile de confondre une instance pour une classe et de penser que vous appeliez une méthode statique en un coup d'œil. Et regarder est souvent la façon dont nous percevons le code, nous n'avons pas le temps de survoler chaque élément pour laisser l'éditeur nous dire ce qui se passe.
C # pourrait avoir certains avantages, mais il est beaucoup plus difficile de commencer - même s'il enregistre la saisie. C'est pourquoi il devrait définitivement y avoir une place pour les deux langues.
Autant que je vous conseille d'apprendre de nombreuses langues (comme le suggèrent les autres), assurez-vous de connaître une (ou deux) langue (s) que vous apprenez très bien.
Le risque de connaître de nombreuses langues est que vous pourriez ne jamais apprendre une langue complètement frustrante lorsque vous voulez réellement résoudre un problème.
Connaître la construction for-loop dans de nombreuses langues est amusant mais inutile si vous ne savez pas comment gérer les erreurs dans aucune d'entre elles.
Le plus gros inconvénient que je peux voir est que Visual Studio et les outils associés sont très, très gentils - des choses comme intellisense et la complétion de code peuvent facilement devenir des béquilles. Je dirais généralement que l'environnement peut être si agréable et si favorable que vous avez tendance à vous sentir un peu perdu lorsque vous devez, par exemple, aller pirater Ruby code dans un éditeur de texte. Oh, et vous manquerez généralement des trucs comme linq aussi.
C # est parfaitement adapté pour commencer la programmation.
C'est ce qu'on m'a dit de commencer, sans même avoir la chance de me plonger dans autre chose (à part le Hello World en Java, quelques trucs de base de LOGO et quelques trucs dans Scratch, mais rien de "sérieux").
Dans l'ensemble, cela peut être difficile - il y a beaucoup de choses qui ne semblent pas intuitives, et elles ont leurs limites, mais je pense que cela encourage un bon codage et est génial une fois que vous avez compris. Je veux dire, cela vous donne plus de puissance et est un peu plus professionnel que Python (ce qui est généralement suggéré), et cela ferait une différence: essayer C++ après C # n'était pas trop douloureux, mais si je avait commencé avec Python, ce serait en effet un très gros obstacle, même juste au niveau de la syntaxe.
En outre, il a un bon support multiplateforme sous la forme de Mono (pour ceux d'entre vous qui pensent que Mono n'est pas un gros problème - le moteur de jeu Unity vous permet de coder dans une version de celui-ci). Il est également très utile pour la plupart des choses, qu'il s'agisse de scripts de jeu, de conception Web ou d'applications Windows. Bien sûr, certains langages seront meilleurs pour certaines lignes, donc cela dépendra de la direction générale dans laquelle vous prévoyez d'aller - par exemple, si vous allez dans la direction Web, alors C # (ASP.NET) serait certainement un bonne idée. Si vous prévoyez de vous lancer dans les jeux, vous devriez plutôt penser au C++.
En fin de compte, cela vaut la peine de l'apprendre, même si vous ne finissez pas par l'utiliser en faveur de la simplicité de Python ou de la nature archaïque de Java (comme la version cycle pour Java est VRAIMENT lent) - vous apprenez de bonnes pratiques de codage, tout en n'étant pas trop compliqué pour un débutant.