Ces jours-ci, j'investis massivement dans les structures de données et les algorithmes et j'essaie de résoudre certains casse-tête de programmation.
J'essaie de coder et de résoudre avec Java et Clojure.
Suis-je en train de perdre mon temps? dois-je investir davantage dans des technologies et des frameworks que je connais déjà afin d'acquérir des connaissances plus approfondies (les tenants et les aboutissants) et pouvoir coder avec eux plus rapidement?
En étudiant les structures de données et les algorithmes, vais-je devenir un meilleur programmeur ou ces sujets ne sont-ils importants que pendant les années collégiales?
Réponses:
Il est tout à fait possible de consacrer la majeure partie / la totalité de votre carrière à un travail important et utile, avec une connaissance minimale des algorithmes et des structures de données.
Le niveau minimum de connaissance des algorithmes et des infrastructures de données, pour réussir, vous obligera à:
Il n'y a pas de * maximum * . Si vous le souhaitez, vous pouvez porter votre étude au niveau du doctorat et au-delà. Son utilité est directement liée au type d'emplois qui vous intéressent et au type de travail que vous trouvez le plus intéressant et le plus gratifiant.
Cela dit, à titre indicatif (mais pas absolu), plus le langage, le cadre et l'application sur lesquels vous travaillez seront bas, plus gourmands en ressources et moins automatisés, plus le niveau de compétence requis sera élevé aux algorithmes et aux structures de données. Par exemple, implémenter l'algorithme d'Ukkonen dans l'assemblage signifiera probablement, mais pas nécessairement, une maîtrise de l'algorithme et des structures de données impliquées.
Dans votre situation spécifique, passant d'un environnement de développement Java à un travail sur les iO, toutes choses étant égales par ailleurs, attendez-vous à une demande légèrement plus élevée sur votre compréhension générale des algorithmes et des structures de données. Vous voudrez pouvoir exécuter efficacement sur un appareil avec moins de ressources disponibles. Attendez-vous également à ajouter quelques nouvelles catégories à votre arsenal - plus particulièrement, vous voudrez en savoir plus sur la gestion de la mémoire.
la source
Non. Si vous débutez, essayez de vous familiariser avec des choses comme la programmation d'interface utilisateur et tout cela vous retient. Finalement, vous devez vous y rendre et apprendre des cadres plus larges ... comment utiliser les structures de données et les algorithmes qu'AUTRES personnes ont écrits. Lorsque vous débutez, il est bon de s'en tenir aux problèmes de portée limitée.
Les algorithmes et les structures de données sont fondamentalement la base de tout, même si vous n'écrirez probablement jamais l'un des vôtres une fois que vous aurez passé le stade de débutant. Les connaître, ou du moins les avoir connus, fera de vous un meilleur développeur au final. Vous saurez quand et pourquoi les utiliser car vous saurez COMMENT ils fonctionnent. De plus, rendre vos algorithmes et structures de données génériques afin qu'ils puissent fonctionner avec n'importe quel type ou type avec l'interface X EST vraiment quelque chose que vous utiliserez pour le reste de votre carrière.
Je vois trop de gens sauter dans des choses comme Qt qui finissent par poser des questions qui ne montrent aucune connaissance du C ++ (par exemple). Ils essaient de sauter trop d'étapes et à la fin cela leur prend plus de temps pour apprendre. Je dirais que tu es sur la bonne voie.
la source
Vous ne perdez pas votre temps.
Si, au cours de votre travail, vous devez utiliser un outil ou un cadre que vous n'avez pas utilisé auparavant, vous l'apprendrez et vous l'utiliserez.
Cependant, si vous devez utiliser une structure de données ou un algorithme que vous n'avez pas utilisé auparavant, il est probable que vous ne saurez même pas qu'il existe, et vous résoudrez votre problème en utilisant une technique horriblement sous-optimale qui prend beaucoup plus l'effort et les échelles terriblement.
Ce que j'essaie de dire, c'est le genre de choses que vous n'apprendrez pas seulement en faisant, vous devez l'apprendre en apprenant , soit dans une situation académique, soit par un investissement personnel d'effort, car vous êtes en train de faire maintenant.
la source
Dans la pratique, sachez quelles sont les structures de données disponibles, quelles sont leurs caractéristiques de complexité, où en obtenir de bonnes implémentations et où vous conservez votre copie d' Introduction aux algorithmes pour consulter les détails plus tard.
la source
Si c'est ce qui vous rend heureux, vous devez absolument vous y tenir. Si vous craignez de ne pas appliquer suffisamment de théorie, envisagez un projet lourd en théorie. Créez un petit langage de programmation, comme Potion , à partir de zéro. Une implémentation complète utilisera des tables de hachage, des graphiques, des arbres et un large éventail d'algorithmes. Si cela semble intéressant, vous pouvez approfondir l'optimisation, la génération de code natif ou l'extensibilité utilisateur.
Vous deviendrez un meilleur programmeur lorsque vous restez intéressé et concentré, pas lorsque vous travaillez sur des projets qui semblent pratiques mais un peu ennuyeux.
Au fond du terrier du lapin, Dorothy!
la source
J'ai passé beaucoup de temps à pirater en C / C ++ avec OpenGL. Je connais assez bien les langages et l'API ... et je suis devenu un développeur et programmeur raisonnable à cause de cette expérience. Cela dit, les connaissances algorithmiques réelles nécessaires pour résoudre les différents problèmes rencontrés ne sont que vraiment en mesure de comprendre.
Parlant d'expérience personnelle, se concentrer sur la création d'applications va être une perte de temps si vous ne connaissez pas la théorie derrière les domaines problématiques qui se rapportent à ce que vous essayez de construire.
Pour de nombreux types de logiciels différents, ces domaines découleront des principes fondamentaux que vous apprendrez en étudiant les algorithmes, en plus de leur propre théorie spécifique basée sur une niche (par exemple, l'algèbre linéaire en infographie, la théorie des nombres / informations en cryptographie, etc.).
Vous n'avez pas nécessairement à devenir un sorcier en informatique derrière tout, mais faire ce que vous faisiez au moment de ce post est un chemin très, très nécessaire pour descendre au moins une fois dans votre parcours de programmation - indépendamment du fait que ils ne sont pas autodidactes.
la source
Je suppose que si vous ne les connaissez pas bien, vous ne trouverez aucune raison de les utiliser. Il me semble que je leur trouve tout le temps des utilisations. Mais je dois admettre qu'avec les améliorations apportées aux génériques au cours de la dernière demi-douzaine d'années, le besoin de rouler le vôtre se produit de moins en moins fréquemment. Cela ne supprime toujours pas les avantages de savoir comment et quand les utiliser et ils peuvent grandement simplifier le code autrement compliqué.
la source