Comme je suis dans mon année de carrière de départ dans le développement de logiciels (C ++ & C #), je vois maintenant mes défauts et ce qui me manque dans cette sphère. À cause de cela, je suis entré dans certaines conclusions et je me suis préparé à combler ces lacunes et à accroître mes connaissances en développement de logiciels. Mais la question que j'ai trébutée après avoir fait une tâche que je dois faire n'a pas une réponse assez évidente pour moi. Quelle est la priorité de ces tâches? Voici ces tâches et ma priorité en numérotation: p>
apprendre: p>
Êtes-vous d'accord avec ces tâches et priorités? Ou dois-je manquer quelque chose ici? Toute suggestion est la bienvenue! P>
8 Réponses :
dépend entièrement de ce que vous faites. P>
J'adorerais savoir lequel vous apprenez d'abord à ce qui vous aiderait le plus avec votre emploi actuel. P>
J'adore déjà la technologie de l'entreprise C ++ et le développement Web autant que possible à mon travail à temps plein. Mais après le travail, je veux me concentrer sur des choses universelles qui sont nécessaires pour aiguiser mes compétences encore mieux :)
Vous adapter votre auto-formation à votre emploi actuel est un excellent moyen de vous échapper et de vous assurer que votre compétence manque de la diversité nécessaire pour vous permettre de faire de précieuses sauts d'intuition.
Les structures de données et les algorithmes vous aideront quelle que soit la langue que vous utilisez. Je travaillerais d'abord dessus. Ensuite, des motifs de conception (n'importe quel langage OOP en bénéficiera). La programmation fonctionnelle est belle, mais pas nécessairement une priorité absolue. P>
Si penserait que la programmation fonctionnelle serait faible en priorité depuis que les langues que vous utilisez sont de nature de nature, je penserais à dépenser quelque temps dans les modèles de conception et sur les spécificités de la langue elle-même serait plus utile. p>
Je lisez à la fois GOF et HEADPIRST, HEADPIRST est probablement le plus facile et le plus amusant du 2 mais beaucoup plus épais. Vous devriez probablement regarder les modèles de conception d'entreprise, comme la page de Martin Fowler's Page http://martinfowler.com/aacatalog/ p>
Quel champ pensez-vous travailler? Jeux ? La toile? Cela décidera probablement de l'importance de la partie d'algo. P>
Applications Web et de bureau. Principalement l'entreprise - Logictis, commerce électronique, entreposage et systèmes ERP. Mais principalement, je veux être un peu universel.
Je dirais que vous devez d'abord comprendre (même si vous ne vous souvenez pas) des algorithmes de base et des structures de données. (Utilisez Knuth and Cormen), puis chercher à apprendre l'architecture (les modèles de conception sont ici ..) .. La programmation fonctionnelle n'est qu'un type de programmation et est obligatoire. Il existe de nombreux grands programmeurs qui n'utilisent pas de programmation fonctionnelle, mais je suppose que pour toutes sortes, vous devez d'abord connaître les algorithmes de base et les structures de données. P>
écrire beaucoup de code. Essayez de le faire mieux à chaque fois. Travailler de temps en temps avec plus de personnes âgées, qui peuvent fournir des éloges de guidage et une correction douce. P>
La question était ce que i> apprendre, pas comment i>. Même dans ce contexte, la réponse est désespérément générique.
Je dirais que # 2 va d'abord, surtout si vous envisagez d'utiliser C ++ / C # au travail, la bonne commande des structures de données et des algorithmes vous donnera un avantage. Je vois n ° 1 et n ° 3 comme des chemins quelque peu parallèles, mais j'ai quelques suggestions: commencez par la tête de premier livre pour les modèles, le GOF ressemble plus à un livre de référence ainsi que la notation et la langue peuvent être assez abstruus. En ce qui concerne la programmation fonctionnelle, puis-je suggérer de clojure au lieu de Scala? Je suis convaincu que une langue "comme FunEn-First" (comme F # ou Clojure) vous obligera à penser à fonctionner (une bonne chose) au lieu de simplement corriger vos compétences O-O / impératifes. P>
Merci de suggestion sur la langue fonctionnelle. J'ai essayé Scala et mon code était totalement orienté objet: / J'ai également lu beaucoup de bien sur la programmation fonctionnelle qui vous fait penser plus abstrait et contribue à trouver des solutions meilleures et plus belles dans OUP. C'est les deux raisons principales que j'ai choisi cette langue. Je vais certainement regarder dans le clojure à mon temps libre :)
Je pense que vous l'avez à l'envers. Commencez par des motifs de conception, ce qui vous aidera à réduire le montant du code désordonné que vous produisez et à comprendre un meilleur code réalisé par d'autres personnes (en particulier les bibliothèques écrites avec des modèles de conception à l'esprit). P>
En plus du livre de quatre , Il existe de nombreux autres livres de modèle - Modèles d'architecture d'applications d'entreprise < / a>, par exemple. Cela pourrait être la peine d'être regardé après em> vous avez une bonne mise à la terre. Mais je recommande aussi fortement Conception de domaine pilotée , que je Pensez vous donner une façon de penser à la structure de votre programme, au lieu de simplement identifier des pièces ici et là. P>
Suivant Vous pouvez aller avec des algorithmes. Je préfère Le manuel de design d'algorithme de Skiena , dont l'accent est mis sur l'accent Plus d'informations sur les gens de savoir comment sélectionner et utiliser des algorithmes, ainsi que de les construire de "parties" bien connues que d'obtenir des gens à savoir faire des preuves sur les algorithmes. Il est également disponible pour Kindle, ce qui m'a été utile. P>
Aussi, obtenez un bon livre de structures de données - les gens négligent souvent cela. J'aime le Manuel des structures de données et des applications , bien que Je suis également à la recherche de Structures de données avancées . < / p>
Cependant, je ne peux pas vous recommander TopCoder ou Euler pour cette tâche. Topcoder est, IMHO, surtout du code d'écriture rapide. Rien de mal à ce sujet, mais il est difficilement susceptible de faire une différence sur des trucs quotidiens. Si vous l'aimez, tout cela le faites. En outre, il s'agit d'une excellente préparation pour les entretiens d'emploi avec les entreprises les plus techniquement techniquement. P>
Project Euler , d'autre part, est beaucoup plus ciblé sur l'informatique scientifique, la science informatique et la programmation fonctionnelle. Ce sera un excellent terrain d'entraînement lors de l'apprentissage de la programmation fonctionnelle. P>
Il y a quelque chose qui a un peu de motifs de conception, algorithmes et em> programmation fonctionnelle, qui est Éléments de la programmation . Il utilise c ++ pour ses exemples, qui est un plus pour vous. P>
Quant à la programmation fonctionnelle, je pense que c'est moins urgent que les deux autres. Cependant, j'indique que Clojure ou Haskell au lieu de Scala. P>
Apprendre la programmation fonctionnelle à Scala est comme apprendre l'espagnol dans un quartier caribbean, tout en apprenant la programmation fonctionnelle dans Clojure est comme apprendre l'espagnol à Madrid, et l'apprentissage en programmation fonctionnelle Haskell est comme apprendre l'espagnol dans un monastère isolé en Espagne. : -) p>
L'esprit vous, je préférez em> scala en tant que langage de programmation, mais je savais déjà FP quand je suis arrivé. p>
Lorsque vous arrivez à la programmation fonctionnelle, obtenir Chris Okasaki Purement structures de données fonctionnelles , pour une bonne mise à la terre sur des algorithmes et des structures de données pour la programmation fonctionnelle. p>
Au-delà de cela, essayez d'apprendre une nouvelle langue chaque année. Même si ce n'est pas pour la langue elle-même, vous êtes plus susceptible de rester au courant de ce que les gens font de nos jours. P>
+1 pour le rire: "Haskell est comme apprendre l'espagnol dans un monastère isolé en Espagne"
Je pense qu'en général, les sujets que vous avez cueillies sont très importantes, et que je vous donne la chance de faire quelque chose de plus que les trucs ennuyeux de d'habitude. Cependant, je crois que l'ordre devrait être quelque chose comme ceci: p>
Mon opinion est que les structures algorithmes et de données devrait être le premier. Il est très difficile d'algorithmes d'étude si vous avez beaucoup d'autres choses que vous dirigez (bonnes pratiques de codage, beaucoup de paradigmes de programmation, etc.). De plus avec le temps, les gens ont tendance à devenir plus paresseux, et de perdre la patience d'entrer dans les idées de cette question complexe. D'autre part, manque une compréhension fondamentale sur la façon dont les choses peuvent se faire représenter ou fonctionnent, peut conduire à de graves lacunes dans la compréhension quoi que ce soit plus sophistiqué. Donc, en supposant que vous avez des idées sur la programmation impérative (le tаught habituel des choses dans les cours d'introduction), vous devez améliorer vos connaissances avec des structures d'algorithmes et de données. P>
Il est important d'avoir une compréhension de base au moins d'autres paradigmes. La programmation fonctionnelle est un bon exemple. Vous pouvez également envisager de se familiariser avec la programmation logique. Ayant connaissance de base des algorithmes et structures de données vous aidera beaucoup à comprendre comment un tel travail de langues. Je ne sais pas si Scala est la meilleure langue à cette fin, mais fera probablement. Vous pouvez choisir quelque chose de plus classique comme Lisp ou Scheme. Haskell est un langage intéressant. P>
A propos des Design Patterns ... sachant modèles de conception vous aideront à faire la conception orientée objet, mais vous devriez être au courant, que les modèles de conception sont tout simplement un ensemble de solutions aux problèmes populaires. Sachant Design Patterns est nullement la même que de savoir comment concevoir des logiciels. Afin de vous améliorer les compétences de conception de logiciels, vous devriez étudier d'autres matériaux aussi. Un bon exemple d'où vous pouvez obtenir la compréhension de ces concepts est le livre de code complet, ou le MIT cours 6,170 (ses matériaux sont accessibles au public). p>
À un moment donné, vous devrez entrer dans les détails d'un cadre spécifique (ou cadres) que vous aurez besoin pour ce que vous faites. Gardez à l'esprit que ces cadres changent, et vous devriez être en mesure d'adapter et d'apprendre de nouvelles technologies. Par exemple, sachant ASP.NET MVC maintenant, peut-être sans valeur 5 ans à partir de maintenant (ou ne pas être, qui sait?). P>
Enfin, gardez à l'esprit, que peu importe ce que vous lisez, vous devez pratiquer beaucoup, ce qui aide la résolution de problèmes, l'écriture de code, conception de logiciels, etc. La plupart de ces concepts ne peut pas être facile à expliquer, ou même exprimé avec mots, vous aurez donc besoin d'atteindre la plupart d'entre eux par vous-même, (qui est, vous aurez besoin de réinventer la roue à plusieurs reprises). p>
Bonne chance avec votre carrière! P>
K, qui descendit la moitié des réponses sans même commentaire?
Ouais, foule difficile aujourd'hui. Peut-être que c'est juste après un long week-end? :)
Parfois, j'ai même peur de poser des questions ici. Parce que les gens vont levoir par une raison quelconque ...