0) Вопреки довольно распространенному мнению, JS очень интересный, разнообразный, мощный язык, и далеко не "игрушка". Практика это хорошо, но и очень важно знать "теорию" -- prototypical inheritance, event loop, metaprogramming (Proxy, Reflect, и их применения в reactive programming (в основном в фронт-энде), generators и как они используются в качестве syntactic sugar в виде async/await.
JS объединяет в себе много парадигм, поэтому важно понимать каждую из них и взять что-то, что близко к душе и разуму, из каждой. Если ты пришел из мира Java/C#/C++, не пытайся писать классический ООП-код в JS. Попробуй функциональное программирование (у Eric Eliott'а есть огромная серия блогов на эту тему).
0.1) TypeScript . Это обязательно.
1) Если тебе интересен фронт-энд, то просто пили приложения, тут у меня особого совета нет).
Так же очень хорошо бы было выучить d3.js, three.js -- визуализация данных и 3D графика в браузере, соответственно. Тут огромный потенциал для развития и будет держать тебя заинтересованным долгое время -- а это самое главное имхо. Фронт-энд может быстро наскучить и стать рутиной, но в виз.данных и 3D всегда можно найти что-то новое и развивающее.
Для интереса можно попробовать Elm -- строго-функциональный язык для фронт-энда, компилирующийся в JS.
2) Если интересен бэк-энд, то сфокусируйся на разработке performant, scalable сервисов, а не на enterprise приложениях (типа всяких бизнес API). Прочитай Developing Data-Intensive Application. Проект с хорошим потенциалом приложить концепты отсюда -- scraper какого-нибудь вебсайта. С базовым scrape'ром, ты изучишь browser automation и browser security. В дальнейшем можно параллелизировать свой scraper с помощью child_process и Web Workers