Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Умение составлять алгоритм, и его важность для программиста 
:(
    Опции темы
unicuum
  Дата 8.10.2009, 12:44 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Вот мы и дождались очередной умной темы. Кто следит за ними наверное помнит обсуждения про ИИ, шаблоны проектирования, общие способы создания и многие другие. Сегодня речь пойдёт о составлении алгоритмов. Множество вопросов требуют формальных ответов (Что такое алгоритм? Как создать алгоритм? Что делать если не знаешь чего хочешь? Чем отличаются формы записи одних и тех же алгоритмов и как эффективнее всего балансировать между ними? и т.д.)

Добавлено через 7 минут и 7 секунд
изначальная ссылка


--------------------
user posted image
обычный день на винграде
PM   Вверх
Springtime
Дата 8.10.2009, 13:12 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень




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

Алгоритмы построение и анализ. Томас Кормен, Чарльз Лейзерсон.


И ещё - думаю актуальная для этой темы статья - http://www.rsdn.ru/article/philosophy/Complexity.xml "Закон сохранения сложности"


--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
jhonyxakep
Дата 8.10.2009, 13:27 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?




Цитата(unicuum @  8.10.2009,  12:44 Найти цитируемый пост)
 как эффективнее всего балансировать между ними?

ПО мере надобности.


Цитата(unicuum @  8.10.2009,  12:44 Найти цитируемый пост)
Как создать алгоритм?

Мозги, руки, и GOOGLE smile


Цитата(unicuum @  8.10.2009,  12:44 Найти цитируемый пост)
Что делать если не знаешь чего хочешь?

Знать то что ты точно не хочешь, и тогда оно(что хочешь) само придетsmile


Цитата(unicuum @  8.10.2009,  12:44 Найти цитируемый пост)
Чем отличаются формы записи одних и тех же алгоритмов

 smile 
PM MAIL ICQ   Вверх
Lazin
Дата 8.10.2009, 13:27 (ссылка) |   (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re




Цитата

Умение составлять алгоритм, и его важность для программиста

тему надо было назвать так:
Умение ориентироваться в пространстве, и его важность для водителя такси smile 
PM MAIL Skype GTalk   Вверх
RockClimber
Дата 8.10.2009, 13:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре




Lazin, ну, для водителей такси gps-навигацию придумали. А нам никто не поможет  smile 


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
unicuum
  Дата 8.10.2009, 13:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Итак приступим.

Что такое алгоритм? (выделено морковным цветом)

Алгоритм - это набор инструкций исполнителю на определённом языке для работы в некой среде.
Исполнитель - исполняющий набор инструкций (алгоритм) для некой среды.
Язык - формальная запись инструкций для среды (не обязательно исполнителю).
Среда - окружение в котором производятся видоизменения (не обязательно исполнителем).

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

Эти правила диктуются окружающей средой и за тысячи лет эволюции людей и их разговорных языков выделились - глаголысуществительные и прилагательные, которые обозначают соответственно действияобъекты и состояния объектов. С первого взгляда эти понятия очень похоже, но зачем же тогда человечеству понадобилось выдумывать для одного и того же разные слова?

Ответ кроется в том, что действияобъекты и состояния объектов являются тем, что происходит в среде исполнения, а вот глаголысуществительные и прилагательные относятся к языку, как раз и являясь формальными инструкциями изменений состояния среды на конкретном языке.

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


--------------------
user posted image
обычный день на винграде
PM   Вверх
Lazin
Дата 8.10.2009, 14:12 (ссылка) |   (голосов:10) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re




уровни развития программиста по классификации тов. Lazin

1. Nubie, знает, что его цель - реализовать алгоритм, решающий определенную задачу, страшно страдает, сражаясь со средствами разработки, борется с языком программирования и технологиями, не в теме ООП и ООД. Некоторые остаются на этой стадии навсегда, изучив какой нибудь простой ЯП, фреймверк и тд.
2. Mediocre, овладел средствами разработки, ЯП или технологиями, освоил паттерны проектирования и ООП, но забыл зачем ему это было нужно smile , творит нечто гениальное, в той-же степени, что и бесполезное. Не понимает, что задачу нужно упрощать, а не усложнять. Скорее всего работает сам, так-как в команде ужиться не может, из-за того, что никто не может понять, зачем для разработки веб-сайта использовать какую-то ER-модель и как это на самом деле круто! smile В общем, mr.Overkill!
3. Intelligent, знает, что его цель - реализовать алгоритм, решающий определенную задачу, но в отличии от п.1, имеет широкие знания в соответствующих областях. В отличии от п.2, решает задачу наиболее простым способом.
4. Vingrad программист, ничего не успевает делать, так как все время сидит на форуме. smile

Добавлено через 1 минуту и 31 секунду
можно я возьму пряник? smile 
PM MAIL Skype GTalk   Вверх
unicuum
  Дата 8.10.2009, 14:16 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Цитата(Lazin @  8.10.2009,  14:12 Найти цитируемый пост)
Nubie

Newbie


--------------------
user posted image
обычный день на винграде
PM   Вверх
unicuum
  Дата 8.10.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Как создать алгоритм?

Вероятно не одно поколение программистов задавалось этим вопросом. Об общих принципах создания можно узнать в прошлой умной теме. Там обсуждались действия создателей, а так же различные методики, в том числе и общеизвестные, на вроде ТРИЗ. Но пока не буду вдаваться в конкретные техники и методологии. Рассмотрим алгоритмы более обощённо.

Поскольку люди находятся в некой окружающей среде, условно называемой вселенной (более подробная аудиолекция), и ещё в детстве учатся формализовать свои мысли при помощи хотя бы одного разговорного языка, их способность составлять алгоритмы становится почти что естественной. Но почему же в таком случае создание задача лишь для единиц тривиальна, а для остальных сплошная умственная перегрузка.

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

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


--------------------
user posted image
обычный день на винграде
PM   Вверх
unicuum
Дата 8.10.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Что делать если не знаешь чего хочешь?

Теперь, когда стало понятно, чем отличается среда исполнения от языка исполнителя (действия<>глаголыобъекты<>существительныесостояния объектов<>прилагательные) и известно о неэффективности мышления в процессе разработки алгоритмов, настало время понять, почему же люди не знают чего хотят.

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

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

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

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

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

Кодирование в схемах или псевдокоде уже почти соответствует реальному коду. Разница в основном в том, что компьютер ваши каракули не поймёт и не станет исполнять такую программу.

Для того чтобы это произошло существует четвёртый этап - кодирование. Однако повторяю, всё это чисто условно и зависит лишь от методологии.


--------------------
user posted image
обычный день на винграде
PM   Вверх
unicuum
  Дата 8.10.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Чем отличаются формы записи одних и тех же алгоритмов и как эффективнее всего балансировать между ними?

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

Сличение представляет собой сопоставление двух видов сред, условно - реальной, над которой производят действия и той что существует лишь в виде - виртуальной (перевод - возможной), на которую как раз и воздействуют инструкции (алгоритмы).

Классическая задача имитировать поведения неких объектов из окружающего мира в компьютерной модели, для расчёта каких-то параметров. Так же существует обратная потребность, воздействие компьютерной модели на реальный мир. Более того, система названа условно реальной лишь для отличия её от виртуальной, на самом деле, она тоже может быть виртуальной, ведь программист оперирует логикой и не способен воспринимать процессы в отрыве от неё.

А логика существует в любом мире порядка, когда есть возможность предсказать поведение неких процессов, пусть даже это безумно сложно или даже невозможно технически. Но всё же почему так сложно составлять алгоритмы? Ведь что естественно, то не безобразно!

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

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


--------------------
user posted image
обычный день на винграде
PM   Вверх
jhonyxakep
Дата 9.10.2009, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?




Цитата(unicuum @  8.10.2009,  17:17 Найти цитируемый пост)
Теперь же, когда часть проблем выявлена, я не настолько самонадеян, чтобы сказать, что все они теперь известны, можно приступить к обдумыванию способов их устранения.

А нельзя ли их устранять по мере поъявления?
PM MAIL ICQ   Вверх
unicuum
  Дата 9.10.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Цитата(jhonyxakep @  9.10.2009,  07:22 Найти цитируемый пост)
А нельзя ли их устранять по мере поъявления? 

Может и можно, но откуда ты узнаешь, что они появились, если не задумывался над этим? Видны лишь косвенные признаки. Например, за месяц хочешь хорошую программу написать, прошёл год, а она в замороженном состоянии как попало сшита, ну и так далее. А мы к тому же не в вакууме живём, и общее наблюдение за тысячами топовыми линукс проектами наводит на разнообразные мысли. Вот тот же лазин написал, что один новичок, другой среднячок, а третий умный. Я бы добавил ещё, что есть ещё сверх этого уровень, на котором люди умнейшие из умнейших.

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


--------------------
user posted image
обычный день на винграде
PM   Вверх
jhonyxakep
Дата 9.10.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?




Цитата(unicuum @  9.10.2009,  10:16 Найти цитируемый пост)
И вопрос вовсе не в том, как прокачать новичка до среднячка в терминологиях лазина. Вопрос в другом, как из любого новичка сделать умного, а не просто перекачавшегося знаниями человека, который терминами сыпет, а создавать умеет плохо. Хотя по этому поводу у меня появились кое-какие мысли.

Если ничего для этого не делать, то и результатов можно не ждать!
PM MAIL ICQ   Вверх
unicuum
  Дата 9.10.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка




Цитата(jhonyxakep @  9.10.2009,  11:15 Найти цитируемый пост)
Если ничего для этого не делать, то и результатов можно не ждать! user posted image

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

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

А дальше будет ничего, так как вам придётся учиться программировать заново, ведь до этого вы занимались самообразованием в познавательных целях. Терпениетруд и настойчивость, вот истинные добродетели, способные совершить казалось бы невозможное. Именно поэтому вначале речь пойдёт о тренировке этих качеств.

Наравне с этими умениями точность и расчёт станут вашими верными союзниками в неравной битве с возложенными на вас задачами. Тренируясь вы научитесь не замечать искусственно созданных вашим характером трудностей и они перестанут быть таковыми.


--------------------
user posted image
обычный день на винграде
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

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


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.