Тема открыта по просьбе жителей Королевства и посвящена обсуждению вопросов оптимизации кода. Выставляйте свои лучшие и худшие тексты и не стесняйтесь их обсуждать. В споре рождается истина. Или, по крайней мере, оптимизация.
Всего в теме 737 сообщений
Добавить свое сообщение
Отслеживать это обсуждение
- Тестирование проекта. Отладка.
- Подводные камни
- Централизованная обработка ошибок
- Бета-тестирование
- Давайте учиться на ошибках.
- Почему программисты допускают ошибки?
- Автоматизированные тесты для GUI
- О системах контроля ошибок
№ 687 21-05-2009 00:10 | |
Кстати, у меня есть один вопрос прямо по теме.
Простой, можно сказать, учебный "детский" пример. Алгоритм последовательного поиска элемента в одномерном массиве. Понятно, что это можно написать десятью способами, которые будут отличаться по своей "эффективности" и "грамотности". Что выбрать в качестве "идеального" решения? У меня до сих пор нет окончательного мнения. Допустим для простоты, что мы ищем в массиве длины n первый по порядку элемент с нулевым значением, а индексация элементов начинается с единицы.
Метод 1 (самый "дурацкий")
с:=0;
for i:=n downto 1 do
if a[i]=0 then с:=i
Метод 2.
i:=1;
while (i<=n) and (a[i]<>0) do i:=i+1
Неплохо, но при отсутствии нулей проверка второго условия за границами массива будет исключена только при условии сокращенного вычисления булевых выражений, т.е. корректность написанного текста зависит от настроек компилятора. Насколько это грамотно?
Метод 3.
i:=1;
while (a[i]<>0) and (i<=n) do i:=i+1
Это уже не грамотно по указанной выше причине. При отсутствии нулей проверка первого условия будет некорректна после выхода i за границу массива.
Метод 4.
c:=0; i:=1;
while (c=0) and (i<=n) do
begin
if a[i]=0 then c:=i;
i:=i+1
end
Самый "длинный", но похоже самый "умный" из четырех.
Самое интересное в этих примерах то, что все они "работают". Но что будет "оптимальным"? Особенно с точки зрения обучения "правильному и эффективному программированию"?
№ 686 20-05-2009 23:34 | |
>>>И проявить чудеса изобредательности, объединяя этот зоопарк...
У меня в этом году был пример "зоопарка". Правда работа была учебно-исследовательская, но это, мне кажется, особого значения не имеет. Был набор задач, которые надо было решать. Так вот. Мои "школяры" основную, "вычислительную" часть проекта делали на Haskell, а интерфейсы - на Delphi (так было проще и быстрее). И все получилось замечательно. Можно сказать принцип "Богу-богово, кесарю-кесарево" в программировании.
№ 685 20-05-2009 23:22 | |
>>>Ну да ладно.
>>>Продолжим: Паскаль - rulez, Си - оцтой :)
Могу предложить хороший метод борьбы с этой "детской болезнью". Не надо вообще использовать названия языков. Вы просто пишете "некоторые" проекты с использованием "некоторых" языков. Сегодня Вы используете язык "X", а завтра язык "Y". Разумеется, кто-то из "отмороженных" может снова тыкать в Вас пальцем и кричать: X-рулез, Y-отстой. Но это уже как-то не звучит...
№ 684 20-05-2009 23:05 | |
>>>и в программе, реализующей несколько разнородных задач, одну п/п
>>>написать на С, другую - на Питоне, третью - на Луа.
В самой идее "смешивания" языков в рамках одного проекта нет ничего страшного. Особенно, если делать это грамотно. В конце концов именно в этом заключается основная идея dotNET. Тексты, написанные на "своих" языках транслируются компиляторами переднего плана в единый промежуточный код на языке MSIL. А компиляторам заднего плана (back-end) уже безразлично, на каких языках написаны исходники. У них на входе один язык - MSIL, а на выходе код для данной конкретной платформы.
№ 683 20-05-2009 22:57 | |
>>>Например, английское school по глазам не бьет?
Еще как бьет. Слово восходит к греческому "schole", которое является производным от "scholazo" - "отдыхать от труда". Из греческого оно попало в латынь, а из нее было заимствовано другими европейскими языками.
№ 682 20-05-2009 21:59 | |
Знать сильные и слабые стороны обоих языков. В идеале, владеть в равной степени обоими. Уметь подобрать правильный язык для конкретной задачи. ... и в программе, реализующей несколько разнородных задач, одну п/п написать на С, другую - на Питоне, третью - на Луа. И проявить чудеса изобредательности, объединяя этот зоопарк...
№ 681 20-05-2009 11:11 | |
Ответ на »сообщение 680« (Geo)
___________________________
Меня в своё время больше удивило tender английское и тендiтный украинское.
Слово такое первоначальное и в немецком и т.п. нет.
Итальянский тенор...
Ну да ладно.
Продолжим: Паскаль - rulez, Си - оцтой :)
№ 680 20-05-2009 05:31 | |
Ответ на »сообщение 677« (Как слышно? Прием!)
___________________________
>>> Посмотрел словарь
Я тоже смотрел словарь ;-)
>>> Оказывается, английский не такой уж и чистый
Ну, латынь она всюду пролезла. Бог с ним, с малоизвестным катетом. А вот такое более известгное английское слово, как радиус, тоже латинизм. Но к этому уже привыкли.
Но ангийский засорен не только латыню (и греческим, кстати), но и заимствованиями из других европейских языков. Например, английское school по глазам не бьет? А, например, слово "паштет" некоторое время назад в английском языке сохраняло французское написание (по карйней мере, в английских текстах я встречал именно французский вариант, включая спецсимволы, а не нынешнее paste).
№ 679 20-05-2009 05:19 | |
Ответ на »сообщение 676« (Как слышно? Прием!)
___________________________
>>> А в другой ветке только что о чистом английском проповедовали.
Вопрос на засыпку: а как будет на английском слово "катет"? ;-)
№ 678 20-05-2009 05:17 | |
Ответ на »сообщение 675« (Cepгей Poщин)
___________________________
>>> Почему бы тогда не пойти еще дальше и избавиться от еще одного лишнего оператора присваивания и написать процедуру
Безусловно. Если для реализации программы такой вариант подходит, то можно и так. Все зависит от конкретники и от способности восприятию интегрированной информации. Тот же самый пример из школьной математики. Учительница заставляла всех (кроме некоторых) обязательно фиксировать письменно все промежуточные действия. Благодаря этому люди допускали меньше ошибок. Но было несколько человек в классе, на которых это правило не распространялось: учительница знала, чсто эти люди способны в уме произвести несколько промежуточных преобразований и записать только конечный результат. А в институте я учился с парнем, у которого способности к выполнению математических преобразований в уме были еще лучше, чем у меня. Так он на простые задачи вообще сходу ответ давал, потому как все преобразования на автомате выполнял в уме.
>>> А какие еще варианты могут быть?
Знать сильные и слабые стороны обоих языков. В идеале, владеть в равной степени обоими. Уметь подобрать правильный язык для конкретной задачи. Но поскольку идеал не всегда достижим, то по крайней мере не заниматься детскими обобщениями, типа "Си -- гадость", "Паскаль -- отстой".
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|