Comments 27
Конечно, я понимаю, что если бы знала предмет изначально досконально и имела большой опыт программирования на C, то пособие писалось бы раза в два быстрее.
А какой опыт коммерческого (за деньги) программирования на C, если не секрет?
Зашел, чтобы задать тот же вопрос ;)
Когда есть о чем писать — основная проблема в том, чтобы найти время написать все то, что крутится в голове и хочет наружу.
Когда есть о чем писать — основная проблема в том, чтобы найти время написать все то, что крутится в голове и хочет наружу.
Такого опыта нет. Есть опыт выполнения небольших проектов, но на другом языке. При этом лучше начинаешь разбираться в некоторых особенностях языка, но не всех, знаешь как уместней и где использовать определенные библиотечные модули и т.п… Назначение разработки и взаимодействие с другим человеком накладывают свою специфику. При небольшом опыте нельзя сказать: «мы делали все правильно».
Чтобы практика действительно подняла пособие на новый уровень, ее должно быть много, она должна быть многолетней, в разных командах и для разных целей. Для объективности. Но это требует много времени и зависит от того, как часто человек менял сферу применения языка или чего-то еще. Если он напишет потом книгу, то она будет на вес золота. Таких книг наверное единицы, они всем известны и «живут» достаточно долго.
Остальные описывают либо свой опыт разработки, и тогда книги разных авторов на одну тему сильно могут различаться. Неподготовленный читатель составляет мнение о предмете на основе того, что ему подвернулось.
Второй вариант, как в моем случае, пишут примитив, базу, не зная всех специфических особенностей предмета изложения.
Может быть это плохо, но это реальность, которая приводит к куче литературы.
Чтобы практика действительно подняла пособие на новый уровень, ее должно быть много, она должна быть многолетней, в разных командах и для разных целей. Для объективности. Но это требует много времени и зависит от того, как часто человек менял сферу применения языка или чего-то еще. Если он напишет потом книгу, то она будет на вес золота. Таких книг наверное единицы, они всем известны и «живут» достаточно долго.
Остальные описывают либо свой опыт разработки, и тогда книги разных авторов на одну тему сильно могут различаться. Неподготовленный читатель составляет мнение о предмете на основе того, что ему подвернулось.
Второй вариант, как в моем случае, пишут примитив, базу, не зная всех специфических особенностей предмета изложения.
Может быть это плохо, но это реальность, которая приводит к куче литературы.
Прочитал с удовольствием — написано простым и ясным языком, без заумностей, что в книгах бывает редко. Также очень понравилась вёрстка текста.
Пособие ИМХО очень хорошее.
Отдельное спасибо за перевод страниц в трудодни. Я забросил свою писанину именно потому, что признал что я очень медленно пишу. А оказывается вполне нормально. Наверное соберусь с мыслями и сделаю вторую попытку.
Отдельное спасибо за перевод страниц в трудодни. Я забросил свою писанину именно потому, что признал что я очень медленно пишу. А оказывается вполне нормально. Наверное соберусь с мыслями и сделаю вторую попытку.
Начинание хорошее, но нужно техническое ревью и редактура (в большом количестве). Пролистал несколько первых страниц.
> conio.h
Сейчас 2012 год, а вы рассказываете про conio.h?!
> Объявите в
> программе переменную max типа int и присвойте ей значение на единицу больше
> максимально допустимого.
signed overflow — undefined bahavior в Си. (Если не знаете что это такое — спросите).
> unsigned shot
shot
> Вот по-моему и все.
А как же char? (Да, об этом дальше, но вы же тут приводите список целочисленных типов и заканчиваете фразой «всё» — то есть список претендует быть исчерпывающим) А unsigned int это то же самое что unsigned или нет?
> При выводе длинных чисел
Длинные числа — это длинее двух цифр или как? (Исправьте на long)
> short j = 'b', k = 99;
> int arr[5], nums[N];
Человек впервые в жизни видит Си, а вы ему объявление с множественными деклараторами показываете (которые, кстати, запрещены многими кодстайлами, так что о них можно не рассказывать вообще, разве что в приложении «для тех что хочет знать больше»)
> Вещественные числа
> В языке C существует три типа чисел с плавающей точкой
Что такое точка и почему она плавает? Не хотите раскрывать подробности машинной арифметики — продолжайте называть их вещественными везде.
> Функция sizeof()
функция?! /0 facepalm
> mask = mask | (int)pow(2,N-i-1)
(int) pow(...) конечно, нам повезёт и всё округлится туда, куда нужно, да?
> В языке программирования C существуют так называемые статические переменные.
Вот так вот, одной фразой, смешали три разных понятия языка: object lifetime, object linkage, object scope.
Дальше не читал.
> conio.h
Сейчас 2012 год, а вы рассказываете про conio.h?!
> Объявите в
> программе переменную max типа int и присвойте ей значение на единицу больше
> максимально допустимого.
signed overflow — undefined bahavior в Си. (Если не знаете что это такое — спросите).
> unsigned shot
shot
> Вот по-моему и все.
А как же char? (Да, об этом дальше, но вы же тут приводите список целочисленных типов и заканчиваете фразой «всё» — то есть список претендует быть исчерпывающим) А unsigned int это то же самое что unsigned или нет?
> При выводе длинных чисел
Длинные числа — это длинее двух цифр или как? (Исправьте на long)
> short j = 'b', k = 99;
> int arr[5], nums[N];
Человек впервые в жизни видит Си, а вы ему объявление с множественными деклараторами показываете (которые, кстати, запрещены многими кодстайлами, так что о них можно не рассказывать вообще, разве что в приложении «для тех что хочет знать больше»)
> Вещественные числа
> В языке C существует три типа чисел с плавающей точкой
Что такое точка и почему она плавает? Не хотите раскрывать подробности машинной арифметики — продолжайте называть их вещественными везде.
> Функция sizeof()
функция?! /0 facepalm
> mask = mask | (int)pow(2,N-i-1)
(int) pow(...) конечно, нам повезёт и всё округлится туда, куда нужно, да?
> В языке программирования C существуют так называемые статические переменные.
Вот так вот, одной фразой, смешали три разных понятия языка: object lifetime, object linkage, object scope.
Дальше не читал.
int min, max;
min = -2147483649; // минимально допустимое -2147483648
max = 2147483648; // максимально допустимое 2147483647
printf("%d \n", min); // 2147483647
printf("%d \n", max); //-2147483648
При компиляции gcc выводится всего лишь предупреждение: overflow in implicit constant conversion
Тема «Компьютерная арифметика». Окружность. Доходим до максимально, потом сразу идет минимальное и т.д.
unsigned short и short — различаются. В первом случае, только положительные числа.
""" А unsigned int это то же самое что unsigned или нет?""" Это одно и тоже, но и писать unsigned int тоже можно.
> При компиляции gcc выводится всего лишь предупреждение
Почитайте что такое UB. Я серьёзно. (Компилятор совершенно не обязан о нём предупреждать.) Вы вообще читали стандарт? У вас есть хотя бы копия черновика стандарта?
> Доходим до максимально, потом сразу идет минимальное и т.д.
Эта отличная абстракция громко разбивается о процессры, использующие one's complement (а не two's complement), которые поддерживает стандарт Си, определяя signed overflow как UB.
> Это одно и тоже, но и писать unsigned int тоже можно.
Спасибо, я в курсе. А в тексте книги на это нет и мелейшего намёка.
Почитайте что такое UB. Я серьёзно. (Компилятор совершенно не обязан о нём предупреждать.) Вы вообще читали стандарт? У вас есть хотя бы копия черновика стандарта?
> Доходим до максимально, потом сразу идет минимальное и т.д.
Эта отличная абстракция громко разбивается о процессры, использующие one's complement (а не two's complement), которые поддерживает стандарт Си, определяя signed overflow как UB.
> Это одно и тоже, но и писать unsigned int тоже можно.
Спасибо, я в курсе. А в тексте книги на это нет и мелейшего намёка.
Я писала учебник, а не справочник или пособие по разработке программ. Это другой «формат». Есть ограничения на объем информации. Во-вторых, есть как бы негласное правило методистов и педагогов, согласно которому излагать и делать акценты надо только на важных понятиях. Все остальное за борт, иначе понимание происходящего у обучаемых снижается.
Когда человек уже будет знать основы, он дочитает остальное из других источников.
Когда человек уже будет знать основы, он дочитает остальное из других источников.
Совершенно верно, формат другой, но это не повод делать ошибки или оставлять простанство для неточностей.
Поэтому я и предлагаю убрать объявление с множественными деклараторами, так как это не важно для начинающих, но очень запутывает. А вот говорить что можно переполнять знаковые числа — это, что называется, учить плохому, так как в стандарте явно написано что так делать нельзя (тот факт что у вас на gcc получился «нужный» эффект ничего не доказывает). И знаковые/беззнаковые целочисленные типы тоже стоит вводить параллельно, а не общим списком, так как между знаковыми/беззнаковыми типами существует соответствие. Так, например, unsigned это просто сокращение от unsigned int и поэтому нет смысла показывать эту возможность учащимся: просто ТИП знаковый, unsigned ТИП — беззнаковый.
Поэтому я и предлагаю убрать объявление с множественными деклараторами, так как это не важно для начинающих, но очень запутывает. А вот говорить что можно переполнять знаковые числа — это, что называется, учить плохому, так как в стандарте явно написано что так делать нельзя (тот факт что у вас на gcc получился «нужный» эффект ничего не доказывает). И знаковые/беззнаковые целочисленные типы тоже стоит вводить параллельно, а не общим списком, так как между знаковыми/беззнаковыми типами существует соответствие. Так, например, unsigned это просто сокращение от unsigned int и поэтому нет смысла показывать эту возможность учащимся: просто ТИП знаковый, unsigned ТИП — беззнаковый.
""«А вот говорить что можно переполнять знаковые числа — это, что называется, учить плохому, так как в стандарте явно написано что так делать нельзя (тот факт что у вас на gcc получился «нужный» эффект ничего не доказывает)»""
Весомый аргумент, учту. В следующей редакции сделаю примечание о том, что в практическом программировании так не делают. При этом надо будет ввести представление о стандартах языков.
Однако вряд ли откажусь от наглядного примера компьютерной арифметики. Одно дело, что когда-то теоретически объясняли ученику, а тут вот оно — существует в реальности.
Весомый аргумент, учту. В следующей редакции сделаю примечание о том, что в практическом программировании так не делают. При этом надо будет ввести представление о стандартах языков.
Однако вряд ли откажусь от наглядного примера компьютерной арифметики. Одно дело, что когда-то теоретически объясняли ученику, а тут вот оно — существует в реальности.
Я кстати ошибся.
min = -2147483649; // минимально допустимое -2147483648
Здесь литерал -2147483649 имеет тип long, а затем происходит implicit conversion в int.
А если написать так:
min = -2147483648 — 1;
(или, как бы я написал, min = INT_MIN — 1;)
То получим переполнение знаковых чисел, так как оба операнда имеют тип int.
В общем если хотите продемонстрировать особенности дополнительного кода портабельно и не заходя на скользкие участки, предлагаю проще: измен ите в это упражнении тип на short. Тогда оба варианта:
min = -32769;
min = -32768 — 1;
будут работать корректно, так как все литералы тут имеют тип int и переполнения не происходит (неявное преобразование в short происходит после арифметики).
min = -2147483649; // минимально допустимое -2147483648
Здесь литерал -2147483649 имеет тип long, а затем происходит implicit conversion в int.
А если написать так:
min = -2147483648 — 1;
(или, как бы я написал, min = INT_MIN — 1;)
То получим переполнение знаковых чисел, так как оба операнда имеют тип int.
В общем если хотите продемонстрировать особенности дополнительного кода портабельно и не заходя на скользкие участки, предлагаю проще: измен ите в это упражнении тип на short. Тогда оба варианта:
min = -32769;
min = -32768 — 1;
будут работать корректно, так как все литералы тут имеют тип int и переполнения не происходит (неявное преобразование в short происходит после арифметики).
> известное издание K&R, которое часто рекомендуют, не подходит для начинающих
Извините конечно, но если K&R не подходит для начинающих, то им и начинать не следует.
Извините конечно, но если K&R не подходит для начинающих, то им и начинать не следует.
мне стало печальнее от того, что «С не подходит для первого знакомства с программированием», а ведь именно так у меня и было…
А вы не верьте. Знаю точно, что «Как программировать на C» от Дейтел и Дейтел подходит для начинающих, там ещё упражнения хорошие.
Я около пяти лет видела, как подростки осваивают программирование в малых группах. Если первый язык Python или Pascal, то обучение проходит легче.
Почему вы отказываете тем, кто не способен легко понимать программирование, в обучении ему? Разве это не тоже самое, что сказать: «Ты никогда не станешь спортсменом, не занимайся спортом».
Люди разные. Бывает, у человека проблема с логикой, но он вполе думающий и творческий (может придумывать что-то новое и интересное).
Люди разные. Бывает, у человека проблема с логикой, но он вполе думающий и творческий (может придумывать что-то новое и интересное).
А те, у кого нет способностей никогда и не станут спортсменами настоящими… поверьте, я знаю о чем говорю, отец у меня тренер спортсменки, попавшей в этом году на Олимпиаду.
И если у человека проблема с логикой, то программистом ему становиться не стоит. Как хобби пусть себе на ардуинах собирает девайсы да на jass'aх пописывает интересные карты к играм, или greasemonkey-скрипты для любимого сайта. Но профессионалом без логики ему быть совершенно не нужно, я бы даже сказал вредно!
И если у человека проблема с логикой, то программистом ему становиться не стоит. Как хобби пусть себе на ардуинах собирает девайсы да на jass'aх пописывает интересные карты к играм, или greasemonkey-скрипты для любимого сайта. Но профессионалом без логики ему быть совершенно не нужно, я бы даже сказал вредно!
А какими инструментами пользовались для верстки учебника?
Я задавал подобный вопрос в комментариях к статье, на которую вы ссылались вначале, но мне никто не ответил.
Скажите, какими пособиями или учебниками сейчас пользуются авторы для формирования понятного стиля изложения? Наверняка, ведь, есть книги, в которых учат, как писать так, чтоб был максимальный процент просветлённых читателей?
Я спрашивал у выпускников педагогических факультетов, но они не могут посоветовать ни одной книги или статьи — наверное, они заняты подготовкой к работе в отрасли общепита.
Скажите, какими пособиями или учебниками сейчас пользуются авторы для формирования понятного стиля изложения? Наверняка, ведь, есть книги, в которых учат, как писать так, чтоб был максимальный процент просветлённых читателей?
Я спрашивал у выпускников педагогических факультетов, но они не могут посоветовать ни одной книги или статьи — наверное, они заняты подготовкой к работе в отрасли общепита.
""«Наверняка, ведь, есть книги, в которых учат, как писать так, чтоб был максимальный процент просветлённых читателей?»""
Сомневаюсь, не попадались. Возможно есть «рекомендации» по поводу длины предложений (они вроде как не должны быть в треть страницы с тремя друг другу подчиненными деепричастными оборотами), абзацев, стиля изложения.
В свое время в пед.вузе была услышана примерно такая аллегория: «Знания, которые вы излагаете, — это верхушка айсберга. То, что под водой, должно быть намного массивней. Тогда любой вопрос или проблема, ударивший по верхушке, не перевернут айсберг.»
Чем человек сам лучше разбирается в проблеме, тем понятней может объяснить другому. Выходов тут, на мой взгляд, два. Либо иметь большой опыт, либо прочитать, проанализировать и сравнить существующие источники.
Также скорее всего опыт написания играет большую роль. Например, у меня по качеству материал трехлетней давности хуже, чем теперь.
Возможно надо прочитать что-то из области психологии восприятия и анализа человеком информации.
Сомневаюсь, не попадались. Возможно есть «рекомендации» по поводу длины предложений (они вроде как не должны быть в треть страницы с тремя друг другу подчиненными деепричастными оборотами), абзацев, стиля изложения.
В свое время в пед.вузе была услышана примерно такая аллегория: «Знания, которые вы излагаете, — это верхушка айсберга. То, что под водой, должно быть намного массивней. Тогда любой вопрос или проблема, ударивший по верхушке, не перевернут айсберг.»
Чем человек сам лучше разбирается в проблеме, тем понятней может объяснить другому. Выходов тут, на мой взгляд, два. Либо иметь большой опыт, либо прочитать, проанализировать и сравнить существующие источники.
Также скорее всего опыт написания играет большую роль. Например, у меня по качеству материал трехлетней давности хуже, чем теперь.
Возможно надо прочитать что-то из области психологии восприятия и анализа человеком информации.
Интересно, на какие темы выпускники педагогических ВУЗов защищают свои дипломные и докторские, если ни один из них до сих пор не рассмотрел такую важную тему?
Училась на естественно-географическом факультете пед.вуза. В нашей «биологической» группе был выбор защиты диплома по биологии, химии, педагогике/психологии/методике преподавания.
Часто преподаватели разделов биологии сами предлагали студентам темы дипломных уже на 3-м курсе, т.к. исследования обычно требовали полевых работ. Оставшиеся на педагогику/психологию начинали готовить дипломные на 5 курсе, некоторые за несколько месяцев до защиты. Уже не вспомню, какие у них были темы, но их практическая часть заключалась в хождение в школу и тестирование учеников, анкетирование. Одна девушка защищалась по методике преподавания. Кажется в качестве практической части там фигурировало создание наглядных пособий.
Сам курс по методике преподавания был у всех. На нем изучаются приблизительно такие понятия: дидактический материал, его подготовка, структура занятия, формы обучения, подготовка конспектов и т.п. Самое главное, что следовало нам запомнить — это правильный ответ на вопрос «каким должно быть занятие?» Оно может быть разным. Видимо поэтому и нет исследований на тему, как лучше преподносить информацию. Можно по-разному.
Часто преподаватели разделов биологии сами предлагали студентам темы дипломных уже на 3-м курсе, т.к. исследования обычно требовали полевых работ. Оставшиеся на педагогику/психологию начинали готовить дипломные на 5 курсе, некоторые за несколько месяцев до защиты. Уже не вспомню, какие у них были темы, но их практическая часть заключалась в хождение в школу и тестирование учеников, анкетирование. Одна девушка защищалась по методике преподавания. Кажется в качестве практической части там фигурировало создание наглядных пособий.
Сам курс по методике преподавания был у всех. На нем изучаются приблизительно такие понятия: дидактический материал, его подготовка, структура занятия, формы обучения, подготовка конспектов и т.п. Самое главное, что следовало нам запомнить — это правильный ответ на вопрос «каким должно быть занятие?» Оно может быть разным. Видимо поэтому и нет исследований на тему, как лучше преподносить информацию. Можно по-разному.
Sign up to leave a comment.
Мы не написали книгу! Практический опыт создания учебного пособия по программированию