Apprenez à programmer à l'envers ou «j'ai donc échoué au test FizzBuzz. Maintenant quoi? ”[Fermé]

94

Un peu de fond

J'ai 28 ans aujourd'hui et je n'ai jamais eu de formation officielle en développement de logiciel, mais j'ai deux diplômes d'études supérieures équivalant à un baccalauréat en relations publiques et à un Executive MBA axé sur la gestion de projet. Je travaille dans ces domaines depuis environ 6 ans et il y a deux ans et demi, j’ai démissionné de mon travail et j’ai décidé de changer de direction.

Après un mois de réflexion, j'ai décidé de commencer à développer en freelance le développement de petits sites Web dans WordPress. J'ai moi-même appris la voie et aujourd'hui, je peux dire que je mène une carrière humble mais réussie, développant des thèmes et des plugins de toutes pièces pour mes clients - la plupart des agences externalisant une partie de leur travail de développeur pour des sites Web de moyenne / grande taille.

Mais parfois, j’ai le sentiment que ne pas avoir suffisamment étudié les mathématiques ou ne pas avoir une compréhension formelle des choses me retient vraiment lorsque je dois faire concurrence ou travailler avec des développeurs plus expérimentés. Je suis constamment à la recherche de moyens d'en apprendre davantage, mais il me semble que je manque des bases.

Malheureusement, passer quatre années de plus en informatique n’est pas une option pour le moment, j’essaie donc d’apprendre tout ce que je peux à partir de livres et de ressources en ligne. Cette méthode ne fera jamais que la NASA m'emploie mais je m'en fiche vraiment pour le moment. Mon objectif est d’abord de passer la barre et de pouvoir me considérer comme un véritable programmeur.

Je passe actuellement mon temps libre à étudier Java pour les programmeurs (pour maîtriser une langue que tout le monde dit est difficile / exigeante), à ​​lire des extraits de Code Complete (pour dénicher les meilleures pratiques) et aussi dans Code: Le langage caché de l'ordinateur Matériel et logiciel (pour comprendre le fonctionnement interne des ordinateurs).

TL; DR

Ma situation actuelle est la suivante: je suis fondamentalement capable d’écrire n’importe quel système complet en PHP (avec l’aide de Google et quelques livres), d’intégrer Ajax, SQL, etc., et peut-être un peu plus lentement que ce qu’attend un développeur expérimenté. en raison de toutes les recherches impliquées.

Mais hier, je me suis retrouvé coincé à essayer de trouver (pas à Google) une solution pour le test FizzBuzz, car je n'avais pas mémorisé l' opérateur de module de if($n1 % $n2 == 0) méthode .

Que suggéreriez-vous comme un bon moyen de résoudre ce dilemme? Quels sujets / livres devrais-je étudier pour que je puisse résoudre les problèmes plus rapidement et peut-être davantage "à la manière des programmeurs"?

EDIT - Il semble y avoir une certaine confusion quant à ce que je ne savais pas résoudre FizzBuzz.

Peut-être que je ne me suis pas exprimé correctement: je connaissais les étapes nécessaires pour résoudre le problème. Ce que je n'ai pas mémorisé, c'est l'opérateur de module. Le problème était de transposer les mathématiques de base au programme, pas de connaître les mathématiques de base.

J'ai pris le test pour le plaisir, après avoir lu à ce sujet sur Coding Horror . J'ai juste décidé que c'était une bonne ligne de comparaison de base entre moi et les développeurs formés de manière formelle.

Je viens d’utiliser cet exemple pour montrer que le fait de ne pas avoir traité les mathématiques dans un environnement informatique auparavant me fait perdre du temps à rechercher des éléments fondamentaux tels que les opérateurs de module pour pouvoir résoudre des problèmes simples.

Moralida
la source
63
Quand j'ai lu ceci: I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)et que vous combinez ceci avec le fait que vous ne le sachiez pas if($n1 % $n2 == 0), je m'interroge sur l'exposition que vous avez eue à des choses écrites en PHP. Je pense que la plupart des choses que vous faites vont au-delà d’un simple calcul modulo. Pourriez-vous donner un aperçu de ce que vous pensez pouvoir faire?
Phant0m
10
Je suis aussi un programmeur autodidacte. Je suis au courant depuis 10 ans maintenant, tout le Web, tout le temps. À l'époque, il n'y avait pas de cours de développement Web ... Je pense que l'apprentissage par soi-même présente certains avantages. vous allez vraiment vouloir en apprendre davantage sur les principes fondamentaux de OO et les modèles de conception. ils vous aideront beaucoup en les ayant au fond de la tête lorsque vous aborderez des problèmes .. Je trouve généralement que je n'ai pas toujours le vocabulaire des autres, mais si vous aimez coder et aimez écrire des solutions élégantes, vous finirez par Serez capable de coder votre chemin dans ce que vous voulez
hanzolo
56
Concernant le stuck b/c I didn't memorize %problème, il est intéressant de noter qu’il existe d’autres moyens de le faire: (en supposant que $ n2! = 0) if (is_int ($n1 / $n2))ou if (($n1 / $n2) == (int) ($n1 / $n2))connaître des mots-clés est une chose, et savoir comment exprimer les idées sous-jacentes en l’absence de solution intégrée est: un autre.
grossvogel
18
@ Grossvogel Exactement! Une des raisons pour lesquelles les gens aiment Fizzbuzz est qu’il ya tant de façons de le résoudre. Ce n'est pas juste une astuce pour voir si vous connaissez l'opérateur de module. Une compétence clé en programmation est la capacité de traduire un problème de la forme dans laquelle il est indiqué à la forme la mieux
adaptée
18
Ne pas connaître l'opérateur de module n'est pas une raison pour faire échouer FizzBuzz. Lorsque vous trouvez quelque chose qui manque, vous devez être capable de le contourner.
Loren Pechtel

Réponses:

144

Dans votre cas, vous êtes autodidacte et avez déjà ce qui semble être une bonne approche d'apprentissage, saine et saine. Encore quelques suggestions ...

C'est en forgeant qu'on devient forgeron

Je pense que vous devriez vous plonger dans des exercices de programmation, tels que:

Prenez même les questions d’examen des universités connues autour de vous ou des compétitions de programmation locales (ou distantes). Prologin , par exemple, nous en avons un bon en France pour les aspirants programmeurs de lycée . Il propose chaque année une bonne série de casse-tête qui vous grattent (probablement uniquement en français, désolé, mais c'est le genre de choses que je veux dire. ).

Pour en savoir plus: Où puis-je trouver des puzzles et des défis en matière de programmation?

Livres classiques et références

Nous pourrions également recommander une très longue liste de livres étonnants , mais je dirais que la réponse zen est qu’il n’existe pas de voie unique vers l’Illumination.

Il serait difficile de vous dire lesquels sont en haut de la liste. Continuez donc à lire une tonne de choses pour apprendre les pièges généraux à éviter et les meilleures pratiques à suivre, comme vous le faites correctement à présent.

Pour plus:

Pousser les limites

Aussi, recherchez un matériau qui gratte la tête, comme:

Ce n’est pas nécessairement à prendre pour exemple des choses à faire de nos jours, mais cela vaut la peine d’essayer de comprendre ce qui se passe là-bas.

Les systèmes de pairs sont motivants

Vous pouvez également vous attarder (et vous impliquer) dans les communautés suivantes pour améliorer vos compétences progressivement en vous confrontant à d'autres.

Éducation à temps partiel

Si vous n'avez ni le temps ni la motivation nécessaire pour suivre un autre cours de 4 ans ou quelque chose de similaire (ce qui peut ne pas être nécessaire ni gratifiant de toute façon et coûteux), vous pouvez envisager de rechercher du matériel pédagogique en ligne. Bien entendu, ceux-ci ne se limitent pas à l'informatique.

Grâce aux efforts initiaux du MIT OpenCourseWare , de nombreuses universités ont emboîté le pas et vous pouvez trouver gratuitement de nombreux supports de cours de niveau universitaire. Ce n'est pas toujours facile de naviguer et de le lire par vous-même, mais certains sont plutôt bien faits. Pour commencer à partir du sol et aller assez haut, songez également à la Khan Academy .

Certains vont un peu plus loin et proposent de véritables cours en ligne gratuits, où vous avez également accès au matériel du cours, mais où ils proposent également des conférences stimulées et des auto-évaluations régulières. Par exemple, visitez Coursera ou Udacity .

La plupart des personnes ci-dessus publient souvent leurs conférences sur Youtube ou iTunesU. Vous pourrez donc trouver beaucoup de matériel si votre soif de connaissances n'a pas déjà été étanchée par tous les liens précédents.

Si vous voulez quelque chose qui offre une expérience plus proche de la "vraie" université, vous pouvez envisager des universités éloignées, ce qui vous permet également de travailler à temps partiel, mais vous oblige à suivre le rythme et à avoir à la fois des auto-évaluations et des finales. examens annuels (parfois sur site), comme avec OpenUniversity et ses variantes internationales.

La passion vous permet de continuer

  • Trouvez un projet animalier: créez le vôtre ou rejoignez un ou plusieurs projets logiciels existants et contribuez.
  • Code, code, code. Et puis coder un peu plus.

(et obtenez assez de globes oculaires en regardant votre code pour vous critiquer et avoir différentes perspectives)

Les Français disent:

C'est en forgeant que l'on devient forgeron.

Continuez à faire ce que vous faites et vous finirez par devenir un expert. Prend du temps et du travail.

Voir aussi J'ai du mal à apprendre pour plus de suggestions.


PS: Bien qu’il s’agisse d’un outil très controversé pour les entretiens et ne permet pas d’identifier de bons candidats, j’utilise souvent FizzBuzz pour au moins éliminer les incroyablement "mauvais". Alors lancez-vous sur cette pratique! :)

poudre de foin
la source
3
C'est super ça! :) Merci pour la liste. Le projet Euler et les énigmes semblent très sympas. Et j'utilise déjà d'autres sites SE. Va plonger dedans.
moraleida
@moraleida: content que vous ayez aimé la réponse. Je vous en prie.
haylem
À propos de votre PS: Je ne m'inquiète pas vraiment pour les entrevues en ce moment, car je ne veux vraiment pas redevenir un employé. J'ai pris le test pour le plaisir, après avoir lu à ce sujet sur Coding Horror. J'ai juste décidé que c'était une bonne ligne de comparaison de base entre moi et les développeurs formés de manière formelle. :)
moralida
4
+1 juste pour la raison pour laquelle FizzBuzz est utilisé à la fin ... Trop souvent, je vois ici des commentaires ou des blogs sur des personnes qui le critiquent parce qu'ils pensent que les entreprises l'utilisent pour identifier des super-codeurs. (À ces entreprises: vous vous y trompez!)
Izkata le
1
Ceci est listé sur certains des liens, mais je pense que cela mérite un appel: je voudrais aussi regarder autour de rosettacode.org . Il a un grand nombre de problèmes différents résolus dans un grand nombre de langages de programmation. C'est une bonne pratique de lecture de code, qui est aussi importante que de l'écrire, ainsi qu'un excellent moyen de voir différentes approches pour résoudre le même problème. Et si vous trouvez un problème qui n'est pas encore résolu dans une langue que vous connaissez ou voulez apprendre, c'est un défi de programmation pour vous.
Mark Reed
60
I didn't have the if($n1 % $n2 == 0) method memorized.

Je ne code pas depuis très longtemps (j'ai commencé à apprendre le SQL il y a environ 27 mois et en Perl il y a environ 20 mois), mais la citation ci-dessus ressemble à des propos tenus par d'anciens étudiants:

Comment suis-je censé mémoriser quelle technique d'intégration utiliser pour chaque problème?

Je ne savais pas si je devais ajouter ou multiplier des probabilités, utiliser "n choisissez k" ou utiliser des factorielles.

Attends une minute! Vous avez dit que x équivalait à 2 hier! Maintenant, il est égal à zéro?!

D'accord, ce dernier était probablement un peu dur ... mais ce que j'essaie de dire, c'est que la résolution de problèmes n'est pas la mémorisation . Si c'était le cas, alors un génie pourrait programmer un ordinateur pour résoudre tous les problèmes, et aucun d'entre nous n'aurait jamais à réfléchir à nouveau (quel monde infernal ce serait ...).

Or, il est vrai que tout effort intellectuel consiste en au moins un peu de mémorisation. En particulier, si vous envisagez de coder en PHP, vous devez comprendre les types de données de base (nombres, chaînes, tableaux), ainsi que les opérations élémentaires que vous pouvez en faire (pour les nombres: addition, soustraction, multiplication, division et module; pour les chaînes: concaténation, sous-chaînes, remplacement et au moins quelques notions d'expressions régulières; pour les tableaux: concaténation, pointage sur des éléments, épissage d'éléments, mise en boucle, éléments de comptage, etc.), ainsi que les structures logiques de base utilisables (déclarations if / then / else, boucles foreach, boucles while, etc.).

Ensuite, lorsque vous rencontrez un problème, utilisez-le pour définir le contexte des outils dont vous avez besoin. Pour FizzBuzz, vous devez savoir quand un nombre est divisible par 3, 5 ou 15. Bon, alors nous avons affaire à des nombres ... quels outils de base nous permettent de dire quand un entier est divisible par un autre? Eh bien, l'opérateur de module. Alors, utilisez ça. (Bien sûr, si votre numéro est $n, vous pourriez être chic et voir si le dernier chiffre $nest 0 ou 5, et / ou si les chiffres $ncorrespondent à quelque chose de divisible par 3, mais je m'éloigne du sujet ...) Vous devez faites cela pour chaque nombre compris entre 1 et 100, afin d'éviter de passer par un tunnel carpien, utilisez une foreachboucle.

Le moral de l'histoire est que si d'un côté vous dites "Je suis fondamentalement capable d'écrire un système complet en PHP" et d'un autre côté, vous ne pouvez pas coder FizzBuzz, alors la première affirmation est incorrecte. Certains de mes anciens étudiants en calcul juraient de tout leur cœur qu'ils comprenaient les concepts, mais ils ne pouvaient tout simplement pas résoudre les problèmes de l'examen ... ou des problèmes de devoirs ... ni des problèmes de quiz. Ils se sont également trompés sur leur compréhension.

Arrêtez de faire des excuses et apprenez les bases.


la source
6
Je ne mémorise pas, je métabolise et fais de ces choses une partie de mon intuition. Toujours chercher à développer cela.
ncmathsadist
@ncmathsadist - Oui, développer l'intuition est essentiel, mais même l'intuition doit s'appuyer sur la mémorisation d'un petit nombre de concepts et de faits très fondamentaux.
pour mémoire, vous ne devez pas multiplier un nombre par 3, puis ajouter les chiffres pour voir si elle est divisible par 3, vous pouvez simplement ajouter les chiffres. par exemple, 864, 8 + 6 + 4 = 18 qui est divisible par 3 et est donc 864
Oztaco
@ leaf68 - Duh! [slaps front] vous avez absolument raison ... lemme edit!
27

Vous pensez peut-être que FizzBuzz est un problème de jouet; Quand aurai-je besoin d'utiliser l'opérateur de module dans un programme réel? Mais vraiment, vous l'utilisez tout le temps. Trois exemples courants:

  1. Vous affichez un tableau et vous souhaitez alterner les couleurs d'arrière-plan pour différentes lignes. Vous vérifiez si une ligne est paire ( row_number % 2 == 0) et affichez une couleur pour les lignes paires et une autre pour les lignes impaires.
  2. Vous avez une collection d'objets que vous parcourez en boucle et vous souhaitez imprimer un tableau avec N objets par ligne; alors le critère pour savoir quand ajouter un saut de ligne est (item_number% N == 0). J'avais en fait une question SO sur ce comportement exact, bien que dans ce langage de gabarit, la condition if item_number % N == 0soit écrite comme l'équivalent ( if item_number|divisbleby: N).
  3. Vous effectuez plusieurs opérations que vous souhaitez regrouper dans une transaction qui n'est validée que lorsque le groupe atteint une certaine taille pour des raisons d'efficacité. Peut-être utilisez-vous l’API de données Google et ne souhaitez-vous pas que l’en-tête / charge d’authentification HTTP soit utilisé pour créer une nouvelle transaction pour chaque opération; vous devez donc les regrouper en groupes de 50 opérations. Ou vous enregistrez des enregistrements dans votre base de données et souhaitez valider la transaction lorsque sa taille est raisonnable. Quelque chose comme if cur_item_number % 50 == 0 then commit_data.

Bien sûr, il y a d'autres façons de faire toutes ces choses. Mais vous pouvez faire du bruit sans utiliser l’opérateur de module ni comparer la division de float à la division de nombre entier. Par exemple, pour FizzBuzz, vous pouvez faire quelque chose comme le pseudo-code suivant.

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

Pour conclure, si vous voulez être un bon programmeur un jour, ne vous lancez pas dans l'apprentissage d'une langue. Oui, un livre PHP / Java vous permettra d'obtenir les réponses de google / stackoverflow et de programmes à moitié fonctionnels beaucoup plus rapidement que tout le reste. Mais pour être en mesure de savoir écrire des programmes de qualité optimale et de penser comme un programmeur, vous devez vous familiariser avec de vrais livres CS.

Commencez avec un livre CS qui présente un langage de programmation et l’arrière-plan CS, avec le célèbre exemple de Structure et interprétation de programmes informatiques (qui enseignera Scheme - un dialecte Lisp) ou éventuellement quelque chose comme Think Python. Comment penser comme un ordinateur Scientifique (que je n'ai pas lu). Les deux sont gratuits en ligne.

Vous devez éventuellement lire un bon livre d’algorithmes, le meilleur étant Algorithmes du CLRS (non gratuit), bien que ce livre d’algorithmes en ligne gratuitpourrait être un remplacement à faible coût (mais si vous pouvez simplement acheter CLRS). Le livre d'algorithmes vous apprendra comment résoudre des problèmes informatiques et vous présentera diverses structures de données (Tableaux / Listes liées / Heaps / Arbres binaires / B-Trees / HashTables) et d'importants algorithmes que vous devez savoir utiliser de manière optimale. . Vous n'avez pas besoin de mémoriser chaque preuve ni de savoir écrire parfaitement chaque algorithme (que vous utilisiez un segment de Fibonacci); mais vous devriez savoir intuitivement que deux boucles imbriquées sont O (N ^ 2); les types de comparaison sont au mieux O (N lg N), la recherche binaire est O (lg N), peut trouver la médiane dans O (N), pourquoi les bases de données sur disque dur utilisent des arbres B, etc.). Au minimum, une solide connaissance du livre d'algorithmes vous aidera à réussir des entretiens de programmation technique avec Google / Facebook. Lorsque vous lisez des livres de programmation, ne vous contentez pas de parcourir / lire; toi'

Je recommanderais également un livre sur l'ingénierie logicielle (Code Complete ou Pragmatic Programmer) une fois que vous aurez lu le manuel CS et algorithmes, qui expliquera les meilleures pratiques pour écrire du bon code maintenable (noms clairs; commenter juste au besoin). ; conserver le code ensemble; refactoriser si nécessaire; utiliser le contrôle de version; etc.).

dr jimbob
la source
4
Meilleur commentaire pour le moment alors que je vois beaucoup de gens dire pratique, pratique, pratique, ce n'est pas la voie à suivre. La pratique rend parfait dit-on mais cela ne fait que mettre en application les mauvais comportements. Pour le PO: Exposez-vous à d’autres concepts, découvrez pourquoi un tri rapide est préférable à un trio. Seule une pratique parfaite rend parfait. Obtenez ce cours CS.
Pieter B
2
Merci d'avoir posté cet exemple de code, je pensais déjà que je devrais le faire moi-même. - Nous pouvons construire n'importe quel circuit logique complexe en utilisant uniquement des portes NAND; nous avons des langues avec très peu d'opérations simples et complètes de Turing; nous n'avons pas besoin de ces opérateurs sophistiqués pour résoudre les problèmes. Résoudre un problème, ce n’est pas seulement connaître les bons outils, pouvoir résoudre un problème, trouver une solution qui fonctionne pour votre propre connaissance est ce qui fait le programmeur.
Poke
22

Mais hier, je me suis retrouvé coincé à essayer de trouver (pas à Google) une solution pour le test FizzBuzz car je n’avais pas mémorisé la méthode if ($ n1% $ n2 == 0).

Personne ne mémorise cette chose. Vous êtes censé le trouver vous-même. Si vous connaissez l'opérateur de module et que vous savez ce qu'il fait, alors, il est trivial de trouver une solution au problème FizzBuzz.

Je vais m'exprimer et suggérer généralement que le problème est PHP. J'aime dire que Java est le pire langage jamais conçu, et PHP, le pire , car même ses créateurs admettent qu'il n'a jamais été conçu. Il est difficile d’apprendre de bonnes pratiques d’ingénierie logicielle lorsque votre environnement est pratiquement la définition de la façon de ne pas le faire. Et dépendre d'un cadre pour tout faire ne dit pas grand chose.

Je passe actuellement mon temps libre à étudier Java pour les programmeurs (pour maîtriser un langage que tout le monde dit difficile ou exigeant)

Java est l’un des langages les plus faciles et les pires qui existent. Il n’a qu’une chose: l’héritage manuel ramassé par les ordures ménagères. Si vos amis ou vos conseillers disent que Java est difficile, trouvez-vous de nouveaux amis. C ++ est un langage difficile qui inclut beaucoup de concepts et que personne ne contestera. Vous pouvez également faire du C #, qui contient au moins des génériques et des lambdas.

Comment allez-vous apprendre à coder, lorsque vos langues ont été conçues et implémentées par des personnes qui ne savent pas coder, et que vous dépendez de cadres pour tout ce que vous faites?

DeadMG
la source
14
@moraleida: Il n'y a pas de honte à rechercher la syntaxe d'un opérateur que vous n'avez pas eu à utiliser.
DeadMG
2
@moraleida: dans ce cas, je conviens qu'il n'y a pas de réel problème. Je ne pense pas qu'un professionnel, un interviewer ou autre, devrait s'en préoccuper si vous ne pouvez pas préciser la syntaxe exacte d'une langue différente, tant que vous pouvez clairement exprimer votre intention.
Hayem
5
D'accord sur la plupart des points, mais pourquoi considérez-vous Java comme «le pire langage jamais conçu»? Je ne suis pas un grand fan de Java, mais cela semble avoir beaucoup d’opinion.
Casey Kuball
7
-1 pour avoir utilisé la question comme une excuse pour se plaindre quand PHP n'a aucun rapport avec ce qui a été demandé.
StasM
1
@Darthfett: Je pourrais écrire un essai à ce sujet. Venez sur le chat SO C ++ et vous pourrez le lire: P
DeadMG
11

Je pense que vous devez jeter un regard critique sur la raison pour laquelle vous avez échoué à essayer de comprendre FizzBuzz. Alors, supposons que vous vous souveniez qu'un opérateur $nvous a dit si c'est divisible par un nombre. Et vous n'avez pas de chance d'oublier ce que c'est. Bien, pourquoi ne tentez-vous pas de le faire autrement? Si vous connaissez le code, vous devriez pouvoir trouver une douzaine d'autres moyens de le faire. Certains d'entre eux peuvent sembler étranges - comme, par exemple, placer tous les multiples de 5 dans un tableau et ensuite vérifier si se $ntrouve parmi eux - et c'est une mauvaise solution, mais ce serait quand même une solution. Cependant, vous dites que vous n'en aviez pas, vous étiez coincé. Cela peut être le symptôme d'un problème plus important.

Il y a deux choses dans la programmation que vous devez apprendre.

  1. Sac de trucs. Comment lire un fichier en PHP, comment analyser XML en Java, comment se connecter à une base de données en Python. Certaines personnes le mémorisent, mais en réalité, ces choses ne valent la peine d'être mémorisées que si vous les utilisez tous les jours. Sinon, il vous suffit de consulter la documentation et de la rechercher. Ces choses n'ont aucune substance, à l'exception de leur forme littérale - vous devez juste savoir comment sonne cette incantation magique et quel en sera le résultat.
  2. État d'esprit. C'est la chose la plus importante. Voici comment vous programmez et cela n’a rien à voir avec la mémorisation. Vous devez comprendre comment expliquer à l'ordinateur ce que vous voulez faire, quelles sont les manières de le faire et lequel d'entre eux doit être utilisé dans un cas particulier. Maintenant, avec les outils modernes et la documentation moderne, il est plausible que l’on puisse écrire un CMS entier en PHP en utilisant la méthode du "sac à malice", mais une fois que vous rencontrez une tâche qui n’a pas de solution toute faite, vous êtes "coincé".

D'après votre description, on dirait que vous avez commencé avec la première partie, mais qu'il manque quelque peu sur la deuxième partie. Un bon cours de CS aide généralement beaucoup à cela, mais ce n’est pas le seul moyen. Essayer de résoudre différents problèmes et découvrir comment ces problèmes doivent être résolus, en lisant les livres fondamentaux cités ici - tout cela aiderait. Une fois que vous aurez compris l'état d'esprit du programmeur, vous découvrirez que commencer à utiliser un nouveau paquet d'astuces ne posera plus vraiment problème. Vous auriez à google ici et là, bien sûr, mais vous ne serez jamais bloqués.

StasM
la source
1
“Et découvrez comment ces problèmes doivent être résolus” - En fait, cherchez différentes solutions au même problème. Essayez de comprendre chacun d’entre eux, comparez ce qu’ils ont en commun et ce qu’ils font différemment. Comprenez ces choses et vous découvrirez automatiquement différentes façons de penser au même problème.
Poke
Je suis tout à fait d'accord sur l'état d'esprit. Une fois que vous avez compris l’état d’esprit et les concepts, il est beaucoup plus facile d’apprendre les constructions de langage sous-jacentes et vous allez commencer à penser à d’autres façons de faire les choses. (Comme pour fizzbuzz, tous les nombres divisibles par 5 se termineront par 5 ou 0, donc nul besoin de l'opérande de module sur cette partie)
JohnP
9

Vous devenez bon au développement comme vous le faites ailleurs: pratiquez. Il existe un concept intéressant dans le monde de la programmation appelé code kata . Il s’agit essentiellement d’un exercice qui consiste à coder une solution à un problème relativement petit, à analyser ce qui est bon et ce qui est mauvais, à tout éliminer et à le refaire. FizBuzz est un kata à part entière. Alors, faites-le et faites-en plus. Quand vous trouvez des choses qui ne semblent pas très bonnes ou qui ne fonctionnent pas, faites des recherches et soyez minutieux à ce sujet. Posez des questions sur les sites de questions-réponses, lisez des articles et des blogs, voyez comment les autres traitent cela, puis mettez en pratique ce que vous avez appris.

Au cours de cette pratique, vous apprendrez combien de connaissances mathématiques / théoriques supplémentaires vous pourriez avoir besoin. Si vous rencontrez des concepts que vous ne pouvez tout simplement pas comprendre, renseignez-vous sur ces concepts et sur leurs connaissances préalables et décidez au cas par cas si vous souhaitez suivre un cours ou quoi que vous ayez afin d'élargir votre contexte théorique.

Erik Dietrich
la source
1
Ce code kata semble génial aussi!
moraleida
8

... parce que je n'avais pas la méthode if ($ n1% $ n2 == 0) mémorisée.

J'interprète cela comme voulant dire que vous ne saviez pas et / ou ne vous souveniez pas de l'opérateur de module. Si tel est le cas, vous devez commencer par examiner les constructions de langage dans le langage que vous utilisez. Passez en revue tout ce que vous «ne connaissez pas froid» et apprenez tout ce que vous ne connaissez pas.

John MacIntyre
la source
4
+1 Alors que les autres réponses parlent de comment devenir un meilleur artisan, il est peut-être encore plus important de savoir quels outils existent réellement. Avez-vous déjà essayé de retirer une vis cassée sans une sortie facile ? Il y a d'autres façons de s'y prendre, mais c'est une gifle frontale quand on découvre enfin l'outil conçu à cet effet. Je dirais que le PO aurait dû parcourir une liste d’opérateurs PHP de longue date et jouer avec ceux qui lui étaient inconnus.
Tim Lehner
5

Continuez à coder, continuez à apprendre. Finalement, avec suffisamment de dévouement, vous regarderez FizzBuzz et vous vous demanderez pourquoi vous avez même dû y penser. De nombreuses entreprises répondent très tôt à une question de style FizzBuzz. Par conséquent, si vous échouez une fois, vous avez au moins appris quelque chose sur le processus d'embauche.

Continuez simplement à écrire du code, à proposer des idées de projets et à effectuer des recherches.

joshin4colours
la source
4

Puis-je recommander l'apprentissage de JavaScript avant Java, C ++? Raisons pour vous:

  1. Utilisé dans la conception front-end (jQuery, certains de vos plugins WordPress, les flux Twitter, le chargement de bases de données dans votre navigateur via JSON avec peu ou pas de travail d’arrière-plan, la validation de formulaires, etc.)
  2. Peut être utilisé côté serveur via Node.js
  3. Peut être utilisé pour créer des applications hybrides pour iOS, Android, Win8, etc.
  4. L'étude de JS vous aidera à mieux comprendre les performances des pages Web dans différents navigateurs et appareils
  5. JS a été conçu pour être plus convivial pour les débutants
  6. Vous connaissez déjà HTML & CSS (j'espère;), donc ça aide avec JS

Ressources gratuites pour débutants

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info
J'avais environ 10 liens supplémentaires, mais SE ne me laissera pas les poster avant d'avoir atteint 10 rep.

L'apprentissage de C ++, de Java, etc. est également utile, mais pas mon humble avis n'a pas d'impact global sur la programmation Web, contrairement à JS, car vous pouvez l'utiliser à la fois en amont et en aval. S'amuser!

tomByrer
la source
3

Vous pouvez trouver et aider les autres, par exemple en donnant.code (divulgation: mon site) ou Code for America ou autre. C'est un excellent moyen de mieux connaître les problèmes de création de pages Web autres que PHP et de vous sentir bien aussi.

Lorsque vous avez un problème à résoudre - ou que vous aidez à résoudre, ou simplement à comprendre -, le ramassage du code se fait naturellement. Avoir un objectif est le meilleur moyen d'apprendre quelque chose.

Volonté
la source
1
Impressionnant! C'est vraiment une bonne façon d'étudier!
moraleida
0

Donc, vous ne pouviez pas résoudre le problème FizzBuzz. Grosse affaire. Maintenant vous pouvez le faire, et je parie que vous n'oublierez jamais toutes les mille façons de procéder. Essayez de ne pas être aussi pressé de vous faire passer pour un mauvais programmeur, simplement parce que vous ne pouvez pas résoudre un seul problème stupide par la tête.

C'est un problème. L'autre est que vous semblez vous sentir un peu en retard sur la courbe d'apprentissage de la programmation. Comme d'autres l'ont dit, continuez à coder et à lire. Plus vous en ferez, mieux vous irez. C'est aussi simple que ça. Commencez par ce que vous croyez être le plus gros trou de votre arrière-plan et procédez ensuite.

Nick Spreitzer
la source
(Cela devait sembler exaltant. Je ne suis pas sûr d'avoir réussi là-bas. Lol.)
Nick Spreitzer le
0

Je ne pense pas que je refuserais de recommander quelqu'un à embaucher, car ils ne savaient pas que c'était l'opérateur de module à condition que:

  1. Ils savaient que c'était un opérateur quelconque.
  2. Ils pourraient me dire quel "module" était une fois que je leur ai demandé.

Ce n'est pas toujours (bien que d'habitude)%, et certaines langues sont étranges. Et bon sang, après une décennie, je ne peux honnêtement pas dire que je connais tous les opérateurs perl (et que fait-on encore du vaisseau spatial?) Et que je ne me souviens pas toujours parfaitement des opérateurs bitwise. Cela fait quelques années que j'ai fait quelque chose qui en aurait même besoin.

Ce qui pourrait me faire hésiter à recommander quelqu'un, ce serait si cela leur causait une attaque de panique après avoir raté cette question / ce test. Cela pourrait me donner l'impression qu'ils étaient un peu trop verts (à moins que ce soit un poste très débutant). Personne n'a besoin de quelqu'un qui (ou ressent le besoin de) mémoriser ces choses. Vous avez besoin de quelqu'un qui comprend des concepts beaucoup plus larges. Personne ne s'en souciera si vous le consultez sur Google, mais vous devrez être sûr, dans l'interview, que connaître% n'est pas grave et que vous savez également utiliser "opérateur" comme mot clé lorsque vous faites une recherche rapide sur Google. chercher.

En outre, il ne s'agit que d'une idée ... mais si votre collège communautaire local propose un programme compsci, vos autres crédits seront tous transférés et vous n'aurez probablement besoin que d'environ 20 crédits pour le programme de deux ans. Pourrait presque finir cela en un semestre. Ils vous demanderaient de suivre un cours sur les structures de données et, espérons-le, des algorithmes… pourraient vous rendre plus fort.

John O
la source
-1

Voici un exemple de cours: http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html

Je suggère de lire en premier lieu la programmation suivante: Programmation orientée objet (très courante, utilisée partout, c’est là que java entre en jeu) Concurrence (pour écrire des programmes java qui ne se plantent pas mystérieusement dans le monde réel, en savoir plus sur les blocages) Concepts de base de données (La plupart des applications ont besoin de sauvegarder des données, la théorie est importante ici) Paradigmes de programmation (lisez au moins un langage non-oops, de préférence fonctionnel, pour élargir votre réflexion et apprendre de nouvelles choses)

Quand je regarde les quatre années d’enseignement des sciences informatiques, pour être honnête, je pense qu’il n’ya qu’une poignée de cours à prendre au sérieux.

Les structures de données et les algorithmes (et vous avez besoin de mathématiques ici pour être vraiment bons et être pris au sérieux par les autres programmeurs), les réseaux informatiques et les systèmes d'exploitation sont les plus importants. D'autres sujets traitant du code de niveau inférieur, comme pouvoir coder en assemblage, ne sont sans doute pas si importants pour vous. L'ingénierie logicielle et les tests vous exposent à des concepts utiles que vous pouvez comprendre avec le temps.

Il suffit de télécharger un pdf qui explique ces concepts de manière intuitive et vous serez sur votre chemin.

Dans certains cours de sciences informatiques, du moins dans le mien, la première année est une introduction à tous les domaines de l’ingénierie, tels que la mécanique, l’électricité, le génie civil, etc. Il y a beaucoup de calculs compliqués, cela peut être pertinent ou non. pour la plupart des programmeurs d'applications aujourd'hui. Ainsi, beaucoup d’ingénieurs d’aujourd’hui n’ont en réalité que trois ans d’enseignement scientifique en informatique (espérons que cela vous fera vous sentir mieux :)

Point crucial de la réponse: vous pouvez prendre le temps d’étudier tous les jours, par exemple environ une heure, et de devenir au fil du temps un très bon programmeur. Continuez simplement à apprendre. Et n'oubliez pas d'écrire du code tous les jours.

Abhijeet Kashnia
la source
-3

Pour moi, ma stratégie est que je n’attaque que le problème qui est pertinent pour ce que je travaille. Donc, mon conseil est que vous n’avez pas à tout apprendre, lisez simplement les choses qui sont pertinentes pour ce que vous travaillez, parce que si vous essayez de tout apprendre en même temps, il y a une tendance à être prosterné et à finir par détester la programmation.

Paix

Bryan Bojorque
la source