Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разные вопросы > умение составлять алгоритм


Автор: youri 6.10.2009, 08:49
началось все вот http://forum.vingrad.ru/index.php?showtopic=275383&view=findpost&p=1986222
последующие удаленные посты удалось сохранить smile

Цитата(youri @  5.10.2009,  17:22 Найти цитируемый пост)
Ипатьев, интересно, почему ты считаешь умение составлять алгоритм таким важным. Это к умению проектировать или к умению думать на разных уровнях абстракции?


Цитата(Ипатьев @  5.10.2009,  19:17 Найти цитируемый пост)
Хороший вопрос.
Мне уже пришло в голову два вполне себе алгоритма для последней задачи:

открыть мануал
найти готовую функцию

или

зайти на форум
задать вопрос:
ответ получен?
  да - закончить
  нет - писать комментарий
возврат:

Но если кроме шуток, то, с одной стороны, не так уж важно. Массы пользователей языка действительно ведь обходятся. Тем самым копи-пастом.
С другой стороны, понятие алгоритма тесно связано с понятием отладки. Ведь отладить можно только ту программу, алгоритм которой ты понимаешь. Где брекпойнты ставить, какие переменные контролировать, где функционал отрезать - без понимания алгоритма ничего этого сделать невозможно. Здесь мы вплотную подходим к понятию "программист". В многочисленных топиках, посвященных сакраментальному вопросу "Какой язык учить, чтобы стать программистом?" всегда придет тяжелая артиллерия с ответом... ну, вы его все знаете. Учат не язык, учат программирование. А что оно есть, как не алгоритмы? Это как гаммы для фортепиано. Чтобы стать профессионалом, их надо долбить 10 лет. А пацанам во дворе слабать "все идет по плану" - достаточно три блатных аккорда. В этом случае, наверное, алгоритмы не нужны. 


Цитата(Kallisto @  5.10.2009,  19:52 Найти цитируемый пост)
Ипатьев, вы мне напоминаете моего преподавателя из универа, который прежде чем писать программы на ПК заставлял писать исходный код на бумажке   


Цитата(insy @  5.10.2009,  20:14 Найти цитируемый пост)
Вы товарищ Ипатьев, без сомнения правы, но вот все упирается в то, что какой толк рассказывать человеку, что он "конченый", вместо того, чтобы реально помочь...? Вопрос поставлен примерно как - "Помогите и примерно расскажите", а не как -"Укажите почему"?   Просто, человек обращается за помощью, а не за ЦУ...

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


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

Добавлено через 4 минуты и 8 секунд
Цитата(youri @  6.10.2009,  08:49 Найти цитируемый пост)
Как вариант неужели было трудно написать, как это сделал Kallisto, а от этого бы уже начали цепочку рассуждений...

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

Автор: insy 6.10.2009, 08:59
youri, молодец...  
"Внимание: данный раздел предназначен для решения сложных, нестандартных задач." У нас как раз такаяsmile

Автор: Ипатьев 6.10.2009, 09:22
Спасибо за сохраненные сообщения. 
Тема, действительно, сложная, и не все понимают смысл обсуждаемого вопроса.
Может быть, даже имело бы смысл создать топик где-нибудь подальше от местной юрисдикции.

Цитата(youri @  6.10.2009,  08:49 Найти цитируемый пост)
Скорее важно думать, а не заниматься композицией чужого кода

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

Дело не в чужом коде. Речь-то как раз о своем.
Мне кажется, мы смешали умение составить алгоритм вообще и умение его формализовать, изложить в строгой форме. 
Если второе умение не слишком важно, программист "понимает, но сказать не может", то без первого он просто шагу не ступит! 
Совсем без алгоритма невозможно. Он как воздух - если мы его не замечаем, то это не значит, что его нет. Даже когда картошку чистим. Поэтому он часто лежит просто в голове в неявной форме. Все ОК, можно работать. Но здесь есть засада. 
- если алгоритм неправильный и нужно в нем разобраться, сделать, как бы, "трассировку" в уме; 
- или если нужно им поделиться, как это происходит на форуме, с окружающими
то умение формулировать свои мысли выходит на первый план. 

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

Автор: insy 6.10.2009, 09:53
Ипатьев, так получилось, что обсуждаем тему максимум в четвером, и у меня просьба,- ты не мог бы говорить про меня напрямую, а не вуалировать обращение под "не все понимают смысл обсуждаемого вопроса." ... Ты же именно меня имел ввиду, или я ошибаюсь?

Автор: Kallisto 6.10.2009, 10:23
Ипатьев.

Цитата

Яркая иллюстрация: нет алгоритма - нет идей, как приступать к решению задачи. 

Мне кажется наоборот, нет идей - нет алгоритма.

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

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

Вот как в нашем случае с insy. Человек даже не знал про LIMIT, как бы он смог составить алгоритм? Да, он бы составил нечто, может быть, и это нечто было медленное тупое карыто с невероятным алгоритмом (insy без обид - передаю атмосферу)

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

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



Автор: youri 6.10.2009, 10:30
Цитата(Ипатьев @  6.10.2009,  09:22 Найти цитируемый пост)
Он как воздух - если мы его не замечаем, то это не значит, что его нет

это как раз та причина, по которой я не могу это прокомментировать (я же составил алгоритм той задачи?). Алгоритмы (в моем, более узком понимании этого слова) я могу составлять и мне это умение не нужно. Либо я не понимаю этого, потому что оно у меня уже есть

Цитата(Ипатьев @  6.10.2009,  09:22 Найти цитируемый пост)
А если задача чуть посложнее? Взаимодействие различных систем документооборота или, скажем, бронирования каких-нибудь туров? Тут тот, кто не нарисовал сначала на бумажке, осложнил себе задачу в разы.

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

Цитата(insy @  6.10.2009,  09:53 Найти цитируемый пост)
Ты же именно меня имел ввиду, или я ошибаюсь?

не льсти себе
Цитата(youri @  5.10.2009,  17:22 Найти цитируемый пост)
Ипатьев, интересно, почему ты считаешь умение составлять алгоритм таким важным. Это к умению проектировать или к умению думать на разных уровнях абстракции?

Автор: insy 6.10.2009, 10:41
Цитата

не льсти себе


А причем тут лесть? Просто неужели трудно сказать, что ты insy не понимаешь смысл обсуждаемого вопроса... а не говорить, что возможно кто-то тут...

Автор: youri 6.10.2009, 10:43
Цитата(Kallisto @  6.10.2009,  10:23 Найти цитируемый пост)
Можно твердить, что если человек что-то хочет узнать - он сам учится и тд. Да, это клево, но школу оканчивали все.

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

Цитата(Kallisto @  6.10.2009,  10:23 Найти цитируемый пост)
А если нет, то все ваши попытки заставить человека подумать ни к чему не приведут за исключением некоторых случаев

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

Цитата(insy @  6.10.2009,  10:41 Найти цитируемый пост)
А причем тут лесть? Просто неужели трудно сказать, что ты insy не понимаешь смысл обсуждаемого вопроса... а не говорить, что возможно кто-то тут...

при том, что я тоже либо не понимал, либо не понимаю. И таких непонимающих может целый форум O_o (естественно, я немного преувеличиваю)

Автор: insy 6.10.2009, 10:58
youri, согласен.
Предлагаю привести наш спор к апогею! Спасибо всем кто мне помог, каждый в чем-то своем! Дискуссия получилась очень даже занимательной на мой взгляд! В следующий раз буду подходить более осмысленно, и пробовать более подробно раскрыть мысль и суть вопроса!

Благодарю за светлые мысли...

youri
Kallisto
Ипатьев

Автор: Kallisto 6.10.2009, 11:05
Цитата

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

Авторитетность преподавателя вы не оцениваете. Оценивает директор, ваши родители, тем не менее не вы.

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

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

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

Здесь аналогично - вам дают информацию, ваше право копнуть в заданном направлении, изучить более подробнее, либо тупо сделать копипаст чтобы получилось нечто, в любом случае дело сугубо индивидуальное.

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

Цитата

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

Вы говорите очевидные вещи, всем понятно что лучше думать и с этим никто не спорит. Но помогать думать и заставлять думать - это совершенно разные вещи. 

Дать наводку и корректировать его - это хорошо. Но заставлять думать и требовать чтобы человек сам все делал - уже простите не очень.

имхо



Автор: youri 6.10.2009, 11:19
уже в этой теме оффтоп начинается. Можно дать еще http://phpclub.ru/faq/WhyForum и закончить на этом обсуждение "как отвечать на вопросы"

Автор: Kallisto 6.10.2009, 12:40
Мне кажется по указанной выше ссылке речь идет для тех кто создает тему, а у нас изначально была другая ситуация.

anyway пошел оффтоп

Автор: Ипатьев 7.10.2009, 12:00
Цитата(youri @  6.10.2009,  10:30 Найти цитируемый пост)
я могу составлять и мне это умение не нужно.

Речь о практичекой работе по созданию сайтов? 
Скажем, пресловутый пузырек не нужен в работе, когда есть sort(), а что у него там внутри - неважно?
Вы это имеете в виду?

Автор: youri 7.10.2009, 12:19
Цитата(Ипатьев @  7.10.2009,  12:00 Найти цитируемый пост)
Речь о практичекой работе по созданию сайтов?

да

Цитата(Ипатьев @  7.10.2009,  12:00 Найти цитируемый пост)
Скажем, пресловутый пузырек не нужен в работе, когда есть sort(), а что у него там внутри - неважно?Вы это имеете в виду?

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

Автор: unicuum 8.10.2009, 12:49
Цитата(insy @  6.10.2009,  08:59 Найти цитируемый пост)
"Внимание: данный раздел предназначен для решения сложных, нестандартных задач." У нас как раз такаяsmile 

Вообще то нет, такие вещи традиционно обсуждают во флейме, так как он единственный где модеры за это не бьют по башке. Да и сами участники там более терпимые и не начинают меряться письками направо и налево. По многолетней традиции такие обсуждения называются умными темами. Вот произвёл очередной http://forum.vingrad.ru/forum/topic-275848.html. smile 

Автор: Ипатьев 8.10.2009, 12:52
Вы составляете smile
Вы всегда составляете алгоритм. Просто вы его не формализуете. Он как тот суслик. Я тоже не вижу - а он есть.

Очень показательный топик сейчас в профильном форуме. Как раз про алгоритмы. 10 разных букв в тексте найти - 10 раз перебрать текст посимвольно. Это как раз тот самый, "невидимый" алгоритм. Причем если бы человек дал себе труд сформулировать его, формализовать - наверняка задумался бы об оптимальности.

ну, и я все написал выше: 
во-первых, мы путаем сам алгоритм и его формальную форму
во-вторых, "интуитивное" иногда не помогает, и надо уметь, все-таки, формализовать

а то часто бывают на форуме вопросы "хочу!!!! а сам не знаю - чего, и толком рассказать не могу"

Автор: youri 8.10.2009, 15:02
Цитата(Ипатьев @  8.10.2009,  12:52 Найти цитируемый пост)
Вы всегда составляете алгоритм

возможно
Цитата(Ипатьев @  8.10.2009,  12:52 Найти цитируемый пост)
Очень показательный топик сейчас в профильном форуме. Как раз про алгоритмы. 10 разных букв в тексте найти - 10 раз перебрать текст посимвольно

а можно ссылку?

Автор: Ипатьев 8.10.2009, 15:26
Так она ж в самом верху, про оптимизацию unset. В общих вопросах.
Там кривой именно алгоритм. Два раза пробегаем строку, один - чтобы найти открывающие теги, а второй - закрывающие.
http://forum.vingrad.ru/forum/topic-275825.html
Но это просто как пример. Того, что даже в такой обыденной задаче, как парсинг бб-кодов уже без нормального алгоритма не обойтись.

Автор: Simpliest 8.10.2009, 21:03
Цитата(Kallisto @  6.10.2009,  11:05 Найти цитируемый пост)
Но помогать думать и заставлять думать - это совершенно разные вещи

Это одно и тоже. Если ты человек - ты должен думать...
Если ты не хочешь быть человеком - это уже другой вопрос.

Цитата(youri @  7.10.2009,  12:19 Найти цитируемый пост)
Ну разве что алгоритм в очень широком смысле этого слова 

Алгоритм - это последовательность действий. Степень детализации неважна. Да в некоторых случаях и избыточна.

В общем я согласен с Ипатьевым. Без умения составлять алгоритмы в программировании никуда...

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

А разница банальна чтобы суметь составить алгоритм ты должен разобраться в проблемме. А чтобы перевести это не обязательно.
Результат соответственно разный (примечательные примеры можете посмотреть в результатах переводов машинных или выполненных абы-кем и переводы профессионалов)

Автор: youri 8.10.2009, 23:03
Цитата(Ипатьев @  8.10.2009,  15:26 Найти цитируемый пост)
Там кривой именно алгоритм

а почему, кстати, кривой. Не оптимальный - да
UPD: записан разве что немного по-индусски
Код

while (strpos($str, '', $pos_start) !== false)

Код

for ($i=0, $count=count($opened_tags); $i<$count;

UPD2: http://forum.vingrad.ru/index.php?showtopic=275848&view=findpost&p=1989189
UPD3: http://forum.vingrad.ru/index.php?showtopic=275848&view=findpost&p=1989233
smile

Автор: solenko 3.11.2009, 10:51
http://habrahabr.ru/blogs/webdev/74124/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)