Программы
Вступление в наСИлие

Вступление в наСИлие

When I find my code in tons of trouble
Friends and colleagues come to me,
Speaking words of wisdom...
Write in C!

– schoedav, кавер на "Let it be"

Знание языка Си не является обязательным ни для программиста, ни для любого нормального человека. Однако, если хочется чуть больше понимать в том, как устроен компьютер и сбросить вуаль сахара высокоуровневых языков, Вам стоит ознакомиться с этой книгой.

Сама книга написана по мотивам курса по языку Си для студентов второго года обучения компьютерно-ориентированной специальности.

О курсе

Ранее C рассматривался в курсе "Языков и Технологий Программирования", но его заменили на C#. Казалось бы, один символ, но вся системшина ушла.

Ну и хорошо! Хорошо же?

Как только мы переходим к реальности: ассемблер, аппаратные средства вычислительной техники... Мы оказываемся в абсолютной тьме. Потому что важно перед тем, как копнуть совсем в железо, надо понимать компьютер хоть на уровне околосистемного программиста.

Именно так и вернулся Си в программу. Опять же, не в виде всеобъемлющей многотомной книги, а в рамках ЛикБеза-развлечения.

Ориентируемся на стандарт С11, компилятор clang, ОС GNU/Linux. Предполагается, что слушатель уже имеет представление о каком-либо высокоуровневом языке. В частности, многие аналогии из Python.

Продолжительность

Курс длится 1 семестр, 1 пара в неделю (около 13 занятий). Лекции и практика совмещены - чем дальше, тем больше код будет превалировать над текстом, а домашняя работа над работой в аудитории.

Если вы изучаете Си самостоятельно, то можно оценить время как:

  • Тема "весит" 1 час;
  • ДЗ "весит" от 15 минут до 3-х часов ближе к концу.

Отчётность

"Допуск от 60 баллов, зачёт" - предполагалось, но удалось этого избежать благодаря попустительству университета. Поэтому работаем в своё удовольствие.

История

Язык Си разработан Деннисом Ритчи (помните, он ещё и Unix сделал) в соавторстве с Брайаном Керниганом. Всё это было в лабораториях Белла (AT&T). А всё из-за отсутствия вменяемого инструмента разработки системных программ – по сути только один ассемблер был... Хотелось чего-то более высокоуровневого.

Где используется Си, мотивация изучать Си

Unix написан на Си, Linux написан на Си... Драйверы на Си. Даже Windows на Си. Всё это – реальное положение дел в компьютере.

Благодаря тому, что абстракции языка близки к реальной архитектуре компьютера, получается писать эффективный код + управлять устройствами.

То есть по большей части Си используется для:

  • Разработки Операционных Систем (системное/сетевое программирование)
  • Программирования микроконтроллеров (носимая электронника, машины, кофеварки и т.д.)
  • ПО реального времени (стримминг/перекодировка видео/аудио)
  • Если нужно хоть как-то взаимодействовать с железом - придётся написать биндинг для вашего любимого языка на... Си. Такие дела.

Что есть в языке Си?

Мало ключевых слов – легко выучить ;-)

Вместо классов (описатетелей сложных сущностей) – структуры данных (+ юнионы). Аналог namedtuple/dataclass в Python.

Мощный инструмент указателей (на память) – помните принцип адресуемости памяти дядюшки Неймана?

Компилируется в нативный код – читай в язык процессора.

Макросы (препроцессор) – надстройка, позволяющая "именовать" частоповторяющиеся операции.

Чего нет в языке Си?

Проверки границ массивов/структур и вообще данных. Легко можно всё испортить. Например, мы можем создать массив из 10 элементов и записать в 11-ый... Само собой, это повлияет на другие данные, сломает вашу программу.

Строгая типизация. Типы есть, но они довольно неплохо преобразуются друг к другу. Да и вцелом – мы работаем с памятью, все типы данных – просто условность! И хоть и есть ошибки компиляции, связанные с проверкой типов данных, далеко не всё проверяется.

Автоматической сборки мусора. Всё, что динамически создаёте – сами и удаляете. Не забывайте прибираться – иначе утечки памяти.

Нет исключений (exceptions) – ошибки не райзятся, а обрабатываются на уровне возвращаемых значений / специальной переменной errno.

ООП. На самом деле, были попытки, но Си не про ООП, а про данные и устройства.

Итак, дальше нужно понимать, что если где-то "всё есть объект", где-то "всё есть функция", то в Си - "всё есть байт".

Список тем

  1. Вступительная пара
  2. Условная пара
  3. Массивная пара
  4. Домашняя пара
  5. Функциональная пара
  6. Структурированная пара
  7. Динамическая пара
  8. Домашняя пара
  9. Заглавная пара
  10. Линкованая пара
Также может быть вам интересно:

Как в Ubuntu отключить уведомления об ошибках

С версии 12.04 в Ubuntu появился механизм уведомлений об ошибках... Да, как в Windows

Читать »

Первая реальная утилита

Вы когда-нибудь писали код командной строки? А из чего она состоит? А поковыряемся чутка!

Читать »
Фото Как сделать свою middleware в Django (с примерами)

Как сделать свою middleware в Django (с примерами)

Middleware или "промежуточное программное обеспечение" - элегантный способ установить общие правила обработки запросов и ответов приложения. Давайте напишем парочку middleware, чтобы понять, как они работают.

Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

Современные сайты редко ограничиваются только текстом и вёрсткой. Часто в заметках красуются фотографии, а рядом с описанием товаров - их изображения.

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

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

Фото Нет слов, одни... однострочники

Нет слов, одни... однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!