Re: HELP

From
Alexandr A. Redchuck ()
To
Aleksey Tarasow
Date
2002-10-04T14:36:55Z
Area
RU.ALGORITHMS
From: "Alexandr A. Redchuck" <real@real.kiev.ua>

3-Oct-02 21:50 Aleksey Tarasow wrote to Igor Krassikov:

AT>>> И вообще профессионал обязан его знать. (и это уже не
AT>>> только мое мнение). Другой вопрос если человек не тянет на
AT>>> профессионала...
 Профессионал в чем?
 В программировании встроенных систем на мелких процессорах, баз
данных или рассчетных задач?
 В программировании или в кодировании для данного компьютера?

IK>>     Профессионал должен уметь работать лопатой, но карьер лучше
IK>> разрабатывать экскаватором. Ты, когда надо что-то посчитать, берешь
IK>> калькулятор/компьютер или логарифмическую линейку/счеты/абак?...
 Игорь, надо сначала уточнить - что именно посчитать :-)
 Когда мне по заданному соотношению резисторов надо выбрать
два резистора из стандартного ряда - я беру таки логарифмическую линейку -
одна установка движка и один медленный проезд бегунка - на калькуляторе
дольше будет :-) Хотя если бы мне это было надо хотя бы раз в день - давно
написал бы программу для PC.

AT>  Считаю вручную на бумаге. Мне в технаре отучили пользоваться
 Всё? Значит, рассчеты несложные.
 Я бы посмотрел, как на бумаге считают систему дифференциальных
уравнений (скажем, модель резонатора лазера).

3-Oct-02 22:06 Aleksey Tarasow wrote to Andrey Belyakov:

AT> беспроблем можно обходиться без него. У меня большая прозьба ко всем, в
 Кстати, не наезда ради а зеркала для (в смысле - взгляни на себя).
Вот ты пишешь предложения, причем с запятыми. Прямо язык высокого уровня.
А вот низкого уровня-то, на уровне слов - не знаешь (пишется "без
проблем", "просьба").
AT> следующий раз укажите пожалуста знаете ли сам ассемблер, и есть ли у вас
 А тут после "пожалуЙста" неплохо бы поставить двоеточие, а перед "и" в
этом предложении запятая не нужна. Ну и как ты сам следуешь собственным
убеждениям? "правило тринадцатого удара" знаешь?

AT> хоть одна программа чисто на нем. Знание как пишется команда mov,
AT> за знание ассемблера не принимается.
"Электроника-60"/ДВК-2/PDP-11 (небольшие программы писал даже в кодах,
   вводя их с пультового терминала)
"СОУ-1"/СМ2/ HP2100, если правильно помню "аналог"
  (аналогично, простое тестирование аппаратуры с кнопочек/лампочек
   на панели мог набрать в память, а C там у меня вообще не было, только
   FORTRAN, но я не писал рассчетных и сложных управляющих
   задач, посему им не пользовался - больно долго библиотека с перфоленты
   линковалась :-)
x86  остановился где-то на уровне 386, на уровне подпрограмм
   управления железом для основной программы на С. Чисто на ассемблере
   писал на "Нейроне" развлечения типа упаковки в один COM-файл нескольких
   мелких COM-файлов с вызовом по имени.
iMCS51
iMCS96
PIC16
AVR
 Подозреваю, что многие из твоих оппонентов или имеют не меньший
опыт в работе с ассемблером, или имеют опыт написания сложных
больших программ с единственным знанием об архитектуре "разряность
слова такая-то" (это, кстати, относится в данном случае не к железу,
а к математике - двоичная арифметика, способ представления чисел).
А уж есть ли на данной машине команда вычитания, или она реализуется
через смену знака и сложение, есть ли деление, или оно реализуется
через вычисление обратной величины и умножение, есть ли вообще
на этой машине стек, или только операции типа branch-and-link - не важно.
Ой, нет, последний случай желательно знать и не злоупотреблять
рекурсией :-). Хотя можно не знать, почему именно лучше так не делать,
а просто прочесть о таком ограничении в руководстве по реализации
языка на данной архитектуре.

 Не скажу, что _мне_ не нужно знание ассемблера, хотя для AVR пишу на C,
для iMCS51 сейчас - практически только на C. Но меня трясет, когда всем
студентам подряд начинают давать кодировку полей mod и r/m вместо того,
чтобы поучить их алгоритмам и высокоуровневым языкам.
 А когда ко мне обращаются "а вот хочу программировать, с чего начать" -
я сначала пытаюсь выяснить _чем_ конкретно хочет человек заняться, _что_
он хочет программировать. В итоге один сейчас начал с ассемблера,
другому было сказано "может, ты все-таки посмотришь в сторону более
высокоуровневых язков, чем C?". Для разных задач нужен разный инструмент
и надо знать только немного "поблизости".
 Экскаваторщик пожалуй должен уметь пользоваться лопатой, но "ой, а зачем
все эти щеточки" может и не знать.
 Археолог еще должен уметь пользоваться лопатой но может и не знать, с
какой стороны подходить к экскаватору - это не умалит его как
профессионала по рытью в земле.

3-Oct-02 22:19 Aleksey Tarasow wrote to Andrey Dashkovsky:

 AD>> Ты заблуждаешься, т.к. это и есть технология создания компиляторов,
 AD>> т.е. сначала на низком уровне пишется основа, потом на этом пишется
2AT: "на этом" - это при помощи получившегося компилятора. Т.е. для
новой машины сначала на асме писался минимальный по возможностям
компилятор С, без оптимизации, "лишь бы заработал". Вполне мог оказаться
без обработки вложенных структур и т.п. :-) Потом на этом С писался
AD>> уже нормальный компилятор,
и так несколько раз и этот процесс назывался "раскруткой". Но сейчас
лучше все это сделать вообще без применения ASM-а, на инструментальной
машине при помощи кросс-системы. Для многих целевых архитектур "родной"
компилятор вообще не делается, кому нужен С-компилятор, запускающийся на
ADSP21xxx или что это будет за компилятор, если он влезет в ATmega128 :-)

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

AT>  Позволю себе только одну ремарку по поводу "большинства
AT> случаев": такие случае стали действительно большинством только благодаря
AT> 128 Мб и уже 2 Ггц.
 Мой шеф в мои студенческие времена вообще не знал ни одного ассемблера.
Но вполне писал сам рассчетные задачи на фортране для своих
научных проблем. И эти задачи требовали только перекомпиляции,
чтобы работать толи на "минус первой", толи на ЕС-ках, толи на ДВК-2
с 56KB RAM ("прописью: пятдесят семь тысяч триста сорок четрые БАЙТА")
и где-то 700KIPS (0.7MIPS) производительности. Да, и без аппартаной ПЗ.
Думаю, даже с тогдашенй точки зрения было бы глупостью заставлять его
учить ассемблерЫ использованных машин и переписывать программу.
Гораздо больший эффект для скорости рассчетов давал правильный
выбор алгоритма, выбор вида приближения, динамическое управление шагом
разбиения.

wbr,
p.s. IMHO, есть задачи, для которых _вредно_ знать ассемблер. Лучше это
время потратить на что-то другое. А толстые и неповоротливые программы -
не от незнания "основ компьютера" в виде ассемблера, а от незнания
"основ математики, алгоритмов и программирования". Если человек
превосходно знает ассемблер, но плохо выберет метод - его программа
будет или долго работать, или неправильно считать. И, наоборот,
специалист в предметной области с хорошим знанием математики и
алгоритмов - напишет программу, которая будет и быстрее, чем у упомянутого
выше "крутого ассемблерщика", и, главное, работать _правильно_.

--
/* Alexandr Redchuck, Kyiv, Ukraine */
/* real на real тчк kiev тчк ua     */

--- ifmail v.2.15dev5
 * Origin: ReAl at home (2:5020/400)