Чтобы хорошо программировать мало знать основы языка. Нужно знать не только его изменения в различных условиях (те же JS и CSS имют свои особенности реализации в разных интерпретаторах, читай браузерах), но и еще море разнообразных библиотек и готовых решений, знание которых - показатель профессионализма. А вот тут как раз и возникает проблема. Мало того, что каждый из языков (CSS, PHP, JS) постоянно меняется, так и библиотеки постоянно развиваются. И насколько трудно одновременно поддерживать на должном уровне знания даже по тому же JS со всеми его ExtJS, jQuery, Chaplin, Bootstrap, Prototype и т.д. и т.п. знаю на личном опыте. То же самое могу сказать и про PHP. Даже на должном уровне поддерживать знания одновременно ZF и Symfony крайне сложно хотя по многим решениям идеологически они сильно схожи. Так что я говорю не о поверхностном знании, а о профессионализме. А в этом случае профессионалы широкого профиля встречаются только в американских боевиках.