суббота, 20 января 2007 г.

Как я стал программистом.

В 1999 году я поступил в Белорусский государственный университет информатики и радиоэлектроники в Минске на факультет компьютерных сетей и систем, сокращенно – КсиС. Правда для бесплатного обучения у меня не хватило баллов на вступительных экзаменах, но студентом я все же стал, платником. Таким образом половина мечты стать программистом и связать свою жизнь ИТ сбылись.
До этого, знания в области программирования у меня практически отсутствовали. Я имел общее представление о том, что такое переменная, что с ней можно сделать, но не более того. К примеру тогда я понятия не имел, как эти знания применимы для создания полноценной программы, вроде тех, которыми я пользовался в то время на компьютере.
Однако неплохие на то время знания математики, достаточно развитое логическое мышление вселяло в меня оптимизм и уверенность в том что я стану высококлассным программистов, потом хакером, и наконец гуру:). Теперь мне кажется, что все так думают до какого то времени. Потом, с возрастом, это как правило проходит. Ну не у всех конечно, только у тех кто так и не стал хакером или гуру и отказался от этой мечты:))
Учеба была чрезвычайно тяжелой. Было очень много предметов, никак не связанных с моей специальностью, к которым преподаватели предъявляли такие же требования, как и к специализированным предметам, может даже и больше. Помимо этого у меня на то время был достаточно большой пробел в знаниях о программировании, и для его закрытия требовалось чрезвычайно много времени. С первого курса мы начали изучать Си. Хорошо помню, как по вечерам часто оставался в библиотеке и разбирался с книгой по Си. Насколько я помню называлась она «Приглашение в Си», была в мягкой обложке бирюзового цвета.
Времени для изучения всех дисциплин катастрофически не хватало, и поэтому меня, признаюсь, иногда посещали мысли бросить учебу, потому что было очень тяжело. Однако несмотря ни на что, я, как любят говорить про студентов, "грыз гранит науки" и продвигался дальше, получая все новые и новые знания.
Постепенно начал как-то замечать что уже не являюсь таким дилетантом, каким был прежде. «Приглашение к Си» было «изгрызено» от корки до корки, и на ее место пришел Г. Шилд, со своим «Borland C++». Я уже неплохо разбирался в переменных, операциях над ними, функциях, структурах. И потихоньку начинал знакомится с принципом объектно-ориентированного программирования. Но несмотря ни на что, уровень моих знаний оставался достаточно низким. Однако это только сподвигало меня на дальнейшую изнурительную учебу и укрепляла мою уверенность относительно того что я точно стану гуру:)
Практически в процессе всего обучения мы использовали DOS, однако меня это не угнетало: серьезные, как я считал в то время, таблицы из ASCII-символов делало интерфейс моей программы профессиональным и очень серьезным. Я был почти счастлив, еще на шаг приблизившись к моей мечте о лаврах и непревзойденности.
Позже к С++ добавился Ассемблер. Нас учили в DOS работать с периферийными устройствами, заставляли писать программы на Ассемблере с графическим интерфейсом (ASCII-таблицы). Изучая Ассемблер, я все больше понимал С++, его гибкость и мощь.
Позже мы добрались до WIN32 API. Это было действительно потрясением. Теперь я видел, что для того что бы писать программы под Windows, знаний С++ совсем недостаточно. Необходимо было использовать огромные структуры, непонятные типы данных, такие как HINSTANCE или UINT, вызывать странные и неизвестные функции, типа CreateWindow. До этого все было уже интуитивно понятно относительно типов С++, таких как int или char*. Новые особенности написания программ внушали недоверие и опаску.
Однако и этот этап был пройден. Я уже без труда писал огромные блоки switch в оконной процедуре, и считал что могу многое. Позже я научился эффективно разделять этот код в отдельные методы, что привносило хорошую читаемость моего исходного кода и делало оконную процедуру не такой монолитной как было раньше.
Однако писать большие серьезные программы, используя только Win32 API было очень затруднительно и неудобно. Исправление или дополнение функциональности требовало огромных усилий, так как для каждого обработчика сообщения, для каждого окна был свой метод, своя оконная процедура. И изменяя исходный код в одном месте, требовалось анализировать как он повлияет на все остальное и делать дополнительно соответствующую доработку в другом месте. Пришло время знакомится с MFC.
Первое затруднение вызвало непонимание: где WinMain? Есть много классов, много файлов. Для каждого окна свой отдельный клас, удобный, после блока switch, механизм обработки сообщений. Однако мне все равно было непонятно – где точка входа в программу? Я не понимал. Я не понимал, и поэтому продолжал разбираться.
Позже я привык и смирился, что явного WinMain нету, и продолжал исследовать особенности MFC и получая все новые и новые знания. Меня очень порадовал тот факт, что для написания программ для Windows, не обязательно использовать чистый Win32 API.
Я был счастлив, что MFC позволяет писать такой удобный и понятный код. Я уже мог экспериментировать с графическим интерфейсом программы, делая его более приятным, ,без труда применяя различные особенности элементов управления и украшая интерфейс различными иконками и красочными картинками. Практиковал использование многопоточности в своих программах, работу с сетевыми интерфейсами.
Чуть позже приобрел книгу по Java, которая тогда еще не была так распространена как сейчас, и ее изучение представляло достаточно большой интерес в студенческих кругах. Поскольку в программе университета изучение Java не предполагалось, я приступил к самостоятельному изучению. Я занимался уже на четвертом курсе и был почти счастлив.
Но все тогда только начиналось.