Не уверен, что для среднестатистического:
- фронт-энд разработчика нужны паттерны, алгоритмы и структуры
- Для 1C-ника - английский
- для эмбеддера - базы данных и фреймворки
Если вы про веб, то так и уточняйте. И то, к сожалению, сегодня нужно так же уточнять - сервер, мобильные, кроссплатформенный фронтэнд и т.д. и т.п.
UPD: хорошо, раскройте понятие "профессионала своего дела".
Вопрос поставлен слишком широко, на него нельзя дать вменяемый ответ.
- Можно быть "звездой", не имея особо сильных знаний в общем, но разрабатывать всемирно-известную библиотеку и быть знаменитым
- Можно знать от корки до корки свою предметную область и быть очень ценным специалистом в узких кругах
- Можно знать всего по чуть-чуть и быть важным звеном в общем технологическом процессе на разных стадиях развития различных проектов.
То, какими знаниями обладать - это вопрос того, с чем вы успели столкнуться в своей непосредственной деятельности. Конечно, знать нужно все, но жизнь коротка, а задачи нужно решать реальные и уже вчера.
Другое дело в том, как вы распоряжаетесь имеющимися знаниями и, главное, - теми, которых еще нет (а-ля Антибиблиотеки Умберто Эко) и как быстро адаптируетесь к новым задачам
Часто, на такой вопрос отвечают "Изучайте протоколы и структуры данных", но это тоже сильно общий ответ (хотя, конечно, как и вопрос).