Программирование на C++ глазами хакера

         

О книге


Для эффективной работы с книгой вам понадобятся минимальные знания C++ и начальные навыки общения с компьютером и мышкой. Вы должны уметь создать простое приложение, знать, что такое циклы и как с ними работать. Не помешают знания адресации, указателей и их необходимости. Это позволит вам лучше понимать описываемые примеры. Что касается сетевого программирования, то его я опишу достаточно подробно, начиная с основ и закачивая сложными примерами. Так что тут начальные знания желательны, но не обязательны.

Я постарался описать все как можно проще. Большая часть кода расписана очень подробно, в тексте программ приведено максимум комментариев, чтобы вы наслаждались чтением, и оно не было для вас утомительным.

Эта книга построена не так, как многие другие. В ней нет длинных и нудных теоретических рассуждений, а только максимум примеров и исходных кодов. Ее можно воспринимать как практическое руководство к действию. Только на практике вы сможете понять и усвоить все теоретически полученные знания.

Программисты в чем-то похожи на врачей: если врач теоретически знает симптомы болезни, но на практике не может точно отличить отравление от аппендицита, то такого врача лучше не подпускать к больному. Точно так же и программист - если он знает, как работает сетевой протокол, но не может с ним работать, то его сетевые программы никогда не будут работать правильно.

Это сравнение приведено здесь не просто так. В 2002 году я попал в больницу с температурой и болями в области живота. Меня положили в хирургическое отделение и хотели вырезать аппендицит. Я пролежал три дня, и ни один врач не решался меня отправить на операцию, но в то же время никто не знал, откуда у меня боли, и почему температура под вечер поднимается до 39 градусов.

На третий день вечером я сбежал из больницы, потому что у моей мамы был день рождения. На нем присутствовал знакомый врач (по специализации акушер), который, осмотрев меня, посоветовал пить от боли в животе по 1 таблетке через каждые 12 часов (не будем уточнять, что это был за препарат) и выписываться из больницы. Может кто-то не поверит, но после первой таблетки температура упала, а после второй я вообще плясал как Майкл Джексон. Результат: врачи перепутали отравление с аппендицитом и чуть не лишили меня моего аппендикса. А ведь могли и вырезать - просто по ошибке или ради интереса, а может и потому, что все равно уже лежу в больнице.


Этот случай еще больше закрепил мое отношение к практике. Ничто не может привести к такому пониманию предмета, как хорошая практика. Когда вы можете "пощупать" все своими руками, то теория запоминается гораздо лучше.

Еще один пример из жизни. В 2000 году я проходил обучение в известном университете на курсах Microsoft по администрированию и программированию сервера баз данных. Курсы очень хорошие, и преподаватель старался все очень подробно и доходчиво преподнести. Но сам курс был поставлен корпорацией как теоретический, с небольшим добавлением лабораторных работ. В результате нам очень хорошо объяснили, ЧТО может делать сервер. Но когда после курсов я столкнулся с реальной ситуацией, то понял, что не знаю, КАК сделать что-либо. Приходилось снова открывать книгу, которую дали мне в центре обучения (она была на английском языке), и, читая обширный теоретический материал и маленькие лабораторные, разбираться с реальной задачей. Уж лучше бы я узнал на курсах, как решить проблему, а не что можно теоретически выполнить, потому что такое обучение, по-моему, только пустая трата времени.

Несмотря на это я не противник теории и не пытаюсь сказать, что теория не нужна. Просто нужно описывать, КАК решить задачу, и рассказывать, ЗАЧЕМ мы делаем какие-то определенные действия. После этого, когда вы будете сталкиваться с подобными проблемами, вы уже будете знать, как сделать что-то, чтобы добиться определенного результата.

Именно практических руководств и просто хороших книг с разносторонними примерами не хватает на полках наших магазинов. Я надеюсь, что моя работа хотя бы частично восполнит пробел в этой сфере и поможет вам в последующей работе и решении различных задач программирования.

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

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

Даже если вы решили воспользоваться готовым примером, обязательно досконально разберитесь с ним. Попробуйте изменить какие-то параметры и посмотреть на результат. Попытайтесь модифицировать пример, добавив какие-то дополнительные возможности. Только так вы сможете понять принцип работы используемых функций или алгоритмов.


Содержание раздела