Быть специалистом во всех областях определённо невозможно. Областей очень много, они очень разные, многие требуют недюженной математической подготовки, а порой и каких-то других специальных знаний.
С другой стороны, иметь широкий кругозор, и при этом быть специалистом в какой-то конкретной области вполне возможно.
Как мне кажется, каждому программисту следует:
Уметь работать с сетью хотя бы на уровне системных вызовов ОС.
Понимать какие примитивы предоставляет ОС и как с ними работать: сокеты, файлы, процессы и нити.
В этом нет никакой особенной специализации.
Лучше быть не специалистом в разных областях, а профессионалом с чёткой специализацией.
Широкий кругозор при этом никак не мешает, но пытаться уследить за новыми тенденциями во всём невозможно.