![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
Вот мы и дождались очередной умной темы. Кто следит за ними наверное помнит обсуждения про ИИ, шаблоны проектирования, общие способы создания и многие другие. Сегодня речь пойдёт о составлении алгоритмов. Множество вопросов требуют формальных ответов (Что такое алгоритм? Как создать алгоритм? Что делать если не знаешь чего хочешь? Чем отличаются формы записи одних и тех же алгоритмов и как эффективнее всего балансировать между ними? и т.д.)
Добавлено через 7 минут и 7 секунд изначальная ссылка -------------------- ![]() обычный день на винграде |
|||
|
||||
Springtime |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень |
"Алгоритм - это любая корректно определённая вычислительная процедура, на вход которой подаётся некоторая величина или набор
величин, и результатом выполнения которой является выходная величина или набор значений. Таким образом, алгоритм представляет собой последовательность вычислительных шагов, преобразующих входные величины в выходные. Алгоритм также можно рассматривать как инструмент, предназначенный для решения корректно поставленной вычислительной задачи. В постановке задачи в общих чертах задаются отношения между входом и выходом. В алгоритме описывается конкретная вычислительная процедура, с помощью которой удается добиться выполнения указанных отношений." Алгоритмы построение и анализ. Томас Кормен, Чарльз Лейзерсон. И ещё - думаю актуальная для этой темы статья - http://www.rsdn.ru/article/philosophy/Complexity.xml "Закон сохранения сложности" --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
|||
|
||||
jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? |
ПО мере надобности. Мозги, руки, и GOOGLE ![]() Знать то что ты точно не хочешь, и тогда оно(что хочешь) само придет ![]() ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re |
тему надо было назвать так: Умение ориентироваться в пространстве, и его важность для водителя такси ![]() |
|||
|
||||
RockClimber |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 848 Регистрация: 5.5.2006 Где: планета 013 в тен туре |
Lazin, ну, для водителей такси gps-навигацию придумали. А нам никто не поможет
![]() -------------------- Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит. |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
Итак приступим.
Что такое алгоритм? (выделено морковным цветом) Алгоритм - это набор инструкций исполнителю на определённом языке для работы в некой среде. Исполнитель - исполняющий набор инструкций (алгоритм) для некой среды. Язык - формальная запись инструкций для среды (не обязательно исполнителю). Среда - окружение в котором производятся видоизменения (не обязательно исполнителем). Теперь, когда положено начало, попробуем разобраться в изначальной сущности любых алгоритмов. Вспомним модель данных ER. Так уж получилось, что в нашем физическом мире, а значит и в любой его подчасти, коим является такое устройство как компьютер или органическое существо - человек, на любом логическом уровне действуют определённые правила. Эти правила диктуются окружающей средой и за тысячи лет эволюции людей и их разговорных языков выделились - глаголы, существительные и прилагательные, которые обозначают соответственно действия, объекты и состояния объектов. С первого взгляда эти понятия очень похоже, но зачем же тогда человечеству понадобилось выдумывать для одного и того же разные слова? Ответ кроется в том, что действия, объекты и состояния объектов являются тем, что происходит в среде исполнения, а вот глаголы, существительные и прилагательные относятся к языку, как раз и являясь формальными инструкциями изменений состояния среды на конкретном языке. Так же приходим к выводу, что язык исполнителя с помощью которого записывается алгоритм является подчастью языка изменения окружающей среды на которую он может воздействовать. Плюс стоит отметить, что алгоритмы (наборы инструкций) для успешной работы должны подходить под конкретного исполнителя, а он должен производить свои действия в окружающей среде в которой возможно выполнение данных инструкций. -------------------- ![]() обычный день на винграде |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re |
уровни развития программиста по классификации тов. Lazin
1. Nubie, знает, что его цель - реализовать алгоритм, решающий определенную задачу, страшно страдает, сражаясь со средствами разработки, борется с языком программирования и технологиями, не в теме ООП и ООД. Некоторые остаются на этой стадии навсегда, изучив какой нибудь простой ЯП, фреймверк и тд. 2. Mediocre, овладел средствами разработки, ЯП или технологиями, освоил паттерны проектирования и ООП, но забыл зачем ему это было нужно ![]() ![]() 3. Intelligent, знает, что его цель - реализовать алгоритм, решающий определенную задачу, но в отличии от п.1, имеет широкие знания в соответствующих областях. В отличии от п.2, решает задачу наиболее простым способом. 4. Vingrad программист, ничего не успевает делать, так как все время сидит на форуме. ![]() Добавлено через 1 минуту и 31 секунду можно я возьму пряник? ![]() |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
-------------------- ![]() обычный день на винграде |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
Как создать алгоритм?
Вероятно не одно поколение программистов задавалось этим вопросом. Об общих принципах создания можно узнать в прошлой умной теме. Там обсуждались действия создателей, а так же различные методики, в том числе и общеизвестные, на вроде ТРИЗ. Но пока не буду вдаваться в конкретные техники и методологии. Рассмотрим алгоритмы более обощённо. Поскольку люди находятся в некой окружающей среде, условно называемой вселенной (более подробная аудиолекция), и ещё в детстве учатся формализовать свои мысли при помощи хотя бы одного разговорного языка, их способность составлять алгоритмы становится почти что естественной. Но почему же в таком случае создание задача лишь для единиц тривиальна, а для остальных сплошная умственная перегрузка. Для начала предположим, что люди неправильно используют свои возможности и способности. Машины ими созданные и при этом плохо настроенные будут работать неэффективно, а ведь сами они такие же (био)механизмы требующие правильной подстройки. Таким образом в следующих рассуждениях буду исходить из того, что у программистов просто напросто отсутствует вменяемая техника составления алгоритмов. Почему такое происходит? Возможно это следствие естественности умения, трудно формализовать то, что получается само по себе являясь неотъемлемым свойством мышления. А построить некое подобие надмышления довольно проблематичная задача. Вспоминаются сравнение физического и умственного труда, где в первом случае человек исполнитель, во втором программист - составитель алгоритмов. -------------------- ![]() обычный день на винграде |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
Что делать если не знаешь чего хочешь?
Теперь, когда стало понятно, чем отличается среда исполнения от языка исполнителя (действия<>глаголы, объекты<>существительные, состояния объектов<>прилагательные) и известно о неэффективности мышления в процессе разработки алгоритмов, настало время понять, почему же люди не знают чего хотят. Желания бывают разные, одни из них связаны с физиологическими особенностями организма. Часто им придают более высокое значение чем тем, которыми подвержены лишь создатели искусственных вещей. В данном случае речь идёт о программных артефактах или попросту приложениях. Не менее интересно к чему они прикладываются, к компьютеру, операционной системе или же к человеку. Так или иначе, но воля и интеллект создателя позволяют создавать программные артефакты. Другой вопрос, а что собственно говоря он хочет создать. И вот тут натыкаемся на несколько ступеней хотелки. Традиционно эту часть работы называют - проектированием, а непосредственное воплощение артефакта - кодированием. Хотелки разделяются на разные уровни, их количество зависит от используемой методологии разработки. На вскидку могу дать одну из них, состоящую из трёх частей: общие понятия, функциональное описание, кодирование в схемах или псеводкоде. Как уже сказал выше четвёртая часть выходит за рамки проектирования и называется кодированием в выбранном языке исполнителя. Общие понятия может задать почти любой. У человека возникает потребность и он говорит, а что если ... ну и пошло поехало, хочу чтобы само грузило, делало, разбирало, радовало мне глаз и тому подобное. По сути такая расплывчатая цель не помогает в создании артефакта, а лишь указывает, что должно получиться на выходе соответствуя текущему описанию. Функциональное описание намного более подробно. Выделяются части системы и способы их взаимодействия. Это очень важно, но об этом чуть позже. Кодирование в схемах или псевдокоде уже почти соответствует реальному коду. Разница в основном в том, что компьютер ваши каракули не поймёт и не станет исполнять такую программу. Для того чтобы это произошло существует четвёртый этап - кодирование. Однако повторяю, всё это чисто условно и зависит лишь от методологии. -------------------- ![]() обычный день на винграде |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
Чем отличаются формы записи одних и тех же алгоритмов и как эффективнее всего балансировать между ними?
Итак, хотя описание многих мыслей пропущены, картина начинает потихоньку вырисовываться. Одно из основных понятий в программировании, которое используют практически все программисты, но далеко не каждый из них об этом знает - сличение. Сличение представляет собой сопоставление двух видов сред, условно - реальной, над которой производят действия и той что существует лишь в виде - виртуальной (перевод - возможной), на которую как раз и воздействуют инструкции (алгоритмы). Классическая задача имитировать поведения неких объектов из окружающего мира в компьютерной модели, для расчёта каких-то параметров. Так же существует обратная потребность, воздействие компьютерной модели на реальный мир. Более того, система названа условно реальной лишь для отличия её от виртуальной, на самом деле, она тоже может быть виртуальной, ведь программист оперирует логикой и не способен воспринимать процессы в отрыве от неё. А логика существует в любом мире порядка, когда есть возможность предсказать поведение неких процессов, пусть даже это безумно сложно или даже невозможно технически. Но всё же почему так сложно составлять алгоритмы? Ведь что естественно, то не безобразно! Так вот, всю свою сознательную жизнь люди занимаются вовсе не программированием, хоть и используют языки. Вместо этого они тренируются в описании видоизменений нашей реальности, то есть они констатируют факты, вместо того чтобы самим их создавать. И мало того, что сам процесс сличения без использования определённой методологии доставляет много хлопот, и как заметил Lazin, - "новички страшно страдают сражаясь со средствами разработки", так ещё вышеупомянутый фактор основательно портит картину. Теперь же, когда часть проблем выявлена, я не настолько самонадеян, чтобы сказать, что все они теперь известны, можно приступить к обдумыванию способов их устранения. -------------------- ![]() обычный день на винграде |
|||
|
||||
jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? |
||||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
Может и можно, но откуда ты узнаешь, что они появились, если не задумывался над этим? Видны лишь косвенные признаки. Например, за месяц хочешь хорошую программу написать, прошёл год, а она в замороженном состоянии как попало сшита, ну и так далее. А мы к тому же не в вакууме живём, и общее наблюдение за тысячами топовыми линукс проектами наводит на разнообразные мысли. Вот тот же лазин написал, что один новичок, другой среднячок, а третий умный. Я бы добавил ещё, что есть ещё сверх этого уровень, на котором люди умнейшие из умнейших. И вопрос вовсе не в том, как прокачать новичка до среднячка в терминологиях лазина. Вопрос в другом, как из любого новичка сделать умного, а не просто перекачавшегося знаниями человека, который терминами сыпет, а создавать умеет плохо. Хотя по этому поводу у меня появились кое-какие мысли. -------------------- ![]() обычный день на винграде |
|||
|
||||
jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? |
Если ничего для этого не делать, то и результатов можно не ждать! |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка |
В таком случае приступим к обучению будущих и переквалификации существующих программистов. Для этого я последовательно изложу уроки, в точности выполняя которые большинство людей станет мастерами своего дела. Не все пройдут этот путь, но те кто не отступит изменят своё мировоззрение и жизнь. Многие люди пребывают в заблуждении, что главное для создателя программных артефактов быть умным и образованным. Ум через познание нового и образованность посредством источников знаний. Далеко за горизонтом остаются истинные ценности программиста. Уже сейчас вы должны задуматься, что будет когда вы накачаете себя знаниями и научитесь их поглощать ещё быстрее. Информационная блокада как естественная защита от умственной перегрузки станет не нужна, но что дальше? А дальше будет ничего, так как вам придётся учиться программировать заново, ведь до этого вы занимались самообразованием в познавательных целях. Терпение, труд и настойчивость, вот истинные добродетели, способные совершить казалось бы невозможное. Именно поэтому вначале речь пойдёт о тренировке этих качеств. Наравне с этими умениями точность и расчёт станут вашими верными союзниками в неравной битве с возложенными на вас задачами. Тренируясь вы научитесь не замечать искусственно созданных вашим характером трудностей и они перестанут быть таковыми. -------------------- ![]() обычный день на винграде |
|||
|
||||
![]() ![]() ![]() |
Правила раздела «Флейм» | |
|
Добро пожаловать в «Флейм». В разделе не действуют многие правила:
Строго запрещено:
Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт. Глас Винграда:
Глас Философии:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Флейм | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |