[Freeschool] [JT] Re: чему стоит учить в школе
Anton Farygin
=?iso-8859-1?q?rider_=CE=C1_altlinux=2Ecom?=
Сб Окт 25 16:34:18 MSD 2008
Denis Kirienko пишет:
> Dmitriy M. Maslennikov пишет:
>
>>> Зачем в C/C++ знать что такое класс объект и метод для Hello world ???
>>>
>>> printf("Hello world\n"); - это уже некошерно ?
>> printf("Hello world\n") -- не откомпилируется, надо:
>>
>> #include<stdio.h>
>>
>> int main()
>> {
>> printf("Hello world\n");
>> return 0;
>> }
>>
>> А теперь представьте как вы будете объяснять эти конструкции человеку,
>> который вообще не умеет программировать. Тут используется
>> препроцессор, объявление функции с возвращаемым значением, возврат
>> этого значения, потом еще компиляция... Брр... Я даже не знаю, с чего
>> лучше начинать изучения С, если человек не знает ни одного языка
>> программировния вообще.
>>
>> Сравните с python:
>>
>> print "Hello world"
>>
>> c ruby:
>>
>> puts "Hello world"
>>
>> Ничего лишнего знать в этих языках не нужно. Именно это делает такие
>> языки идеальными в качестве первого языка, или для демонстрации общих
>> принципов программирования, когда сам язык не важен, а важно показать
>> базовые элементы, то есть для школы.
>
> Извините за оверквотинг, но я просто готов подписаться под всем
> вышесказанным.
>
> Учить программированию на Java, мне кажется, невозможным. Учить
> программированию на С/C++ тяжело из-за лишней перегруженности языка
> низкоуровневыми вещами. Я бы даже сказал, что и Паскаль перегружен
> такими вещами. Простейшая программа Hello, World! должна в учебном языке
> состоять из одной строчки.
Отчего ж ?
Разве ученик не должен понимать, что его "Hello world" после того, как
он сказал "выполнить" - будет проходить через массу операций. Просто
понимать, что нельзя комптютер заставить говорить на человеческом языке,
что у него всё внутри "свое", из битиков и байтиков. И любая программа,
прежде чем быть выполненной - проходит массу преобразований, что бы быть
"понятной" компьютеру.
При этом, естественно, разнообразные #include, main() и т.д. - это
просто инструкция компьютеру, как _правильно_ выполнить волеизъявление
автора программы.
>
> Тем не менее, я учу программированию на C++. Огромное количество вещей
> при этом приходится объяснять так: "вот пример программы. Здесь написано
> много "заклинаний". Со временем вы поймете, зачем они нужны, а пока
> считайте, что эти заклинания нужно обязательно сказать, иначе ничего
> работать не будет. Вы же будете для начала немного модифицировать ту
> часть программы, которая написана между фигурными скобками, не трогая
> все остальные заклинания". Это помогает проскочить на первых порах.
>
> Почему нельзя учить C, а лучше учить C++. У С++ есть следующие
> достоинства, которые проявляются уже на начальном этапе:
> 1. Ввод-вывод (самое главное достоинство). cin>>a>>b понятней, чем
> scanf("%d%d",&a,&b).
> 2. Работа со строками - удобней в C++.
Работа со строками удобнее в perl, уж если так говорить. На мой взгляд -
уж если преподавать, то низкоуровневое ("C") программирование. Вообще,
самое то - это ассемблер (меня учили именно ему, в 11 лет). Всё
становится сразу понятно, да и язык донельзя простой (конечно, если не
использовать супер-модные расширения).
>
> Есть у меня еще довольно странная мысль следующему классу вообще не
> рассказывать C-ные массивы, а сразу же говорить про C++-ные вектора -
> это же так здорово, когда у массива может меняться размер!
И это так же непонятно. Не надо учить обезъянок программировать. Делайте
из них умных, думающих людей. Почему массив ограничен ? объясните, что
такое память и как она используется... как правильно с ней работать...
>
> Тем не менее, преподавание программирования на С++ или C очень тяжело.
> Преподаватель должен иметь очень высокую квалификацию и знать массу
> тонкостей языка, а то быстро сядет в лужу на каверзном вопросе.
Естественно. Но самое забавное в том, что любой язык преподавать тяжело
- нужно зать массу тонкостей.
Тут не поспоришь ;)
Подробная информация о списке рассылки Freeschool