Chargement de l'analyse...
Compétence 01

Développer

Concevoir, coder et optimiser des solutions numériques adaptées aux besoins utilisateurs, en maîtrisant les technologies front-end et les bonnes pratiques du développement web moderne.

JavaScript ES6+ React.js API REST CSS Avancé Node.js

Apprentissage ciblé

AC — Apprentissage Critique
AC31.01 — Développer à l'aide d'un framework de développement côté client

Utiliser un framework JavaScript moderne (React, Vue, Angular…) pour structurer une application web côté client, en respectant les paradigmes de composants et la gestion d'état.

CE — Composante Essentielle
CE3.01 — En assurant la qualité et la maintenabilité du code

Produire du code lisible, documenté et maintenable, en respectant les conventions de nommage, les principes SOLID et en utilisant des outils de versionnement (Git).

Contexte

La compétence Développer est au cœur de ma spécialité BUT MMI Développement Web. Au fil des semestres, j'ai progressé d'un simple étudiant qui connaissait à peine les bases du HTML/CSS à un développeur capable de concevoir des applications web complètes, connectées à des APIs tierces et organisées en composants réutilisables.

Pour illustrer cette progression, j'ai sélectionné deux projets phares de mon parcours : une première application de calcul de BPM développée en JavaScript vanilla en S2, et une application Spoti'stats utilisant l'API Spotify, développée en React au S4. L'écart entre ces deux traces témoigne d'une évolution significative de mes compétences techniques et de mon rapport à l'architecture logicielle.

🎵 Application BPM (Trace 1) · ⚡ Spoti'stats (Trace 2) 2 projets analysés

Les deux Traces

Chaque trace est un artefact concret de ma pratique. Comparées côte à côte, elles matérialisent la progression réalisée sur cette compétence.

Trace 1
AVANT
// Application BPM — JavaScript Vanilla (S2)
// Calcule le BPM en détectant les frappes de l'utilisateur

let taps = [];
let lastTap = 0;

document.getElementById('btn-tap')
  .addEventListener('click', function() {
    const now = Date.now();
    if (lastTap > 0) {
      taps.push(now - lastTap);
    }
    lastTap = now;
    updateBPM();
  });

function updateBPM() {
  if (taps.length === 0) return;
  const avg = taps.reduce(function(a, b) {
    return a + b;
  }, 0) / taps.length;
  document.getElementById('bpm-display')
    .innerHTML = Math.round(60000 / avg);
}

Application BPM — JavaScript Vanilla

Application de calcul de tempo développée en JS vanilla lors du semestre 2. Interface minimaliste, logique fonctionnelle basique, sans framework ni architecture définie.

JS Vanilla DOM manipulation Semestre 2
Trace 2
APRÈS
// Spoti'stats — React + Spotify API (S4)
// Hook personnalisé pour récupérer les stats utilisateur

import { useState, useEffect, useCallback }
  from 'react';
import { spotifyAPI } from '../services/spotify';

export const useSpotifyStats = (timeRange) => {
  const [stats, setStats] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  const fetchStats = useCallback(async () => {
    try {
      setLoading(true);
      const [tracks, artists] = await
        Promise.all([
          spotifyAPI.getTopTracks(timeRange),
          spotifyAPI.getTopArtists(timeRange),
        ]);
      setStats({ tracks, artists });
    } catch (err) {
      setError(err.message);
    } finally {
      setLoading(false);
    }
  }, [timeRange]);

  useEffect(() => { fetchStats(); }, [timeRange]);
  return { stats, loading, error, refetch: fetchStats };
};

Spoti'stats — React & API Spotify

Application web full React utilisant l'OAuth 2.0 de Spotify pour visualiser les statistiques d'écoute personnalisées. Architecture en hooks, gestion d'état async, et interface responsive avancée.

React.js API REST OAuth 2.0 Semestre 4

Analyse Réflexive

Un regard critique et structuré sur ma progression, organisé en quatre axes d'analyse pour mettre en lumière l'évolution de cette compétence.

Axe 01

L'évolution de la compétence

Entre la Trace 1 (application BPM en JavaScript vanilla, S2) et la Trace 2 (Spoti'stats en React, S4), l'évolution est substantielle à tous les niveaux.

En S2, je manipulais le DOM directement avec getElementById, sans aucune séparation des responsabilités. Chaque fonction touchait à l'affichage, à la logique et aux données simultanément — une approche qui devenait rapidement ingérable à l'échelle.

En S4, j'ai intégré les hooks React (useState, useEffect, useCallback) et les hooks personnalisés pour encapsuler la logique métier. L'application gère l'authentification OAuth 2.0, les requêtes asynchrones parallèles et la gestion d'erreurs de manière professionnelle.

Axe 02

Sens critique

Points forts
Architecture React claire, séparation des concerns respectée
Gestion asynchrone robuste avec Promise.all
Réutilisabilité du hook useSpotifyStats dans plusieurs composants
Code maintenable et documenté avec des commentaires pertinents
Difficultés
Gestion de l'expiration du token OAuth sans page dédiée de refresh
Absence de tests unitaires sur les hooks personnalisés
Trop de logique encore dans certains composants (manque de services)
Temps de chargement initial élevé sans lazy loading des composants
Axe 03

Alternatives possibles

Si je devais refaire ce projet avec le recul acquis, plusieurs alternatives amélioreraient significativement l'architecture et les performances :

Next.js avec App Router : Permettrait le rendu côté serveur (SSR) et le code splitting automatique, réduisant le bundle initial de ~40%.
TanStack Query (React Query) : Gestion du cache et des requêtes asynchrones bien plus robuste que mon useEffect manuel.
Zustand ou Redux Toolkit : Pour centraliser l'état global (token, préférences) et éviter le prop drilling.
Testing avec Vitest + Testing Library : Couvrir les hooks avec des tests unitaires aurait détecté des bugs de re-render.
Axe 04

Anticipation du développement futur

Pour continuer à progresser sur la compétence Développer, j'ai identifié une feuille de route concrète sur les 12 prochains mois :

Court terme · S5 Maîtriser TypeScript pour typer strictement mes applications React. Commencer par migrer Spoti'stats vers TS.
Moyen terme · Alternance Approfondir le back-end avec Node.js + Express ou NestJS. Comprendre les pipelines CI/CD avec GitHub Actions.
Long terme · Projet pro Contribuer à un projet open source pour exposer mon code à une communauté de développeurs et recevoir des code reviews expertes.