Я вот подумал, что невалидные исходники кругом потому, что неправильно HTML преподают. Людям рассказывают про тэги, про то, что сначала пишется <html>, потом <head> и люди запоминают это просто как строчки. Если одну строчку забыл — браузеру всё равно, он добрый. Вот и получаются незакрытые тэги и обломки таблиц.
Однажды я видел даже такое:
<h1></b>Заголовок</h1>
Имеется в виду следующее. По умолчанию h1 жирный, а нам нужен обычный. Поэтому мы пишем «выключить жирность».
Люди не видят за тэгами элементов.
Я считаю, что сегодня нужно начинать обучать HTMLу c объяснения XML. Рисовать дерево, а не писать исходник. Говорить, какие элементы бывают, и какой у них смысл. Что такое node, attribute и #PCDATA. Как такое дерево описывает страницу.
А потом уже говорить, как оно выглядит в файле с расширением HTML.
(Кто напишет в комментариях, что у меня невалидный исходник, тот дурак.)