En parlant comme quelqu'un avec un diplôme en génie électronique plutôt qu'en informatique, quel est le peu d'informatique que je devrais connaître pour faire de moi un meilleur programmeur dans le monde réel ?
(Par monde réel, je veux dire quelque chose que je vais utiliser et dont je bénéficierai dans mon travail quotidien de programmeur - par exemple, je suggère que la normalisation de la base de données est d'une utilité plus pratique que la compréhension d'un tri rapide pour lequel il y a beaucoup des bibliothèques).
learning
computer-science
theory
Jon Hopkins
la source
la source
if
etloop
instruction utilise jamais écrit un sous - ensemble de ces deux domaines d'étude.Réponses:
Si je dois choisir un seul bit, ce qui est une décision difficile, je dirais aller pour la notation Big O . Comprendre les implications de O (n), O (ln n), O (n²), O (2 ^ n), O (n!) Vous aide à éviter de nombreuses erreurs coûteuses, dont le type fonctionne bien dans le environnement de test mais échoue de façon désastreuse dans la production.
la source
C'est une question, tout le monde aura une réponse différente. Je dirais: la théorie de la complexité est l'élément le plus important, que vous n'apprenez pas directement en tant que programmeur de toute façon (comme les algorithmes et les structures de données), mais ce qui peut avoir un impact sur votre travail. Cela aide si je sais qu'un problème a une complexité cubique, je sais qu'il évoluera mal si la taille du problème augmente.
la source
Découvrez les structures de données, les algorithmes et la complexité.
Pas trop juste pour comprendre qu'une machine n'est pas une boîte magique avec une puissance illimitée. Vous ne pouvez rien y jeter et vous attendre à ce qu'il croque en quelques millisecondes. Il a des limites que vous connaissez. Vous devez apprendre à ne pas les tester avec votre code.
Jetez également un œil aux approches courantes pour résoudre des problèmes de conception particuliers dans la programmation. Modèles de conception, nommément. Ne les adorez pas, prenez simplement les idées qu'ils communiquent.
La connaissance de la modélisation de bases de données est également essentielle.
Après cela, ce ne sont que différents langages de programmation, frameworks et bibliothèques qui implémentent ou vous permettent d'implémenter les concepts de base. Ramassez ce que vous aimez et entraînez-vous avec ceux-ci.
la source
C'est une question un peu difficile.
Tous les aspects de l'informatique sont importants d'une manière ou d'une autre.
Il est important de comprendre Big O Notation, et également de comprendre comment votre code peut être exécuté est également très important dans des situations réelles.
la source
Ouais, cela m'a poussé à réfléchir pendant des heures.
Au cours du processus, j'ai dû supprimer certaines des réponses courantes données ici.
Grande notation O (n) . Difficile de le dire ici, mais non, nous pouvons intuitivement résoudre les inefficacités et comparer différents ensembles de procédures sans même avoir entendu parler à distance de l'analyse algorithmique asymptotique.
Langages fonctionnels Non, une seule famille de langage n'est qu'une approche pour réfléchir aux problèmes. Pourquoi seul ce bit devrait-il avoir de l'importance?
Arrêter le problème Certains sont tout simplement trop spécifiques et les gens ont vécu leur vie sans savoir qu'ils existaient.
Écoutez Si vous n'écoutez pas, vous vivez dans votre propre monde. Pas nécessairement préjudiciable!
Cycle de développement logiciel Nah! Nous pouvons encore bousculer notre chemin vers un logiciel incroyable ou un effort héroïque en solo.
théorie de la complexité, je suppose que cela pourrait être, mais sans tous les formalismes
Je dirais - " Abstractions Abstractions Abstractions ... ". Apprenez-en plus. Voir des exemples autour d'elle et apprendre à construire en l'utilisant. C'est partout. L'ensemble de l'informatique, de l'ingénierie et des applications ressemble à des couches sur des couches d'abstraction.
Une fois que vous savez cela, vous commencez à bien regarder autour de vous.
Lorsque vous voyez quelqu'un utiliser
list insertion
inpython
etnot append
, vous souriez parce que vous savez que les listes python sont construites en utilisant l'abstraction de tableaux où les insertions sont coûteuses et ajoutent moins cher.Ce n'est qu'un exemple.
la source
Théorie des automates et FSM. :-)
la source
Cas d'utilisation concurrentielle des structures de données.
Il existe des situations où une carte avec des arbres rouge-noir est requise pour garantir les performances et d'autres où vous ne pouvez pas utiliser un tableau, encore une fois pour garantir les performances. Savoir quand choisir quelle structure de données est une compétence inestimable.
la source
il n'y a que trois chiffres qui comptent:
la source
La chose la plus importante que j'ai apprise dans CS (et en tant que développeur pendant de nombreuses années et en tant qu'architecte) est la capacité de décomposer un problème en fonction de la volatilité et non de la fonction. Toutes les bonnes conceptions isolent et encapsulent la volatilité. Tous les bons développeurs / architectes le font intuitivement même s'ils ne l'ont pas formalisé dans leur réflexion. Une énorme raison de l'échec d'un projet est l'incapacité à décomposer un problème sur la base de la volatilité et à l'encapsuler. Un échec à encapsuler la volatilité conduit inévitablement à la fuite et à la complexité du projet.
la source
Le problème de l'arrêt
Le fait qu'il existe des problèmes informatiques qui ne peuvent tout simplement pas être résolus par un ordinateur.
la source
Vous devez connaître suffisamment la théorie des automates pour pouvoir savoir où le problème que vous traitez se situe dans la hiérarchie des langages formels. À partir de cela, vous pouvez comprendre quelques utilisations pratiques importantes, comme pourquoi vous ne devriez pas utiliser un REGEX pour analyser HTML (HTML a besoin d'une grammaire sans contexte pour le décrire), et pourquoi cela prend beaucoup plus de temps pour compiler C ++ par opposition à Java ou C # (C ++ nécessite une machine Turing, tandis que Java et C # peuvent être décrits avec des grammaires sans contexte).
Les niveaux les plus importants de langues formelles sont, du plus faible au plus fort:
Langages qui peuvent être analysés par un automate fini ou un REGEX (les implémentations REGEX avec des références arrières sont plus puissantes que cette catégorie, mais elles ne peuvent toujours pas analyser tout dans la catégorie 2)
Langages qui peuvent être analysés par un automate avec une mémoire de pile ou une grammaire sans contexte.
Langages pouvant être analysés par une machine Turing ou un automate avec une mémoire à accès aléatoire.
la source
Eh bien, je pourrais vous donner une réponse ennuyeuse: la théorie des automates et la théorie de l'information.
Ou je pourrais vous dire ce que j'ai appris d'un consultant en matériel il y a longtemps:
la source
Le cycle de vie du développement logiciel est quelque chose que je suggérerais de savoir si vous ne l'avez pas déjà fait. Certes, cela a été introduit dans un cours d'informatique de deuxième année et est quelque chose utilisé à plusieurs reprises dans les projets logiciels. Cela peut être utile pour avoir une idée générale de la façon dont un projet se déroule du début à la fin, mais si vous voulez approfondir, il existe des méthodologies comme Waterfall ou Agile que vous pouvez étudier pour obtenir des connaissances plus spécifiques.
la source
Programmation
Du département de mathématiques et d'informatique Hobart et William Smith Colleges vient Computer Science 124 Introduction to Programming :
Si vous ne pouvez pas programmer, vous n'irez pas très loin dans l'informatique du monde réel.
Et, oui, j'ai remarqué que vous êtes programmeur. Il s'agit d'améliorer votre connaissance globale de la théorie de la programmation et des autres approches qui s'offrent à vous.
La programmation informatique est-elle telle que nous la connaissons?
En réponse au commentaire de @Thomas Owens, qui a souligné (à juste titre) que la programmation n'est pas strictement informatique, je voudrais citer un article de Wikipédia sur l'informatique :
Ainsi, comme je l'ai lu, en programmant, vous démontrez votre compréhension de la théorie de la programmation. Cela devrait à son tour vous aider à créer un code simple et élégant qui est une joie pour les autres.
la source
Je dois être en désaccord avec Konrad Rudolph. Il y a "un peu" d'informatique que vous devriez connaître pour faire de vous un meilleur "programmeur du monde réel". Si vous ne retirez rien d'autre des réponses que vous obtenez ici, pensez au moins à cela: satisfaire les exigences n'est PAS la même chose que satisfaire le client! Les utilisateurs finaux essaieront TOUJOURS d'utiliser votre programme d'une manière à laquelle vous n'auriez jamais pensé ou codé. TOUJOURS, TOUJOURS, TOUJOURS.
Par conséquent, pour être un meilleur programmeur, vous devez d'abord ÉCOUTER. Écoutez le client. Écoutez leurs besoins. Écoutez leurs désirs. Et surtout, écoutez leur niveau de «tech-pertise». Je ne peux pas vous dire combien de fois j'ai vu un projet construit qui était exactement ce qui avait été demandé, mais pas du tout ce dont le client avait réellement besoin. Tout cela parce que le programmeur rassemblant les demandes n'écoutait pas vraiment.
Quelque chose d'autre que vous pouvez emporter est, à moins que vous n'ayez une formation en conception d'interface utilisateur, demandez à quelqu'un d'éles de concevoir l'interface utilisateur. Je peux TOUJOURS repérer une application où l'interface utilisateur a été conçue par le programmeur et non par un expert. Ce qui est logique et logique pour vous n'aura pas de sens pour le client. Et, si vos clients ne sont pas technophiles, (et qui sont?), Alors votre solution "fonctionnellement correcte, mais esthétiquement laide" rencontrera la chaleur de la mouffette lors d'un dîner.
la source
Langages fonctionnels!
L'apprentissage des langages fonctionnels vous fait penser en termes d'expressions plutôt qu'en étapes et en états mutables nommés (variables). Cela a un impact significatif sur votre capacité à gérer efficacement les problèmes de programmation quotidiens - surtout maintenant que presque tous les langages populaires ont des fonctionnalités.
Les algorithmes et la théorie de la complexité sont également importants, mais ils sont un peu moins intéressants dans la mesure où ils vous permettent principalement de mettre des noms sur des choses que vous connaissiez et saviez habituellement déjà.
la source
Que les ordinateurs sont essentiellement des modèles de correspondance, rien de plus. Tout se résume à la machine de Turing - le concept classique de science informatique pour expliquer l'usinage de motifs.
la source
Résolution de problèmes et désir de continuer à apprendre!
Ils me servent beaucoup mieux que de connaître le tri rapide et la normalisation de la base de données.
la source