Программисты разные бывают и в разных сферах нужны разные знания. Разработчик-игр и фронтенд-разработчик должны знать разные вещи. В разных сферах используются разные технологии и программист должен ими владеть (я не говорю о том, чтобы выучить все команды, я говорю о том, что уметь использовать и желательно понимать как работает), языки программирования, фреймворки, базы данных и прочее.
Из общего - хороший программист должен понимать алгоритмы, должен знать, как оценить алгоритм и понять, какой алгоритм быстрее, какой больше подходит к задаче. Git скорее всего понадобиться как система контроля версий.
А что значит учить лишнее, что ты понимаешь под лишним?
UPD: ещё хорошо структуры данных понимать, стек, списки, массив, деревья