язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 03.04.15 21:13
Оценка: 80 (14) +8
Недавно тут обсуждали проблему выбора языка для обучения студентов. При этом студены по умолчанию изображались в виде тупых свиноматок, хотя если взять матчать, то матрицы, комплексные числа, интегралы и прочие производные падают на студентов стремительным домкратом прямо на пороге вузов. Почему программирование должно быть исключением?

Но разве только в языке дело? Ведь еще есть операционная система и железо. Прошло то время когда кодом из несколько строк было можно рисовать фигуры лиссажу на экране. Теперь чтобы создать минимально функциональный оконный hello, world нужно либо использовать библиотеки с могучим API, либо же писать код на сотню строк для обработки оконных сообщений, объясняя студентам что это такое и почему все так сложно. И вот какие мысли у меня возникают.

Почему бы не использовать для обучения Си и микроконтроллеры? Микроконтроллеры превращаются в микрокомпьютеры минут за пять времени прямо на макетнике и поддерживают цифровые и аналоговые входы/выходы.

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


К тому же у многих микроконтроллеров буквально несколько килобайт (!) оперативной памяти на борту, что учит бережно относится к каждому байту. Можно запрограммировать тетрис, подключив ЖК дисплей или XxY матрицу из светодиодов (все это тоже стоит копейки).


Вообще-то, из светодиодов можно собрать не только матрицу, но и куб. А в кубе реализовать трехмерную визуализацию звука.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: язык и железо для обучения
От: cures Россия cures.narod.ru
Дата: 03.04.15 21:39
Оценка:
Всё уже украдено до нас: малинка для чего-то похожего и придумана, насчёт Ц не уверен.
Проблемка в том, что не все хотят учиться экономить байты и микросекунды, особенно в свете того, что для работы подавляющего большинства это нафиг не нужно. Опять же, если мы тратим время и силы на подробное изучение низкоуровневых особенностей, у нас не остаётся оных на изучение алгоритмов и парадигм. Теорию компиляторов, например, вообще иногда преподают на лиспе.
С другой стороны, засадка в том, что считанные килобайты и килогерцы не дают изучать современные алгоритмы, в которых как раз очень важна производительность, но которым требуются много памяти и хорошая производительность, поскольку они выгодны на очень больших объёмах данных или вычислений. Как пример — распределённые вычисления, в том числе линейка.
Re[2]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 03.04.15 22:02
Оценка:
Здравствуйте, cures, Вы писали:

C>Всё уже украдено до нас: малинка для чего-то похожего и придумана, насчёт Ц не уверен.

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

дебиан грузится ужасно долго. а вот arduino сразу же готов к работе. достаточно запрограммировать и все. программа будет стартовать автоматом при подаче питалова. у малинки есть GPIO, но в линух оно доступно через ЖПУ и нужно объяснять как адресное пространство портов памиться на виртуальное адресное пространство и как его юзать. ИМХО слишком сложно для начала. к тому же самому малину не собрать. в отличии от микроконтроллеров.

C> Проблемка в том, что не все хотят учиться экономить байты и микросекунды,

C> особенно в свете того, что для работы подавляющего большинства это нафиг не нужно.
для учебных программ памяти хватит и без экономии. да и не в экономии дело, а в простоте. у микроконтроллеров нет оси и потому нет сложной и непонятной "прокладки". что такое ось и зачем она нужна лучше всего объяснять когда вы попробовали программировать без оси. даже при моргании светодиодами уже возникает задача реализовать многозадачность самому (если хочется мигать асинхронно) и задача как загрузить туда больше одной программы. тогда при переходе на ось, которая сама разделяет общие ресурсы между программами наступает блаженство

C> Опять же, если мы тратим время и силы на подробное изучение низкоуровневых особенностей,

C> у нас не остаётся оных на изучение алгоритмов и парадигм. Теорию компиляторов, например
какие низкоуровневые особенности микроконтроллеров? там кошерный си. интерфес портов ввода/вывода даже проще чем printf("hello, world!\n");

C> С другой стороны, засадка в том, что считанные килобайты и килогерцы не дают изучать современные алгоритмы,

килобайты оперативы. размер кода там достаточно большой.

C> в которых как раз очень важна производительность,

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

C> Как пример — распределённые вычисления, в том числе линейка.

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


https://youtu.be/i_r3z1jYHAc
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 03.04.15 23:10
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Теперь чтобы создать минимально функциональный оконный hello, world нужно либо использовать библиотеки с могучим API, либо же писать код на сотню строк для обработки оконных сообщений, объясняя студентам что это такое и почему все так сложно.


Страуструп в своей книге ("Programming -- Principles and Practice Using C++" обучающей программированию с нуля) использовал простой самодельный враппер над легковесной GUI библиотекой.
Вполне нормальный подход — преподаватель убирает типичные грабли и обрезает всё лишнее из API, оставляя только необходимое для изучаемых тем.

М>Почему бы не использовать для обучения Си и микроконтроллеры?


Что дадут микроконтроллеры начинающим программистам кроме дополнительных сложностей (типа отладки железа)?

М>К тому же у многих микроконтроллеров буквально несколько килобайт (!) оперативной памяти на борту, что учит бережно относится к каждому байту.


Усложнение на ровном месте. Если уж брать экономию памяти, то нужно показать почему и когда это необходимо в компьютерных программах — то есть в том что эти самые студенты и будут создавать в будущем.
Например показать что производительность линейного обхода (самой типовой операции) часто упирается в memory throughput, и уменьшив sizeof(T) можно получить практически кратное ускорение. И как следствие если важна скорость, то необходимо также обратить внимание на размеры структур, даже при отсутствии дефицита памяти (как в микроконтроллерах).

М>Вообще-то, из светодиодов можно собрать не только матрицу, но и куб. А в кубе реализовать трехмерную визуализацию звука.


Я когда-то именно это и делал just for fun: вытравил плату методом лазерного утюга, воткнул туда ATmega168 и ST232, соорудил куб из светодиодов 3x3x3, сделал прошивку на asm, сделал плагин к Winamp'у, и по COM-порту гонял управляющие команды для этой цветомузыки.
И при всём при этом, я бы не стал начинать обучение программированию с микроконтроллеров. Это касается именно программистов, если же брать например electrical engineering, то думаю можно начать и с микроконтроллеров
Re[3]: язык и железо для обучения
От: cures Россия cures.narod.ru
Дата: 03.04.15 23:12
Оценка: +1
Здравствуйте, мыщъх, Вы писали:

М>дебиан грузится ужасно долго


Был бы интерес, можно по приколу переделать скрипты, чтобы грузился быстро.

М> и нужно объяснять как адресное пространство портов памиться на виртуальное адресное пространство и как его юзать.


В питоне — не нужно, подцепил — и юзай

М>для учебных программ памяти хватит и без экономии


Насколько учебных? О каких студентах идёт речь? Учить именно простейшим основам программирования, типа вывел байт — и оно зажужжало, студента уже поздно. У первокурсника остаётся от силы года 2-3 до серьёзных поисков работы, что в России, что в США, в Европах наверное аналогично. Если ему это не было интересно класса с пятого, то максимум, что можно сделать — это обучить его применять высокоуровневые языки для его учебных нужд. А если было интересно — то он всё это давно уже понимает.

М>у микроконтроллеров нет оси и потому нет сложной и непонятной "прокладки".


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

М>наступает блаженство


"Купи козу"

М>килобайты оперативы. размер кода там достаточно большой.


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

М>я ж не предлагаю использовать _только_ микроконтроллеры. с них начать, а не ими закончить. начать с простого. от простого к сложному.


Тогда не стоит размениваться на мелочи, фон-неймановская архитектура — это уже слишком высокоуровневая концепция. Один мой знакомый учил студентов программировать машину Тьюринга, вот где настоящее понимание!
Если серьёзно, то я сам начинал классе в седьмом программировать на МК-61, изучал лунолёты и справочник Дьяконова.
А сейчас практически у каждого школьника лет с 10 есть компьютер с гигабайтом и гигагерцем, море олимпиад по программированию и аналогичных ресурсов. Какой смысл учить его в ВУЗе переключать лампочки? Если ему всё это было неинтересно, думаете, он тут заинтересуется? Практика показывает, что подавляющему большинству интереснее нарисовать переливающийся сайтик, с блэкджеком и всем остальным. И они будут получать за это нормальные деньги.
А те, кто увлёкся скучными цифрами, битиками и байтиками на зелёном экране, то бишь выбрал красную таблетку, справятся сами. Вот интересно, чему и на чём учат сейчас на яндекс-факультете ВШЭ?

М>на малине построено множество учебных кластеров.


Ну вот на ней и учат, всё в порядке. Но небольшой кластер из четырёх двухксеоновых плат на 128 ядер с инфинибэндом нынче стоит меньше 50 штук баксов. А персоналка на паре ксенонов (32 ядра) — 5 штук. Для обучения серьёзно интересующихся студентов это вполне приемлемо. У малинки главное преимущество — что её не жалко сломать, соответственно целевая аудитория — дети.
Re[3]: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 03.04.15 23:41
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>раньше использовал VMWare, но виртуальная сеть все-таки очень ограничена по возможностям,


Помню как-то демонстрировал ARP-spoofing на сети из нескольких виртуальных машин — ЕМНИП работало.

М>равно как и ограничено кол-во инстансов виртуальных машин на одной физической.


А сколько нужно?

P.S. Может стоит рассмотреть какие-нибудь облачные сервисы типа Amazon EC2?
Re[2]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 03.04.15 23:44
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, мыщъх, Вы писали:


EP> Вполне нормальный подход — преподаватель убирает типичные грабли

EP> и обрезает всё лишнее из API, оставляя только необходимое для изучаемых тем.
подход -- нормальный. микроконтроллер так же обрезает все лишнее, причем обрезает так, что у нас нет ни оси, ни защищенного режима ЦП. причем, каждый компонент системы можно потрогать руками и заменить на другой. писюк же это черный ящик.

М>>Почему бы не использовать для обучения Си и микроконтроллеры?

EP>Что дадут микроконтроллеры начинающим программистам кроме дополнительных сложностей (типа отладки железа)?
во-первых, отладочную печать никто не отменял (и именно так и отлаживают программы все нормальные программисты на никсах, не испорченные студией), во-вторых, микроконтроллеры дают простоту. как простоту схемотехники, так и простоту программирования. даже формат ELF/PE файлов объяснять не надо. это как com файл в старые добрые времена ms-dos...

М>>К тому же у многих микроконтроллеров буквально несколько килобайт (!) оперативной памяти на борту, что учит бережно относится к каждому байту.

EP> Усложнение на ровном месте. Если уж брать экономию памяти, то нужно показать почему
EP> и когда это необходимо в компьютерных программах — то есть в том что эти самые студенты и будут создавать в будущем.
в священных войнах сплошной мат и стон сколько памяти отжирают лис и хром. и не только они... это не усложение. это как раз упрощение. потому что когда hello world на выходе компилятора превращается в огромный файл -- возникает вопрос: почему так много и что компилятор туда положил? давайте уберем ненужные слои абстракции и будем работать с цп напрямую.

EP> Например показать что производительность линейного обхода (самой типовой операции)

EP> часто упирается в memory throughput, и уменьшив sizeof(T) можно получить практически кратное ускорение.
на микроконтроллере разница будет еще значительнее. кстати, как вы уменьшите sizeof? если это указатель на, то просто так его не уменьшить. можно использовать индексы -- это да. но тогда и память нужно выделять заранее, чтобы индексы "прыгали" в пределах одного блока. в идеале -- юзать укзатели, но с различной разрядностью, чтобы для кодирования соседних элементов использовать всего один бит, но тогда нам нужно делать map для указателелей, хранящийся отдельно от данных и это даже для профи совсем непросто и зачастую ненужно.

EP> вытравил плату методом лазерного утюга, воткнул туда ATmega168 и ST232,

DIP можно воткуть и в макетник, да и утюг нам не нужен. можно и руками нарисовать рейсфедером нитрокраской.

> сделал прошивку на asm,

можно и си использовать...

> сделал плагин к Winamp'у, и по COM-порту гонял управляющие команды для этой цветомузыки.

можно USB. или прямо к выходу звуковухи подрубиться, собрав простейший АЦП на коленках.

EP> И при всём при этом, я бы не стал начинать обучение программированию с микроконтроллеров.

мое дело -- предложить.


EP> Это касается именно программистов, если же брать например

EP> electrical engineering, то думаю можно начать и с микроконтроллеров
все-таки я не пойму почему вы против.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[4]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 04.04.15 00:19
Оценка:
Здравствуйте, cures, Вы писали:

C>Здравствуйте, мыщъх, Вы писали:


М>>дебиан грузится ужасно долго

C>Был бы интерес, можно по приколу переделать скрипты, чтобы грузился быстро.
да ну? там есть риск-ось. грузится относительно быстро, но все-таки микроконтроллер быстрее.

М>> и нужно объяснять как адресное пространство портов памиться на виртуальное адресное пространство и как его юзать.

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

М>>для учебных программ памяти хватит и без экономии

C> Насколько учебных? О каких студентах идёт речь?
о каком микроконтроллере мы говорим?

C> Учить именно простейшим основам программирования, типа вывел байт

C> и оно зажужжало, студента уже поздно. У первокурсника остаётся от силы
C> года 2-3 до серьёзных поисков работы, что в России, что в США, в Европах
мы о вузах говорим или о пту? си на микроконтроллере не предлагается учить все три года. тем более, что кошерные программы переносятся с микроконтроллера под линух или винду одним движением руки. что еще дает возможность продемонстрировать пути достижения кросс-платформенности?

C> Пока он моргает светодиодами без оси, толком не понимая, чем это так круто, другие учатся её использовать.

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

C> А куда мне грузить матрички тыщу на тыщу? Да даже для простейших фибоначчиевых куч

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

М>>я ж не предлагаю использовать _только_ микроконтроллеры. с них начать, а не ими закончить. начать с простого. от простого к сложному.

C> Тогда не стоит размениваться на мелочи, фон-неймановская архитектура — это уже слишком высокоуровневая концепция.
C> Один мой знакомый учил студентов программировать машину Тьюринга, вот где настоящее понимание!
ну вообще-то машины состояний лучше всего реализовать в железе на логических элементах. да и не только их. можно алгоритмы шифрования или хэширования реализовать 100% аппаратно на мелкой рассыпухе. понимание будет достигнуто.

C> Если серьёзно, то я сам начинал классе в седьмом программировать на МК-61, изучал лунолёты и справочник Дьяконова.

МК у меня не было, но были компьютеры по сравнению с которыми даже spectrum zx48 казался вершиной инженерной мысли. и была электроника бк на клоне pdp, где асм был довольно таки высокоуровнеым языком. еще был агат... эх, молодось... я даже пытался музыцировать на матричном принтере за неименением звуковой карты. потом была IBM XT и ms-dos, где все просто и понятно. а вот винда... ох... это да.

вот я и предлагаю -- почему бы не вспомнить хорошо забытое старое? тем более, что сейчас не нужно прошивать ПЗУ, стираемое УФ лучами. сейчас это можно делать через USB. и писать на си. даже паять не придется.

C> А сейчас практически у каждого школьника лет с 10 есть компьютер с гигабайтом и гигагерцем,

компьютер есть, согласен. но одно иметь колбасу, есть колбасу и пахнуть колбасой это три большие разницы.

C> Какой смысл учить его в ВУЗе переключать лампочки?

C> Если ему всё это было неинтересно, думаете, он тут заинтересуется?
ага, а вывести на консоль hello, world это супер-интересно! давайте сразу учить как написать веб-сервер, тем более, что на питоне это несколько строк всего.

C> с блэкджеком и всем остальным. И они будут получать за это нормальные деньги.

мы о вузе или пту?

C> Вот интересно, чему и на чём учат сейчас на яндекс-факультете ВШЭ?

понятия не имею.

М>>на малине построено множество учебных кластеров.

C> Ну вот на ней и учат, всё в порядке. Но небольшой кластер из четырёх двухксеоновых плат
C> на 128 ядер с инфинибэндом нынче стоит меньше 50 штук баксов. А персоналка на паре ксенонов (32 ядра) — 5 штук.
малина стоит 20 баксов, arduino можно купит дешевле пяти. можно построить кластер на деньги, сэкономленные на завтраках.

C> У малинки главное преимущество — что её не жалко сломать, соответственно целевая аудитория — дети.

ее главное преимущество -- множество плат расширения и сенсоров, которые цеплятются без проблем и куча готовых библиотек. дети -- согласен. взрослые мужи юзают arduino для быстрого прототипирования.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[4]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 04.04.15 00:31
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, мыщъх, Вы писали:


М>>раньше использовал VMWare, но виртуальная сеть все-таки очень ограничена по возможностям,

EP>Помню как-то демонстрировал ARP-spoofing на сети из нескольких виртуальных машин — ЕМНИП работало.
я про DDoS атаки. причем, не просто продемонстрировать, но и протестировать различные защиты от них. спуфинг, конечно, можно и на виртуалке показать.

М>>равно как и ограничено кол-во инстансов виртуальных машин на одной физической.

EP>А сколько нужно?
трудно сказать. нужно столько, чтобы жертва начала захлебываться. DoS атаки они ведь разные. одна из них, например, использовала тот факт, что популярные языки реализовали map, дающий квадратичную сложность в худшем случае. а потому если посылать серверу специальным образом сгенерированные GET'ы, то никакой процессорной мощности на O(N^2) не хватит и сервер ляжет. однако, если на этой же (физической) машине крутятся и атакующие программы -- ляжет все. и атакуемый и атакующий. это не входит в мои планы.

EP> P.S. Может стоит рассмотреть какие-нибудь облачные сервисы типа Amazon EC2?

в идеале я бы хотел иметь АПК для тестирования решений безопасности от разных производителей. впрочем, сейчас можно купить нормальную материнскую плату по цене малины, которая будет даже быстрее (потому что слегка устаревшие платы по другому не продать). да что там материнская плата. ноут целиком порой дешевле. а ведь у него есть экран, клавиатура и питание. так что я склоняюсь к покупке роутеров с последующей их перепрошивкой. идея состоит в том, что написать загрузчик, который может "кушать" скрипты хоть на питоне, на которых реализована логика сценариев атак, а все остальное -- это, конечно, си. учитывая, что на роутере больше чем один гигабитный порт езернет -- мы сильно выигрываем.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 04.04.15 01:35
Оценка:
Здравствуйте, мыщъх, Вы писали:

EP>> Вполне нормальный подход — преподаватель убирает типичные грабли

EP>> и обрезает всё лишнее из API, оставляя только необходимое для изучаемых тем.
М>подход -- нормальный. микроконтроллер так же обрезает все лишнее, причем обрезает так, что у нас нет ни оси, ни защищенного режима ЦП. причем, каждый компонент системы можно потрогать руками и заменить на другой. писюк же это черный ящик.

Микроконтроллер это такой же чёрный ящик, который предоставляет абстракцию/интерфейс над чем-то низкоуровневым. Там внутри процессор, RAM, Flash, и т.д. Если хочется низкого уровня/менее "чёрного" ящика, то почему микроконтроллеры, а не соединение отдельных CPU, RAM и т.п? Или почему бы не собрать процессор из вентилей FPGA, или вообще на голых транзисторах?

Чем абстрактная машина C хуже чем абстракция микроконтроллера в плане обучения программирования? Чтобы делать I/O на C не нужно знать про защищённый режим, про виртуальную память, точно также как и не нужно знать про триггеры при работе с микроконтроллером.

М>>>Почему бы не использовать для обучения Си и микроконтроллеры?

EP>>Что дадут микроконтроллеры начинающим программистам кроме дополнительных сложностей (типа отладки железа)?
М>во-первых, отладочную печать никто не отменял

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

М>(и именно так и отлаживают программы все нормальные программисты на никсах, не испорченные студией),


А "не так" это как?
Отладчиком типа gdb? Так это вообще ортогонально дискуссии, так как микроконтроллеры можно отлаживать таким же образом через какой-нибудь JTAG.

М>во-вторых, микроконтроллеры дают простоту. как простоту схемотехники, так и простоту программирования. даже формат ELF/PE файлов объяснять не надо. это как com файл в старые добрые времена ms-dos...


Во-первых, а зачем вообще объяснять формат ELF/PE при начальном обучении программированию?
Во-вторых, если студент в будущем будет работать с этими форматами, то представление о них он должен иметь, даже если начинал обучение с микроконтроллеров, то есть это никуда не делось.

EP>> Усложнение на ровном месте. Если уж брать экономию памяти, то нужно показать почему

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

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

М>это не усложение. это как раз упрощение. потому что когда hello world на выходе компилятора превращается в огромный файл -- возникает вопрос: почему так много и что компилятор туда положил? давайте уберем ненужные слои абстракции и будем работать с цп напрямую.


Firefox и Chrome жрут память не потому что hello world превращается в огромный файл.
Создание 4KiB intro и снижение потребления памяти веб-браузера — сильно разные задачи, требующие применения разных техник оптимизации.

EP>> Например показать что производительность линейного обхода (самой типовой операции)

EP>> часто упирается в memory throughput, и уменьшив sizeof(T) можно получить практически кратное ускорение.
М>на микроконтроллере разница будет еще значительнее.

Почему же?
Если нужно оптимизировать x86-64, то и учится оптимизации нужно на соответствующем железе, со всеми этими иерархиями памяти, кэш-линиями, memory latency, prefetcher'ом и т.п.

М>кстати, как вы уменьшите sizeof?


Например отсортировать поля внутри структуры T по убыванию sizeof, это позволит оптимальней заполнять padding выравнивания.
Или например преобразовать массив структур в структуру массивов — часто при линейном обходе используется только часть полей структуры.
Или же domain-specific оптимизации.

М>если это указатель на, то просто так его не уменьшить. можно использовать индексы -- это да.


Да, один из вариантов.

М>но тогда и память нужно выделять заранее, чтобы индексы "прыгали" в пределах одного блока.


Необязательно заранее. Например есть std::vector — он при росте делает реаллокацию на новое место, при этом индексы остаются валидными.

EP>> вытравил плату методом лазерного утюга, воткнул туда ATmega168 и ST232,

М>DIP можно воткуть и в макетник,

Можно, но для конечного устройства получается слишком громоздко.

М>да и утюг нам не нужен. можно и руками нарисовать рейсфедером нитрокраской.


С утюгом получается очень точно и при этом достаточно просто: http://easyelectronics.ru/sozdanie-pechatnoj-platy-metodom-lazernogo-utyuga.html

>> сделал прошивку на asm,

М>можно и си использовать...

Тогда уж лучше C++ ASM я там использовал только ради интереса.

>> сделал плагин к Winamp'у, и по COM-порту гонял управляющие команды для этой цветомузыки.

М>можно USB.

Ну да, нужно только заменить ST232 на FT232* (там afaik COM-порт через USB эмулируется).

М>или прямо к выходу звуковухи подрубиться, собрав простейший АЦП на коленках.


Да, но придётся и диапазоны частот фильтровать вручную (для эффектов цветомузыки).

EP>> Это касается именно программистов, если же брать например

EP>> electrical engineering, то думаю можно начать и с микроконтроллеров
М>все-таки я не пойму почему вы против.

Я не вижу какие преимущества это даёт по сравнению с обучением полностью компьютере. (Речь идёт про начальное обучение программированию. Как отдельный курс микроконтроллеры и железо думаю не повредят)
Re[5]: язык и железо для обучения
От: cures Россия cures.narod.ru
Дата: 04.04.15 03:06
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>ага. только рута им подай. ну так и на си можно. были бы библиотеки. но понимания они не добавят -- это точно.


Точно рута? Зачем? Выставления прав на устройствах должно хватить.
Понимания маппинга — не добавят, но оно для программирования периферии и не нужно, как мы уже выяснили.

М>>>для учебных программ памяти хватит и без экономии

C>> Насколько учебных? О каких студентах идёт речь?
М>о каком микроконтроллере мы говорим?

О любом. Каких именно студентов предполагается начинать учить началам программирования таким замысловатым образом? Я полагаю, что будущих бакалавров, но каких специальностей, профильных IT или других? Интересующихся программированием или принудительно?

C> У первокурсника остаётся от силы года 2-3 до серьёзных поисков работы, что в России, что в США

М>мы о вузах говорим или о пту?

Мой любимый аргумент По-хорошему, ВУЗ действительно не обязан обучать определённой профессии и её инструментам. Он должен дать базу, кругозор и умение далее самому изучать необходимые детали. Тем не менее, того факта, что у студента ограниченное время для обучения в ВУЗе, это не отменяет. Не уверен, что умение ужиматься в жёсткие ограничения микроконтроллеров относится к какому-либо из трёх вышеперечисленных пунктов. А понимание того, как, в целом, работает аппаратура, по-моему, должно уже наличествовать у человека, пришедшего в универ или политех изучать CS. Так, студентов-математиков обычно не обучают таблице умножения и умению работать с дробями. А филологов — правописанию жи-ши. Это должна дать школа, ну или частный тюитор.

М>си на микроконтроллере не предлагается учить все три года.


А сколько? Ц вообще редко учат в ВУЗе 3 года, обычно полугода вполне хватает. Но Вы предлагаете на тех же микроконтроллерах осваивать многозадачность, параллельное выполнение, управление памятью, а это уже похоже на годовой спецкурс, причём, как правило, в свою очередь базирующийся на неплохом умении программировать.
А ещё неплохо бы рассказать про плюшки плюсов и стандартной библиотеки. Причём не столько для утилитарного использования в работе, сколько для понимания того, как могут быть устроены библиотеки, какие бывают алгоритмы, как можно организовывать структуры данных. Когда всё это делать?

М>что еще дает возможность продемонстрировать пути достижения кросс-платформенности?


Вот только собственно микроконтроллеры тут не обязательны Можно показать, как программы переносятся с линукса на винду. Или как не переносятся Ибо мелкософт за 15 лет так и не осилил Ц99, а "переносить" с gcc на gcc — неспортивно.

М> я предлагаю юзать эту микросхему чтобы _начать_ программировать. на си. (спецкурс на асме).


Не поздновато ли _начинать_ _программировать_ в ВУЗе? А если человек уже программирует, просто не на Ц, то для обучения именно Ц хватит пары недель с хелловорлдом и реализацией на нём нескольких стандартных алгоритмов. Дальше можно изучать уже собственно алгоритмы в привычной среде, то бишь на компьютере.

М> а как у нас появятся потребности -- так и переходить на что-то серьезное.


Обычно предполагается, что человек пришёл в ВУЗ как раз потому, что эти потребности уже возникли.

М> уж всяко лучше начинать с си, чем оберон, который тут предлагали.


Вот это стопудово! Хотя лучше всё же с C++.

М> можно алгоритмы шифрования или хэширования реализовать 100% аппаратно на мелкой рассыпухе. понимание будет достигнуто.


Это вряд ли Возможно, появится чувство глубокого удовлетворения от работы руками, но не понимание криптографии.

М> и была электроника бк на клоне pdp, где асм был довольно таки высокоуровнеым языком.


БК010 — была жутко дорогая, и ещё к ней нужен был магнитофон

М> потом была IBM XT и ms-dos, где все просто и понятно.


Фигурнов и Абель

М>вот я и предлагаю -- почему бы не вспомнить хорошо забытое старое? тем более, что сейчас не нужно прошивать ПЗУ, стираемое УФ лучами. сейчас это можно делать через USB. и писать на си. даже паять не придется.


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

М> но одно иметь колбасу, есть колбасу и пахнуть колбасой это три большие разницы.


Тогда скорее уж "быть"

М>ага, а вывести на консоль hello, world это супер-интересно!


Это просто способ понять, как писать на данном языке.

C>> с блэкджеком и всем остальным. И они будут получать за это нормальные деньги.

М>мы о вузе или пту?

Мы всё ещё о ВУЗе, о его начальной стадии — бакалавриате. А туда подавляющее большинство идёт для того, чтобы после него хорошо зарабатывать. Не для того, чтобы выучить пых или жс — слишком дорого, для такого есть курсы. А чтобы понять, как вообще программируют сайты, сервера и всё такое. Вот у идущих дальше, в магистратуру и аспирантуру, могут быть и другие стремления, но то будет уже совсем другая история. Кстати, на такой случай изучать алгоритмы на основе javascript или на Java может оказаться не самой плохой идеей.

C>> Вот интересно, чему и на чём учат сейчас на яндекс-факультете ВШЭ?

М>понятия не имею.

Может быть, всеведущий All подскажет? Интересно было бы узнать, они вроде бы должны быть самыми передовыми в этих вопросах, на них не висят традиции.

М>малина стоит 20 баксов, arduino можно купит дешевле пяти. можно построить кластер на деньги, сэкономленные на завтраках.


Это имеет смысл, когда это делается для школьников, или когда бедный студент делает это для себя. Но когда ВУЗ, берущий с каждого студента в год за обучение десятки штук баксов, собирает учебные кластеры на малине — это уже может быть воспринято как жлобство.

М> дети -- согласен. взрослые мужи юзают arduino для быстрого прототипирования.


Так давайте оставим малину — детям, ардуино — взрослым мужам, а штеуд с титанами — студентам!
Re: язык и железо для обучения
От: LaptevVV Россия  
Дата: 04.04.15 05:28
Оценка: +2
М>Почему бы не использовать для обучения Си и микроконтроллеры? Микроконтроллеры превращаются в микрокомпьютеры минут за пять времени прямо на макетнике и поддерживают цифровые и аналоговые входы/выходы.
Знаешь, тут я с тобой скорее соглашусь.
Преимущества такого подхода для меня как препода — очевидны.
Мы изучаем одновременно:
— программирование как таковое, да еще весьма майнстримный язык С
— архитектуру компьютера
— подходы к написанию ос (на языке С — привет UNIX!)
— специальную область приложений, с которой, возможно, придется в жизни столкнуться (мне — пришлось, хотя меня никто не учил).
Кстати, в соседнем вузе группа физиков просила меня им курс лекций именно по этой теме прочитать.
Преподы. Значит, нужда есть.

В России только одна проблема: найти препода, который это осилит.
Программист, работающий по совместительству на полставки преподом — это порочная практика.
Многолетние мои наблюдения за подобным преподаванием это доказывают на 146%
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: язык и железо для обучения
От: ArtDenis Россия  
Дата: 04.04.15 09:23
Оценка: +3
Здравствуйте, мыщъх, Вы писали:

М>К тому же у многих микроконтроллеров буквально несколько килобайт (!) оперативной памяти на борту, что учит бережно относится к каждому байту. Можно запрограммировать тетрис, подключив ЖК дисплей или XxY матрицу из светодиодов (все это тоже стоит копейки).


Плюсую! Программируя МК, проще понять, как работает железо и программа вообще. Сразу исчезает занавес "волшебства", который возникает при задействовании высокоуровневых библиотек и средств, когда студенты просто выполняют лабораторную работу по методичке. В итоге они видят, что что-то работает, по почему это работает — ХЗ, работает оно само и ладно.

PS: а несколько Кб ОЗУ при желании можно использовать для многозадачной ОС и оконного гуя в одном флагоне, но это уже извращение в данном вопросе ))
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[5]: язык и железо для обучения
От: Stanislaw K СССР  
Дата: 04.04.15 10:24
Оценка: +1
Здравствуйте, мыщъх, Вы писали:


М>>>равно как и ограничено кол-во инстансов виртуальных машин на одной физической.

EP>>А сколько нужно?
М>трудно сказать. нужно столько, чтобы жертва начала захлебываться. DoS атаки они ведь разные. одна из них, например, использовала тот факт, что популярные языки реализовали map, дающий квадратичную сложность в худшем случае. а потому если посылать серверу специальным образом сгенерированные GET'ы, то никакой процессорной мощности на O(N^2) не хватит и сервер ляжет. однако, если на этой же (физической) машине крутятся и атакующие программы -- ляжет все. и атакуемый и атакующий. это не входит в мои планы.

делов то! ограничь [каждой] виртуалке процессор.
Все проблемы от жадности и глупости
Re: язык и железо для обучения
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 04.04.15 12:50
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Почему бы не использовать для обучения Си и микроконтроллеры? Микроконтроллеры превращаются в микрокомпьютеры минут за пять времени прямо на макетнике и поддерживают цифровые и аналоговые входы/выходы.


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

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

Классическим FSM считаю недетерменированную машину состояний описанную с помощью диаграмм UML. Она хорошо описана в книге "UML Основы Краткое руководство по унифицированному языку моделирования 3-е издание" Мартина Фаулера. Теоретически объясняется, что такое состояния, переходы, внутренние активности и многое другое. Нет никакого смысла "крутить игрушечным мотором", давайте уж прямо скажем, что всё это относится к программированию в области промышленной автоматизации в которой есть свои устоявшиеся стандарты.

Я это рассматриваю как расширение кругозора. А что касается России, то средняя зарплата программиста контроллеров и ПЛК 25 тысяч рублей. И это замечу не какого-то студня, а профи в своём деле. Проблема в заказчиках, промышленность России сильно уступает вебу и финансовой сфере. Это в свою очередь делает невыгодным акцентироваться на решениях, которые всё равно никто не купит.
Re: язык и железо для обучения
От: Stanislaw K СССР  
Дата: 04.04.15 16:38
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Почему бы не использовать для обучения Си и микроконтроллеры? Микроконтроллеры превращаются в микрокомпьютеры минут за пять времени прямо на макетнике и поддерживают цифровые и аналоговые входы/выходы.


М>Микроконтроллеры не нуждаются в оси (зачастую там просто недостаточно памяти для этого) и готовы к работе сразу при включении. М


многозадачная операционная система реального времени для однокристальных микроконтроллеров, с драйверами, с блекджеком и монашками.
Все проблемы от жадности и глупости
Re: язык и железо для обучения
От: Pavel Dvorkin Россия  
Дата: 04.04.15 18:03
Оценка: +2
Здравствуйте, мыщъх, Вы писали:

М>Почему бы не использовать для обучения Си и микроконтроллеры? Микроконтроллеры превращаются в микрокомпьютеры минут за пять времени прямо на макетнике и поддерживают цифровые и аналоговые входы/выходы.


Почему я не хочу С в качестве начального языка обучения — уже писал в предыдущем топике.

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

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

В качестве спецкурса на старших курсах — бога ради.
With best regards
Pavel Dvorkin
Re[2]: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 04.04.15 20:34
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Плюсую! Программируя МК, проще понять, как работает железо и программа вообще. Сразу исчезает занавес "волшебства", который возникает при задействовании высокоуровневых библиотек и средств,


Там точно такое же по сути "волшебство" — каким-то "магическим" образом заливается прошивка, используются "высокоуровневые" библиотеки (пусть и вшитые в железо) UART, SPI, etс.
В обсуждаемом выше микроконтроллерном примере LED Cube 3x3x3 я использовал готовый/железный IO UART (который "магическим" образом выдавал мне готовые байты), а не дёргал лапки Rx/Tx вручную — чем эта IO "магия" лучше IO "магии" типа cstdio или iostream? Чем "магия" заливки прошивки в МК лучше "магии" загрузки ELF/PE? (в контексте начального обучения программированию)

AD>когда студенты просто выполняют лабораторную работу по методичке. В итоге они видят, что что-то работает, по почему это работает — ХЗ, работает оно само и ладно.


Проблема "работы по методичке" будет в полной мере и при работе с микроконтроллерами, они тут ничем не помогут. Лично видел как люди успешно выполняли лабораторные работы с осциллографом выполняя шаги из методички, абсолютно не понимая что происходит — тоже самое может быть и с МК
Re[3]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 05.04.15 02:12
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, ArtDenis, Вы писали:


AD>>Плюсую! Программируя МК, проще понять, как работает железо и программа вообще. Сразу исчезает занавес "волшебства", который возникает при задействовании высокоуровневых библиотек и средств,

EP>Там точно такое же по сути "волшебство" — каким-то "магическим" образом заливается прошивка,
почему "магическим"? тем более, что способов заливки вообще-то множество. а вот вы, сударь, можете объяснить как происходит загрузка exe файла? желательно с порядком иницилизации dll, который вообще-то недокументированный и не совпадает с порядком их загрузки. к тому же в точку входа exe файла управление может вообще не приходить, а исключение, выброшенное из _некоторых_ (скажите мне каких) функций поглощается осью и равносильно return, что позволяет вместо return прямо из серидины цикла обращаться по null-поинтеру и мы выйдем из функции. вот это -- настоящая магия.

EP> используются "высокоуровневые" библиотеки (пусть и вшитые в железо) UART, SPI, etс.

побойтесь бога. сейчас везде USB. оно гораздо проще для понимания на уровне проводов.

EP>В обсуждаемом выше микроконтроллерном примере LED Cube 3x3x3 я использовал готовый/железный IO UART (который "магическим" образом выдавал мне готовые байты),

EP>а не дёргал лапки Rx/Tx вручную — чем эта IO "магия" лучше IO "магии" типа cstdio или iostream?
разумеется, это магия. но я предлагал обойтись без нее. у микроконтроллера есть нога. на ней написано, что это порт 1. в этот порт можно записать 1 или 0. светодиод горит или нет. а вот нога 2. в нее можно записать от 0 до 255. светодиод горит с разной яркостью. а вот нога 3. к ней можно подключить переменный резистор, читать значение и посылать его в последовательный порт, отображая значение в окне терминала на компе. согласен, что это уже магия. но это все-таки не iostream. это все-таки проще. уровней абстракции меньше.

EP> Чем "магия" заливки прошивки в МК лучше "магии" загрузки ELF/PE? (в контексте начального обучения программированию)

прошивку можно посмотреть в виде hex-дампа. и там не будет ничего "лишнего". и она будет мааааленькой.

EP> Проблема "работы по методичке" будет в полной мере и при работе с микроконтроллерами,

EP> они тут ничем не помогут. Лично видел как люди успешно выполняли лабораторные работы
EP> с осциллографом выполняя шаги из методички, абсолютно не понимая что происходит
и что? в свое время на бейсике я писал простые программы, где сыпались буквы сверху вниз, снизу вверх, и во все стороны, формируя тот или иной текст. _все_ (включая преподавателей) спрашивали: это ассемблер, да? я: на бейские есть функция для вывода символа S в позицию X, Y ? они: да! я: а что вам еще нужно?! так и не сумел объяснить. а они не могли понять, что дом состоит из кирпичиков и что для постройки дома достаточно и бейсика. асм разве что добавлял скорости, но я и так тормозил летающие буквы, так что не в скорости дело.

я вовсе не спорю с вами. нет. даже если собрать микро-эвм самому из транзисторов -- понимания это не добавит, если собирать по методичке ака принципиальной схеме. и мне это напоминает одну историю. как-то мой друг (который играл у меня на компьютере) сообщил моим родителеям, что собирает спектрум _сам_ (в то время продавались печатные платы с комплектом деталей и уже запрограммированным ПЗУ). мама спросила нас обоих: раз он сам собирает, значит, сам и починить может? приятель только головной глубокомысленно кивнул, а я не стал разубеждать. друг ко мне и сам пришел. собрал, включил... не работает!!! пришлось отряхивать пыль с осцилографа. да, там была одна битая микросхема памяти. вот оно и не работало. и тут мы приходим к пониманию того, что без понимания сути вещей мы обречены уповать на бога, удачу и что-то еще.

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

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

ЗЫ.ЗЫ. поскольку я не преподаватель, то меня приглашают в вуз _только_ если получен позитивный фидбэк от студентов и они еще меня просят. а потому если я буду нагонять на них тоску, то на меня тупо забьют. вот и приходится извращаться и искать что-то такое, что их привлекает. странно, что преподаватели тут (если вы преподаватель) встречают это в штыки. хотя я согласен. я читаю типа факультатив, а не обязательную часть. а обязательная часть это, увы, в том числе и паскаль.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[2]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 05.04.15 04:51
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, мыщъх, Вы писали:


PD> Почему я не хочу С в качестве начального языка обучения — уже писал в предыдущем топике.

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

PD>Насчет микроконтроллеров (независимо от языка) — я против, потому что это весьма специфическая область,

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

PD> и при программировании для них не избежать решений, не носящих универсальный характер,

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

привести хотя бы пару примеров решений "не носящих универсальных характер", плз.


PD> Напоминаю, я по-прежнему веду речь о начальном этапе. Начальное обучение должно

PD> быть как можно меньше привязано к специфическим особенностям среды исполнения.
блин. я помню как в трту (таганрогский радик) нам сначала схематично рисовали эвм. вы тоже ее рисуете? надо же объяснить людям что это такое, верно? вот ЦП, вот память, вот перефирия (шина и порты). такая простая модель. и микроконтроллер ей соответствует чуть больше чем полностью. разве что память там внутри. но это ж мелочь. главное, что вот они ПОРТЫ.

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

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


PD> В качестве спецкурса на старших курсах — бога ради.

я так и читаю в качесвте факультатива в нашем колхозе. только не на старших курсах. не уверен, что у людей после этого появляется понимание как работает эвм, но вот мотивация появляется точно. и у нас совместно появляются идеи в стиле: а что есть майку на спине усеять множеством микроскопических светодиодов и отображать на ней рекламу, скажем? как вы понимаете, по разрешению оно вполне вытягивает. вот только батарейки тяжело таскать. и это работает только зимой, потому что летом в такой майке можно свариться заживо. но это уже физика, а не программирование. я туда не лезу, я уже забыл что это такое. зато студенты работают над проблемой как не стать свечкой. да, это факультатив, так что можно. заодно и физику прокачают. не удивлюсь, если кто-то бросит вуз и пойдет искать инвесторов. и через пару лет можно будет увидеть людей не в форме зайчиков, раздающих флаера, а тупо показывающих рекламу на своих спинах за деньги.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: язык и железо для обучения
От: Pavel Dvorkin Россия  
Дата: 05.04.15 12:10
Оценка: +1
Здравствуйте, мыщъх, Вы писали:

PD>> Почему я не хочу С в качестве начального языка обучения — уже писал в предыдущем топике.

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



PD>>Насчет микроконтроллеров (независимо от языка) — я против, потому что это весьма специфическая область,

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

Совсем не обязательно при начальном обучении давать событийно-ориентированное программирование. Консольные программы есть и в Windows, и в Linux.

PD>> и при программировании для них не избежать решений, не носящих универсальный характер,

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

М>привести хотя бы пару примеров решений "не носящих универсальных характер", плз.


Ну хотя бы проблемы с ограниченным объемом АП. Этого порой достаточно для того, чтобы применять всякие хитрости, которые лучше бы не применять. Я непосредственно с микропроцессорами не работал, но досовскме проблемы с сегментами в 64 К помню, и huge указатели тоже помню, и не надо их больше.


PD>> Напоминаю, я по-прежнему веду речь о начальном этапе. Начальное обучение должно

PD>> быть как можно меньше привязано к специфическим особенностям среды исполнения.
М>блин. я помню как в трту (таганрогский радик) нам сначала схематично рисовали эвм. вы тоже ее рисуете? надо же объяснить людям что это такое, верно? вот ЦП, вот память, вот перефирия (шина и порты). такая простая модель. и микроконтроллер ей соответствует чуть больше чем полностью. разве что память там внутри. но это ж мелочь. главное, что вот они ПОРТЫ.

Я не рисую. Объяснить про память можно, порты в первоначальном курсе совсем не нужно затрагивать.

М>а меня знакомые студенты постоянно просят объяснить как так по одним и тем же адресам памяти в разных процессах разные данные. приходится совсем все упрощать и говорить: вас же не удивляет, что у двух массивов по одному и тому же индексу разные данные? забудьте про память. вас обманули. указатель это как индекс, то... указатель. но и индекс тоже. это идекс в таблице которую руками не трогать. тем более, что она там не одна...


Они после такого объяснения что-то понимают ?

Не надо тут упрощать. Надо просто объяснить разницу между физической и виртуальной памятью и немного рассказать про механизм трансляции адреса. Но это не в начальном курсе.

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


А это в начальном курсе вообще лишнее. Есть дисплей, на него строки выводятся с помощью printf/cout/writeln. Для начала вполне хватит. А потом будет курс по устройству всего на нижнем уровне, там и объяснить.

В общем, всему свое время. Начальный курс программирования базируется на изучении языка, алгоритмов и исполняется в той среде программирования, которую выбрали , без погружения внутрь. Остальное потом, вот там можно и пдробности привести.
With best regards
Pavel Dvorkin
Отредактировано 05.04.2015 16:53 Pavel Dvorkin . Предыдущая версия .
Re: язык и железо для обучения
От: DemonsInside  
Дата: 05.04.15 12:23
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Почему бы не использовать для обучения Си и микроконтроллеры? Микроконтроллеры превращаются в микрокомпьютеры минут за пять времени прямо на макетнике и поддерживают цифровые и аналоговые входы/выходы.


А почему бы сначала не задуматься о конечных целях, о том, чему мы именно хотим обучить своих учеников. Какие мы ставим перед собой цели разрабатывая эту учебную программу. И какие именно достоинства и недостатки у нее по сравнению с существующими программами обучения.
Re[4]: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 05.04.15 17:49
Оценка:
Здравствуйте, мыщъх, Вы писали:

EP>>Там точно такое же по сути "волшебство" — каким-то "магическим" образом заливается прошивка,

М>почему "магическим"? тем более, что способов заливки вообще-то множество.

Потому что я воткнул МК в программатор, запустил "волшебную" программу, указал прошивку, нажал кнопку — и она "магическим" образом зашилась в МК.
Конечно можно открыть datasheet МК, посмотреть возможные способы заливки, используемые при этом ноги и протоколы, прочитать документацию программатора и его "волшебной" программы — тогда "магия" исчезнет. Но пока это всё не разобрано на винтики — это такая же "магия"/абстракция как и загрузка исполняемого файла.

М>а вот вы, сударь, можете объяснить как происходит загрузка exe файла?


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

М>желательно с порядком иницилизации dll, который вообще-то недокументированный и не совпадает с порядком их загрузки. к тому же в точку входа exe файла управление может вообще не приходить, а исключение, выброшенное из _некоторых_ (скажите мне каких) функций поглощается осью и равносильно return, что позволяет вместо return прямо из серидины цикла обращаться по null-поинтеру и мы выйдем из функции. вот это -- настоящая магия.


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

EP>> используются "высокоуровневые" библиотеки (пусть и вшитые в железо) UART, SPI, etс.

М>побойтесь бога. сейчас везде USB.

Соединить две микросхемы внутри платы можно и по SPI.

М>оно гораздо проще для понимания на уровне проводов.


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

EP>>В обсуждаемом выше микроконтроллерном примере LED Cube 3x3x3 я использовал готовый/железный IO UART (который "магическим" образом выдавал мне готовые байты),

EP>>а не дёргал лапки Rx/Tx вручную — чем эта IO "магия" лучше IO "магии" типа cstdio или iostream?
М>разумеется, это магия. но я предлагал обойтись без нее. у микроконтроллера есть нога. на ней написано, что это порт 1. в этот порт можно записать 1 или 0. светодиод горит или нет. а вот нога 2. в нее можно записать от 0 до 255. светодиод горит с разной яркостью. а вот нога 3. к ней можно подключить переменный резистор, читать значение и посылать его в последовательный порт, отображая значение в окне терминала на компе. согласен, что это уже магия. но это все-таки не iostream. это все-таки проще. уровней абстракции меньше.

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

EP>> Чем "магия" заливки прошивки в МК лучше "магии" загрузки ELF/PE? (в контексте начального обучения программированию)

М>прошивку можно посмотреть в виде hex-дампа.

ELF/PE тоже можно. И для начинающих программистов это будут такие же буквы/циферки, в которые магическим образом превратился их код на C.
С чего вдруг hex-dump прошивки станет тёплым и ламповым, а hex-dump .exe нет?

М>и там не будет ничего "лишнего". и она будет мааааленькой.


Как это не будет? Был код на C, компилятор прожевал его и выплюнул бинарник. И вот смотрит студент на hex-dump — и видит что его C кода тут нет, assembler он ещё не знает (мы про первоначальное обучение говорим, да?), вместо кода какая-то абракадабра

М>кто-то из форумчан сказал, что людей, испорченных интерактивными отладчиками, ничего не исправит.


А какая аргументация против отладчиков? Я использую и интерактивные отладчики и отладочную печать, а иногда даже исправляю чужой код без возможности его скомпилировать и запустить. Не вижу проблемы в интерактивных отладчиках — это всего лишь инструмент
Даже если брать RE — OllyDdg и SoftICE — вполне себе интерактивные.

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

М>в этом смысле микроконтроллеры дают нам шанс. хотя в принципе есть эмуляторы и "свинья грязь найдет" (с).


Какой шанс? Как я уже говорил ранее, в микроконтроллерах возможна такая же интерактивная отладка, без всяких эмуляторов, прям в железе, через какой-нибудь JTAG
http://www.youtube.com/watch?v=s3XwevmvImA

М>но почему бы не показать отладочную "печать" на светодиодах, отобрав даже возможность записи в последовательный порт? тем более, что на начальном этапе алгоритмы простые.


Зачем? ЕМНИП даже в программируемых калькуляторах типа Электроника МК-52, МК-85 была пошаговая отладка.
Наоборот, я считаю что отладчик даёт хорошее интуитивное представление о том как работает программа.

М>ЗЫ. а видели горящие глаза того, кто сам собрал тетрис? (почти без помощи). у людей сразу появляется интерес и мотивация.

М>потому что у них есть то, что во-первых, они могут хачить и перехачить на свой манер, а во-вторых такого нет ни у кого.

У меня загорелись глаза после того как я написал простейший калькулятор на Pascal'е. Для меня это было так круто, что я записал его на дискету и всем показывал при первой возможности.
Простейшего консольного IO на writeln/readln оказалось более чем достаточно для пробуждения интереса.

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


Во-первых, неужели этот тетрис действительно был конкурентоспособным? Были ли хотя бы удобные кнопки и корпус?
Во-вторых, почему обязательно делать конкурентоспособный тетрис прям с первых шагов?
Re[2]: язык и железо для обучения
От: Sharov Россия  
Дата: 06.04.15 09:45
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Насчет микроконтроллеров (независимо от языка) — я против, потому что это весьма специфическая область, и при программировании для них не избежать решений, не носящих универсальный характер, а специфических именно для этой области даже при при изучении базовых принципов программирования.


Это не обучение микроконтроллеров -- это работа с железом "побилже", т.е. не где-то там в пластиковом корпусе,
а в руке. Написал программу, залил, воткнул светодиод -- работает. Можно генератор каких-нибудь звуков (нот) написать.
Важно то, что ты работаешь с железом, лучше понимаешь как работает железо. Разница между микроконтроллером и компьютером
колоссальна, но базовые принципы у них одни и те же.
Кодом людям нужно помогать!
Re[2]: язык и железо для обучения
От: Sharov Россия  
Дата: 06.04.15 09:59
Оценка: +1
Здравствуйте, DemonsInside, Вы писали:

DI>А почему бы сначала не задуматься о конечных целях, о том, чему мы именно хотим обучить своих учеников. Какие мы ставим перед собой цели разрабатывая эту учебную программу. И какие именно достоинства и недостатки у нее по сравнению с существующими программами обучения.


Пощупать железо руками, а не слушать сухие лекции, что есть процессор, есть память и т.д.
Кодом людям нужно помогать!
Re: язык и железо для обучения
От: Sharov Россия  
Дата: 06.04.15 10:12
Оценка: +1
Здравствуйте, мыщъх, Вы писали:

Собственно, еще в 80-х Алан Кей сказал:

People who are really serious about software should make their own hardware.


У буржуев можно подсмотреть как они к этому подходят (впрочем, ты, мыщъх, ссылки эти наверное видел) -- https://www.edx.org/course/embedded-systems-shape-world-utaustinx-ut-6-02x#.VSJaQOEYPGx
Мне лично ооочень нравиться митовский 6.004 -- там люди действительно начинают с транзисторов, потом gat'ы и выше, выше...
У меня всегда была интуиция, что без довольно детального понимания того как работает железо, приличным программистом не стать.
А программистом на managed языках вдвойне надо понимать железо, поскольку оно от них фактически скрыто.
Кодом людям нужно помогать!
Re[3]: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 06.04.15 12:05
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Это не обучение микроконтроллеров -- это работа с железом "побилже", т.е. не где-то там в пластиковом корпусе,

S>а в руке.

Это ты видишь что получается "поближе", потому что знаешь что уровней абстракции намного меньше, знаешь что это за уровни.
А для только начинающего программировать студента нет разницы сколько там уровней абстракции, в обоих случаях он будет общаться с полностью чёрным ящиком и его абстрактным интерфейсом — что при работе с МК, что с stdio

S>Написал программу, залил, воткнул светодиод -- работает.


От написанной программы до горящего светодиода код на C проходит через тысячи, а то и миллионы софтовых и железных вызовов подпрограмм, о которых начинающий программист не имеет никакого представления
Re[4]: язык и железо для обучения
От: Sharov Россия  
Дата: 06.04.15 12:13
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:


EP>От написанной программы до горящего светодиода код на C проходит через тысячи, а то и миллионы софтовых и железных вызовов подпрограмм, о которых начинающий программист не имеет никакого представления


Ну так в ходе обучения и получит представление об. Т.е. это не путь с верху вниз, а с низу вверх.
Кодом людям нужно помогать!
Re[5]: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 06.04.15 12:54
Оценка:
Здравствуйте, Sharov, Вы писали:

EP>>От написанной программы до горящего светодиода код на C проходит через тысячи, а то и миллионы софтовых и железных вызовов подпрограмм, о которых начинающий программист не имеет никакого представления

S>Ну так в ходе обучения и получит представление об. Т.е. это не путь с верху вниз, а с низу вверх.

Во-первых, то есть ты предлагаешь изучать все уровни снизу вверх, прям с самого начала изучения программирования? То есть устройство микроконтроллеров вплоть до вентилей, протокол USB (по которому будет заливаться прошивка), код программатора, компилятор C, устройство и драйвера компьютера на котором вводится код, растеризацию шрифтов которыми этот код выводится на экран и т.д. и т.п., и только потом начинать программировать?

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

Или почему тогда не собирать компьютер вручную на транзисторах?

В-третьих, программы это алгоритмы плюс структуры данных, зачем в начальное обучение дистиллированному программированию вводить какие-то лишние и отвлекающие моменты типа возни с проводами, проблем с железом и использования совершенно незнакомых девайсов? Что это даст?
Re[6]: язык и железо для обучения
От: Sharov Россия  
Дата: 06.04.15 13:29
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, Sharov, Вы писали:


EP>>>От написанной программы до горящего светодиода код на C проходит через тысячи, а то и миллионы софтовых и железных вызовов подпрограмм, о которых начинающий программист не имеет никакого представления

S>>Ну так в ходе обучения и получит представление об. Т.е. это не путь с верху вниз, а с низу вверх.

EP>Во-первых, то есть ты предлагаешь изучать все уровни снизу вверх, прям с самого начала изучения программирования? То есть устройство микроконтроллеров вплоть до вентилей, протокол USB (по которому будет заливаться прошивка), код программатора, компилятор C, устройство и драйвера компьютера на котором вводится код, растеризацию шрифтов которыми этот код выводится на экран и т.д. и т.п., и только потом начинать программировать?


За все время обучения в приличном вузе все это в той или иной степени детальности проходится.

EP>Во-вторых, микроконтроллеры с кодом на C это никакой не низ, кроличья нора намного глубже. Почему это нужно останавливаться на микроконтроллерах, а не например на Altair 8800, где машинные коды вводятся вручную по битам прямо в память?

EP>Image: images
EP>Или почему тогда не собирать компьютер вручную на транзисторах?

Так и делают, смотрите митовский курс (я дал ссылку выше). И кстати вот, буквально недавно -- http://habrahabr.ru/post/254879/

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


Согласен. Вероятно с нуля это давать не надо. Но включить в курс для инженера-программиста следует, даже если он потом будет
все время на js писать. И не просто включить, а достаточно основательно. Шоб руками и на транзисторах!
Кодом людям нужно помогать!
Re[7]: язык и железо для обучения
От: Evgeny.Panasyuk Россия  
Дата: 06.04.15 14:35
Оценка: +1
Здравствуйте, Sharov, Вы писали:

S>За все время обучения в приличном вузе все это в той или иной степени детальности проходится.


Вот именно что за время, а не с самого начала "снизу вверх".

EP>>Во-вторых, микроконтроллеры с кодом на C это никакой не низ, кроличья нора намного глубже. Почему это нужно останавливаться на микроконтроллерах, а не например на Altair 8800, где машинные коды вводятся вручную по битам прямо в память?

EP>>Image: images
EP>>Или почему тогда не собирать компьютер вручную на транзисторах?
S>Так и делают, смотрите митовский курс (я дал ссылку выше).

Смотрю и вижу:

https://www.edx.org/course/embedded-systems-shape-world-utaustinx-ut-6-02x#.VSKX4eGWMZO
Prerequisites:

Computer programming course in any language with exposure to variables, arithmetic, logic, loops, and functions. High school physics course covering current, voltage, resistance, and power.

О чём собственно и речь

S>Согласен. Вероятно с нуля это давать не надо. Но включить в курс для инженера-программиста следует, даже если он потом будет

S>все время на js писать. И не просто включить, а достаточно основательно. Шоб руками и на транзисторах!

Я только за такое включение, как минимум в виде спец-курса.
Но не вижу преимуществ программирования МК при начальном обучении программированию.
Re[8]: язык и железо для обучения
От: Sharov Россия  
Дата: 06.04.15 16:01
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Я только за такое включение, как минимум в виде спец-курса.

EP>Но не вижу преимуществ программирования МК при начальном обучении программированию.

Согласен, для начала надо будет что-нибудь попроще.
Кодом людям нужно помогать!
Re[8]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 06.04.15 22:07
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, Sharov, Вы писали:


EP> Я только за такое включение, как минимум в виде спец-курса.

EP> Но не вижу преимуществ программирования МК при начальном обучении программированию.
после того как студентам показали микроконтроллер и объяснили как его программировать, они (на моем опыте) единогласно постановили: "какая же гадость эта ваша заливная рыба" (с). рыба это пюсюк или макбук. потому что микроконтроллер легко стыкуется с тучей железа. разные датчики, сенсоры... очень легко считывать показания прямым чтением портов. на писюках этого нет и управление железом на писюках это уже спецкурс.

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

с машинами состояний при программировании МК сталкиваются очень рано. самый простой пример: у нас есть одна кнопка и один светодид. нажимаем (с отпусканием) один раз -- светодиод загорается (потухает). при этом студенты сразу видят, что (как и на писюках) реагировать можно как в момент нажатия, так и в момент отпускания конпки. чуть-чуть более сложная задача: это когда у нас светодиодов два (или три) и они загораются один за другим. чуть-чуть более сложная задача -- добавить кнопку сброса состояния. чуть-чуть более сложная задача -- добавить автоповтор. чуть-чуть более сложная задача -- заменить светодиоды на 7 сегментный индикатор, на котором очень-очень быстро мелькают цифры от 1 до 6, а нажатие кнопки останавливает процесс. типа генератор случайный чисел аля подкинуть кубик.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[9]: язык и железо для обучения
От: ro_man  
Дата: 07.04.15 06:12
Оценка:
Здравствуйте, мыщъх, Вы писали:

Программирование микроконтроллеров без (хотя бы базового) знания цифровой схемотехники — это профанация. Хотя бы для понимания, зачем нужны три состояния для вывода микроконтроллера, что такое дребезг контактов и как с ним бороться и т.п. Поэтому логично начинать с курса цифровой схемотехники и азов аналоговой.
PS. Мы все еще об обучении программированию?
Re[3]: язык и железо для обучения
От: Stanislaw K СССР  
Дата: 07.04.15 13:40
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Важно то, что ты работаешь с железом, лучше понимаешь как работает железо. Разница между микроконтроллером и компьютером

S>колоссальна, но базовые принципы у них одни и те же.

кроме физических размеров, ВООБЩЕ НЕТ РАЗНИЦЫ. от слова совсем.
Все проблемы от жадности и глупости
Re[3]: язык и железо для обучения
От: elmal  
Дата: 07.04.15 14:00
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>я так и читаю в качесвте факультатива в нашем колхозе. только не на старших курсах. не уверен, что у людей после этого появляется понимание как работает эвм, но вот мотивация появляется точно. и у нас совместно появляются идеи в стиле: а что есть майку на спине усеять множеством микроскопических светодиодов и отображать на ней рекламу, скажем?

А интересно, сколько планируется платить владельцу такой майки, чтоб он ее носил? Ибо я вообще не могу понять мотивацию того, кто согласится надеть такую майку.
Re: язык и железо для обучения
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 07.04.15 14:28
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>Почему бы не использовать для обучения Си и микроконтроллеры?


А зачем микроконтроллеры? Тогда уже Си, UNIX, bash, vim, gdb, консоль. Что, в общем-то, мало отличается от того, с чего начинал я: DOS, Turbo C 1.5
Re[4]: язык и железо для обучения
От: Sharov Россия  
Дата: 07.04.15 15:39
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

S>>Важно то, что ты работаешь с железом, лучше понимаешь как работает железо. Разница между микроконтроллером и компьютером

S>>колоссальна, но базовые принципы у них одни и те же.

SK>кроме физических размеров, ВООБЩЕ НЕТ РАЗНИЦЫ. от слова совсем.


В принципах функционирования разницы нет, а в возможностях есть.
Кодом людям нужно помогать!
Re[5]: язык и железо для обучения
От: Stanislaw K СССР  
Дата: 07.04.15 17:30
Оценка:
Здравствуйте, Sharov, Вы писали:

S>>>Важно то, что ты работаешь с железом, лучше понимаешь как работает железо. Разница между микроконтроллером и компьютером

S>>>колоссальна, но базовые принципы у них одни и те же.
SK>>кроме физических размеров, ВООБЩЕ НЕТ РАЗНИЦЫ. от слова совсем.

S>В принципах функционирования разницы нет, а в возможностях есть.


например?
Все проблемы от жадности и глупости
Re[6]: язык и железо для обучения
От: Sharov Россия  
Дата: 07.04.15 18:31
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

SK>Здравствуйте, Sharov, Вы писали:


S>>>>Важно то, что ты работаешь с железом, лучше понимаешь как работает железо. Разница между микроконтроллером и компьютером

S>>>>колоссальна, но базовые принципы у них одни и те же.
SK>>>кроме физических размеров, ВООБЩЕ НЕТ РАЗНИЦЫ. от слова совсем.

S>>В принципах функционирования разницы нет, а в возможностях есть.


SK>например?


Надо сравнитвать i7 и процессор какого-нибудь ардуино?
Процессор и там и тут, ISA может быть даже совпадает, но производительность мягко говоря отличается.
Кодом людям нужно помогать!
Re[2]: язык и железо для обучения
От: Sharowarsheg  
Дата: 07.04.15 18:48
Оценка:
Здравствуйте, Mystic, Вы писали:

М>>Почему бы не использовать для обучения Си и микроконтроллеры?


M>А зачем микроконтроллеры? Тогда уже Си, UNIX, bash, vim, gdb, консоль. Что, в общем-то, мало отличается от того, с чего начинал я: DOS, Turbo C 1.5


Да нафига и си, юникс, баш и фигаш? 86-я машина, DOS, Trubo Pascal 7.0 и ассемблер.
Re[7]: язык и железо для обучения
От: Stanislaw K СССР  
Дата: 07.04.15 19:15
Оценка:
Здравствуйте, Sharov, Вы писали:

S>>>>>Важно то, что ты работаешь с железом, лучше понимаешь как работает железо. Разница между микроконтроллером и компьютером

S>>>>>колоссальна, но базовые принципы у них одни и те же.
SK>>>>кроме физических размеров, ВООБЩЕ НЕТ РАЗНИЦЫ. от слова совсем.
S>>>В принципах функционирования разницы нет, а в возможностях есть.

SK>>например?


S>Надо сравнитвать i7 и процессор какого-нибудь ардуино?


блесни!

S>Процессор и там и тут, ISA может быть даже совпадает, но производительность мягко говоря отличается.


заведи ардуины на 3 ГГц и сравни.
Все проблемы от жадности и глупости
Re[8]: язык и железо для обучения
От: Sharov Россия  
Дата: 07.04.15 19:47
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

S>>Процессор и там и тут, ISA может быть даже совпадает, но производительность мягко говоря отличается.


SK>заведи ардуины на 3 ГГц и сравни.


Ок, ну если заводить на ардуине на 3 ГГц тогда да, разницы никакой, согласен.
Но обычно-то, на сколько я знаю, на микроконтроллерах процессоры поскромнее (хотя бы из соображений энергопотребления).
Кодом людям нужно помогать!
Re[2]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 07.04.15 22:26
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, мыщъх, Вы писали:


М>>Почему бы не использовать для обучения Си и микроконтроллеры?


M>А зачем микроконтроллеры? Тогда уже Си, UNIX, bash, vim, gdb, консоль.

"какая же гадость эта ваша заливная рыба" (с). вот что говорят студенты, когда после МК возвращаются к писюку (маку). потому что писюк совершенно непригоден для начинающих программистов. температуру, влажность, давление мерять не может. GPS модуль теоритически к нему можно подключить, но взаимодействие с ним выходит за рамки курса начинающего бойца и бойчихи. не говоря уже о том, что МК может мигать _кубом_ из светодиодов и создавать трехмерную реальность без очков.

кстати, под никсы и vim студентов и без меня учат. во всяком случае в сша это повсеместно.

M> Что, в общем-то, мало отличается от того, с чего начинал я: DOS, Turbo C 1.5

угу. в DOS можно быть делать практически все. com файл это аналог дампа, который закачивают в МК. прямой доступ к железу, возможность мигать светодидами по LPT...
защищенный режим вы изучали явно после реального. и уровней абстракций было совсем немного.

почему вы против микроконтроллеров? стоят дешево (даже в виде готовых плат) и выпускают их от кустарных фирм до интела (intel galileo & edison). если Intel выпускает такие платы серийно, то это знак свыше. как минимум о них нужно знать выпускникам. а как максимум... индустрия изменилась. софтверные решения вытесняются АПК, причем вытесняются повсеместно (ибо железо стоит копейки). "умный дом" это реальность сегодняшего дня. и не только умный дом... хотите поиграться с GPS или ГЛОНАСС? да без проблем!!!
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[4]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 07.04.15 23:02
Оценка:
Здравствуйте, elmal, Вы писали:

E>Здравствуйте, мыщъх, Вы писали:


М>>я так и читаю в качесвте факультатива в нашем колхозе. только не на старших курсах. не уверен, что у людей после этого появляется понимание как работает эвм, но вот мотивация появляется точно. и у нас совместно появляются идеи в стиле: а что есть майку на спине усеять множеством микроскопических светодиодов и отображать на ней рекламу, скажем?

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

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

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

ЗЫ. а рекламу лучше крутить не на спине, а спереди. чтобы было можно подойти и потрогать груди покликать баннеры. шутки-шутками, но уже есть студенты, ищущие инвесторов под новую бизнес-идею. вы знаете почем стоит рекламная площадь в городах? а тут столько хомячков гуляет бесхозных. теоритически это может взлететь. практически -- слишком много нерешенных проблем.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[10]: язык и железо для обучения
От: мыщъх США http://nezumi-lab.org
Дата: 08.04.15 00:05
Оценка:
Здравствуйте, ro_man, Вы писали:

_>Здравствуйте, мыщъх, Вы писали:


_> Программирование микроконтроллеров без (хотя бы базового) знания цифровой схемотехники — это профанация.

тоже самое можно сказать за "большие" компьютеры. к тому же не обязательно брать аналоговый термодатчик, т.к. его еще и калибровать надо. можно взять готовую плату, выдающую цифровые данные. обычно с ней идет и библиотека. обычно в исходных кодах. и обычно в документации описан протокол передачи данных (например, тут. см. стр 5 внизу: http://www.micropik.com/PDF/dht11.pdf). и тут мы внезапно обнаруживаем, что эти темы так или иначе входят в вузовскую программу.

_> Хотя бы для понимания, зачем нужны три состояния для вывода микроконтроллера,

вы имеете ввиду уровни pull up, pull down, pull none? как раз микроконтроллер позволяет сделать наоборот и посмотреть, что из этого получится. не вижу проблемы. и это всяко проще чем объяснить как подключить 8x8x8 куб из светодиодов к микроконтроллеру у которого не 512 выходов, а _сильно_ меньше. более того, предоставленные сами себе даже девушки предлагали решения, лучшие из которых задействовали всего один или два выхода и потому легко масштабировались. были и предложения задействовать более одноно микроконтроллера и это тоже масштабировалось. и это предлагали девушки, которым давалось на размышление минут тридцать.

_> что такое дребезг контактов и как с ним бороться и т.п.

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

_> Поэтому логично начинать с курса цифровой схемотехники и азов аналоговой.

азы аналоговой и цифровой проходят в любом вузе (в той или иной степени).

_> PS. Мы все еще об обучении программированию?

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

уже сегодня студенты программируют _еду_. это не шутка. 3Д принтером никого не удивишь. уже появились принтеры для печати еды за штуку баксов. это, конечно, не микроконтроллеры, но...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[9]: язык и железо для обучения
От: Stanislaw K СССР  
Дата: 08.04.15 05:30
Оценка:
Здравствуйте, Sharov, Вы писали:

S>>>Процессор и там и тут, ISA может быть даже совпадает, но производительность мягко говоря отличается.

SK>>заведи ардуины на 3 ГГц и сравни.

S>Ок, ну если заводить на ардуине на 3 ГГц тогда да, разницы никакой, согласен.

S>Но обычно-то, на сколько я знаю, на микроконтроллерах процессоры поскромнее (хотя бы из соображений энергопотребления).

но это ты угрожал мне сравнением, так что давай. обнажи кремний..

там дело совсем в другом. не только и не столько в гигагерцах. гигагерцы дают некоторый, незначительный, прирост скорости. но и только.
энергопотребление тоже, вторичный, побочный эффект. совсем не этого добивались. но "так тоже хорошо вышло"
Все проблемы от жадности и глупости
Re[5]: язык и железо для обучения
От: Stanislaw K СССР  
Дата: 08.04.15 05:42
Оценка:
Здравствуйте, мыщъх, Вы писали:


М>>>я так и читаю в качесвте факультатива в нашем колхозе. только не на старших курсах. не уверен, что у людей после этого появляется понимание как работает эвм, но вот мотивация появляется точно. и у нас совместно появляются идеи в стиле: а что есть майку на спине усеять множеством микроскопических светодиодов и отображать на ней рекламу, скажем?

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

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

что заставит человека таскать на себе какую то чужую рекламу вместо рекламы себя как полового партнера ?

сколько ты планируешь ему платить?
Все проблемы от жадности и глупости
Re[11]: язык и железо для обучения
От: ro_man  
Дата: 08.04.15 07:19
Оценка: +1
Здравствуйте, мыщъх, Вы писали:

Интерфейсы датчиков, мигание светодиодами и управление моторчиками с помощью ШИМ — это все прикладная область. К программированию как таковому это все перпендикулярно.
Я, кажется, понял твой посыл. Сделать так, чтобы студентам было интересно. Моргать светодиодами — это так няшно, а абстрактные типы данных — фу, скукота.
Вот только студенты вузов — это не школьники уже, их завлекать в программирование не надо (разумеется, если они не косят от армии, а целенаправленно поступали на специальность). В программировании микроконтроллеров немалая часть работы — это изучение даташитов. Зачем вводить лишние сущности, внося кашу в учебную программу? Ардуинки, сразу скажу, оставьте школьникам и кружкам юных техников, специалистов на них обучать не надо — получаются в результате "морские свинки".
PS. Микроконтроллеры вместе с их архитектурой и програмированием вполне себе изучаются на спецкурсах. К тому времени, когда база в программировании у студента уже есть. Кому это интересно, могут и соответсвующую тему курсача получить.
Re[3]: язык и железо для обучения
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.04.15 08:26
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>потому что писюк совершенно непригоден для начинающих программистов. температуру, влажность, давление мерять не может. GPS модуль теоритически к нему можно подключить, но взаимодействие с ним выходит за рамки курса начинающего бойца и бойчихи. не говоря уже о том, что МК может мигать _кубом_ из светодиодов и создавать трехмерную реальность без очков.


Это твои личные интересы. Мне всегда казалось скучным зажигать лампочки на дисководе и переключать Num Lock. Изменять температуру влажно и давление можно, но что с ней делать дальше? Быстро надоедает. А простое управление уже выходит из рамок чистого программирования, тут надо знать операторы Лапласа и прочее ТАУ. Лично с моими предпочтениями у меня сразу возникает тупик. Нет, конечно можно начать реализовывать свою операционную систему, что я однажды делал на Delphi, но тут что комп, что МК...

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