Добавлено: Чт, 04 Мар, 2010 16:31 Заголовок сообщения: Основы программирования для троглодитов)
После долгих шаманских действий по борьбе со всеми и всяческими вирусами, восстановлений системы, безуспешных загрузок и прочих неприятностей, при абсолютно потребительском взгляде со стороны юных троглодитов (мы всё равно ничего не понимаем, с нас и взятки гладки ) я решила это дело коренным образом исправить. И всё-таки посмотреть вместе с ними, что же там в глубине глупого железного ящика творится. Заодно и самой уточнить некоторые неясные моменты, а не ходить как белудж со спутниковым мобильником.
После некоторых раздумий я решила начать с принципа действия машины Тьюринга. В Википедии про неё довольно хорошо объяснено, но троглодитов иногда заклинивает в самых неожиданных местах, поэтому хорошо бы иметь какие-то альтернативные объяснения (не в лоб, так по лбу )
Вопрос: пытался ли кто построить эту самую машину дома, для наглядности, и что из этого вышло.
Какую хорошую литературу - на самом начальном уровне, у меня троглодиты не то чтобы глупые, но жутко необразованные - для того, чтобы понять, что такое программирование, и что происходит внутри компа. вы можете посоветовать?
Добавлено: Чт, 04 Мар, 2010 18:24 Заголовок сообщения:
Изучать основы вычислительной техники с машины Тьюринга - это сильно. К программированию МТ имеет весьма посредственное отношение - это чисто абстрактная математическая модель, изучаемая в теории алгоритмов. Построить ее не получится в принципе - это это чисто математическая концепция.
Обычно изучение вычислительной техники и программирования рекомендуют начинать хотя бы на со знакомства с устройством компьютера хотя бы на минимальном уровне.
Программирование учат начиная с языков высокого уровня (с чего именно - вопрос во многом религиозный), но никак не со стороны теории алгоритмов (не путать алгоритмами вообще). Изучению различных алгоритмах в курсе основ программирования уделяется максимальное внимание - на таких базовых вещах, как методы сортировки, простейших структурах данных и т. д. закладываются основы алгоритмического мышления.
А вот с литературой я не помогу - сам я в свое время изучал программирование совершенно антипедагогическим образом - с какой-то книги "Visual Basic для студентов", где конспективно описывались конструкции языка без каких-либо пояснений, зачем это все надо.
Зарегистрирован: 29.01.2008 Сообщения: 2406 Откуда: Курск
Добавлено: Чт, 04 Мар, 2010 18:51 Заголовок сообщения:
На предмет изучения машины Тьюринга есть программа
http://freesoft.ru/?id=671189
Народ хвалит.
Конечно, это не абсолютная реализация машины, а лишь некоторое приближение (как минимум не хватает бесконечной ленты).
Но к реальному компьютеру отношение имеет весьма малое и косвенное.
Хотя при обучении программированию некоторая польза есть: для расширения кругозора и предотвращения замыкания на определенном фиксированном наборе навыков.
Ведь программирование вообще - это не только кодирование на каких-то языках программирования.
Если процесс с машиной Тьюринга пойдет, можно еще познакомить с основами лямбда-исчисления (тоже относится к программированию и ближе к жизни, чем машина Тьюринга). Если нет, то лучше заняться чем-то более приземленным.
А вот книгу начального уровня хорошую посоветовать, увы, не могу. Ничего хорошего не попадалось. Большинство книг, которые предлагаются для начального обучения скорее способствуют закреплению обезьяньих навыков (жми эту кнопку, потом ту...). _________________ Тот, кто еще в пути, уже в пути.
Зарегистрирован: 14.07.2008 Сообщения: 2816 Откуда: Город 313
Добавлено: Чт, 04 Мар, 2010 19:49 Заголовок сообщения:
geher писал(а):
Большинство книг, которые предлагаются для начального обучения скорее способствуют закреплению обезьяньих навыков (жми эту кнопку, потом ту...).
Есть, есть хорошие книги! Но! Одно оченно большое НО - они на языке оригинала, т.е. в основном на аглицком. Хотя первое, что надо знать программеру - это английский! И это не обсуждается - ВСЕ абсолютно операторы и конструкции требуют этого знания. Более того, традиционно наши "троглодиты" изучают предмет, разбирая на запчасти творения буржуинских коллег. Там зачастую комментарии оказываются очень нужными, а они на ангельском! Ниже несколько советов. И - еще раз посторю - их надо читать в оригинале, а ни в коем разе не в переводе! А то там такого напереводят - мало того, что подстрочником, так еще и неправильно.
Peter Prinz. Ulla Kirch-Prinz. A complete guide to programming in C++ - в инете лежит, погугли. Это очень сжатый справочник-путеводитель. Зато в нем легко найти то, что в данный конкретный момент надо.
Francis Glassborrow - у него целая серия книг, вот несколько названий: "You Can Do It! - A Beginner's Introduction to Computer Programming", "You Can Program In C++ - A Programmer's Introduction"
Bruce Eckel - у этого целая серия книг Thinking in... и далее - C++, Java и т.п.
Все эти книги свободно скачиваются в интернете. Кстати, насчет Java. Помнится, году в 1998 мне ребята-программеры знакомые говорили, что С++ - это уже вчерашний день, перспектива за Java. Конечно, ничего такого не случилось, но Java действительно имеет кучу преимуществ - во-первых, SUN совершенно свободно позволяет скачивать все библиотеки и движок и вообще. Во-вторых, для OpenSource есть прекрасная оболочка по типу VisualBasic - и так же легка в освоении, называется NetBeans, скачивается опять-таки у SUN.
Да, а устройство компьютера программеру совершенно не нужно, если он не собирается на ассемблере писать. Достаточно того, что этот черный ящик выполняет их команды.
И самое главное - учиться программерству абстрактно или на каких-то надуманных примерах типа Hello, World! совершенно бессмысленно и непродуктивно. Надо задаться какой-то целью, причем нужной. Например, кто скачивал книги у Мошкова, знают - там очень много в "досовском" формате, т.е. строки "отформатированы" с помощью CR. Да еще и куча ненужных пробелов и т.п. Смогут они сделать маленькую программулину, которая будет делать нормальные абзацы, убирать лишние пробелы и вставлять недостающие после точек-запятых? Мне как-то приспичило, и я нарисовал такое чудо на VB, а потом переписал на Java. Если интересно, могу намылить, с исходниками. Там есть еще простор для творчества.
Чуть не забыл - у меня дети постигают азы алгоритмов, рисуя карты для игрушек, которые это позволяют - Герои ММ, Эпоха Империй и т.п. Особенно Герои - там легко пишутся все скрипты, конструктор очень удачный, хотя и не всегда понятный. _________________ Все будет так, как должно быть, даже если будет иначе
Добавлено: Чт, 04 Мар, 2010 20:16 Заголовок сообщения:
geher, agrael
При всем уважении, вы вообще читали первый пост?
Машина Тьюринга, лямбда-исчисление, холивары C++ VS Java, английский язык для программистов, абстракция от железа.
Может быть начать с параллельного программирования, GRID и написания драйверов для usb-устройств?
Зарегистрирован: 29.01.2008 Сообщения: 2406 Откуда: Курск
Добавлено: Чт, 04 Мар, 2010 22:52 Заголовок сообщения:
reiten писал(а):
geher, agrael
При всем уважении, вы вообще читали первый пост?
Машина Тьюринга, лямбда-исчисление, холивары C++ VS Java, английский язык для программистов, абстракция от железа.
Насколько я понимаю, детишки только начинают осваивать сей пласт реальности. И тут возникает вопрос, куда направится их интерес потом. Ведь компьютер - это не просто железка, под которую можно писать программы на каком-то языке программирования, но и весьма полезный инструмент.
Если интерес будет скорее в плоскости "железа", то разумно ознакомиться именно с начинкой компьютера (хотя бы в плане нездорового любопытства).
Если интерес больше к математической составляющей - добро пожаловать в теорию, включая упомянутое лямбда-исчисление.
Если речь именно о написании программ, то следует сосредоточиться на методах программирования, имеющих практическое применение.
А если подход совершенно утилитарный (есть задача, есть умные люди, разрабатывающие инструменты под задачу, а наш клиент - всего лишь квалифицированный пользователь), то программирование вообще ни к чему, достаточно ознакомиться с основными моментами использования компьютера, с общими принципами построения пользовательских интерфейсов с точки зрения их использования.
Кстати, для меня программирование началось еще в школе с совершенно теоретической, к компьютерам близко отношения не имеющей, книги "Прикладная математика" (автора не помню).
В книге в числе прочего была глава, посвященная математическим аспектам программирования (не кодирования и составления алгоритмов). Я заинтересовался и в итоге пошел в этом направлении.
А если бы все началось не с этой книги, то я не исключаю, что занимался бы сейчас чем-нибудь, к компьютерам отношения не имеющим, а компьютер воспринимал бы в лучшем случае как большой многофункциональный гибрид калькулятора, игрушки и печатной машинки.
agrael, упомянутые книги скорее справочники, чем учебники. Может быть, я не прав, но мне кажется, что эти книги полезны, только когда есть хоть какие-то минимальные навыки по предмету или если есть иной источник информации, способный интересно ее изложить.. _________________ Тот, кто еще в пути, уже в пути.
Добавлено: Пт, 05 Мар, 2010 01:28 Заголовок сообщения:
agrael писал(а):
Java действительно имеет кучу преимуществ - во-первых, SUN совершенно свободно позволяет скачивать все библиотеки и движок и вообще. Во-вторых, для OpenSource есть прекрасная оболочка по типу VisualBasic - и так же легка в освоении, называется NetBeans, скачивается опять-таки у SUN.
Да нету больше Sun, хотя дело ее будет продолжать жить в др. компании (зайдите на http://sun.com). _________________ Если ничего для себя не усложнять, то все вокруг оказывается простым и понятным.
Добавлено: Пт, 05 Мар, 2010 07:15 Заголовок сообщения:
geher писал(а):
Насколько я понимаю, детишки только начинают осваивать сей пласт реальности. И тут возникает вопрос, куда направится их интерес потом. Ведь компьютер - это не просто железка, под которую можно писать программы на каком-то языке программирования, но и весьма полезный инструмент.
geher, вы меня поняли!
Они/мы действительно только начинают осваивать этот пласт. И вопрос в том, смогут ли вообще освоить, или умение пользоваться клавиатурой останется на уровне умения пользоваться шаманским бубном.
И дело не только в том, чтобы выучить какой-нибудь язык, или решить, какой лучше, но и в том, чтобы понять, почему можно программировать вообще.
Я в состоянии объяснить как действует, допустим, винт Архимеда, могу довести до сведения юных мозгов теорию отностительности (без расчётов ), но вот рассказать, что гудит и трещит внутри таинственного железного ящика, и почему он может считать и рисовать, у меня не очень получается)))
Цитата:
многофункциональный гибрид калькулятора, игрушки и печатной машинки.
Имеющиеся в школе учителя сами имеют об этом весьма отдалённое понятие...
А машина Тьюринга может и абстрактная математическая модель. но на самом первом этапе она наглядна - лента, ячейки (я ещё и про перфокарты расскажу, жалко, в доме ни одной нету, такой антиквариат!) переход к следующему действию, протокол... не знаю, может, это и не лучшее начало, но всё остальное ещё более абстрактно и потому - непонятно. Троглодиты - представители поколения, выросшего на визуальной информации
agrael писал(а):
Есть, есть хорошие книги! Но! Одно оченно большое НО - они на языке оригинала, т.е. в основном на аглицком.
C английским как таковым ни у меня, ни у детей особых проблем нету, но! на уровне, допустим, Конан-Дойля почитать или "Doctor Who" посмотреть. а вот фраза типа
Цитата:
Эту трудность преодолел Д. С. Скотт, построив понятие области D (полной решётки или, более общо, полного частично упорядоченного множества со специальной топологией) и урезав D → D до непрерывных (в имеющейся топологии) функций
для меня звучит как на нганасанском Или на древнешумерском... Из русского - только грамматика . И в английском будет то же самое
К теме: на самом деле, вот честно - я лично удовлетворился объяснениями средней школы о переменной силе тока в микросхемах, и о том, что, усложняя сию простую вещь, мы добиваемся весьма изощрённой системы современных компьютеров...
Зарегистрирован: 14.07.2008 Сообщения: 2816 Откуда: Город 313
Добавлено: Пт, 05 Мар, 2010 17:53 Заголовок сообщения:
Иверень писал(а):
чтобы понять, почему можно программировать вообще.
Тогда все же нужно про кучу триггеров рассказать, которые составляют ячейки-регистры, и как там с помощью управляющих сигналов переключают (сдвигают) туда-сюда, отсюда двоичная логика и все прочее. Ну и дальше пойдут всякие стековые заморочки... Не знаю, надо ли. Ну и блок-схему компа на уровне проц-шина-память-периферия показать.
geher писал(а):
упомянутые книги скорее справочники, чем учебники.
Ну, Эккель все же очень доступно объясняет, не даром оно учит ДУМАТЬ на языке программирования, как видно из названия. И потом, не зря же я про игрухи-стратегии рассказывал. Там вообще все ясно, как три копейки. _________________ Все будет так, как должно быть, даже если будет иначе
Зарегистрирован: 01.02.2008 Сообщения: 2044 Откуда: Правый берег США
Добавлено: Сб, 06 Мар, 2010 15:06 Заголовок сообщения:
Я подозреваю, что у ваших троглодитов та же особенность, что и у моих - они сильно повёрнуты в математику. Я своему старшему поставил задачу - написать вычисление фибоначи для произвольного числа. С фибоначи, как и вообще с алгеброй, у него проблем не было, а вот с программированием - близко к абсолютному нулю. За день, вооружившись учебником по питону и гуглём, сын произвёл программу, которая (как я и подозревал), вычисляла всё рекурсией, причём размножающейся, вида def f(n): return f(n-1)+f(n-2). А потом началась реальная учёба. Запустили программу для двух, трёх, потом для семи. Работает правильно. Потом запустили для 100. Подождали пол-часа, потом я спросил, почему, для того, чтобы сложить сотню чисел, его программе потребуется столь много времени. Выучили первый урок - программирование это не математика. Математики не знают слова эффективность, а програмисты с ним засыпают и просыпаются. И то, что математически правильно, на реальном компьютере может вычисляться дольше, чем время жизни вселенной. Научились (хочу надеяться) трассировать вычисление на бумажке. В процессе рисования циферок в квадратиках под шумок приблизились к пониманию понятия переменной (ячейки памяти), и отличию присваивания от равенства. Следующей задачей было переписать программу, используя только две переменные под предыдущие значения фибоначи (табличку из двух колонок на бумаге). Заодно изобрели цикл... Потом - вычисление корня квадратного из пяти, используя наконец-то заработавшую эффективно функцию фибоначи (посмотреть на результат f(большое_число)/f(большое_число-1) и f(большое_число-1)/f(большое_число), записать зависимость fi-1=1/fi, решить квадратное уравнение, потом короткое путешествие в википедию в статью о золотом сечении) - легко, там как раз почти чистая алгебра... Сейчас он выучил метод монте-карло и модуль random и пытается проверять школьные задачки на вероятности методом научного тыка (пардон, то есть монте-карло). _________________ If I sit the way other people do, my reasoning ability drops by 40 percent.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы