И ещё актуален ли Си как язык программирования в 21 веке, или даже ОС пишут на чем-нибудь повыше?
На нескольких языках пишется проект одновременно. Если пишешь что-то, то надо сами файлы проекта обслуживать.
Например:
- удалить пробелы на концах строк во всех исходниках
- генерировать новый файл с исходным кодом определённого вида
- записывать комментарий с именем файла и датой в определённые исходные файлы
- копировать файлы в специальный каталог, если в них есть строка с именем пользователя
- найти все непрокоментированные функции в коде и добавить их в файл с задачами
- вычислить покрытие кода тестами в процентах и вывести это в html-страницу
Да там много всяких действий надо делать. Основной принцип: если ты что-то сделал второй раз, напиши скрипт, который будет делать это в следующий раз. Так вот, для таких дейсвий C не подойдёт, потому что он под это не заточен, нужен специальный язык. В итоге у тебя сам проект на C, куски кода для проекта генерирует скрипт на shell'е, тестирование проекта выполняется скриптом на питоне. А потом тебе, например, надо сгенерировать набор подобных скриптов для любого нового проекта - и ты на shell'е пишешь скрипт, который создаёт shell-скрипты, python-скрипты и базовый исходник на C. Написать программу на C, которая создаёт исходники на C для написания другой программы, - милое дело, а может и несколько программ написать.
В общем, ты не должен заморачиваться одним языком, потому что это будет неэффективно в любом случае, какой бы он там ни был, где-то нужно будет вообще сцеплять в единую систему программы, сделанные на разных языках.
У меня вообще первые программы были на QBasic'е, и они делали своё дело - добывали мне текстовые данные из бинарников, которые я брал из программы одной. Но это было давно, но я до сих пор помню, сколько я данных ими добыл. Вот для чего нужны программы. У тебя их никто не будет покупать, ты их делаешь для того, чтобы они работали и давали результат, который вручную не получишь, потому что это долго или невозможно вообще (100 часов надо).