Me préparer à l'avenir en apprenant à programmer [fermé]

10

Je veux apprendre à programmer de manière «évolutive», si vous le souhaitez. Bien que Windows domine le marché des systèmes d'exploitation de bureau (pour l'instant), il est évident qu'il y a beaucoup de valeur à apprendre ses langages / cadres / API, etc. - cela pourrait être sujet à changement à mesure que de nouveaux appareils émergent ou que Windows se tire dans le pied (sur les aperçus conviviaux de Windows 8 ne semblent pas trop attrayants ...).

Aurais-je raison de penser qu'avoir une solide connaissance de C / C ++ pour la logique dorsale / la programmation de bas niveau et similaires, combinée à un langage extrêmement portable comme Java pour les interfaces graphiques et ainsi de suite, serait une bonne base pour le développement de logiciels qui se révélera utile sur la plupart des systèmes? - Je parle de PC de bureau, de tablettes, de téléphones.

Anonyme
la source
11
Il n'y a rien de tel
Job
Construisez une tanière et remplissez-la de livres.
Edward Strange
4
Construisez une tanière et remplissez-la de nourriture en conserve. Le programmeur le plus à l'épreuve du temps est le programmeur vivant après l'apocalypse.
Tom Anderson
1
N'apprenez pas les langages de programmation ou le codage, mais surtout apprenez la programmation et cela prend de nombreuses années , près de dix ans, et vous devriez continuer à apprendre toute votre vie
Basile Starynkevitch

Réponses:

31

Si vous voulez être à l'épreuve du temps, le meilleur conseil que je puisse vous donner n'est pas de vous enfermer dans une technologie.

Alors, n'apprenez pas les API à l'aveuglette. Apprenez comment ils sont conçus. Quelles sont les philosophies derrière la scène? Quels sont leurs avantages et leurs défauts? Pensez aux logiciels en général, pas à une technologie spécifique.

Vous pouvez également travailler sur une bonne conception de programme, aller à OOP et AOP est un bon choix OMI. Mais ne vous contentez pas de comprendre le mécanisme, travaillez vraiment sur la philosophie derrière le mécanisme.

Ne négligez pas l'informatique générale, comme les structures de données et les algorithmes, car ce sont des connaissances trans-technologiques qui sont toujours utiles.

Optez également pour les bonnes pratiques. Vous avez souvent une douzaine de façons de faire quelque chose, mais la plupart d'entre elles sont de la merde: sujettes aux bogues, difficiles à maintenir, difficiles à comprendre plus tard ou par un autre programmeur, etc. . . Habituellement, le code est plus difficile à lire qu'à écrire. Apprenez donc à consacrer un peu plus d'efforts à l'écriture pour faciliter la lecture (car vous lirez plus de code que vous n'écrivez).

Apprenez des techniques efficaces de débogage (utilisation intelligente du journal et du débogueur) et de test (comment écrire du code qui peut être testé facilement et comment automatiser ces tests).

Ensuite, vous aurez besoin d'une formation technologique générale. Je parle de connaissances très larges, comme le fonctionnement d'un processeur (le cache cache ou la prédiction de branche sont un bon début), sur les systèmes UNIX, sur les protocoles réseau comme IP, TCP et Ethernet, etc. . .

En fin de compte, apprenez à apprendre. Si vous savez apprendre, vous pouvez vous adapter.

Vous aurez besoin de solides connaissances dans des technologies spécifiques pour trouver un emploi, mais celles-ci sont obsolètes très rapidement (pensez à COBOL par exemple, ou à la programmation Web au moment de la guerre IE / Netscape). Ne comptez donc pas sur eux pour être à l'épreuve du temps. Ils seront essentiels pour être embauchés, mais certainement pas ce qui fait un excellent programmeur et ce qui rendra vos compétences durables au fil du temps.

EDIT: Si vous débutez, vous devriez définitivement faire quelque chose. Rien? Vraiment. Un jeu comme Tetris ou serpent est un bon début et amusant. Si vous ne faites pas avancer les choses, vous passerez beaucoup de temps à apprendre et n'obtiendrez vraiment pas l'expérience nécessaire pour bien comprendre ce que vous apprenez.

Prenons un exemple avec des modèles de conception. Les modèles de conception sont excellents et vous devez les utiliser définitivement. Mais s'ils sont surutilisés, ils rendront votre code compliqué et difficile à comprendre. Vous devrez faire face au problème qu'un modèle de conception résout et perdre du temps à essayer de le résoudre ou à ses effets secondaires pour bien comprendre en quoi consiste le modèle de conception. Les modèles de conception doivent être utilisés comme de petits refactorings au fil du temps lorsque le code se développe. Et vous saurez quand un modèle de conception est nécessaire lorsque l'avantage en est supérieur à la complexité du code induite par son utilisation. Cela nécessite de l'expérience.

Alors définitivement, faites avancer les choses, apprenez-les de vos erreurs. Je ne peux pas insister davantage: FAITES LES CHOSES !

deadalnix
la source
Bon ... Excellente * réponse et quelque chose que je comprends - je comprends la nécessité de comprendre le sujet de la «programmation» dans son ensemble, pas chacun des sujets que vous avez mentionnés. Je ne suis pas trop inquiet de trouver un emploi dans le domaine car j'ai un rôle bien rémunéré pour gérer un site de commerce électronique qui me plaira certainement pour le prévisible. Mon intérêt pour la programmation que je qualifierais de passe-temps sérieux, mais j'aimerais l'utiliser pour améliorer le flux de travail du mien et des autres au travail.
Anonyme
Ajout d'une modification pour rendre les choses plus claires en tant que point de vue débutant.
deadalnix
4

Ce qui sépare les bons programmeurs des mauvais, c'est leur capacité à programmer dans N'IMPORTE QUEL langage. Comme d'autres affiches l'ont noté, la connaissance de tout langage significatif orienté objet vous donnera les outils nécessaires pour créer d'excellents programmes et être en demande.

Aussi, si vous êtes encore à l'école, assurez-vous de prendre des cours d'écriture. Les meilleurs ingénieurs et programmeurs sont également ceux qui communiquent bien leurs idées.

Une fois que vous commencez à travailler, la meilleure chose à faire pour éviter d'être obsolète est de suivre les tendances actuelles. N'ayez pas peur de quitter un emploi pour un autre s'ils n'utilisent pas la technologie actuelle ou ont des processus terribles, etc.

Bill Leeper
la source
J'apprécie une bonne connaissance des concepts de programmation est essentiel pour être bon `` dans ce jeu '', mais avoir une connaissance de la syntaxe du langage / bibliothèque standard et de ce qui ne s'avère toujours pas essentiel pour utiliser toutes les fonctionnalités du langage (le cas échéant). Malheureusement, je ne suis pas encore à l'école, je travaille - même si, comme je pense l'avoir dit dans un commentaire précédent, je suis assez bien payé, donc je ne suis pas trop inquiet à ce sujet. Merci d'avoir répondu. =)
Anonyme
4

La réponse de @deadalnix est bonne. J'y ajouterais trois choses:

  1. les informations réutilisables viennent du milieu, pas des extrêmes. Minsky présente cela en détail dans son livre Society of Mind, je vais donc le résumer comme suit: la couche supérieure est trop proche de la solution spécifique pour qu'une grande partie de celle-ci s'applique au problème suivant, tandis que la couche inférieure est trop proche de la plate-forme spécifique pour une grande partie à appliquer au problème suivant. La couche intermédiaire est l'endroit où se trouvent les informations réutilisables - les algorithmes, les modèles, les taxonomies, les tactiques, les stratégies, les techniques, les organisations, les protocoles, etc. qui sont généralement utiles pour résoudre des problèmes similaires quel que soit le domaine (couche supérieure) ou la plateforme (couche inférieure) ). Remarque: ces couches n'ont rien à voir avec une architecture à 3 niveaux, nous parlons ici de sémantique espace problème / espace solution.
  2. vous ne saurez pas ce qui est commun / général / réutilisable tant que vous n'en aurez pas vu au moins deux instances. Alors, étudiez comment Windows fonctionne en interne, puis étudiez comment Linux / Unix fonctionne en interne et comparez les deux. Les choses courantes sont réutilisables. Les différentes choses sont des décisions de conception, ce qui peut également entraîner des informations réutilisables.
  3. pour une situation ou un problème donné, réfléchissez à la façon dont vous pourriez mettre en œuvre la solution, puis comparez votre solution de fauteuil avec la solution réelle, et essayez de comprendre les raisons possibles des différences.
Steven A. Lowe
la source
Grands ajouts!
deadalnix
2

Puisque vous êtes au début, je dirais juste apprendre une langue, peu importe laquelle. La difficulté n'est pas dans le langage (syntaxe) lui-même, mais dans la compréhension des concepts; et ces concepts de programmation généraux s'appliquent à tous les langages de programmation, donc l'apprentissage de votre deuxième et troisième et quatrième (...) langage sera beaucoup plus facile.

Donc, au début, ne pensez pas trop à être «à l'épreuve du temps». Cependant, à mesure que vous progressez, essayez de maîtriser des langues très différentes les unes des autres. Fondamentalement, (comme vous l'avez dit), vous devriez être à portée de main avec un langage de bas niveau (-ish) comme C / C ++, un langage de programmation de niveau supérieur tel que Java et également un langage de script (Python, Ruby, etc.). Si vous voulez entrer dans les trucs vraiment avancés, vous devez également connaître Assembly.

Mais ne vous en faites pas trop pour l'instant. Apprendre à programmer prend des années. Pour le moment, choisissez simplement un langage comme Java ou C # ou autre et allez-y. :)

Paul
la source
J'aime le 'pick one' et je vais pour ça attitude ... Je l'adopterai probablement. Oui ou non pour choisir un langage de bas niveau (C), un haut niveau (Java) et un langage de script (Python) et apprendre les 3 simultanément?
Anonyme
Vous commencez tout juste la programmation? Alors, n'apprenez pas plus d'une langue à la fois, cela vous rendra confus. Ce que vous devez apprendre au début, ce sont les concepts, pas les langues. Vous ne devez passer à de nouvelles langues que lorsque vous y êtes invité. Par exemple, je n'ai ressenti que récemment le besoin d'aller dans des langages de script, et c'est parce que j'ai décidé de rendre mon jeu scriptable avec Python.
Paul
Je ne dirais pas juste commencer - je connais le html / css depuis des années (bien qu'ils ne soient pas vraiment qualifiés / non pertinents) et je construis des sites Web PHP / MySQL depuis quelques mois. Le développement Web avec lequel je peux me débrouiller, c'est le développement logiciel que je m'attaque. Je tiendrai compte de ce que vous dites.
Anonyme
If you want to go into the really advanced stuff you must also know Assembly- Vous pouvez le faire à n'importe quel niveau, les défis sont juste différents.
sixtyfootersdude
1

Aurais-je raison de penser qu'avoir une solide connaissance de C / C ++ pour la logique dorsale / la programmation de bas niveau et similaires, combinée à un langage extrêmement portable comme Java pour les interfaces graphiques et ainsi de suite, serait une bonne base pour le développement de logiciels qui se révélera utile sur la plupart des systèmes?

Je parle de PC de bureau, de tablettes, de téléphones.

Non. Rien de tout cela ne vous aidera.

Une solide connaissance des structures de données et des algorithmes - indépendamment de tout langage de programmation spécifique - est plus précieuse que la "programmation de bas niveau et similaires".

Un «langage extrêmement portable comme Java» est tout aussi portable que C et n'aide pas. La prochaine grande chose sera si différente de ces langages que votre Java super portable sera un handicap, pas un atout.

Mac OS (ordinateur de bureau, tablette et téléphone) est entièrement réalisé dans l'objectif C. Cela pourrait être un point de départ.

Windows (bureau, table et téléphone) se fait en C #. Ce pourrait être un point de départ.

S.Lott
la source
Je comparais Java à C comme étant des langages portables - avec Java étant respectivement de bas niveau et de haut niveau, ce qui est un peu vrai ... Comme vous venez de le dire vous-même, Mac OS = Obj-C, Windows = C #, qui est où je ne veux pas me spécialiser dans l'un et couper mes options, ou les deux et être un «maître de rien» si vous attrapez ma dérive. J'apprécie ce que vous dites, mais une solide connaissance des structures de données et des algorithmes sans connaissance d'un langage de programmation est tout aussi inutile que la connaissance d'un langage de programmation sans ce dernier.
Anonyme
@Chris Bridgett: Vous vous trompez complètement. Il existe des principes fondamentaux universels, et un langage de programmation n'est ni l'un ni l'autre. Tout d'abord, apprenez les principes fondamentaux. Ensuite, une langue (ou un OS) givre simplement sur le gâteau. Les fondamentaux sont le gâteau et sont à l'épreuve du temps.
S.Lott