Раз уж речь зашла о монетизации знания программирования, добавлю необходимые условия:
1. Нужно уметь оценивать и проверять работоспособность своих программ.
2. Нужно уметь оценивать требуемые ресурсы для программ. В том числе на этапе постановки задачи, а не только лишь по уже работающей программе. Хотя бы тупо чтобы не попасть в ситуацию когда пообещали
успешную работу программы на любом айфоне, а по факту ей оказался нужен суперкомпьютер, да ещё и на годы. Тут теория алгоритмов и теория их сложности рулят и эту теорию неплохо бы знать или знать хотя бы основные их положения и выводы.
2а. Сюда же и оценка достижимости поставленных целей. Пример: найти первый триллион (
) простых чисел несложно, проверить произвольное число из триллиона знаков на простоту нереально, хотя на первое памяти нужно больше (если их все хранить).
3. Про понимание что же является результатом работы программы уже сказали.
4. Нужно знать хотя бы основные классические методы решения типовых задач (поиск, сортировка, решение уравнений, стратегии оптимизации, базы данных, ...), их достоинства и недостатки.
Уточню, я говорю лишь о достаточно крупных проектах, как показывает опыт успешно продавать можно и поделки на ардуино, написанные на коленке за 10 минут даже путаясь в арифметике. Их я исключаю.