язык и железо для обучения
От: мыщъх США 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 Удмуртия https://kisa.biz
Дата: 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.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.