Why C? Because we can!

В продолжение истории о моём саморазвитии и поиске новой работы, я расскажу, как я докатился до Си.
Я уже писал, что какое-то время потратил на знакомство с Java, потому что по рейтингу TIOBE и количеству вакансий это очень популярный ЯП. Но как-то он мне не зашёл.
На самом деле, как ЯП, мне больше нравится C#. Он взял сильные стороны Java и попытался исключить слабые. В любом случае, почитав книгу по Java, можно с лёгкостью провести параллель и неплохо кодить на шарпе. Однако напрягает всё такое же навязывание ООП, сборщик мусора, отсутствие ручного управления памятью, необходимость таскать платформу для запуска (NET, Mono, ???), плохая портируемость.

Я прошёл в начале 2017 года несколько собеседований на места Java и C# разработчика и все безуспешно. Если честно, то сначала меня это выбило из колеи, но потом, анализируя беседы, общаясь на форумах, я понял, что большинство из них не стоило того - требовали слишком многое за мизерную зарплату.
Лишь одно собеседование мне понравилось (хоть я и не подошёл) - с питерской группой по разработке игр на Unity. Кроме основы основ, математики и алгоритмов, грузили и "низкоуровневыми" темами, а сам Unity и C# их не очень беспокоил. В итоге опять я слил, но зато узнал, какие пробелы у меня есть. Именно тогда я и решил изучать Си, чтобы опуститься максимально низко. И знаете, мне кажется, что я раньше зря тратил время на высокий уровень.

Да, это очень старый язык программирования. Да, у него нет поддержки механизмов ООП из коробки. Да, когда пишешь на Си, то велик шанс "выстрелить себе в ногу" из-за плясок с указателями или утечкой памяти. Но взамен ты получаешь реальную свободу и высокопроизводительные приложения. Действительно страдает скорость разработки, но только поначалу.
У меня часто спрашивают - "почему Си, а не ...?". Обычно сравнивают с C++, но это АБСОЛЮТНО разные языки программирования. Золотое правило программирования на C++ - "не пиши, как на Си", т.е. плюсы - это не "Ц с классами". Чисто субъективно, я считаю, что плюсы слишком сложный язык, т.к. синтаксис перегружен. Ну хорошо, а почему тогда не ...? Сложно сказать. Из современных языков мне пригляделся Go, но он точно так же страдает от тех же проблем, что и какой-нибудь C# или D. Кстати, некоторое время я кодил на D. Думаю, что отпишусь и об этом.
В общем, мне понравился С своей бессмертностью, скоростью, портируемостью, гибкостью, простым и приятным синтаксисом (есть спорные моменты, но я уже к ним привык). И я пока что не намерен ничего менять.

На чистой сишечке первым моим проектом был клон Марио. Игру я до конца не довел - было интересно лишь въехать в основы основ Си и написать движок для 2D-платформеров без ООП. Базис, который я планировал, реализован:
- примитивная физика с нуля;
- двусвязные списки с нуля;
- динамическое выделение/освобождение памяти под объекты;
- имитация классов и наследования (по факту агрегирование);
- анимация;
- загрузка карт формата редактора Tiled Map Editor.
ну и там по мелочи...
Все используемые библиотеки написаны на Си.

Видео геймплея:

Исходный код на github
Собранный проект под Win32


Далее я попробовал модернизировать проект и подключить нормальную физику + добавить многослойный рендеринг карт с Tiled Map. Графику взял из открытых источников и игру хотел обозвать "Lunarians". Но забил.
Физический движок chipmunk2D.
Все используемые библиотеки опять написаны на Си.
Исходный код на github


Я реально влюбился в Си и теперь все свои хобби-проекты пишу на нём. А совсем недавно всё-таки нашёл новое место работы - программистом на... СИ. Но об этом и о проектах как-нибудь в другой раз.

Комментарии

  1. tapin13 - очень интересно, пиши еще! радактор карты выглядит очень круто, это ты сам его так с нуля? На С?

    ОтветитьУдалить

Отправить комментарий