@Ktos mowi oczywiście o podstawach podstaw, być może wystarczających back-endowcom (javowcom). Nie da się nauczyć HTML-a 5 w parę godzin tak, żeby w miarę swobodnie go używać i nie tworzyć crapu. Semantyka jest trochę za bardzo skomplikowana. Pojęcie oddzielenia struktury (HTML) od prezentacji (CSS) wymaga trochę więcej zachodu i być może znajomości podstaw obu tych języków.
HTML jednak jest ze wszystkich trzech najprostszy do nauki. Jeśli robiłbyś tylko backend, czyli kod po stronie serwera, to podstawy HTML-a musisz znać, ale bez jakiegoś wielkiego parcia. HTML stworzą ci i tak frontendowcy. Będziesz tylko musiał powstawiać go w JSP-ki, dlatego musisz mniej-więcej wiedzieć, o co w nim chodzi.
Gorzej, jeśli będziesz miał sam klepać całość aplikacji webowej: zarówno frontend, jak i backend. Wtedy wypadałoby głębiej rozumieć języki frontendowe. Bo jak nie, będziesz miał lipny kod o małej dostępności i będziesz miał spore problemy z uruchomieniem aplikacji np. w IE. Z wersją 8 włącznie.
Kwestie kompatybilnościowe dotyczą szczególnie CSS (choć akurat z HTML-em 5 też jest problem...). Ciężej ogarnąć CSS niż HTML. Nawet podstawy -- reguły kaskadowania, specyficzność itp. -- zajmą trochę czasu. Możesz to olać i kodować na hurra, ale wtedy będziesz strasznie klnął na język. "Czemu mi to nie działą?!", "czemu CSS jest tak głupi?!". Tymczasem reguły rządzące CSS mają logiczne uzasadnienie, przydatne w rozmaitych przypadkach, na które być może jeszcze nie natrafiłeś na etapie klnięcia. To by była wyłącznie Twoja wina, że kodujesz w języku, którego nie chciało Ci się nawet poznawać ;).
Porządne zakodowanie layoutu, tj. odwzorowanie projektu graficznego za pomocą HTML-a i CSS, nie jest takie proste i nauka zajmuje przeważnie co najmniej miesiące. Chociaż nie: przeważnie to ludzie idą wcześniej do agencji interaktywnej, w której nie ma czasu na naukę i po X latach nadal tworzą kwiatki typu menu składające się z diva z wrzuconymi luźno linkami, pooddzielanymi znakiem "|". Z elastycznością i dostępnością ma to niewiele wspólnego.
Z JavaScriptem jest podobnie jak z każdym innym językiem zupełnie innym niż ten, który znasz do tej pory. JavaScript znacznie różni się od Javy czy C++. Zupełnie inne jest dziedziczenie, koduje się zupełnie inaczej dzięki funkcyjności i bardzo dynamicznej typizacji. Spróbuj używać go jak Javy, to raczej polegniesz, a na pewno będziesz miał (głupie) pretensje, że z JavaScriptu jest bardzo marna Java. Tymczasem nikt Ci nie obiecywał, że wszystkie języki, których będziesz się miał nauczyć, są podobne. JavaScript nie jest i polecam przyjąć to do wiadomości i poświęcić mu trochę czasu lub w ogóle w nim nie kodować i zostawić to kompetentnym osobom.
Ale ponownie: jeśli robiłbyś sam backend, to z JS-em nie będziesz miał (prawie) styczności.
Co do algorytmów, to jest różnie.
Często jest tak, że korzysta się z nich mało lub prawie wcale (mówię o formalnych, skomplikowanych algorytmach, bo oczywiście zawsze używasz jakiegoś algorytmu). Z drugiej strony: Google jest po stronie back-endu całkiem skomplikowane algorytmicznie, co nie? Możesz trafić np. na analizę/rozpoznawanie obrazów czy dźwięku, skomplikowane, heurystyczne algorytmy grafowe (np. wyszukiwarki)... A możesz też trafić do przytulnej korporacji i zamiast z algorytmami walczyć z rozkładem oprogramowania na setki tysięcy linii kodu.