Программное обеспечение состоит из слоев. Каждый слой имеет определенный интерфейс. Когда мы используем интерфейс и встречаемся с ошибкой в этом интерфейсе, мы должны разобраться в реализации и опуститься на слой ниже. Даже если нет никаких ошибок, есть определенные ограничения. Они лежат за пределами интерфейса текущего уровня.

Чтобы понимать эти ограничения надо опускаться на уровень ниже. Например в нашем web-приложении мы ограничены в числе запросов обрабатываемых в секунду времени. Тогда нам нужно разбираться со Spring, чтобы увеличить это количество. Spring это для примера, на его место не умоляя общности можно поставить любую другую надстройку над http сервером. Когда мы выжали все что можно из наших сервлетов и Spring, нам нужно оптимизировать http сервер. Если с сервером мы тоже справились, можно идти дальше и разбираться с системными вызовами к сетевому оборудованию, с работой с сокетами. Когда на уровне сокетов мы выжали все что можем в операционной системе, мы можем улучшить физические сетевые адаптеры. Разобравшись с сетевыми картами, мы можем изменить разобраться с физикой процессов передачи информации и сделать оптоволоконные кабели, вместо медных и заменить процессоры. В физике, можно опускаться еще ниже и ниже, до ядерной и квантовой физики для создания выдающихся новых технологий.

На моем опыте, средним по силе программист считается, если хорошо разбирается в коде своего уровня и умеет опускаться хотя бы на уровень ниже. Более менее сильным программист становится, если доходит до двух трех уровней вниз, где-то до базовых протоколов взаимодействия. Http в моем случае. Классным специалист считается, когда он знает досконально все начиная с инферфейса железа, далее операционной системы и далее. Может оттрейсить выполнение алгоритма до машинных команд.

Дальше в принципе уже достаточно общего понимания физики транзисторов и их работы, чтобы хорошо программировать, на мой взгляд не надо уметь проектировать процессоры. Программирование и разводка микросхем ортогональные навыки. Может быть это потому, что я не работал в компаниях уровня Google.

Там ребята для обучения AlphaGo запилили собственный кластер, ПО для этого кластера и специализированные TPU устройства для обучения нейронных сетей. И это очень круто, особенно учитывая что развитие процессоров общего назначения остановилось. И в будущем будет расти число узкоспециализированных устройств, проектирование которых будет упрощаться и время от проекта до использования уменьшаться. Особенно показателен в этом плане приме Asic устройств для майнинга биткоинов.