Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 12:15
Оценка: +1
Практически в любой сфере деятельности (особенно в творческих профессиях) "ставят" технику. Особенно наглядно это видно у музыкантов и спортсменов.
Причем, совершенно очевидно, что у профи техника "поставлена" и это их РАЗИТЕЛЬНО отличает от любителей.
Что следует понимать под техникой программирования и как ее надо "ставить"?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Как обучать технике программирования?
От: Sharov Россия  
Дата: 19.04.10 12:48
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Что следует понимать под техникой программирования и как ее надо "ставить"?


Полностью с Вами согласен. Самого посещали неоднократно такие мысли. Как мне кажется, существует техника, например, параллельного программирования, техника написания программ в функциональном стиле (функциональное программирование) и т.д. ...

LVV>... и как ее надо "ставить"?

Как в том же спорте или музыке — тренировки, тренировки и еще раз тренировки. Правда у программистов это принимает несколько иной вид — чтение соответствующей литературы и практика, потом опять чтение и т.д., пока, так сказать, не натренируешься.
Кодом людям нужно помогать!
Re: Как обучать технике программирования?
От: denisko http://sdeniskos.blogspot.com/
Дата: 19.04.10 13:05
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Практически в любой сфере деятельности (особенно в творческих профессиях) "ставят" технику. Особенно наглядно это видно у музыкантов и спортсменов.

LVV>Причем, совершенно очевидно, что у профи техника "поставлена" и это их РАЗИТЕЛЬНО отличает от любителей.
Цель какая? Увеличение производительности приложения, скорости набора, скорости разработки, скорости отладки, простоты поддержки ? Или просто разительно отличиться от других? Более того, для каждого языка техника, которая решает одну или несколько из вышеизложенных задач будет разной.
<Подпись удалена модератором>
Re[2]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 13:07
Оценка: 9 (1)
Здравствуйте, Sharov, Вы писали:

LVV>>Что следует понимать под техникой программирования и как ее надо "ставить"?

S>Полностью с Вами согласен. Самого посещали неоднократно такие мысли. Как мне кажется, существует техника, например, параллельного программирования, техника написания программ в функциональном стиле (функциональное программирование) и т.д. ...
Давайте пока разговароивать о начальном обучении императивному программированию.
LVV>>... и как ее надо "ставить"?
S>Как в том же спорте или музыке — тренировки, тренировки и еще раз тренировки. Правда у программистов это принимает несколько иной вид — чтение соответствующей литературы и практика, потом опять чтение и т.д., пока, так сказать, не натренируешься.
Не, тут как раз совсем неясно.
Вот, например, в боксе. Там четко определены технические элементы-удары: прямой, боковой, снизу. И для каждого вида известно, в каком порядке нужно двигаться, чтобы сделать именно этот удар.
ИМХО в обучении программированию пока такого не наработано.
Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):
а) полный перебор;
б) поиск по заданному условию;
Для этих вариантов нужно написать шаблон цикла и сказать ученику: делай так!
А потом ему давать задачи на циклы и чтобы он распознавал, какого типа задача передним: перебор или поиск.
Например, поиск максимума в массиве — это полный перебор.
Соответственно удобны две разных ФОРМЫ цикла: для перебора — for, а для поиска — while.
Остальные операторы цикла — дополнительные удобства.

И про остальные типовые задачи тоже так нужно сделать. Только я чего-то не видал подхода именно от такой печки. В учебниках изучают язык, а не технику программирования. Такого слова даже не встречается.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 13:11
Оценка:
Здравствуйте, denisko, Вы писали:

D>Здравствуйте, LaptevVV, Вы писали:


LVV>>Практически в любой сфере деятельности (особенно в творческих профессиях) "ставят" технику. Особенно наглядно это видно у музыкантов и спортсменов.

LVV>>Причем, совершенно очевидно, что у профи техника "поставлена" и это их РАЗИТЕЛЬНО отличает от любителей.
D>Цель какая? Увеличение производительности приложения, скорости набора, скорости разработки, скорости отладки, простоты поддержки ? Или просто разительно отличиться от других? Более того, для каждого языка техника, которая решает одну или несколько из вышеизложенных задач будет разной.
Цель — учить так, чтобы получался профи, а не любитель. Который по производительности и по качеству производимого программного продукта на порядок лучше любителя.
Не... Не для языка, а для парадигмы, скорее всего. Функциональное программирование сильно отличается от императивного. А все языки императивного программирования — очень похожи.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Как обучать технике программирования?
От: deniok Россия  
Дата: 19.04.10 13:21
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>ИМХО в обучении программированию пока такого не наработано.

LVV>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):
LVV>а) полный перебор;
LVV>б) поиск по заданному условию;
LVV>Для этих вариантов нужно написать шаблон цикла и сказать ученику: делай так!
LVV>А потом ему давать задачи на циклы и чтобы он распознавал, какого типа задача передним: перебор или поиск.
LVV>Например, поиск максимума в массиве — это полный перебор.
LVV>Соответственно удобны две разных ФОРМЫ цикла: для перебора — for, а для поиска — while.
LVV>Остальные операторы цикла — дополнительные удобства.

А можно узнать, задача вычисления факториала — это задача на перебор или на поиск?
Re[4]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 13:33
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, LaptevVV, Вы писали:


LVV>>ИМХО в обучении программированию пока такого не наработано.

LVV>>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):
LVV>>а) полный перебор;
LVV>>б) поиск по заданному условию;
LVV>>Для этих вариантов нужно написать шаблон цикла и сказать ученику: делай так!
LVV>>А потом ему давать задачи на циклы и чтобы он распознавал, какого типа задача передним: перебор или поиск.
LVV>>Например, поиск максимума в массиве — это полный перебор.
LVV>>Соответственно удобны две разных ФОРМЫ цикла: для перебора — for, а для поиска — while.
LVV>>Остальные операторы цикла — дополнительные удобства.

D>А можно узнать, задача вычисления факториала — это задача на перебор или на поиск?

На перебор.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Как обучать технике программирования?
От: 31415926 Россия  
Дата: 19.04.10 13:33
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Не... Не для языка, а для парадигмы, скорее всего. Функциональное программирование сильно отличается от императивного. А все языки императивного программирования — очень похожи.


Похожесть не отменяет необходимости учиться грамотно использовать на конкретный язык. Очень хорошо об этом пишет J. Bloch в предисловии к Effective Java.
Хотя оно конечно, вычисление факториала выглядит примерно одинаково на всех императивных языках. Но Вы же пишете о технике. В моем понимании этого слова техника программирования на, скажем, Java и С++, все-таки несколько отличается.
Re[4]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 13:43
Оценка:
Здравствуйте, 31415926, Вы писали:

3>Здравствуйте, LaptevVV, Вы писали:


LVV>>Не... Не для языка, а для парадигмы, скорее всего. Функциональное программирование сильно отличается от императивного. А все языки императивного программирования — очень похожи.


3>Похожесть не отменяет необходимости учиться грамотно использовать на конкретный язык. Очень хорошо об этом пишет J. Bloch в предисловии к Effective Java.

3>Хотя оно конечно, вычисление факториала выглядит примерно одинаково на всех императивных языках. Но Вы же пишете о технике. В моем понимании этого слова техника программирования на, скажем, Java и С++, все-таки несколько отличается.
Ну, это как две разные школы дзюдо... Мастера вам скажут, что техники разных школ сильно отличаются. Но!...
Дзюдо все равно дзюдо. Мастер, освоивший одну из школ, прекрасно освоит и другую.
Я не об этом. Я о постановки БАЗОВОЙ техники программирования.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Как обучать технике программирования?
От: 31415926 Россия  
Дата: 19.04.10 13:52
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, 31415926, Вы писали:


3>>Здравствуйте, LaptevVV, Вы писали:


LVV>>>Не... Не для языка, а для парадигмы, скорее всего. Функциональное программирование сильно отличается от императивного. А все языки императивного программирования — очень похожи.


3>>Похожесть не отменяет необходимости учиться грамотно использовать на конкретный язык. Очень хорошо об этом пишет J. Bloch в предисловии к Effective Java.

3>>Хотя оно конечно, вычисление факториала выглядит примерно одинаково на всех императивных языках. Но Вы же пишете о технике. В моем понимании этого слова техника программирования на, скажем, Java и С++, все-таки несколько отличается.
LVV>Ну, это как две разные школы дзюдо... Мастера вам скажут, что техники разных школ сильно отличаются. Но!...
LVV>Дзюдо все равно дзюдо. Мастер, освоивший одну из школ, прекрасно освоит и другую.
LVV>Я не об этом. Я о постановки БАЗОВОЙ техники программирования.

Не очень понимаю, что Вы имеете в виду. Однако, следуя Вашей аналогии — мастерами дзюдо становятся, нсколько я понимаю, в рамках изучения какой-то конкретной школы. Так и с программированием — я плохо себе представляю, как можно приобрести хоть какую-нибудь технику без серьезной практики в каком-то конкретном языке. По-моему, с этого и надо начинать. Другое дело, что знания одного языка явно недостаточно для того чтобы считаться профессиональным программистом.
Re[6]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 14:09
Оценка:
Здравствуйте, 31415926, Вы писали:

LVV>>Я не об этом. Я о постановки БАЗОВОЙ техники программирования.


3>Не очень понимаю, что Вы имеете в виду. Однако, следуя Вашей аналогии — мастерами дзюдо становятся, нсколько я понимаю, в рамках изучения какой-то конкретной школы. Так и с программированием — я плохо себе представляю, как можно приобрести хоть какую-нибудь технику без серьезной практики в каком-то конкретном языке. По-моему, с этого и надо начинать. Другое дело, что знания одного языка явно недостаточно для того чтобы считаться профессиональным программистом.

Тогда здесь возникает очень хороший вопрос. Базовая техника — самое важное, что должно быть "поставлено" у будущего программера. Тогда язык для постановки базовой техники должен быть максимально "очищен" от всякого рода "фенечек", свойственных именно ЭТОМУ языку, и не имеющих отношения к базовой технике... То есть мы приходим к тому, что язык для постановки базовой техники должен быть минимизирован.
И тогда вопрос: а какой тогда должен быть язык для постановки базовой техники...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Как обучать технике программирования?
От: denisko http://sdeniskos.blogspot.com/
Дата: 19.04.10 14:13
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Цель — учить так, чтобы получался профи, а не любитель. Который по производительности и по качеству производимого программного продукта на порядок лучше любителя.

Их надо ...бать(с). Если у тебя есть в запасе 7 лет, из которых 4 ты будешь ставить исключительно базовую технику, причем в бешенном ритме, получишь человека, который пишет на порядок лучше любителя, только кроме писать он ничего больше не сможет.

LVV>Не... Не для языка, а для парадигмы, скорее всего. Функциональное программирование сильно отличается от императивного. А все языки императивного программирования — очень похожи.

Есть различный сахар, котороый сильно влияет на стиль.
<Подпись удалена модератором>
Re[7]: Как обучать технике программирования?
От: 31415926 Россия  
Дата: 19.04.10 14:26
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, 31415926, Вы писали:


LVV>>>Я не об этом. Я о постановки БАЗОВОЙ техники программирования.


3>>Не очень понимаю, что Вы имеете в виду. Однако, следуя Вашей аналогии — мастерами дзюдо становятся, нсколько я понимаю, в рамках изучения какой-то конкретной школы. Так и с программированием — я плохо себе представляю, как можно приобрести хоть какую-нибудь технику без серьезной практики в каком-то конкретном языке. По-моему, с этого и надо начинать. Другое дело, что знания одного языка явно недостаточно для того чтобы считаться профессиональным программистом.

LVV>Тогда здесь возникает очень хороший вопрос. Базовая техника — самое важное, что должно быть "поставлено" у будущего программера. Тогда язык для постановки базовой техники должен быть максимально "очищен" от всякого рода "фенечек", свойственных именно ЭТОМУ языку, и не имеющих отношения к базовой технике... То есть мы приходим к тому, что язык для постановки базовой техники должен быть минимизирован.
LVV>И тогда вопрос: а какой тогда должен быть язык для постановки базовой техники...

Мне это проблема представляется надуманной. Согласитесь, что как-то странно сначала учить технике на примере какого-то специального языка. Собственно зачем? Чтобы потом человек хорошо программировал в реальной жизни уже на реальном языке? Так не проще ли (и практичней) оттачивать технику на "боевом" языке. Да, у этого языка будут недостатки, зато это реальный язык, которым (с переменным успехом) пользуются миллионы программистов. Уверен, что при изучении последующих языков упомянутые "фенечки" серьезной проблемы не составят. Наоборот, могут, при вдумчивом подходе, помочь понять, какие есть особенности у нового языка. А если техника отрабатывалась на искусственно стерилизованном примере, то проблемы реального мира будут неким "культурным шоком".
Другое дело, что, по возможности стоит объяснять человеку, что какие-то конкретные вещи — результат ошибок дизайна. Ну и язык стоит выбирать не ударясь в экзотику. Как мне кажется, востребованность языка — вполне разумный критерий.
Re[3]: Как обучать технике программирования?
От: Шахтер Интернет  
Дата: 19.04.10 14:47
Оценка: +1 -1
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Sharov, Вы писали:


LVV>>>Что следует понимать под техникой программирования и как ее надо "ставить"?

S>>Полностью с Вами согласен. Самого посещали неоднократно такие мысли. Как мне кажется, существует техника, например, параллельного программирования, техника написания программ в функциональном стиле (функциональное программирование) и т.д. ...
LVV>Давайте пока разговароивать о начальном обучении императивному программированию.
LVV>>>... и как ее надо "ставить"?
S>>Как в том же спорте или музыке — тренировки, тренировки и еще раз тренировки. Правда у программистов это принимает несколько иной вид — чтение соответствующей литературы и практика, потом опять чтение и т.д., пока, так сказать, не натренируешься.
LVV>Не, тут как раз совсем неясно.
LVV>Вот, например, в боксе. Там четко определены технические элементы-удары: прямой, боковой, снизу. И для каждого вида известно, в каком порядке нужно двигаться, чтобы сделать именно этот удар.
LVV>ИМХО в обучении программированию пока такого не наработано.
LVV>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):
LVV>а) полный перебор;
LVV>б) поиск по заданному условию;

Вариантов использоания циклов гораздо больше.

LVV>Для этих вариантов нужно написать шаблон цикла и сказать ученику: делай так!


Невозможно написать один шаблон. Даже вариантов использования цикла для итерирования масса.

LVV>А потом ему давать задачи на циклы и чтобы он распознавал, какого типа задача передним: перебор или поиск.


Я бы сказал, что это профанация.

LVV>Например, поиск максимума в массиве — это полный перебор.


Хороший пример.
Вот цикл, инкрементирующий элементы массива.

for(int i=0; i<len ;i++) array[i]++;


А вот для поиска максимума.

int ret=array[0];

for(int i=1; i<len ;i++) Replace_max(ret,array[i]);


Чуть-чуть но по другому получается.

LVV>Соответственно удобны две разных ФОРМЫ цикла: для перебора — for, а для поиска — while.

LVV>Остальные операторы цикла — дополнительные удобства.

LVV>И про остальные типовые задачи тоже так нужно сделать. Только я чего-то не видал подхода именно от такой печки. В учебниках изучают язык, а не технику программирования. Такого слова даже не встречается.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[5]: Как обучать технике программирования?
От: Шахтер Интернет  
Дата: 19.04.10 14:48
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, deniok, Вы писали:


D>>Здравствуйте, LaptevVV, Вы писали:


LVV>>>ИМХО в обучении программированию пока такого не наработано.

LVV>>>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):
LVV>>>а) полный перебор;
LVV>>>б) поиск по заданному условию;
LVV>>>Для этих вариантов нужно написать шаблон цикла и сказать ученику: делай так!
LVV>>>А потом ему давать задачи на циклы и чтобы он распознавал, какого типа задача передним: перебор или поиск.
LVV>>>Например, поиск максимума в массиве — это полный перебор.
LVV>>>Соответственно удобны две разных ФОРМЫ цикла: для перебора — for, а для поиска — while.
LVV>>>Остальные операторы цикла — дополнительные удобства.

D>>А можно узнать, задача вычисления факториала — это задача на перебор или на поиск?

LVV>На перебор.

А числа Фибоначчи посчитать?
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[4]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 16:55
Оценка:
Здравствуйте, Шахтер, Вы писали:

LVV>>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):

LVV>>а) полный перебор;
LVV>>б) поиск по заданному условию;
Ш>Вариантов использоания циклов гораздо больше.
Покажите тогда.
LVV>>Для этих вариантов нужно написать шаблон цикла и сказать ученику: делай так!
Ш>Невозможно написать один шаблон. Даже вариантов использования цикла для итерирования масса.
LVV>>А потом ему давать задачи на циклы и чтобы он распознавал, какого типа задача передним: перебор или поиск.
Ш>Я бы сказал, что это профанация.
LVV>>Например, поиск максимума в массиве — это полный перебор.
Ш>Хороший пример.
Ш>Вот цикл, инкрементирующий элементы массива.
Ш>
Ш>for(int i=0; i<len ;i++) array[i]++;
Ш>

Это полный перебор.
Ш>А вот для поиска максимума.
Ш>
Ш>int ret=array[0];
Ш>for(int i=1; i<len ;i++) Replace_max(ret,array[i]);
Ш>

И это тоже полный перебор.
Ш>Чуть-чуть но по другому получается.
Не... Принцип-то — один. Полный перебор всех элементов. В данном случае — массива.
При вычислении факториала — элементы генерируются. Но их тоже — полный перебор до заданного значения n.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 17:00
Оценка:
Здравствуйте, Шахтер, Вы писали:

D>>>А можно узнать, задача вычисления факториала — это задача на перебор или на поиск?

LVV>>На перебор.
Ш>А числа Фибоначчи посчитать?
то же самое.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Как обучать технике программирования?
От: 31415926 Россия  
Дата: 19.04.10 17:23
Оценка: +2 -1
Здравствуйте, LaptevVV, Вы писали:

LLVV>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):

LVV>а) полный перебор;
LVV>б) поиск по заданному условию;

ИМХО — пустое словоблудие. А уж рассуждение про for и while — просто смехотвортно, извините за резкость. Я конечно понимаю, что хочется придать наукообразие, но не нужно превращать все в фарс. Насколько я понял, В.Ф. Ткачев — физик, и программирование для него — это программирование вычислений, что является весьма специфической деятельностью (хотя, бесспорно, весьма полезной). Не думаю, что идеи автора пассажа

Уникальное сочетание свойств делает языки семейства Oberon идеальной платформой для разработки алгоритмов для научно-технических расчетов, а также для систематического обучения программированию.


следует как-то учитывать при решении вопроса о том, как учить профессии программиста.
Re[4]: Как обучать технике программирования?
От: LaptevVV Россия  
Дата: 19.04.10 17:37
Оценка:
Здравствуйте, 31415926, Вы писали:

3>Здравствуйте, LaptevVV, Вы писали:


LLVV>>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):

LVV>>а) полный перебор;
LVV>>б) поиск по заданному условию;

3>ИМХО — пустое словоблудие. А уж рассуждение про for и while — просто смехотвортно, извините за резкость. Я конечно понимаю, что хочется придать наукообразие, но не нужно превращать все в фарс. Насколько я понял, В.Ф. Ткачев — физик, и программирование для него — это программирование вычислений, что является весьма специфической деятельностью (хотя, бесспорно, весьма полезной).

Ну, Ткачев не только физик, но и препод. И обучает и школьников, и студентов. В МГУ.
Его попытка вычленить самое существенное в циклах совсем не кажется мне фарсом, а напротив, весьма полезной абстракцией.
Во всяком случае, наши первачки как-то хорошо такую постановку вопроса воспринимают.
Кроме того, Илья Ермаков пришел к тем же идеям. Он не только студентов обучает, но и сотрудников для своей конторы готовит, то есть производственник. И отнюдь не физик.
3>Не думаю, что идеи автора пассажа
3>

3>Уникальное сочетание свойств делает языки семейства Oberon идеальной платформой для разработки алгоритмов для научно-технических расчетов, а также для систематического обучения программированию.

3>следует как-то учитывать при решении вопроса о том, как учить профессии программиста.
Дело не в обероне. Дело в минимизации конструкций в языке обучения.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Как обучать технике программирования?
От: 31415926 Россия  
Дата: 19.04.10 18:00
Оценка: -1
Здравствуйте, LaptevVV, Вы писали:

LVV>Ну, Ткачев не только физик, но и препод. И обучает и школьников, и студентов. В МГУ.

LVV>Его попытка вычленить самое существенное в циклах совсем не кажется мне фарсом, а напротив, весьма полезной абстракцией.
LVV>Во всяком случае, наши первачки как-то хорошо такую постановку вопроса воспринимают.
LVV>Кроме того, Илья Ермаков пришел к тем же идеям. Он не только студентов обучает, но и сотрудников для своей конторы готовит, то есть производственник. И отнюдь не физик.

Ну — если сам Илья Ермаков.... Кстати — он кто такой? Губернатор острова Борнео? А по поводу Ваших первокурсников — легкость восприятия идеи/понятия, как известно, не является доказательством справедливости и/или полезности оных.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.