## Etudes * Minimum bachelor degree in IT * Idealement master degree in IT ## Langages * PHP (*haha!*) * Connaissance d'un ou plusieurs autres langages éventuellement (*on commence tous par un autre langage*) * Connaissance d'un autre langage de type ML? (*Haskell, Ocaml, Scheme, Lisp,...*) * Connaissance des technologies qui tournent autour du web (*HTML, CSS, Javascript*) * Base de données - SQL/NoSQL/Postgres * Connaissance de la langue anglaise * Connaître, utiliser et expliquer les frameworks les plus courants * Pouvoir écrire un algorithme simple de manière récursive et itérative (*exemple le plus simple: l'algorithme d'Euclide pour le GCD*) * Une bonne manière d'évaluer un candidat est de lui soumettre des petits morceaux de code et de lui demander ce qu'ils font et/ou de quels frameworks ils sont issus. C'est une manière radicale de savoir comment le candidat réagit et pouvoir évaluer la manière dont il comprend et explique un problème. * Structure des données, connaitre les différences et points commun entre les différents types de structure les plus communs (*queue, stack, vector, tree*). Pourquoi favoriser l'un par rapport à l'autre? * Qu'est ce que le PHP-FIG, à quoi sert-il? Pourquoi a t'il été créé? ## Symfony * Utilité de "composer" (*l'outil*) * Comprendre le mécanisme de dependency injection * Comprendre l'utilité d'un service container * Connaitre les differences entre: une Symfony App, un Symfony Bundle et une PHP Library * Templating engine, pouvoir utiliser celui utilisé par Symfony * Expliquer le Decorator pattern, à quoi sert il ? * Pouvoir créer une route avec son controlleur? Y a t'il plusieurs manières de le faire? * Pouvoir altérer le service container avant sa compilation ## Techniques * Bonne connaissance de Linux * Connaissance des serveurs webs et de la mise en place pour mettre en ligne un site web * Problem solving skills - pouvoir effectuer ses propres recherches, connaître les bons réflexes pour se débrouiller seul * Comprendre parfaitement les principes OOP et SOLID, la programmation fonctionnelle est un plus non négligeable * Comprendre les design patterns, pouvoir les schematiser en UML * Pouvoir écrire des tests (*unitaires mais aussi analyse statique*) * Pouvoir communiquer/expliquer/décrire un problème par écrit, en anglais * Veille technologique - Se tenir au courant des nouveautés * Intégration continue - Pouvoir comprendre et utiliser les outils mainstream existants * Curieux par défaut ## Outils * Linux et tout ce qui tourne autour (*peu importe la distro*) * Git - pouvoir utiliser Git et le connaitre mieux que sa propre poche * Ne pas avoir peur de travailler en ligne de commande * Un éditeur de code (*peu importe, tant qu'il y en a au moins 1 qu'il maitrise*) ## Big plus * Compte Github/Gitlab? * Projects opensource visibles en ligne? * Site web disponible? * Participation à des projets Opensource mainstream? ## Questions 1. PHP - What is the tool used to manage dependencies? Why we need it? Written in? By whom? 2. Version control - Do you use any VCS ? Yes ? Why ? Do you use any UI ? 3. Version control - git rebase - What's the use? 4. Version control - git clean vs git reset ? 5. Context: You're on "main" branch and you would like to have a commit that was done in another branch. What are the options? 6. Version control - What is a remote? Is it possible to have more than one? 7. Version control - What is push --force-with-lease 8. Open Source - Do you contribute to open source projects? Why? 9. PHP Frameworks - Do you know some of them? Do you use them? Why? Why not? (only consistency???) 10. "In house framework" - Why not using a real framework? What about security? 11. Symfony - What are Symfony bundles? What is the difference between a Symfony app and a bundle? (symfony 3 for API?) 12. Migration from Windows to linux - What are the differences from running PHP on Windows and Linux? What do you mean by "Windows approach"? 13. What is autoloading? Which tools allows you to do so? 14. What is the latest major version of Symfony? 15. Object design - How do you start doing some code? 16. Object design - Do you use Design Pattern? Why? Do you know some of them? (programming patterns) 17. Object design - A design pattern which is used in Symfony ? 18. Object design - How do you extend the functionalities of a class? 19. Object design - What is a final class? How do you extend it? 20. Object design - Interface? Immutability? quid 21. Object design - What is inheritance? What is composition? 22. Database - What package do you use to connect to a database? 23. Testing - Do you know testing tools? PHPSpec, PHPUnit, Behat 24. Typing - What it is? How do you enforce it in PHP? 25. Typing - What is type juggling? 26. Static analysis - What's their use and what's their name? How do you enforce SA in the code? What are the advantages? 27. Zend framework has been renamed ? Laminas 28. What is lazyness? Is it possible to do in PHP? 29. What is a generator? difference between Iterators?