Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Valery Solovey

Страницы: 1 ... 30 31 [32] 33 34
466
Точно также конструктор должен подтвердить расчётом, каждый болт (на срез, кручение, изгиб...), каждую заклёпку... Ничего хитрого, как видите.
То есть, это инструмент проектирования, абстракция, представляющая собо расчёты? Никакого графического воплощения у неё нет.

467
Общий раздел / Re: Про необходимость for(each)
« : Февраль 15, 2012, 09:21:48 am »
Но при этом не надо навсегда закрывать тему разработки этих элементов.
Речь не о закрытии темы. А вот в чём:
Цитата: alexus
Да, надо переключаться, надо строить разные уровни, но если душа просит... надо найти время и позаниматься старой замшелой задачкой...
"Надо переключаться"... Вот что главное. Без этого если программа и выйдет, то работать будет едва-едва.

Фарш в коде, отсутствие чёткой структуры. Думаете, это стоит терпеть, если это становится следствием "душа просит"?

И в отличие от "душа просит" переключениям нужно учить. Без ограничений в этом плане просьбы души будут распространяться во все направления. Как расширение вселенной. Только результат будет не таким организованным...

468
Общий раздел / Re: Про необходимость for(each)
« : Февраль 15, 2012, 09:02:34 am »
Только здесь не так просто, как на схеме из курса электронных приборов. Там есть правильный вход, правильный выход и отрицательная обратная связь, стабилизирующая преобразование сигнала. В рограммировании (и много где ещё) выход нам не даётся априори. Мы должны понять, куда прийти.
Можно пояснить, что имелось ввиду, под неизвестностью выхода?.. Если мы пишем программу, то мы должны гарантировать при правильных исходных данных правильный результат.
Допустим, мы в ситуации, когда мы в состоянии сформировать любой набор входных данных (вход) в зависимости от того, к чему мы должны прийти (выход, резульат). Тогда единственной проблемой в условии является понимание результата. Не всегда с первого или второго раза удаётся понять, что же всё-таки нужно. Для этого делаются прототипы. При работе над ними проясняется ситуация с тем, что должно быть на выходе.
Неизвестность выхода - это, наверно, было слишком грубо. Точнее было бы сказать, что на начальной стадии новой задачи понятие о выходе у разарботчика нечёткое.

Почему "при использовании sort - ноль творчества"? Если конструктор собирает некоторое изделие (прибор, например) из стандартных компонентов/на стандартной элементной базе, то он перестаёт творить?.. Это напоминает разговор с И. Ермаковым, который тоже как-то одномерно понимает творчество. Если есть хороший/пригодный для данных условий элемент, то его не надо выбрасывать и пересоздавать заново, надо его использовать. Но при этом не надо навсегда закрывать тему разработки этих элементов.
Вообще-то я редко когда упускаю возможность решить задачу своими силами, а не стандартными средствами. И уж кто-кто, а я точно не закрываю тему разарботки.

Если конструктор собирает некоторое изделие (прибор, например) из стандартных компонентов/на стандартной элементной базе, то он перестаёт творить?
Нет, не перестаёт. Но у него другая задача. Задача выбора, компоновки и т.д.

Вот, допустим, по конвейеру ползёт печатная плата. На ней не хватает элемента - автоматика его не ставит в виду его специфики. Это делает рабочий. Он ставит элемент на плату и всё, даже пайкой занимается дальше автоматика. Много ли здесь творчества? Как долго он будет считать, что занимается творчеством?

Осознание, что нужна сортировка - это одна задача. Выбор сортировок - другая. Они все решены. Теперь перед программистом задача - задействовать сортировку. Ему нужно написать sort и передать параметры. Или написать mySort и передать параметры. Но чтобы mySort заработал, его сначала нужно написать. Это ещё несколько подзадач, которые могут оказаться весьма творческими (или процесс творчества наложит на программиста эмоциональные отпечатки разной силы). Но процесс написания приводит к прояснению конечного результата. Он становится более чётким, и беспристастный наблюдатель заметит, что процесс создания mySort лишь частично решает задачу, а многие действия по отношению к настоящему итогу бесполезны или даже вредны. Беспристрастный наблюдатель легко откажется от неправльного решения, а тот, кто написал, - будет сопротивляться.

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

469
Общий раздел / Re: Про необходимость for(each)
« : Февраль 14, 2012, 01:27:51 pm »
У меня ощущение, что самой частой причиной рождения запутанного/сложного кода является отсутствие критической обратной связи при его написании.
Что-то в этом есть, да. Только здесь не так просто, как на схеме из курса электронных приборов. Там есть правильный вход, правильный выход и отрицательная обратная связь, стабилизирующая преобразование сигнала. В рограммировании (и много где ещё) выход нам не даётся априори. Мы должны понять, куда прийти.
Когда красивую картинку решения в голове пытаются отлить в код, а оно не отливается (становится совсем некрасивым и непонятным). Но вместо того, что сделать шаг назад и подвергнуть критике эту красивую картинку - берут кувалду и таки придают нужную форму изделию. А последующие итерации еще больше цементируют какашку, глядя на которую первоначальную красивую идею через какое-то время не вспомнит даже автор.
Во многом тут виновато поверхностное понимание в начале пути, того, что должно получиться в конце. А чем больше творчества вложено в конкретные детали работы, тем сложнее и (больней : ) проявлять объективость.
При использовании sort - ноль творчества. Поэтому поудалять или перетасовать не жалко. При отсутствии творчества для каждого встречного цикла - то же самое. Минус последнего варианта - больше времени на него уходит. Но он гибче (время от времени это полезно).

470
Распределение памяти под динамические структуры представляется в виде карты памяти программы. [...]
Я пока не в состоянии полностью понять, о чём речь. Карта памяти - это инструмент проектирования или какое-то свойство программы? Вы в соседней ветке говорили что-то вроде того, что карту памяти стоит для начала на бумаге изобразить для пущей пользы.

471
Конкатенация, ладно. А как с памятью лучше управляться самому? С тактической и стратегической точек зрения. Какие используете методы?

Ну и собственно про карты хотелось бы услышать. Пользуется кто, кроме alexus-а?

472
А что имел ввиду Валерий   :) :) :) :) - давайте спросим у него
Я увидел задачу, напоминающую учебную, и предоставил схему её решения. Времени я на неё потратил больше, чем Vlad, но недостаточно, чтобы уверенно сказать, что она работает. Для этого понадобилось бы ещё некоторое количество времени. Ещё несколько человек предоставили свои варианты решения. После этого началось решение задачи "что лучше". Я не называю своё решение лучшим. Я согласен, что зачастую следует использовать стандартные библиотеки. Но выбор лучшего алгоритма - это другая задача.
Поскольку, как я считаю, целью было получение схемы, то я не сделал ошибок. Вы сказали, что мои ошибки что-то показывают. Но в исходной задаче решение было у меня в голове, а код - это реплика, с помощью которой я хотел передать решение. В устной речи бывают оговорки, и если собеседник замечает неточность, то он акцентирует на ней внимание, чтобы говорящий добавил в свои слова определённость.
Поскольку задача имела черты учебной, то я решил немного по этому поводу высказаться. Почему, собсна, sort() лучше? С чего Vlad взял, что решением будет она, а не "i++; println();"? Потому-то она и учебная, что ученик должен понять, что здесь будет решением. А отвeт "правильно будет использовать sort()" или "... подсчётом", как я уже говорил - это решение другой задачи. Важной для инженера, да, но не сейчас.

473
Общий раздел / Re: Про необходимость for(each)
« : Февраль 11, 2012, 03:29:49 pm »
Так я вами и продемонстрировал ход мыслей ведущих к ВЫБОРУ, и даже показал что НЕБОЛЬШАЯ  ВЫСОКОУРОВНЕВАЯ модификация СТАНДАРТНОГО подхода гораздо нагляднее и ЭФФЕКТИВНЕЕ в смысле производительности (ОДНОПРОХОДНОГО наколенника), а ведь  производительность это решение можно улучшить просто перейдя на уровень НИЖЕ (на модели языков СИ|C++) -  просто на обратном ходе заполнять непрерывный кусок памяти(выделяемые под массив) - значениями , как предлагал Алексей.
А я ничего против выбора как такового не имел. Лень сейчас искать тот Ваш пост. Помню, что если и не полностью, то хотя бы частично с ним я согласен. Любой инженер должен грамотно подходить к выбору. Проблема с ним только одна: задача выбора - это не исходная задача. А какая исходная? Поиск? Сортировка? Если сортировка, то по возрастанию или в ином порядке (напр, сначала чётные, а потом нечётные)? То есть, сначала нужно с этим разобраться. Потом полученное решение классифицировать и лишь затем переходим к выбору приемлемого решения из данного класса. Каждое из этих действий необходимо. Но только второе и третье обычно идут проще, чем первое.

474
Общий раздел / Re: Про необходимость for(each)
« : Февраль 11, 2012, 11:49:23 am »
Рекомендую помнить афоризм К. Пруткова: "Специалист подобен флюсу".
Афоризм обычного сноба, если вдуматься в определения слов с сегодняшней позиции. Это наезд на всех, кто вообще работает.

475
Общий раздел / Re: Про необходимость for(each)
« : Февраль 11, 2012, 11:42:07 am »
Вот тут где-то советовали начинающим программистам пользоваться языком без сборки мусора. А что, это его (начинающего) главная цель? Освоить ручное управление памятью.

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

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

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

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

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

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

476
Общий раздел / Re: Про необходимость for(each)
« : Февраль 09, 2012, 09:23:34 pm »
Вот тут где-то советовали начинающим программистам пользоваться языком без сборки мусора. А что, это его (начинающего) главная цель? Освоить ручное управление памятью.

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

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

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

Хороша ли задача, которую привёл Пётр, чтобы преподаватели использовали её в качестве наработки навыка усваивания (или анализа - так, наверное, правильнее)? Сложный вопрос. Но, думаю, она даётся именно с этой целью. А не чтобы обезьяна нашла, как написать на клавиатуре sort.

477
Общий раздел / Re: Про необходимость for(each)
« : Февраль 09, 2012, 08:38:20 pm »
А насчет HANDMADE  оптимизаций - ошибки Валерия показывают  правоту большинства высказавшихся по этому вопросу  - не фиг , если это не АБСОЛЮТНО критично.
На моё решение повлияло 2 обстоятельства: 1) его не собирались использовать в реальной жизни; 2) был уже час ночи, и я хотел побыстрее пойти спать. Именно поэтому я написал его, окинул ещё раз взглядом и выбросил сюда. На свежую голову или хотя бы при большем количестве времени я бы ошибки убрал. Так что первое: ошибки - это не правило.

Да, если бы я использовал sort, то ошибок бы не было. Но с чего вы взяли, что задача требовала сортировки?
Увидел массив чисел и быстро вспомнил, что уже умею с этим объектом делать, а потом выбрал для него ту операцию, в пояснении к которой больше слов пересекается с словами из задачи? Это называется "программирование по ассоциациям". Её продуктом становится индусский код. Например, нужно найти минимальное число в массиве. "Так, массив сортируется. Первым его элементом после этого будет тот, который мне нужен" - подумает "индус". И сделал. Циклы? В них же делают ошибки. Не нужны нам эти "оптимизации".

С элементом надо делать не то, что умеем, а то, что требуется. Отсюда следует второе: это была не оптимизация, а решение, ведущее к цели.

478
Общий раздел / Re: Зачем сборщик мусора?
« : Февраль 08, 2012, 08:33:51 am »
Ну, конкретное значение этого термина зависит от "предметной области", так сказать. Моё определение касается тех, тех, кто в основном работает с кодом.

479
Общий раздел / Re: Зачем сборщик мусора?
« : Февраль 08, 2012, 06:22:04 am »
Мейнстрим - это подход к решениям задач.

480
Общий раздел / Re: Про необходимость for(each)
« : Февраль 07, 2012, 10:09:39 pm »
Вот в один прогон. Вроде, не накосячил. Есть поле для оптимизации.

cl, cr, x, tmp : INTEGER;

x := 0;
cl := 0;
cr := LEN( a );
WHILE x < cr DO
IF a[x] = 1 THEN
tmp := a[cl]; a[cl] := a[x]; a[x] := tmp;
cl := cl + 1;
ELSIF a[x] = 3 THEN
tmp := a[cr]; a[cr] := a[x]; a[x] := tmp;
cr := cr + 1;
END
x := x + 1
END

Страницы: 1 ... 30 31 [32] 33 34