Трудно сказать, где лучше... Всё зависит от того, на какие технологии ориентироваться, и на какие языки обучаться.
А также зависит от самого человека: есть люди, которые сами берут книги, рабочие примеры, и, методом тыка исследуют, изучают, экспериментируют, почитывают мал по мару разные статьи и т.п. Либо познают азы программирования в школах, в техникуме/колледже, в университете, на специальных курсах, либо у преподавателя репититора, и даже внутри компании (чёткий пример, на моей предыдущей работе конкретно занимались обучением техподдержчиков, из которых прямо вырастали молодые программисты и тестировщики).
Я сам начинал ещё со школьных годов, по книжкам и по суровым экспериментам со скриптами. Далее, как только я поступил в университет, мне стали преподавать C++, который тут же использовался для решения различных лабораторных работ. Параллельно разрабатывал различные мелкие проекты для себя, пока однажды не начал большой проект, который стал для меня основным, и, благодаря которому, я стал осваивать C++ углублённо.
Но всё же, университеты и школы дают лишь базу, самое основное и по минимуму. Далее нужно обучаться отдельно и дополнительно, чтобы освоить технологию углублённо. Поэтому, я считаю, если человек способен к самообучению, то ему необходимо порекомендовать книгу (и не одну), из которых тот будет черпать соответствующие знания. Либо специализированные курсы, на которых преподаватель в понятной форме объяснит все базисы, а также, вероятно, объяснит много чего, что обычно не объяснят в базовых программах: различные тонкости, особенности, хитрости, и т.п. Также крайне рекомендуется участвовать в тематических сообществах, дабы иметь возможность обмениваться опытом и учиться на примерах других людей.