Достаточно понимать что ты делаешь и уметь составлять правильные и оптимизированные алгоритмы, а не тупо "копировал-вставил". Изучив семантику и прочий синтаксический сахар - программировать не научишься. Ежели тебе дали чужой код (не от быдла) и ты не можешь в нем разобраться - ты не программист.
Для знания математики недостаточно знать математические обозначения. То же в программировании. Язык - только система обозначений. Надо уметь решать встречающиеся задачи и потом уже записывать их решение с помощью операторов языка.
Для программирования достаточно знать синтаксис и иметь логическое мышление. Это как если копателю дали лопату и научили ей пользоваться. Вопрос возникает другой. Зачем копать? Для какой цели и для кого? Вот тут уже действует определение РАЗРАБОТЧИК. Чтобы стать разработчиком, одного знания кода и логического мышления недостаточно. Тут нужно впитывать море информации и работать в разных направлениях, не только связанных с программированием.