Информатика и образование
  Мобильная версия сайта            
               
[Главная] [Новости]
[Статьи]
[Проекты]
[Ссылки]
[Автор]
               
    [Архив новостей]        
               
  [Форум] на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы  
       
  Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...]    
       
  [Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi]    
  [Разработка компьютерной игры] [Пример игры Donuts3D]    
       
  Код, теория, практика - всё это очень хорошо. Но проза жизни заставляет иногда делать и отступления. Вашему вниманию предлагается дневник Записки программиста, в котором представлены не теория и не практика, не исходный код, а мысли на тему того, что делать если что-то не получается, не обращаясь ни к кому.    
       
  Занимаясь программированием (не профессионально, конечно) сталкиваешься с рядом трудностей и проблем. Но главная трудность - это конечно одержание победы над самим собой. Быть может для кого-то это прозвучит банально, но моя мысль такова - по-большей части то, что не получается - результат собственных ошибок и просчётов. Мы чаще всего спотыкаемся о собственные неясно написанные места.    
       
  Что же делать если что-то не получается? То есть речь идет о логических ошибках. На первый взгляд в коде вроде бы всё правильно, но результат - не такой как ожидался. В чём проблема? Что делать?    
       
 

Часто результатом логических ошибок может быть и ошибка времени выполнения - Access violation. Этот вид ошибки очень трудно выявить, особенно начинающему программисту, поскольку в сообщении об ошибке ничего не говорится о месте ошибки в исходном коде и тем более о ее причине. Что такое Access violation ? Буквально - это любые нарушения программой прав доступа к участкам распределяемой системой памяти. Если программа дает ошибку этого рода, значит в ней какая-то переменная была записана или считана из такого участка памяти, который не принадлежит программе. Причина этого - ошибки инициализации переменных, нарушение границ массива и т.п.

Во-первых, особенно если это Access violation там, где Вы не можете отловить суть проблемы, нужно сначала локализовать ошибку, т.е. примерно найти то место в коде, где примерно она находится. Для этого можно так закомментировать блок кода, чтобы отключить то место, где она возможно, происходит. Постепенно уменьшая границы комментирования Вы сможете выйти на ту строку/строки, в которых содержится ошибка.

К слову сказать, ошибки вида Access violation самые распространенные и самые противные, т.к. не сразу видно где и что дает ошибку. Но концепция применения Access violation дает возможность предупредить и некоторые логические ошибки.

   
       
  Как бороться с тем, что не получается. Итак, Вы натолкнулись на стену, Вам не хватает знаний, сил, времени, терпения, упорства, чего-то еще... Этот список можно продолжать бесконечно. Да действительно, написание кода требует от Вас иногда очень больших усилий. Конечно в нескольких строках изложить идею решения всех проблем невозможно. Любые абстрактные рассуждения так и остаются вдалеке от неких практических советов.    
       
  В любом случае, иногда бывает полезно сделать передышку, отдохнуть, заняться чем-то другим, если что-то упорно не получается. Тогда, если Вы упорно прорабатывали проблему, решение может появиться через некоторое время и как бы само собой. Это и есть тот гений, который приходит к нам, когда наше сознание вроде бы отключилось от проблемы, ушло в сторону, а наше подсознание, продолжая работать, подыскивает нам решение.    
       
  Иногда на решение вроде бы простых вещей уходит очень много времени, а иногда всё идет "как по маслу". Первое конечно чаще происходит тогда, когда Вы работаете над чем-то новым, не совсем Вам известным. Второе случается когда Вы отрабатываете вещи, которые уже не раз делали. Но и в них можно допустить ошибку!    
       
  Мой опыт в непрофессиональном программированиии исчисляется с 1993 года, когда я начал делать первые попытки изучения Бейсика на БК-0010.01, а потом перешел к изучению машиных кодов. Однако работу на IBM PC-совместимых машинах я начал только в 1998 году, а к изучению программирования на них начал примерно в 1999 году. GW-Basic, Turbo Assembler и вот в 2002 году я наткнулся на Delphi 5. Поэтому программирование в Delphi и мой опыт в нём составляет всего 5 лет (на 2007 год). Главным образом это попытки создания компьютерных игр и мультимедиа-приложений (DirectX).    
       
  Так что, как видите, результат порой требует очень длительной работы. С одной стороны 1 человек вроде бы не в состоянии проделать очень много, но с другой - он это делает и порой не замечая.    
       
  Итак, будем исходить из того, что любая проблема решаема. Возможно Вы засмеетесь, и будете правы, сказав, что точно также она и нерешаема. Следовательно, вопрос в том, как ее решить?    
       
 

Вот несколько небольших практических советов -

- Если Вы пишете своё первое приложение на этом языке, в этой среде программирования, на этой системе постарайтесь чтобы оно точно соответствовало примеру из руководства, которое Вы применяете для изучения;

- Иногда ошибки бывают и в самих руководствах!, тогда остается надежда только на самих себя. Вот тут-то на помощь и приходит ЕГО ВЕЛИЧЕСТВО ЭКСПЕРИМЕНТ. Самый простой способ выявления ошибки - это поиск места, где она происходит и отделение ее от остального - правильно написанного кода.

- Возьмём некоторый абстрактный пример - пусть некоторая Ваша программа состоит из n-ого количества строк. Нужно проанализировать каждую буковку! каждой строки. Делается это очень просто - закоменнтируйте всё, а потом потихоньку открывайте строку за строкой, параллельно компилируя код. Так вы быстро выявите строку/строки, которые содержат ошибки.

- Не всегда всё так просто, а скорее даже наоборот - код бывает написан так, что комментирование одних строк не дает возможности другим, даже верно написанным, правильно работать. Как тогда быть в этом случае? Любая программа - это "строительные кирпичики", блоки, которые можно использовать как некое логическое целое. Ваша задача - именно поиск или выявление для себя таких блоков. Поначалу это бывает трудно, но это и есть искусство программирования. Любая программа разбиваема на любое количество подзадач, вопрос лишь в том, какую идеологию выбрать при выборе способов разбиения.

- Когда правильно написанный код отделен от неверно написанного комментированием можно приступить к экспериментам по подбору правильного варианта, иногда это просто другая буква, символ или ее отсутствие.

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

- Еще Никлаус Вирт доказал, что алгоритмы+структуры данных = программы, поэтому смело используйте этот принцип!

- Занимаясь написанием какого-то кода или модификацией существующего всегда оставляйте в резерве верно работающий оригинал! Тогда, даже если Вы запутаетесь в собственных "четырех стенах" ровно настолько, что откажетесь от всяческих попыток - вы всегда можете вернуться к оригиналу и выработать некое компромиссное решение!

   
       
 

Вот, вообщем-то и конец первой странички Записок. О том, что Вам было не совсем ясно или вообще неизвестно можно спросить автора написав на

megainformatic@mail.ru или поискав ответ где-то еще - в Интернете, Литературе и т.д.

   
       
  [следующая страничка >>]    
       
       
       
       
       
       
 

Обновления и новости о развитии Delphi DirectX проекта
смотри на сайтах:

http://www.megainformaticsite.pochta.ru

http://www.megainformatic.narod.ru

 

   
       
     
 

Cвои пожелания, вопросы или заметки отправляйте на:

megainformatic@mail.ru

 
     
   Обмен ссылками  
     
     
             
 
 
         
(с) МЕГА ИНФОРМАТИК 2006-2010
Hosted by uCoz