Что именно учить программисту для H1B

Ну да. Просто было преподнесено как-будто там только его и изучают. Может я не правильно понял автора. У нас тоже ексель использовался, но как отдельный предмет его не изучали. Просто как вспомогательный инструмент.

Скажу кощунственную вещь - Кнут, имхо, не самое необходимое чтение, особенно на первых порах.
Design Patterns: Elements of Reusable Object-Oriented Software - для знакомства с паттернами тяжелая(хотя не подвергаю сомнению, что дюже полезная), да и скорее это справочник, вот Headfirst да, хорошая.
Добавлю еще в список:

Test Driven Development: By Example: Kent Beck: 0785342146530: Amazon.com: Books

Я даже больше скажу: на первых порах Кнут может оказаться вредной вещью, потому что продраться через 3,5 тома по 500-600 страниц полезного текста каждый, да ещё и с примерами на мертворождённом ассемблере - задача совсем не для новичка. Это как учить C++ с нуля по книгам Страуструпа и стандарту ISO/IEC 14882:2011.

Я бы порекомендовал большое внимание уделить основам computer science и алгоритмической подготовке. Выбор книг по CS может быть довольно непростой задачей, так как их много и нужно примерно ориентироваться в том, какой сферой хочется заниматься в дальнейшем. Наборы литературы по, например, операционным системам, компиляторам, сетевому стеку и, скажем, многопоточности (concurrency) могут очень сильно отличаться друг от друга. Что же касается алгоритмов, то тут проще: помимо упомянутого Кнута (которого вполне можно оставить на десерт), выбор не сказать чтобы очень большой - на мой взгляд это Кормен et al и Скиена. Книга Скиены совсем “галопам по европам”, Кормен намного более глубокий (уместно сравнить его книгу с выжимкой всего важного из Кнута). Необходимый матаппарат содержится в книге “Конкретная математика” (всё того же Кнута).

Кормен на русском
Скиена на русском
“Конкретная математика” на русском

P.S. Ещё добавлю, что, на мой взгляд, жизненно необходимо обучиться слепой печати. Это радикально изменит жизнь к лучшему.
P.P.S. Ну и если в планах стоит заниматься системным программированием, то, конечно, ассемблер и отладка. Операционные системы, компиляторы, concurrency, виртуальные машины, сборка мусора и многое другое даже в теории невозможны без понимания архитектуры соответствующего процессора.