[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