crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Нужны ли знания алгоритмов программисту, обсуждение
Iron Bug
  опции профиля:
сообщение 20.8.2010, 21:44
Сообщение #1


Профессионал
*****

Группа: Модератор
Сообщений: 1599
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


М
Тема вытекла из темы: Книги по алгоритмам, посоветуйте...


имхо, не надо тратить время на запоминание алгоритмов. они бывают очень хитрожопые, но пользы от их запоминания нет никакой. разве что ради развлечения на досуге (если таковой имеется). алгоритмы всегда можно найти, когда потребуется. это маленькие кирпичи, из которых строится программа. но они не играют роли, если общая концепция плохо продумана. так что то, что реально полезно в жизни - это паттерны(модели, схемы, принципы) проектирования ПО. по этой теме есть непревзойдённая книжка Эриха Гаммы и компании "Паттерны программирования" (или как-то так, я на английском читала, там она называется Design Patterns: Elements of Reusable Object-Oriented Software). Тут в книгах кто-то выкладывал русский перевод, но мне лично попадался очень распространённый и совершенно чудовищный перевод, полный ошибок, и я бы всё же рекомендовала её читать на английском, при возможности.
эта книжка во многом ставит мозги на место и позволяет быстро решать довольно запутанные задачи в программировании.

Цитата(igor_bogomolov @ 21.8.2010, 0:13) *
Только нет в стандарте алгоритмов на графах (алгоритма обхода графа, алгоритма нахождения кратчайшего пути ...), алгоритма поиска пары ближайших точек, определения выпуклой оболочки, поиска наибольшего общего делителя и т.д. Задач очень много и решений тоже. И нужно уметь анализировать эти решения, какое из них в твоей ситуации лучшее.

это всё (ну, почти всё, что встречается на практике) и ещё куча всякой дребедени есть в бусте.

Сообщение отредактировал ViGOur - 21.8.2010, 17:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 20.8.2010, 22:15
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


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

Про алгоритмы можно сказать все то же самое, что ты сказала про паттерны. Они так же ставят мозги на место, развивают аналитическое мышление. Знание стандартных алгоритмов так же позволяет быстрее решать поставленные задачи. А знания анализа и методов разработки алгоритмов позволяют принимать правильные решения еще на этапе разработки ПО.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 20.8.2010, 22:33
Сообщение #3


Профессионал
*****

Группа: Модератор
Сообщений: 1599
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(igor_bogomolov @ 21.8.2010, 1:15) *
Речь не идет о конкретных языках программирования, или о конкретных реализациях каких либо стандартных (ну или наиболее часто встречающихся) алгоритмов в библиотеках на тех же языках.

Про алгоритмы можно сказать все то же самое, что ты сказала про паттерны. Они так же ставят мозги на место, развивают аналитическое мышление. Знание стандартных алгоритмов так же позволяет быстрее решать поставленные задачи. А знания анализа и методов разработки алгоритмов позволяют принимать правильные решения еще на этапе разработки ПО.


я и не говорю о конкретных языках. паттерны есть паттерны. просто основной язык программирования - Си и чаще всего именно на его примере разбираются все алгоритмы и т.п.
что касается именно алгоритмов - их нет смысла запоминать, так как всегда можно найти. а реализации современных алгоритмов в оптимизированном виде не добавляют логического мышления, только геморрой с разбиранием что и куда. даже я, с высшим математическим образованием, не всегда могу въехать в реализацию какого-нибудь сильно заоптимизированного алгоритма. а зачем городить свой огород, когда уже есть готовые отлаженные модули? а вот проектирование - главная задача програмиста. именно тут он проявляет свои способности к программированию. а мелочи дописываются по ходу дела или вообще отдаются менее компетентным исполнителям - на доработку отдельных функций. ошибки в проектировании - самые страшные и самые дорогостоящие. ошибки в мелочах по сравнению с этим - вообще ноль.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 20.8.2010, 23:06
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(Iron Bug @ 20.8.2010, 23:33) *
просто основной язык программирования - Си и чаще всего именно на его примере разбираются все алгоритмы и т.п.
кто сделал си основным языком? Это для нас с вами он основной. А алгоритмы в осовном описываются на псевдокоде, т.к. это всего лишь последовательность действий для решения конкретной задачи. Кому надо, сам реализует этот алгоритм на конкретном языке.

Цитата('Iron Bug' date='20.8.2010 @ 23:33' post=38439)
что касается именно алгоритмов - их нет смысла запоминать, так как всегда можно найти.
Стандартные найти можно всегда. Так же как и паттерны. Только нужно знать что искать. Поэтому нужно быть в курсе о существующих алгоритмах и знать в каких случаях и к каким структурам данных их применять. Да и знать реализацию (имею в виду умение объяснить на пальцах) основных алгоритмов уж точно не повредит.

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

Для меня теория алгоритмов и паттерны проектирования - это одного поля ягодки. Ориентироваться нужно и там и там. И оба этих вопроса относятся к проектированию и их знания одинаково важны.
Согласен, что ошибки проектирования страшны. Но ПО при этом может быть рабочим. С плохим алгоритмом, хоть и рабочим, данное ПО будет никому не интересно и его можно считать не рабочим.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 20.8.2010, 23:40
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1599
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(igor_bogomolov @ 21.8.2010, 2:06) *
Для меня теория алгоритмов и паттерны проектирования - это одного поля ягодки. Ориентироваться нужно и там и там. И оба этих вопроса относятся к проектированию и их знания одинаково важны.

у меня 20 лет программирования и ещё и матмех за плечами. хотя на матмехе нас натаскивали на теорию просто дико, однако, в жизни алгоритмы не пригодились :) а те, что были иногда нужны - есть в уже готовых и заоптимизированных реализациях. это с практической точки зрения. а я работала в очень разных областях - от прикладных программ до железа.
а вот паттерны пригождались всегда. и очень сильно.
что касается "оценки порядка роста" - это не так важно и (если уж возникла такая необходимость) прикидывается практически. никто не сидит, не вычисляет эти логарифмы пополам, я вас уверяю! да и по сути 99% программ никогда не имеет дел с большими вычислениями. факт. и, опять же, с точки зрения оптимизации готовые алгоритмы всегда лучше, чем самописанные на коленке. а так, чаще всего сложным местом является проектирование системы, её модульность, её изменяемость, работа параллельных процессов и алгоритмы тут не при делах, зато паттерны весьма нужны.
я не видела ни одного проекта, в котором бы понадобился талмуд Кнута. зато им можно подпирать шкаф или убивать врагов - он толстый и тяжёлый :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.8.2010, 7:59
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2901
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Iron Bug @ 21.8.2010, 1:33) *
что касается именно алгоритмов - их нет смысла запоминать, так как всегда можно найти. а реализации современных алгоритмов в оптимизированном виде не добавляют логического мышления, только геморрой с разбиранием что и куда. даже я, с высшим математическим образованием, не всегда могу въехать в реализацию какого-нибудь сильно заоптимизированного алгоритма. а зачем городить свой огород, когда уже есть готовые отлаженные модули?

вот я полностью так же думаю. Поэтому удивился, зачем на собеседовании спрашивать про знание алгоритмов. Лучше бы спросили, как решить вот такую вот задачу и дали интернет - ты находишь им вот такой алгоритм, вот так он описан - надо, решим
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 21.8.2010, 9:23
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Алексей1153 @ 21.8.2010, 8:59) *
вот я полностью так же думаю. Поэтому удивился, зачем на собеседовании спрашивать про знание алгоритмов. Лучше бы спросили, как решить вот такую вот задачу и дали интернет - ты находишь им вот такой алгоритм, вот так он описан - надо, решим

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

А так я согласен, что где-то 98% программистов никогда в жизни не понадобиться ничего, кроме строк и пары контейнеров, для написания всех своих программ.

Сообщение отредактировал BRE - 21.8.2010, 9:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 21.8.2010, 11:33
Сообщение #8


Профессионал
*****

Группа: Модератор
Сообщений: 1599
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(BRE @ 21.8.2010, 12:23) *
А мы живем в Золотом веке? Все возможные/нужные алгоритмы уже придуманы и выложены в интернете? ;)
А если в интернете нет решения для этой задачи, она уникальна и решение нужно придумать самому.
Почему, не попробовать разработать свой алгоритм, который будет эффективней существующих? А как это можно сделать, если как минимум не разобраться с + и - существующих решений?

да, мы живём практически в золотом веке и многое уже сделано. нужно только уметь пользоваться, чтобы не изобретать свои велосипеды. насчёт "эффективней"... посмотрите патентованные алгоритмы, за которые научные институты деньги получают. но это их работа. это приносит им доход. а программисту доход приносит работающий софт. и это не его дело сочинять мега-алгоритмы, если есть уже готовые проверенные решения.
вообще, самопальные старатели напоминают мне одного чудаковатого мужика, который когда-то жил по соседству на даче. он выращивал чеснок из цветущих головок: собирал крошечные бульбочки, которые вырастают на цветоносах чеснока, через год у него были уже полусантиметровые дольки, через два - сантиметровые... в итоге, через пять лет такого мытарства он получал обычный чеснок. вопрос: а есть ли смысл всего добиваться с нуля? если можно взять готовые дольки обычного чеснока, посадить и за сезон получить результат. вот алгоритмы - это примерно то же самое.
а что касается решения нетривиальных задач... то уж если кому не хватает мозгов - тем алгоритмы не помогут, я вас уверяю. я преподавала и математику, и программирование одно время. видела разных людей и на работе, и в быту, так сказать... либо логические структуры мозга у человека развиты и он всегда найдёт нужное решение для любой задачи (при необходимости прочитав того же Кнута), либо они не развиты и чтение Кнута ничего не даст. но имеет ли смысл забивать себе голову ненужной информацией и тратить время на такие вещи без конкретной цели - это большой вопрос. обычно те, у кого есть реальная работа, не задаются подобными вопросами. они решают свои задачи и не помышляют о "мега-супер-алгоритме для обхода многомерного графа в какром-нибудь диком банаховом пространстве". ибо ни к чему :) всё развивается от потребности к реализации, а не наоборот. появилась потребность - появится решение. если потребность возникает часто (а совсем нетривиальные задачи практически не встречаются), то вырабатывается стандартный алгоритм для её решения и все им пользуются. это модульная система программирования. мы пишем библиотеки, чтобы использовать готовые блоки, пишем программы, которые позволяют оптимизировать какие-то манипуляции. это нормальная оптимизация любой деятельности.
P.S. да, ещё граждане, беспокоящиеся об оптимальности, пользуются вендой и QT :))) если уж действительно говорить об эффективности вычислений - то тогда уж ассемблер или и вовсе программирование DSP. в электронике есть готовые чипы, которые решают очень сложные специфические задачи. тот же чип USB. алгоритм USB преобразования - страшная теоретическая вещь с совершенно жуткими формулами. реализация её обычными программными средствами займёт 100% времени любого современного проца. так что модульность и готовые решения - это очень ценный ресурс для использования.

Сообщение отредактировал Iron Bug - 21.8.2010, 11:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 21.8.2010, 12:22
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Если бы все думали так, мы бы по технологическому развитию до сих пор жили бы, дай Бог, веке в XVIII.
К счастью все это не так.
Все эти алгоритмы нам достались не от могущественной суперцивилизации, а были придуманы обычными людьми.
Очень давно, был придуман алгоритм пузырьковой сортировки, но нашелся человек(и), который решил улучшить алгоритм сортировки. Бинарные деревья были описаны очень давно, но кто-то решил их использовать для разбивания пространства (и это неплохо продвинуло 3D в свое время). Потом, другому человеку понадобилось оптимизировать вывод больших открытых пространств и он обратил внимание на quadtree (которые кстати тоже были описаны значительно раньше этого). А как изменились алгоритмы поиска информации. Таких примеров очень много. И, к счастью, до сих пор есть люди, которые пытаются разработать что-то новое, только они работают в других областях.
gamedev очень сильно двигает свои технологии именно разрабатывая новые алгоритмы, вместо того, что бы пользоваться уже готовыми наработками. Я не говорю про научные/технологические исследования.
Я уже написал, что на мой взгляд, 98% программистов работают в рутине, они решают свои задачи используя наработки других и им может никогда в жизни не удастся придумать что-то новое. Это их право.
Но остаются еще пара процентов программистов, которые смогут продвинуть всю индустрию еще на один шаг вперед.
Возможно ViGOur и igor_bogomolov будут одними из них, поэтому я их поддерживая их в желании учиться думать.

Насчет USB преобразований... Этот алгоритм придуман Богами? А улучшать его в дальнейшем будут СуперБоги? Или это все таки обычные люди?

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

Сообщение отредактировал BRE - 21.8.2010, 12:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.8.2010, 12:34
Сообщение #10


фрилансер
******

Группа: Участник
Сообщений: 2901
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


BRE, всё, что придумано - выложено. Отстальное - есть суть нашей , всех тут собравшихся, работы :) Придумывать, как решить нерешённое, чтоб потом выложить в интернете :D

Я уже говорил, что сам обожаю поковыряться и пореализовывать/попридумывать что-нибудь сложное. Но это - в основном для души и тренировки.
Когда же босс говорит - за неделю сделать программу по захвату мира, то возиться каждый раз с однотипными задачами нет времени и сил, тогда действительно, сложный алгоритм - это кирпичик в более абстрактном алгоритме большой задачи. Которая не для души, а денег ради, да.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.12.2020, 13:45