Programmering är inte att lära sig språk, programmering är att hantera kod. Språket är ett av alla verktyg utvecklaren använder.
Man kan lära sig ett språk som python, javascript, C#, java men det är inte samma sak som att man lärt sig programmera.
Tror det är det vanliga, när skolan började lära ut "programmering" (läs: språk, inte programmering) förstörde de mer än vad de tillförde. Dels klarar inte skolan att locka till sig duktiga utvecklare, pojkens lärare är bedrövlig, han kan inte alls. Eleverna får rätta honom och det är visserligen bra men att en skolan kan sätta en så okunnig person i ämnet att lära ut förstår jag inte.
Exempel (för att få förståelse på lärarens nivå): De skulle göra loopar, då lärde läraren bara ut "while" lopar för han hade inte lärt sig hur man gjorde lopar med "for".
Lär sig någon hantera språk är det inga problem att gå in på nya språk, bara olika syntax för samma sak. Det svåra med "nya" språk handlar oftast mer om vad som följer med i språket. T.ex C#, inte C# som är tar tid utan .NET, Java är det inte språket som är svårt utan runtime biblioteket. JavaScript är det inte språket som är svårt utan det som måste läras upp är hur en browser fungerar (om det är för webutveckling).
Förutom att lära sig vad som följer med behöver man lära sig hur hantering av komponenter och annat fungerar. Hur saker byggs, installeras och så vidare.
Så orsakerna till att jag tycker C i kombination med JavaScript är en bra kombo beror på att C lär ut hårdvara, hur en dator fungerar och att man kan göra i allt med spartanska språk, att exempelvis C++ eller andra språk med smartare syntax mest är syntaktiskt socker.
JavaScript för att skriva bra kod (undvika spagetti mm).
Störst problem med lite svårare språk vad jag upplevt är att det tar tid innan eleven kan göra något, yngre vill snabbt se resultat om de inte skall tröttna.
Att just din son har en enligt dig bedrövlig lärare är en sak och trist naturligtvis men de flesta datalärare som jag stött på är duktiga och de lär ut programmering, att tänka som en utvecklare, inte programspråk i sig, naturligtvis med ett programspråk som hjälpmedel men det viktigaste är att de lär ut just programmering. Hur tänker man som programmerare, hur strukturerar man, hur delar man upp, oftast med en top-down teknik. En enkel while- eller for-loop är bara detaljer i kod, det är det strukturerade tänket man är ute efter.
Jag stötte ihop med en lärare på Stockholms universitet som visade sig vara en tidigare student på en kurs i grundläggande programmering som jag höll på KTH och på den tiden använde Scheme som förstaspråk med Abelsons & Sussmans bok "Structure and Interpretation of Computer Programs". Jag frågade honom vad han hade med sig från den kursen och svaret var intressant.
"Jag har aldrig använt Scheme efter kursen men tänket. Du sa alltid saker som: 'Tänk brett, tänk fritt, tänk vilt, tänk utanför boxen, tänk i rekursiva mönster'. Jag lärde mig att tänka som en programmerare och det har jag haft nytta av inte bara när jag programmerat utan även när jag undervisat i matte och fysik. Vi lärde oss hur man närmar sig ett problem, hur man avgränsar det, hur man bryter ner det, hur man letar efter lösningsmetoder, hur man hittar mönster och hur man utnyttjar dem. Det har jag med mig och det har jag haft en enorm nytta av."
Detaljerna i koden får man naturligtvis från det valda programspråket men det är just bara detaljer och syntax, det är tänket som betyder något.