Начинающему надо выбирать не язык, а учебник программирования. Потому, как знание языка программирования не может научить программировать - т. е. уметь находить решения программистских задач.
Что касается именно языка, то языки с динамической типизацией (Python, JavaScript, PHP и т. д.) отпадают сразу: они - со своей вседозволенностью и бесконтрольностью - не только не могут приучить к дисциплине программирования, но и провоцируют учащегося писать говнокод. Более того: ты в процессе обучения будешь ошибаться и даже не сможешь понять, что ошибся, т. к. интерпретаторы этих языков проглотят любой бред - не выдав предупреждений и не сообщив об ошибках.
Java - слишком ограниченный и при этом очень сильно переусложнённый язык. Освоению особенностей языка будет отводиться больше времени, чем изучению собственно программирования.
Для начального обучения нужен предельно маленький (чтобы не отвлекаться на ненужные для обучения детали) и предельно логичный (чтобы не ходить по полю, густо усыпанному граблями) язык с максимально сильной статической типизацией (чтобы компилятор мог обнаруживать ошибки в логике программы).
И мы видим, что с такими языками всё очень печально (перечислены в порядке уменьшения предпочтения):
3 языка, созданные Виртом: Oberon-07 (или любой другой из семейства Oberon'ов, но 07 самый простой и удобный именно для обучения), Modula-2, Pascal (именно классический Pascal, а не Delphi или PascalABC.Net).
Go - построенный на базе Oberon-2 и "рандеву" Хоара, но с С-подобным.
И это практически весь список того, что можно порекомендовать для начального обучения. Подавляющее большинство актуальных языков либо дико переусложнено (особенно в этом выделяется C++), либо слишком потакают программистам, никак не контролируя написанный ими код (C, ассемблеры).