Как вы знаете, если вы специализируетесь, вы автоматически несете альтернативные издержки, поскольку вы не сразу получаете право на другие технологии (например, программисты Java не часто сразу принимаются на работу по оптимизации компилятора). Однако вы должны сбалансировать это с вашей любовью к сложности, присущей выбранной вами дисциплине.
Вы говорите, что хотите быть экспертом — давайте, найдите время, чтобы изучить выбранную вами дисциплину. Нам как сообществу всегда нужны новые специалисты. Тем не менее, мой совет — следовать прагматичной рекомендации программиста «Изучайте новый язык каждый год». Таким образом, пока вы занимаетесь глубоким лексическим анализом алгоритмического кодирования, вы также можете штамповать небольшое приложение для iPhone, которое вас интересует. Вы никогда не знаете, перекрестное опыление различных парадигм может вызвать у вас некоторое понимание, которое расширит вашу специализацию на новые области.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: