Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Питон для начала замечателен, не зря сейчас все ВУЗы на него перешли.

Откуда новичку знать какой паттерн в какой ситуации применить?
В Си же можно брать пример со стандартной библиотеки. И уже будет выходить неплохой код.
А как записать бинарное дерево в файл на С#?
В Си же все очевидно.
int len=sizeof(array)/sizeof(int);
Для ответов на эти вопросы нужно прочитать много умных книжек.
Для Си же достаточно одной книги в 200 страниц.
А еще писать можно как хочешь, а не как правильно.
Например в C# нельзя написать if(a1 = a2)
Это может привести к психотравме...
Например как получить размер массива интов? Само собой
int len=sizeof(array)/sizeof(int);
Это вам не какой-нибудь array.Lenght на C#. А почему стоит деление, а не умножение, ответит даже ребенок.
Что до деления/умножения: совсем-то мозги отключать нельзя. Петя купил на рынке яблоки. За них он заплатил 40 рублей. Каждое яблоко стоит 5 рублей. Сколько яблок купил Петя? Не правда ли, задача класса для пятого, если не меньше? И тут есть два подхода — спросить Петю (хотя по логике ООП, как я себе еще представляю, Петя спросит мешок с яблоками, а мешок уже даст ответ) или посчитать самому, потому что Петя может быть тугодумом, говорить только на китайском, а нам вообще могут понадобиться только красные яблоки, а Петя вообще брал, какие попались.
Тот же питон построен из соображений удобства. Это очень клевая вещь, но если не научится мыслить логично, то программы будут… творческие.
Речь же идет о том, с чего начинать и в данном плане мое мнение заключается в том, что низкоуровневые языки не сделают мышление более логическим, но зато сильно увеличат время и сложность вхождения.
В С придется писать много своих функций. Много функций — много практики. Волей-неволей начнете писать сначала простые функции для перевода строки в число, потом для возведения в степень, а потом придется писать функции посложнее — вот и естественная эволюция. А в Питоне? Все уже сделали до вас. Но делать для себя это вас не научит. Зачем готовить пироги, когда можно сходить в кафе и купить там пирог?
P. S. И что же такое строка, как не набор (массив) символов?
И я правда все еще не могу придумать хороший пример, где реально нужно определять размер массива. Я везде передаю указатель с длиной.
Вы программируете микроконтроллер, стек у вас очень маленький и передавать по цепочке вызовов 4 байта размера очень дорого.
Вообще если стек маленький, можно передавать через регистры или оперативную память (Вы когда-нибудь программировали что-нибудь для нашего Тесея или микроконтроллеров с малым числом памяти?).
Стек у него маленький, а место для отдельной подпрограммы для определения длины, или для хранения этой длины в объекте массива или для какого-то обозначения конца массива есть?
(Вы когда-нибудь программировали что-нибудь для нашего Тесея или микроконтроллеров с малым числом памяти?).
Может, вы приведете еще и пример, для чего на микроконтроллере обрабатывать строки?
default:
if ((args_type[cnt] & PA_FLAG_PTR) != 0)
args_value[cnt].pa_pointer = va_arg (ap_save, void *);
else if (__builtin_expect (__printf_va_arg_table != NULL, 0)
&& __printf_va_arg_table[args_type[cnt] - PA_LAST] != NULL)
{
args_value[cnt].pa_user = alloca (args_size[cnt]);
(*__printf_va_arg_table[args_type[cnt] - PA_LAST])
(args_value[cnt].pa_user, &ap_save);
}
else
args_value[cnt].pa_long_double = 0.0;
break;
case -1:
/* Error case. Not all parameters appear in N$ format
strings. We have no way to determine their type. */
assert (s->_flags2 & _IO_FLAGS2_FORTIFY);
__libc_fatal ("*** invalid %N$ use detected ***\n");
}
Программирование для начинающих: как стартовать и куда двигаться?