Intro

В вузе нас пичкают языком Python — скриптовым языком, представляющим собой продукт молчаливого консенсуса программистов-недоучек и университетских администраций, желающих поскорее выпустить таковых программистов на рынок труда, вокруг того, что же такое язык программирования, в «равной мере подходящий и для учебы, и для практического применения».

В самом деле, Python больше всего походит на попытку сварганить LISP с «человеческим» синтаксисом, что в корне убивает и производительность (интерпретируемые языки зачастую на порядок медленней компилируемых), и выразительность (вместо простого как пень — пусть и громоздкого — синтаксиса LISP там форменный салат из варинантов записи одного и того же, щедро приправленный синтаксическим сахаром), и гибкость (однострочные анонимные функции). Плюс, написать простенький интерпретатор LISP занимает пару недель с нуля, а чтобы написать интерпретатор Python, надо потратить месяцы.

Сдав уже лабораторные, я надеюсь сразу преписать их на нормальном языке программирования, т.е. на ANSI C.

На мой рабоче-крестьянский взгляд, все «мультипарадигмальные» языки избыточны, а все языки без ручного управления памятью — попросту ущербны. Конечно, писать на C, что я прекрасно помню еще со школы, труднее, поскольку надо понимать всю программу полностью и учитывать, иногда исходя из горького опыта, все возможные побочные эффекты ее работы.

Инструментарий и формат кода

Немалый процент успеха любого начинания связан с выбором инструментов. В случае программирования, инструментами являются компилятор/интерпретатор, анализатор и текстовый редактор. Мой выбор таков:

  • Компилятор: clang из состава проекта LLVM, ввиду BSD-лицензии, высокой производительности и универсальности
  • Анализатор: Valgrind для памяти, LLDB для кода;
  • Текстовый редактор: nvi, как более быстрая альтернатива vim, ввиду полной ненадобности подсветки кода.
Я не использую подсветку кода, так что и в примерах ее не будет.

Список можно было бы дополнить чем-нибудь вроде make/CMake для сборки проектов, но пока ничего собирать я не буду, и освоить это можно уже по ходу дела.
Кстати, вот. Когда-то, давным давно, нас в школе учили писать на C при помощи интегрированной среды разработки Microsoft Visual Studio. Но проблема с этой IDE в том, что она вносит больше бардака и непонимания, чем помогает. Если задача стоит понять программирование, а не научиться лепить оконные программы на скорую руку, толку от нее куда меньше чем мороки.

Помимо прочего, стоит разу выбрать стиль форматирования. Оных существует несколько, мне ближе всего K&R, классический стиль из классического руководства Кёрнигана и Ритчи, со знаком табуляции длиной в 8 пробелов:

Пример кода

Компиляция и вывод

Valgrind позволяет посмотреть на то, куда течет память. В программе, в которой все выделение памяти происходит имплицитно, он не очень полезен, но зато в более сложных проектах бывает потребен безусловно.

Пример работы