#166 no te rayes. El problema es que no tengas background de desarrollo web u otros lenguajes similares (scripting, como Python o Ruby).
Y luego hay cosas que te van a dar por culo hasta que las interiorices bien, como capturar variables, asincronía y promises mal hechas, etc. Tienes a) el lenguaje, con sus peculiaridades históricas + estándares ECMAScript que puedes usar con herramientas como Babel que luego te convierten el código a JS prehistórico, b) el DOM y HTML, con sus desafíos y otra forma de ejecutar código (no hay un "public static void main" y tienes que saber cuándo se carga el código, en qué scope, de qué depende...). c) un ecosistema enorme de librerías y frameworks con, posiblemente, su propia idiosincrasia. Igual que si picas programillas sencillos o POJOs en Java, J2EE es otra bestia distinta, y más aún una app en Spring; pues aquí lo mismo: de VanillaJS a React o Angular hay un salto importante. Sigue siendo JS, pero trabajas con un paradigma nuevo.
Y sí, a veces es una mierda y hay muchas cosas feas que, por no romper compatibilidad con código existente en JS, nunca podrán hacerse o serán una mierda. Pero hoy en día con HTML5, ESNext y CSS3 puedes hacer maravillas. Hasta picarte tu código en C, compilarlo y usarlo en el navegador usando WebAssembly*. It ain't that much, but it's honest work.