Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Язык Си и начальное обучение программированию   Найти похожие ветки 

 
Kerk ©   (2010-02-22 19:08) [0]

Паскаль vs Cи в обучении. Интересная статья.
http://www.stolyarov.info/files/anti_c.pdf


 
Mystic ©   (2010-02-22 20:56) [1]

Я начинал обучению программированию с языка C (9-й класс). Точнее BASIC я учил по книгам, а за компом изучал уже Turbo C 1.5. Не могу сказать, что все было так ужасно, как описывает автор статьи. Да, конечно, амперсанды при вызове initgraph смотрелись грозно, но внимание быстро сконцентрировалось на более практических вещах. А понимание указателей пришло уже позже...

Немного не согласен на счет циклов. Современная тенденция такова, что циклы с предусловием и циклы с постуловием уже не сильно разнятся: и то и то циклы, кроме того есть break и continue. В Ada, например, есть конструкция loop, которая легко модернизируется в обоих направлениях.


 
TUser ©   (2010-02-22 21:14) [2]

Эээ, ну, не защищая язык Си в качестве первого, все-таки замечу, что у автора какие-то странные преподские проблемы. Преподаватель, который не способен рассказать ламеру про ЗдравствуйМир, - профнепрегоден, разве не очевидно? Тут любят говорить, что хорошему программисту пофиг на чем программировать, так вот преподу должно быть пофиг, на чем рассказывать. Я, правда, сам программирование никому не преподавал, но, имхо, с его непреодолимыми трудностями, думаю, справился бы. Вот как я построил бы такое объяснение для полных чайников, из расчета минут на 40 объяснения + 40 самостоятельной работы.

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

#include <stdio.h>
void main() {
 printf("Hello, world\n");
}

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

Теперь я расскажу, что тут написано, и почему надо написать именно так, а не иначе. Прежде всего, несколько предварительных замечаний. Каждая прогроамма - это набор простых инструкций о том, что должен сделать компьютер. Эти инструкции можно записывать по-разному, то есть люди придумали много разных языков, способов объяснить компьютеру, что мы от него хотим. Тут у нас так называемый язык Це.

Вот тут у нас только одна инструкция, про которую вы уже догадались - printf. Что? Зачем там \n? Понимаете, древние языки придумали в эпоху печатных машинок, а там надо было специально переводить строку. Ну, вот так получилось, что при выводе текста тоже это надо указывать. Договорились указывать вот такими символами. Неудобно, да? Ну, понимаете, это правила языка, придется привыкать. В любом языке есть свои правила, вот тут - такие.

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

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

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

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

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

---

Все. В этом объяснении нет макропроцессоров и кодов завершения процесса. Такое понимается неподготовленным человеком, если он того хочет (а если не хочет, то непонятно будет любое объяснение). А то, что можно вместо простого трепа с анекдотами прочитать лекцию на тему "Чтоб меня не поняли", ну, это не секрет. Ту же программу на Паскале тоже можно так "объяснить".


 
Игорь Шевченко ©   (2010-02-22 21:15) [3]

Непонятно зачем вообще учить "программированию на конкретном языке" ?


 
Alkid ©   (2010-02-22 21:39) [4]


> Игорь Шевченко ©   (22.02.10 21:15) [3]

Потому что программировать сначала все равно учат на каком-то языке. В автошколе меня не учили "вождению ВАЗ 2104", но учился-то я на нем.


 
Kerk ©   (2010-02-22 21:52) [5]


> TUser ©   (22.02.10 21:14) [2]

Ты все слишком упрощаешь. Очень многие, например, не врубаются что такое цикл и зачем он нужен. И очень долго им нужно все это объяснять, чтоб они реально поняли, а не запомнили. А ты тут в своем объяснении так бегло проходишься по таким понятиям как "функция".

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


 
Kerk ©   (2010-02-22 21:54) [6]


> TUser ©   (22.02.10 21:14) [2]

Ты все слишком упрощаешь. Очень многие, например, не врубаются что такое цикл и зачем он нужен. И очень долго им нужно все это объяснять, чтоб они реально поняли, а не запомнили. А ты тут в своем объяснении так бегло проходишься по таким понятиям как "функция".

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


 
TUser ©   (2010-02-22 21:57) [7]


> А ты тут в своем объяснении так бегло проходишься по таким
> понятиям как

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


 
Юрий Зотов ©   (2010-02-22 22:02) [8]

Научить программировать можно на примере любого языка. Заметьте - я не говорю "научить ЯЗЫКУ", речь идет именно об обучении ПРОГРАММИРОВАТЬ. И в этом плане Паскаль ничуть не хуже других языков.

Научить программировать КРАСИВО (то есть, компактно, но полно и не в ущерб понятности кода) тоже можно на любом языке. И в этом плане Паскаль тоже ничуть не хуже других языков. Кстати, Си в этом плане немного хуже, но незначительно.

Научить программировать "на низком уровне" (в пределах ЯВУ, конечно) тоже можно на многих языках. И в этом плане Паскаль ничуть не хуже Си (поскольку работа с памятью и указателями, адресная арифметика и т.п. в нем поддерживаются точно так же, ничуть не меньше).

А вот научить программировать БЕЗ ОШИБОК - в ЭТОМ Паскаль ЗНАЧИТЕЛЬНО превосходит Си.

Поэтом для ОБУЧЕНИЯ (о котором и идет речь в сабже) Паскаль подходит ЗНАЧИТЕЛЬНО лучше Си.

Оно и понятно - изначально Си создавался для системщиков, а Паскаль  - для обучения. Значит, так и должно быть.


 
Kerk ©   (2010-02-22 22:03) [9]


> TUser ©   (22.02.10 21:57) [7]
> Мне трудно понять, как можно не понять, что некоторая последовательность
> инструкций, особым образом оформленная, называется "функция".
>  Имхо, автор выдумывает себе трудности.

Я думаю, автор немножко опытнее нас с тобой :)

Андрей Викторович Столяров (род. 25 декабря 1974 года) — кандидат физ.-мат. наук, преподаватель ф-та ВМиК МГУ им. М.В.Ломоносова. Сфера научных интересов — мультипарадигмальное программирование; имеет опыт чтения лекционных курсов «Операционные системы», «Системы программирования», «Архитектура ЭВМ и язык ассемблера», «Архитектура ЭВМ и системное программное обеспечение», автор спецкурса «Введение в парадигмы программирования».


 
TUser ©   (2010-02-22 22:05) [10]

Кстати, вот автор за Паскаль и против Си. А вот в благодарностях у него упомянут один человек (сишник), который как-то мне с удивлением задал вопрос - а почему я пишу на Паскале? Ну, ведь на нем же невозможно писать, ООП нет, и еще много чего нет, я уже не помню точно список. Ну, к примеру, допустим, нет работы с указателями, возможности разбить программу на модули и компилятора под Линуксом. В точности там список был другим, но общий смсысл в том, что все это есть, причем давно. Ну, разве что с кроссплатформенностью похуже, действительно. Когда он об этом узнал, то заявил, что это вообще - не Паскаль, а Си++, только с паскалевским синтаксисом. С этой точки зрения, автор ратует не преподавать Си, а преподавать вместо него Си (ну, с плюсами). :)


 
Игорь Шевченко ©   (2010-02-22 22:05) [11]

Alkid ©   (22.02.10 21:39) [4]

Я не к тому - у меня например обучение было на двух языках (ну так случилось, PL/1 и Фортран).

А по поводу страшных и непонятных слов #include и зачем они нужны - нас учили языку управления заданиями в мониторной системе "Дубна" (это на БЭСМ-6 которая), причем, учили быстро. Отторжений не возникало - хочешь сдать - еще не выучишь :)


 
Kerk ©   (2010-02-22 22:08) [12]


> TUser ©   (22.02.10 22:05) [10]
> Когда он об этом узнал, то заявил, что это вообще - не Паскаль,
>  а Си++, только с паскалевским синтаксисом.

Честно говоря, странное заявление. Object Pascal очень органично выходит из обычного Pascal.


 
TUser ©   (2010-02-22 22:24) [13]


> Я думаю, автор немножко опытнее нас с тобой

Ну, я оговорился, что опыта преподавания программирования у меня нет. Так что могу тут и ошибаться. Хотя все равно странно, речь идет про ВМК, а не про усть-лоховский вагонозаготовительный.

Ну и потом, из контекста видно, что есть люди, которые придерживаются противоположной точки зрения - Си внедряют. Возможно, тоже не лохи.


 
Юрий Зотов ©   (2010-02-22 22:45) [14]

Неоднократно сишники с недоумением задавали мне вопрос: а почему я пишу на Delphi - ведь там и того нет, и сего нет, и то нельзя сделать, и это тоже нельзя...

И каждый раз выяснялось одно и то же - все эти "нельзя" объяснялись просто незнанием Delphi. И когда я им показывал, что все, о чем они говорят "НЕЛЬЗЯ" сделать МОЖНО, причем не сложнее , чем на Си - у них глаза лезли на лоб. А когда им показывали, например, Дельфишные строки, или строгость контроля компилятора без ограничения функционала - то глаза лезли уже на затылок. И текли слюнки - тоже ведь хочется, а нету.


 
KilkennyCat ©   (2010-02-22 23:01) [15]


> Mystic ©   (22.02.10 20:56) [1]
> В Ada

оффтоп, но любопытно: Ада еще юзается?


 
KilkennyCat ©   (2010-02-22 23:04) [16]

А вообще мы уже неоднократно обсуждали такое, что работа и инструмент вещи взаимосвязанные, но все-таки разные.


 
Mystic ©   (2010-02-22 23:13) [17]

> KilkennyCat ©   (22.02.10 23:01) [15]

Юзается. Последний стандарт 2005 года, сркда разработки есть тут:
http://en.wikipedia.org/wiki/GNAT_Programming_Studio


 
KilkennyCat ©   (2010-02-22 23:21) [18]


> Mystic ©   (22.02.10 23:13) [17]

О, спасибо! Ща почитаю.
Это был первый язык (и единственная книга по программированию в нашей городской библиотеке), повергнувший меня в шок


 
Mystic ©   (2010-02-22 23:21) [19]

Для введения хороша книга Гаввы "Адское программирование"


 
Игорь Шевченко ©   (2010-02-22 23:22) [20]

Юрий Зотов ©   (22.02.10 22:45) [14]

Это тебе неправильные сишники задавали вопросы


 
Юрий Зотов ©   (2010-02-22 23:38) [21]


> Игорь Шевченко ©   (22.02.10 23:22) [20]


Это были действительно СИльные СИшники.
:o)

Может, не гуру, но профи - наверняка.

С ламерами, как ты понимаешь, я и разговаривать не стал бы. Тем более, не стал бы что-то им объяснять и доказывать. Бо, разговор с ламерами -пустая трата времени.  

Их "неправильность" заключалась лишь в том, что они поверхностно знали Delphi. Поэтому и офигевали, когда им показывали, как просто, надежно и элегантно на Delphi делается все то же самое, что и на Си - плюс еще то, чего в Си действительно нет. Хоть те же строки.


 
KilkennyCat ©   (2010-02-22 23:42) [22]


> Бо, разговор с ламерами -пустая трата времени.  

Ну, не знаю, не знаю... :)


 
Игорь Шевченко ©   (2010-02-22 23:47) [23]

Юрий Зотов ©   (22.02.10 23:38) [21]

А нужны ли в С строки на уровне языка ? По-моему, нет. Языков со строками было и до С и во время С немало, однако Ритчи не стал усложнять сверх необходимости.


 
@!!ex ©   (2010-02-22 23:48) [24]

> [21] Юрий Зотов ©   (22.02.10 23:38)

Все таки С или С++?
Просто, ИМХО, не совсем верно сравнивать C и Delphi, т.к. С - язык более низкого уровня.
А С++ - там вполне адекватные строки делаются, через теже шаблоны. И получается ни чуть не хуже чем Дельфи строки. Иногда даже удобнее.


 
@!!ex ©   (2010-02-22 23:59) [25]

По поводу преподавания:
Дети далекие от программирования ваши объяснения про функции, неймспейсы, циклы etc. не примут.
Из практики преподавания вывел простую идею: лучше всего воспринимаются примерзы из жизни.

Как объясниьт функции и циклы школьникам?
На окна в кабинете вешаются листочки с цифрами.
вызывается один школьник и почетно называется функцией "Открыть окно"
После чего человеческим языков описывается поведение функции.

Пока окно на которое смотрим не равно нужному окну - переводим взгляд на следующее.
Подходим к окну.
Открываем окно.

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

Работа с массивами лучше всего идет на фишках домино. Можно визуально показать что такое перемещение элементов и сравнение.

Формальное объяснение народ далекий от программирования вообще не понимает. А вот метафоры из жизни легко воспринимает. И за счет аналогий из жизни лучше понимает когда что нужно применять.


 
Игорь Шевченко ©   (2010-02-23 00:00) [26]

"Утверждение о том, что С и С++ почти всегда являются неподходящим связующим материалом для начала разработки новых приложений, может показаться неверным. Тем не менее, оно справедливо. С и С++ оптмизируют машинную эффективность ценой увеличения времени реализации и (особенно) отладки. Несмотря на то, что писать на С или С++ системные программы и чувствительные ко времени выполнения ядра приложений все еще имеет смысл, мир значительно изменился со времен возвышения этих языков в 1980-х годах. Сегодня процессоры в тысячи раз быстрее, модули памяти в тысячи раз больше, а диски в десять тысяч раз больше, причем, примерно по тем же ценам.
Падение цен фундаментально изменило экономику программирования. В большинстве обстоятельств уже не имеет смысла так экономить аппаратные ресурсы, как это позволяет С. Напротив, экономически оптимальный выбор состоит в минимизации времени отладки и максимизации возможности долгосрочного сопровождения кода."

Эрик Реймонд, "Искусство программирования для Unix"


 
KilkennyCat ©   (2010-02-23 00:05) [27]


> Как объясниьт функции и циклы школьникам?
> На окна в кабинете вешаются листочки с цифрами.
> вызывается один школьник и почетно называется функцией "Открыть
> окно"
> После чего человеческим языков описывается поведение функции.
>


Я не так учил.
Начал с двоичной логикой, в темпе дошел до асма и процессора. Осталось четверть детей от первой толпы, которых и стоило учить дальше. А для остальных есть множество других профессий.


 
TIF ©   (2010-02-23 00:06) [28]

Действительно интересная. Правда ссылку хорошо бы на последнюю версию текста дать:
http://www.stolyarov.info/files/anti_c_v03.pdf

Спасибо всем, кто указал на опечатки. В версии 02 они исправлены. В версии 03 сделана более полная аннотация, исправлены ещё несколько опечаток и стилистических погрешностей.

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

Тыц: http://www.stolyarov.info/pvt/anti_c

Насчёт "распиарить текст" - это про размещение ссылочки на Хабрахабре :)))
http://habrahabr.ru/blogs/study/82935/

Про опыт преподавания - это как бы ответ от автора к сообщению TUser ©   (22.02.10 21:14) [2]


 
Юрий Зотов ©   (2010-02-23 00:36) [29]

> KilkennyCat ©   (22.02.10 23:42) [22]

Чайник - достоин внимания, терпения и потраченного на него времени.

Ламер (воинствующий чайник) - не достоин ничего, кроме жестокой порки. Но - доказательной. Иначе это будет не лекарство, а оскорбление.

> Игорь Шевченко ©   (22.02.10 23:47) [23]
> А нужны ли в С строки на уровне языка ?

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

> @!!ex ©   (22.02.10 23:48) [24]
> Все таки С или С++?

Сравнивались языки на уровне "без ООП" (скажем, Паскаль и Си). И выяснялось, что Паскаль ничуть не слабее, но намного безопаснее. Если на том же уровне (без ООП) сравнивать Delphi и C++, то Delphi, пожалуй, даже мощнее (хотя бы в плане тех же строк).

Можно сравнивать и на уровне ООП - но это будет уже не совсем сабж. Все-таки ПЕРВОНАЧАЛЬНОЕ обучение программированию надо делать без ООП.


 
Игорь Шевченко ©   (2010-02-23 00:44) [30]

Юрий Зотов ©   (23.02.10 00:36) [29]


> Козе понятно, что через указатель на массив символов делаются
> любые строки. Но их еще надо делать. А тут они готовые,
> да еще с контролем времени жизни. Удобно? Удобно.


На время жизни мне как-то пофиг. Относительно удобства - так и через массив символов удобно. Не вижу принципиальной разницы.


> И выяснялось, что Паскаль ничуть не слабее, но намного безопаснее


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


 
Kerk ©   (2010-02-23 00:47) [31]


> Игорь Шевченко ©   (23.02.10 00:44) [30]
> Относительно удобства - так и через массив символов удобно.
>  Не вижу принципиальной разницы.

Конкатенацию массивов тоже удобно делать?


 
KilkennyCat ©   (2010-02-23 00:49) [32]


> Конкатенацию массивов тоже удобно делать?

а что, плюсиком низзя?! О_О


 
Игорь Шевченко ©   (2010-02-23 00:51) [33]

Kerk ©   (23.02.10 00:47) [31]


> Конкатенацию массивов тоже удобно делать?


Не испытывал трудностей за много лет. Опять наверное чего-то не так делал :)


 
Юрий Зотов ©   (2010-02-23 00:58) [34]

> Безопасность должна быть в голове у программиста.

В голове у программиста должна быть далеко не только безопасность. Ему еще и проблемную задачу кодить нужно. Поэтому голову лучше не загружать тем, чем можно ее не загружать.

>> Конкатенацию массивов тоже удобно делать?

> Не испытывал трудностей за много лет. Опять наверное чего-то не так
> делал

Делал-то так - но мог бы и совсем не делать. А просто плюсик стукнуть - вместо того, чтобы несколько строк кода писать.


 
Игорь Шевченко ©   (2010-02-23 01:18) [35]

Юрий Зотов ©   (23.02.10 00:58) [34]


> Поэтому голову лучше не загружать тем, чем можно ее не загружать.


Оно на уровне рефлексов.


> Делал-то так - но мог бы и совсем не делать.


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


 
Германн ©   (2010-02-23 01:29) [36]


> Игорь Шевченко ©
>
> Юрий Зотов ©  

Странно видеть холивар на такую тему между вами. :)


 
GDI+   (2010-02-23 02:00) [37]

В США сейчас программированию начинают учить с Java. Они тупые?


 
Юрий Зотов ©   (2010-02-23 02:08) [38]

> Игорь Шевченко ©   (23.02.10 01:18) [35]
> Оно на уровне рефлексов.

Игорь, ты сабж не забыл, случаем? Какие, нахрен, на этом уровне могут быть рефоексы?


 
Юрий Зотов ©   (2010-02-23 02:10) [39]


> GDI+   (23.02.10 02:00) [37]


Откуда дровишки?


 
Kerk ©   (2010-02-23 02:13) [40]


> Юрий Зотов ©   (23.02.10 02:10) [39]
>
> > GDI+   (23.02.10 02:00) [37]
>
> Откуда дровишки?

Не знаю за всех. Но много шума в свое время наделала такая новость:

Why MIT switched from Scheme to Python
http://www.wisdomandwonder.com/link/2110/why-mit-switched-from-scheme-to-python



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.059 c
11-1218532817
Jon
2008-08-12 13:20
2010.08.27
Position message box


2-1270446256
oleg1963lora
2010-04-05 09:44
2010.08.27
Вычитение даты-времени


15-1265999141
OneYoungMan
2010-02-12 21:25
2010.08.27
Linux для старого компьютера...


6-1221941736
WBcodderW
2008-09-21 00:15
2010.08.27
WebBrowser, формы и JS кнопки


3-1241781897
romanln
2009-05-08 15:24
2010.08.27
Delphi 7 и Oracle 10g как связать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский