Мне кажется, веб-программист в первую очередь должен быть программистом. Потому рекомендую
Алгоритмы и структуры данных Н. Вирта (это азбука и второй курс, но весьма полезная).
Обязательно рассмотрите древовидные структуры и алгоритмы на графах. Когда был школьником, мне взорвала мозг (в хорошем смысле)
книга Кубенского.
Почитайте (погуглите) про генетические алгоритмы.
Еще есть классная книга по анализу программистских задач (и нетривиальных решениях) —
Жемчужины программирования Дж. Бентли
Ну и в остальном — начните с того, что вы знаете о своем языке (инструменте, библиотеке, фреймворке и т.п.). Вы пользуетесь ассоциативными массивами? А знаете, как они устроены? Как происходит доступ по ключу? Насколько трудоемкая это задача?
Пользуетесь TreeMap? В javadoc к нему упоминается красно-черные деревья. А что это?
Как выполняется программа на моем языке? Мне нужно встроить в свое приложение язык отчетов, похожий на SQL, как мне это сделать?
Если вы в состоянии внятно рассказать об устройстве и принципах своего инструмента, можете предсказать поведение, оценить сложность того или иного подхода — значит, вы уже не самоучка.