Поделиться

суббота, 8 января 2011 г.

Жизненный путь: C/C++

Ох и долго же я не хотел браться за этот подсчет! Одна мысль о том, что нужно собрать в кучу где-то 1000 файлов из всех архивов и пересчитать в них строки будила не самые приятные мысли. Тем не менее...

К своему стыду я, программируя на дикой смеси из C и C++ с 1995 года, довольно долго вообще не знал, чем эти языки отличаются и что они вообще отличаются. Так уж получилось: литература тогда только набирала обороты, книги мне попались понятные, но их авторы не особо вникали в фундаментальные особенности и различия языков - стремились показать, как что-то делается, а не разницу между тем, как это делается там и там, и первопричины этой разницы. Я не представлял себе, что C и C++ - это "небо и земля", ровно до той поры, пока не прочитал книгу Страуструпа (Б.Страуструп "Язык программирования C++" - М.: Бином, 2007. Прочитал я ее, конечно, не в 2007, а значительно раньше - кто ее только не издавал и в каких годах, но все равно найти бывает сложно). С моей точки зрения, в мире есть два труда по программированию, которые заставляют почувствовать себя идиотом. Первый - это указанная книга Страуструпа (идиотом чувствуешь себя, читая ее в первый раз), вторая - это многотомник Кнута (Д.Кнут "Искусство программирования" - М.: Вильямс, 2000) (лично я чувствую себя идиотом каждый раз, когда берусь за нее, вне зависимости от количества прочтений). Если есть желание узнать, почему язык C++ таков, каков он есть, то и по этой теме у Страуструпа есть книга (Б.Страуструп "Дизайн и эволюция C++" - СПб.: Питер, 2006), она хороша тем, что в общем-то ни к чему не обязывает.

Как бы то ни было, собравшись с силами, немного покодировав на C++ и на командном языке (то есть создав bat-файл), я подсчитал таки объем написанного мною на указанной паре языков. Общее количество строк составило 87891. Как-то не очень много, честно говоря. Это лабораторки, курсовые, программы для души, имитационные модели, в общем - все.

Некоторые вещи приятно вспомнить:
  • ParaTroopers - эту игрушку я с нуля создал под DirectX еще, помнится, 2-ой версии. Классика - расстрел парашютистов в воздухе. Собственно, я тогда как раз изучал DirectX и решил, что если уж изучаю, то нужно написать что-то такое, что давало бы ощущение законченного и полезного результата. Среди друзей игрушка имела большой успех - мы соревновались, кто больше наколошматит. Спрайты были мною же отрисованы в Paint с применением заготовок моего же производства, полученных с помощью 3DStudio (еще даже не Max, а 4.0). Звуки были надерганы из стандартных.
  • Galaxian - тоже игрушка, калька со Space Invaders, которую я слепил, по той же причине, что и ParaTroopers, но уже на базе OpenGL.
  • Кучка интерпретаторов, включая уникальное в какой-то мере творение - библиотеку SQuestMaster. Это библиотека, позволяющая выстраивать игры типа квест и RPG - манипулировать предметами, героями, характеристиками и т.д. Интерес в том, что ее можно использовать по-разному: с одной стороны это полноценная библиотека классов, а с другой - в ней еще есть интерпретатор с простого языка и функция, которая сама выстраивает из классов этой библиотеки нужную структуру сущностей, получая на вход текстовый файл с командами. Причем предметами можно не только вручную (с позиции игрока) манипулировать, но также можно задавать функции а-ля ON_PICKUP, ON_USE и так далее, и эти функции также можно задавать и на уровне библиотеки классов, и на уровне командного файла. Большая была работка.
  • Имитационные модели - собственно, и сейчас я большей частью зарабатываю на жизнь именно ими. В основном все просто: есть библиотека/framework, модель забивается с ее помощью, при этом даже не пишется код создания окон, обработки сообщений и т.д. Интересное начинается тогда, когда реально нужно самому что-то обрабатывать или подключать какие-то далекие от этого framework-а средства: например, по ходу процесса моделирования черпать информацию из БД и соответствующим образом корректировать поведение модели (я это реализовал, когда диссертацию готовил). Много фокусов приходилось делать за много лет.
  • Отдельный большой пакет программ - это лабы: тут много стандартного, причем это стандартное актуально и сегодня (калькуляторы для бесконечно больших чисел, конверторы форматов, оконные библиотеки под DOS - они, конечно, уже не актуальны, графические редакторы и т.д.). Кто сказал, что у нас в отрасли так уж быстро все меняется?
Обнаружил недописанный Tetris от 1998 года... уже не помню, почему у нас с ним не сложилось.

2 комментария:

  1. Как у тебя весь код сохранился? Мне кажется, я и четверти всего не восстановлю из того, что когда-то написал.

    ОтветитьУдалить
  2. Я с 1996 года начал задумываться о том, как бы все не потерять - знаешь, как на балконе сваливают всякую фигню, так и я с кодом - решил, что "пригодится" или просто на память. Сентиментален я.

    Завел на диске папки:

    "Работа" - с поддиректориями по характерам работы или учреждениям, где работаю.
    "Наука".
    "Разное".
    "Work" - это для кода. В этой папке подпапки по языкам и технологиям.

    И еще завел папку "Backup". И дальше каждый год или полгода скидываю ненужное из всех вышеуказанных папок в "Backup" и тру оригиналы. И так с 1996 - все просто! :)

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