Bonjour, Habr! Chez Hexlet, nous avons lancé cette année un projet ouvert et gratuit pour les débutants: code-basics.ru . Ce sont des cours de pratique interactifs pour ceux qui n'ont jamais programmé du tout. Nous enseignons les bases de la programmation et parlons de la conception de base des ordinateurs.
Un cours PHP complet et le premier module JavaScript sont maintenant disponibles. En route Raquette et Python. L'ensemble du code source de la plateforme et les leçons elles-mêmes sont en open source.
Aujourd'hui, je veux parler un peu de l'essence de Code Basics, de ses entrailles et de la pile technologique.

Pourquoi est-ce du tout
La question principale: "pourquoi avez-vous besoin de cours de base réguliers, un million d'entre eux?" Malheureusement, la plupart des documents disponibles ressemblent plus à des guides ou à des tutoriels réguliers dans le style de "faites-le, regardez ici, ça fonctionne, c'est cool, non?".
Dans le processus de travail sur les principaux programmes de formation sur Hexlet, nous avons rencontré un problème: si une personne commence complètement, complètement à partir de zéro, ne sachant pas quelles sont les variables et les fonctions, alors un cours de base ou un tutoriel typique peut non seulement ne pas l'aider, mais même lui nuire. Un débutant s'habituera facilement à la «magie», pas aux meilleures normes de codage, à l'approche de la mémorisation de spécificités au lieu de comprendre les systèmes.
À première vue, le projet peut ressembler à Codecademy, mais il existe trois différences importantes:
1. Cours en russe. Nous avons commencé avec PHP, y compris pour cette raison - il n'y avait pas de cours de russe interactifs et gratuits de haute qualité, et le langage reste populaire et important dans l'industrie.
2. Nous n'enseignons pas superficiellement. C'est un dilemme éternel - d'une part, vous devez couvrir beaucoup de choses et vous intéresser à l'étendue (et aux «mots populaires»), d'autre part, chez Hakeslet, nous continuons à suivre nos principes de l'importance de la fondation et de la compréhension des systèmes, pas des fonctionnalités. Plus facile à comprendre avec des exemples:
a) Nous considérons les effets secondaires et la variabilité - c'est extrêmement important, mais presque personne ne touche à ces sujets dans les cours de base.
b) En ce qui concerne les chaînes, il est important de parler du concept même de codage . Travailler avec des symboles ne se transforme pas en «mots magiques et magiques».
c) Lorsqu'il devient clair que la langue vous permet de faire des choses étranges comme 1 + '7'
, il est important d'initier l'élève à la dactylographie et, en particulier, à la dactylographie faible .
d) Lorsque la base est passée et que plusieurs pièces différentes apparaissent sur la même ligne de code en même temps, il est très important que la personne comprenne immédiatement ce qu'est l'expression et comment elle diffère de l'instruction. Et comment les expressions peuvent être contenues dans les définitions .
e) Lorsque le travail avec les fonctions commence, il est utile de continuer à considérer les expressions, mais déjà dans le contexte des appels, des retours et des arguments.
Je pense que vous comprenez. Nous, les programmeurs, ne pensons pas beaucoup à des choses comme foo(a+b)
ou return foo(x)
, mais pour les débutants très souvent, de telles constructions s'avèrent beaucoup plus compliquées que les foo(a)
standard ou return x
. Et ici, vous pouvez jeter un long regard sur tous les cas individuels, mais il vaut mieux expliquer l' essence , le système même des règles de base des langages de programmation.
Le contenu est granuleux et servi en séquence, augmentant progressivement la profondeur. Par exemple, les mêmes fonctions et expressions sont divisées en plusieurs leçons, où nous considérons divers aspects, en les combinant progressivement dans une vue d'ensemble.
3. Gratuit et interactif. Nous avons également créé Code-Basics parce qu'il n'y avait nulle part où envoyer des débutants qui se préparaient pour notre programme principal, «La profession de développeur PHP». Il n'y a tout simplement pas de cours en ligne gratuit! Plus précisément, il y a maintenant :)

Autres caractéristiques importantes:
- Nous vous apprenons à nommer correctement les fonctions et à suivre les normes de codage.
- Nous partageons notre expérience et nos meilleures pratiques.
- Dans chaque exercice, il y a une décision de l'enseignant, qui est disponible après une décision indépendante ou après une demi-heure d'essais :) En même temps, votre décision peut être comparée à la décision de l'enseignant sur une seule page.
- Chaque leçon peut être discutée avec d'autres étudiants. Nous essayons de nettoyer les discussions des "spoilers"
- Les quêtes sont construites autour de Game of Thrones :) (voir l'écran ci-dessus, par exemple)
Autorisation, vous permettant d'accéder aux exercices et d'enregistrer la progression des cours, jusqu'à présent uniquement via Github. Nous en profitons pour inciter les nouveaux venus à créer un compte sur Github dès que possible :)
Sous le capot
Hakeslet est écrit sur Rails. Nous avons écrit sur l'intérieur de Hakeslet il y a trois ans (omg, trois ans!) Dans l'article « Under the Hood of the Hakeslet Educational Project », et depuis, beaucoup de choses ont changé, mais fondamentalement tout est le même: Rails, PostgreSQL, tout tourne sur AWS et en partie sur Azure , Docker, déploiement et orchestration activement utilisés via Ansible. Sous chaque exercice de chaque utilisateur, un conteneur monte, ce qui vous permet de faire des exercices de presque n'importe quelle complexité: avec des frameworks, des serveurs et un accès web.
Code-Basics a d'abord décidé d'essayer quelque chose de nouveau et de plus léger que Rails. Par exemple, nodejs + typescript + certains microframes. Mais, de préférence, pas moins expressif que Rails. Compte tenu de notre amour pour Erlang, le choix s'est naturellement porté sur le Phoenix , d'autant plus que les mains qui démangent ont longtemps été rayées pour essayer Elixir.
Le cadre a surpris de façon inattendue. Malgré le nombre de fonctionnalités significativement plus petit, il est réalisé de manière très solide. Intégration avec JavaScript, infrastructure de test développée, excellent ORM (mais inhabituel, vous devez vous y habituer), beaucoup d'homologues ferroviaires (par exemple, prise en charge de slim ou gon).
Il y avait même une chose qui était bien meilleure que dans d'autres frameworks: créer un ensemble de middleware pour des routes spécifiques ou un groupe de routes. Même si vous n'utiliserez pas phoenix, nous vous recommandons de vous familiariser avec le pipeline .
Et étant donné la présence d'acteurs (et de chaînes pré-faites à Phoenix), nous pouvons certainement dire qu'Elixir surpasse Node JS dans presque toutes les situations. Et toutes choses étant égales par ailleurs, nous choisirons Phoenix pour le développement.

À l'avant - nous utilisons React + Redux. La mise en page est construite sur Bootstrap 4, comme tous nos sites (hexlet.io, guides.hexlet.io). L'éditeur d'exercices interactifs utilise Monaco , qui est la base de VS Code. Nous sommes également passés à Monaco à Hexlet même.
L'infrastructure et le déploiement sont Terraform, Ansible et un tas de raccourcis pour les équipes les plus populaires. Les sources de code de base sont disponibles sur Github , et nous acceptons les demandes de tirage.
Les leçons et les exercices pratiques eux-mêmes aussi . Y compris nous acceptons les demandes de tirage pour la traduction des leçons en anglais. Jusqu'à présent, un nombre limité de cours d'anglais sont disponibles ici .
Qui devrait utiliser les bases du code
- Débutants sans expérience.
- Des programmeurs débutants qui «nagent» un peu dans des sujets de base et ne comprennent pas parfaitement comment les choses fonctionnent qui vont au-delà de simples exemples tirés de manuels.
- Professeurs travaillant avec des débutants.
Plans
Les cours Code-Basics suivants sont JavaScript, Racket et Python. Il y a maintenant 63 leçons en PHP et bientôt d'autres seront publiées: sur les fonctions de bibliothèque, travailler avec la date et l'heure, et unicode. JavaScript a le premier module, et le contenu sera pour la plupart similaire à PHP: tout de l'arithmétique aux fonctions.
D'autres plans incluent la traduction en anglais. Vous pouvez aider avec cela :) Tous ces cours sur les bases du code seront également entièrement gratuits.
Nous serons heureux de répondre à vos questions dans les commentaires. Je vous remercie!