По книжке Столярова А.В. "Азы Программирования" 1 издание.
Только не последующие издания, а именно первое.
Учить надо в таком порядке:
0. Английский язык
1. Pascal
1. ASM
3. C
4. Любой другой самый востребованный язык на котором собрались работать (например ECMA-262)
Почему надо начать с паскаля, асм, и "с" именно в таком порядке: Столяров объясняет в своей книжке очень предельно понятно. На Pascal, ASM, и С вы работать 99.99% времени не будете, но это даст мощную базу. После которой, вы сможете легко и непринуждённо браться за любой другой язык программирования, без страха и совершенно ничего не боясь, чувствовать себя полностью уверенно во всём, опираясь именно на эти знания.
Усидчивости не представляете сколько надо и свободного времени. На первых стадиях главное видеть результат, что у вас в руках чтото работает. Это будет вдохновлять. Потом нужно усвоить другое, что код который вы пишите должен быть немногословным и понятным. Для этого вы будете сочетать императивный и декларативный стили, чтобы добиться баланса между количеством строк кода и понятностью себе через 2 месяца / другим на GitHub
Для справки:
// Императивный стиль. То как работает программа:
function double (arr) {
let results = [];
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2);
}
return results;
}
// Декларативный стиль. Что делает программа:
function double (arr) {
return arr.map((item) => item * 2);
}
Декларативный стиль современный, но у него есть один недостаток, когда потом будете читать свой код или другие, то по мере чтения сразу забудете что он делает. Поэтому важно на будущее усвоить, что сложные части надо писать в императивном стиле а тривиальные задачи в декларативном. Иначе ни вы, ни другие в вашем коде потом не разберутся, и что плохо его не будет потом никто дорабатывать. Нужно помнить, что надо переходить на императивный стиль там где важно более детально показать что делает программа, и желательно ещё добавить комментарий к этому коду, почему вы перешли именно на императивный стиль. Эти участки кода потом можно нанять когото оптимизировать для конечной версии приложения или сайта.
Си — императивный язык (выполнение программы состоит из одних действий). Поэтому весь код это побочные эффекты —
Side Effect. В Си нет процедур, только функции. Изменение переменной это арифметическая операция. А в Паскале наоборот "побочный эффект" можно создать только преднамеренно, написав какуюто функцию, которая делает чтото ещё. Понимая это, вы найдете "золотую середину", которую так ценят другие программисты в вас. Но не написав на этих двух стилях ничего как это понять? - Да никак.
P.S. Можно пойти простым путём — начать с PHP по книжке Котеров Д. "PHP 7 в подлиннике"