Lundi 18 Septembre 2017 à 16:53
#6346
@brutal
Je passe très rapidement sur le statut d'auto-entrepreneur, je ne l'ai jamais été et même si je connais quelques personnes dans cette situation, je ne peux donc pas en dire grand chose. Le seul point c'est qu'il y a pas mal de monde sur le marché et que réussir à ce niveau dépend surtout de contacts, de réputation et d'expérience.
Pour le reste, j'ai l'impression que ce qui t'a été raconté tourne essentiellement autour de la facilité d'apprentissage et d'acquisition de compétences à un niveau professionnel, une idée répandue (y compris dans le milieu pro) mais très discutable. L'idée vient généralement que pour beaucoup, le développement d'applications web serait plus simple que pour d'autres applications car les exigences ne seraient pas seulement en partie différentes mais inférieures. Il y a du vrai là-dedans car on a aujourd'hui un certain nombre de ressources pour lancer facilement un petit site ou un blog, mais c'est en même temps s'arrêter à ce qu'on voit de l'iceberg en surface. Ce qui caractérise essentiellement une application web est l'interface par navigateur et l'utilisation de HTTP(S). En dehors de ce qui se passe dans le navigateur, donc sur un serveur distant, les principes de développement et de programmation ne sont pas si différents de logiciels plus classiques.
Cette interface, c'est ce qu'on appelle le front-end. Essentiellement on a trois langages pour le front-end : le HTML, le CSS et le JavaScript (le PHP n'en fait donc pas partie, je reviens dessus après). Le HTML structure la page, le CSS donne à cette structure un habillage et le JavaScript a un rôle plus complexe allant de simples effets à des animations plus complexes ou des chargement de données dynamiques sans que l'utilisateur ait besoin de rafraîchir la page, il sert en fait à utiliser les fonctions du navigateur pour modifier l'affichage.
Les problèmes du développement front-end sont liés aux différents navigateurs, aux différents supports (mobiles, tablettes, pc), ainsi qu'à différentes librairies JavaScript plus ou moins pertinentes en fonction de ce qu'on veut réaliser. Je ne suis pas moi-même développeur front-end car je n'ai pas vraiment besoin d'en être spécialiste pour ce que je fais, mais c'est surtout beaucoup d'optimisations, d'adaptations et aussi assez souvent des résolutions de conflits entre différentes librairies javascripts. Il faut également faire attention aux tendances du marché pour les différences librairies javascript et s'y former, en ce moment je vois pas mal de demandes autour d'Angular et React, mais d'ici 3 ans on aura sûrement autre chose. Il y a aussi WebGL pour des animations plus complexes et intéressantes (genre histography.io), mais là on touche plus directement au design.
Bref, le développement front-end, c'est de l'expérience, de l'expérience, et encore beaucoup d'expérience. Non pas que du côté du serveur l'expérience soit superflue, mais le fonctionnement du front-end est tel qu'on a encore moins de principes transposables d'un langage ou d'une librairie à l'autre. C'est de la spécificité et même si tu peux trouver de très bons tutoriaux et de bonnes formations, tu peux pas faire autrement pour progresser qu'en rencontrant des problèmes. Sachant que quand y a pas grand chose à foutre, tu as Bootstrap, mais on va rarement demander un spécialiste front-end pour simplement appliquer un style (encore que pas mal de gens surestiment les besoins d'une appli).
La partie serveur, ou back-end, en revanche, c'est donc plus proche d'un développement logiciel en général. Les spécificités à retenir ici sont plutôt autour de la gestion d'une requête HTTP avec les paramètres associés et de la sécurité. Le langage de programmation le plus courant c'est PHP, souvent à partir d'un framework comme Symfony (Laravel est également très populaire), mais on peut aussi utiliser Ruby (Ruby on Rails), Python (Django), Haskell (Yesod) et plein d'autres. Les plus courants cependant tournent aujourd'hui autour d'un paradigme de programmation qu'on appelle la programmation objet, et si tu comprends les concepts de ce paradigme, tu peux relativement aisément t'adapter à un langage qui en utilise les concepts. Je m'étends pas trop là-dessus, ni sur tout ce qui dans le développement d'une application ne va pas concerner la programmation en elle-même, il faut simplement retenir que côté serveur on a moins d'optimisations spécifiques et plus de modèles à connaître et à comprendre.
Le coup de "si tu connais PHP et le framework Symfony ça va" est une ânerie, comme l'absence de pré-requis en informatique. D'abord, connaître PHP ne veut pas dire grand chose, parce que connaître la syntaxe d'un langage n'est pas le connaître mais simplement pouvoir l'utiliser comme on conduit une voiture et que je sais pas trop où placer la barre. Genre ça fait des années que je fais du PHP, pour ce que j'ai à faire, pour mes collègues et pour des raisons pratiques, je "connais PHP", et pourtant y a plein de trucs auxquels j'ai jamais touchés, en grande partie car j'en ai jamais eu besoin. Ensuite, comme je le disais dans le paragraphe plus haut, ce qui importe, plus que le langage, c'est la connaissances des modèles, des "design patterns" et de la programmation objet (pour prendre le plus utilisé dans le domaine) : connaître la manière spécifique (syntaxe, mots-clés éventuellement organisation) de les utiliser en PHP est insuffisant si on ne comprend pas ces principes.
Ben les frameworks, c'est encore le niveau en-dessous. J'ai rien contre, c'est super pratique, on peut sortir des applis assez vite avec et on a maintenant quelques frameworks de bonne qualité même pour des petites applications (genre Lumen, version light de Laravel), le problème c'est que si tu te mets juste à utiliser à un framework, tu sais faire un site avec, mais tu sauras pas comment le framework fonctionne. Autrement dit tu sais pas a priori comment il gère vraiment une requête entrante, tu n'as pas tous les tenants sur comment il définit tes paramètres, sur les mécanismes qui font que d'un fichier à l'autre tu récupères certaines informations. Ça se trouve il fait ça très bien, mais à moins d'aller fouiller dans les sources et de pouvoir les comprendre, tu le sais pas. Certes, puisqu'il te tient la main t'as pas besoin de savoir tout ça pour avoir un site, mais tu te prétends pas professionnel cycliste si tu sais faire du vélo qu'avec les roulettes, et y a rien de plus pénible que les gens qui arrivent en se prétendant développeurs mais qui sont perdus sans leur framework ou sur un autre qui change un petit peu trop de style.
Avoir une formation initiale en informatique et en programmation plus globalement, ça permet à la fois d'être capable de comprendre globalement les différentes couches d'une appli (ex: interface - traitement - base de données), les méthodes de développement et de programmation utilisées, pourquoi on va créer des tests et comments : en gros ça apporte surtout de la méthode et une capacité d'analyse suffisante pour s'adapter à différents scénarios (et du coup acquérir de l'expérience plus rapidement). Les autodidactes font souvent des programmes qui fonctionnent, mais difficiles à maintenir, à réutiliser, à comprendre pour quelqu'un qui reprendrait le projet, quand c'est pas juste carrément mal foutu avec des problèmes de sécurité ou de représentation en mémoire car ils comprennent pas vraiment les mécanismes qu'ils utilisent.
Faut voir également qu'en France, le diplôme a une valeur encore assez importante, au point que certaines formations sont même dévalorisées. Cela n'exclut pas de trouver sans en pouvant faire preuve de mobilité ou en ayant un bon carnet de contacts en freelance, mais on ne trouve pas un poste si facilement que ça (il y a du monde sur le coup quand même) et les boulots proposés aux personnes sans formation sont rarement très gratifiants.
D'un autre côté n'avoir aucune expérience pro est également préjudiciable car la manière de gérer un projet en entreprise n'est que trop rarement bien abordée dans les écoles mais ça se corrige plus vite que des mauvaises habitudes.
Le bilan ?
1) Tu peux t'en foutre complètement de tout ce que j'ai dit. Faire quelques tutoriaux, apprendre à faire un site vite fait bien fait et faire tout le reste sur le tas en espérant bien tomber et ne pas avoir trop de difficulté pour trouver des clients. C'est possible de s'en sortir comme ça, surtout si tu te dis que ce sera pas à toi de maintenir les sites ensuite (ton successeur te maudira peut-être).
2) Tu peux te dire que c'est intéressant mais autant bien faire les choses et dans ce cas une formation est plutôt conseillée si possible. Les formations pro genre CESI sont de qualité assez aléatoire (surtout en alternance ça dépend des entreprises, il y en a qui abusent de ça), et l'idéal plutôt dans le genre des DUT/BTS mais c'est pas forcément évident de reprendre ça. Au minimum si ça t'intéresse vraiment je conseille plutôt de commencer par faire de l'algorithmique de base genre avec ce site. Puis d'aller progressivement vers de la programmation objet. Sachant que si tu fais une formation ne serait-ce que sur le papier ensuite, ça te servira même si elle n'est pas de très bonne qualité.
Voilà, désolé d'avoir fait aussi long et n'hésite pas à me dire si t'as d'autres questions ou si je suis pas assez clairs sur certains points.
Weeds, le pire étant que y a pas mal de trucs dont j'ai même pas parlé.
Je passe très rapidement sur le statut d'auto-entrepreneur, je ne l'ai jamais été et même si je connais quelques personnes dans cette situation, je ne peux donc pas en dire grand chose. Le seul point c'est qu'il y a pas mal de monde sur le marché et que réussir à ce niveau dépend surtout de contacts, de réputation et d'expérience.
Pour le reste, j'ai l'impression que ce qui t'a été raconté tourne essentiellement autour de la facilité d'apprentissage et d'acquisition de compétences à un niveau professionnel, une idée répandue (y compris dans le milieu pro) mais très discutable. L'idée vient généralement que pour beaucoup, le développement d'applications web serait plus simple que pour d'autres applications car les exigences ne seraient pas seulement en partie différentes mais inférieures. Il y a du vrai là-dedans car on a aujourd'hui un certain nombre de ressources pour lancer facilement un petit site ou un blog, mais c'est en même temps s'arrêter à ce qu'on voit de l'iceberg en surface. Ce qui caractérise essentiellement une application web est l'interface par navigateur et l'utilisation de HTTP(S). En dehors de ce qui se passe dans le navigateur, donc sur un serveur distant, les principes de développement et de programmation ne sont pas si différents de logiciels plus classiques.
Cette interface, c'est ce qu'on appelle le front-end. Essentiellement on a trois langages pour le front-end : le HTML, le CSS et le JavaScript (le PHP n'en fait donc pas partie, je reviens dessus après). Le HTML structure la page, le CSS donne à cette structure un habillage et le JavaScript a un rôle plus complexe allant de simples effets à des animations plus complexes ou des chargement de données dynamiques sans que l'utilisateur ait besoin de rafraîchir la page, il sert en fait à utiliser les fonctions du navigateur pour modifier l'affichage.
Les problèmes du développement front-end sont liés aux différents navigateurs, aux différents supports (mobiles, tablettes, pc), ainsi qu'à différentes librairies JavaScript plus ou moins pertinentes en fonction de ce qu'on veut réaliser. Je ne suis pas moi-même développeur front-end car je n'ai pas vraiment besoin d'en être spécialiste pour ce que je fais, mais c'est surtout beaucoup d'optimisations, d'adaptations et aussi assez souvent des résolutions de conflits entre différentes librairies javascripts. Il faut également faire attention aux tendances du marché pour les différences librairies javascript et s'y former, en ce moment je vois pas mal de demandes autour d'Angular et React, mais d'ici 3 ans on aura sûrement autre chose. Il y a aussi WebGL pour des animations plus complexes et intéressantes (genre histography.io), mais là on touche plus directement au design.
Bref, le développement front-end, c'est de l'expérience, de l'expérience, et encore beaucoup d'expérience. Non pas que du côté du serveur l'expérience soit superflue, mais le fonctionnement du front-end est tel qu'on a encore moins de principes transposables d'un langage ou d'une librairie à l'autre. C'est de la spécificité et même si tu peux trouver de très bons tutoriaux et de bonnes formations, tu peux pas faire autrement pour progresser qu'en rencontrant des problèmes. Sachant que quand y a pas grand chose à foutre, tu as Bootstrap, mais on va rarement demander un spécialiste front-end pour simplement appliquer un style (encore que pas mal de gens surestiment les besoins d'une appli).
La partie serveur, ou back-end, en revanche, c'est donc plus proche d'un développement logiciel en général. Les spécificités à retenir ici sont plutôt autour de la gestion d'une requête HTTP avec les paramètres associés et de la sécurité. Le langage de programmation le plus courant c'est PHP, souvent à partir d'un framework comme Symfony (Laravel est également très populaire), mais on peut aussi utiliser Ruby (Ruby on Rails), Python (Django), Haskell (Yesod) et plein d'autres. Les plus courants cependant tournent aujourd'hui autour d'un paradigme de programmation qu'on appelle la programmation objet, et si tu comprends les concepts de ce paradigme, tu peux relativement aisément t'adapter à un langage qui en utilise les concepts. Je m'étends pas trop là-dessus, ni sur tout ce qui dans le développement d'une application ne va pas concerner la programmation en elle-même, il faut simplement retenir que côté serveur on a moins d'optimisations spécifiques et plus de modèles à connaître et à comprendre.
Le coup de "si tu connais PHP et le framework Symfony ça va" est une ânerie, comme l'absence de pré-requis en informatique. D'abord, connaître PHP ne veut pas dire grand chose, parce que connaître la syntaxe d'un langage n'est pas le connaître mais simplement pouvoir l'utiliser comme on conduit une voiture et que je sais pas trop où placer la barre. Genre ça fait des années que je fais du PHP, pour ce que j'ai à faire, pour mes collègues et pour des raisons pratiques, je "connais PHP", et pourtant y a plein de trucs auxquels j'ai jamais touchés, en grande partie car j'en ai jamais eu besoin. Ensuite, comme je le disais dans le paragraphe plus haut, ce qui importe, plus que le langage, c'est la connaissances des modèles, des "design patterns" et de la programmation objet (pour prendre le plus utilisé dans le domaine) : connaître la manière spécifique (syntaxe, mots-clés éventuellement organisation) de les utiliser en PHP est insuffisant si on ne comprend pas ces principes.
Ben les frameworks, c'est encore le niveau en-dessous. J'ai rien contre, c'est super pratique, on peut sortir des applis assez vite avec et on a maintenant quelques frameworks de bonne qualité même pour des petites applications (genre Lumen, version light de Laravel), le problème c'est que si tu te mets juste à utiliser à un framework, tu sais faire un site avec, mais tu sauras pas comment le framework fonctionne. Autrement dit tu sais pas a priori comment il gère vraiment une requête entrante, tu n'as pas tous les tenants sur comment il définit tes paramètres, sur les mécanismes qui font que d'un fichier à l'autre tu récupères certaines informations. Ça se trouve il fait ça très bien, mais à moins d'aller fouiller dans les sources et de pouvoir les comprendre, tu le sais pas. Certes, puisqu'il te tient la main t'as pas besoin de savoir tout ça pour avoir un site, mais tu te prétends pas professionnel cycliste si tu sais faire du vélo qu'avec les roulettes, et y a rien de plus pénible que les gens qui arrivent en se prétendant développeurs mais qui sont perdus sans leur framework ou sur un autre qui change un petit peu trop de style.
Avoir une formation initiale en informatique et en programmation plus globalement, ça permet à la fois d'être capable de comprendre globalement les différentes couches d'une appli (ex: interface - traitement - base de données), les méthodes de développement et de programmation utilisées, pourquoi on va créer des tests et comments : en gros ça apporte surtout de la méthode et une capacité d'analyse suffisante pour s'adapter à différents scénarios (et du coup acquérir de l'expérience plus rapidement). Les autodidactes font souvent des programmes qui fonctionnent, mais difficiles à maintenir, à réutiliser, à comprendre pour quelqu'un qui reprendrait le projet, quand c'est pas juste carrément mal foutu avec des problèmes de sécurité ou de représentation en mémoire car ils comprennent pas vraiment les mécanismes qu'ils utilisent.
Faut voir également qu'en France, le diplôme a une valeur encore assez importante, au point que certaines formations sont même dévalorisées. Cela n'exclut pas de trouver sans en pouvant faire preuve de mobilité ou en ayant un bon carnet de contacts en freelance, mais on ne trouve pas un poste si facilement que ça (il y a du monde sur le coup quand même) et les boulots proposés aux personnes sans formation sont rarement très gratifiants.
D'un autre côté n'avoir aucune expérience pro est également préjudiciable car la manière de gérer un projet en entreprise n'est que trop rarement bien abordée dans les écoles mais ça se corrige plus vite que des mauvaises habitudes.
Le bilan ?
1) Tu peux t'en foutre complètement de tout ce que j'ai dit. Faire quelques tutoriaux, apprendre à faire un site vite fait bien fait et faire tout le reste sur le tas en espérant bien tomber et ne pas avoir trop de difficulté pour trouver des clients. C'est possible de s'en sortir comme ça, surtout si tu te dis que ce sera pas à toi de maintenir les sites ensuite (ton successeur te maudira peut-être).
2) Tu peux te dire que c'est intéressant mais autant bien faire les choses et dans ce cas une formation est plutôt conseillée si possible. Les formations pro genre CESI sont de qualité assez aléatoire (surtout en alternance ça dépend des entreprises, il y en a qui abusent de ça), et l'idéal plutôt dans le genre des DUT/BTS mais c'est pas forcément évident de reprendre ça. Au minimum si ça t'intéresse vraiment je conseille plutôt de commencer par faire de l'algorithmique de base genre avec ce site. Puis d'aller progressivement vers de la programmation objet. Sachant que si tu fais une formation ne serait-ce que sur le papier ensuite, ça te servira même si elle n'est pas de très bonne qualité.
Voilà, désolé d'avoir fait aussi long et n'hésite pas à me dire si t'as d'autres questions ou si je suis pas assez clairs sur certains points.
Weeds, le pire étant que y a pas mal de trucs dont j'ai même pas parlé.
Si vis pacem para bellum