Здравствуйте, LaptevVV,
LVV>Практически в любой сфере деятельности (особенно в творческих профессиях) "ставят" технику. Особенно наглядно это видно у музыкантов и спортсменов. LVV>Причем, совершенно очевидно, что у профи техника "поставлена" и это их РАЗИТЕЛЬНО отличает от любителей. LVV>Что следует понимать под техникой программирования и как ее надо "ставить"?
--
Я бы определил технику программирования как свод непрерывно меняющихся правил программирования, индивидуальный для каждого программиста. IMHO, ключевые слова здесь — "непрерывно меняющиеся" и "индивидуальные".
На всех этапах обучения (лекции, практика, курсовые работы) показывал образцы применения правил программирования и оформления программ (например, громадное множество таких микро-примеров можно найти в известной книге Code Complete).
Всячески приветствовал обмен индивудуальным опытом самих студентов. В частности, очень эффективным средством достижения этого было мое отсутствие на практических занятиях, когда простешйие проблемы решались самим студентами, и только тогда, когда никто не мог с проблемой справится, ко мне приходила делегация, и я пытался им помочь.
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, LaptevVV,
LVV>>Практически в любой сфере деятельности (особенно в творческих профессиях) "ставят" технику. Особенно наглядно это видно у музыкантов и спортсменов. LVV>>Причем, совершенно очевидно, что у профи техника "поставлена" и это их РАЗИТЕЛЬНО отличает от любителей. LVV>>Что следует понимать под техникой программирования и как ее надо "ставить"? ГМ>-- ГМ>Я бы определил технику программирования как свод непрерывно меняющихся правил программирования, индивидуальный для каждого программиста. IMHO, ключевые слова здесь — "непрерывно меняющиеся" и "индивидуальные".
Это непонятно. Как это — непрерывно меняющийся? Техника, она на то и техника, что она на уровне подсознания работает. То есть постоянна.
Кроме того, например, корпоративный стандарт кодирования сразу пресекает всякое "свободное изложение". ГМ>На всех этапах обучения (лекции, практика, курсовые работы) показывал образцы применения правил программирования и оформления программ (например, громадное множество таких микро-примеров можно найти в известной книге Code Complete).
Ой, осторожно нужно к этой книжке относится... Некоторые примеры (однократный цикл, в частности) — это бред сивой кобылы. ГМ>Всячески приветствовал обмен индивудуальным опытом самих студентов. В частности, очень эффективным средством достижения этого было мое отсутствие на практических занятиях, когда простешйие проблемы решались самим студентами, и только тогда, когда никто не мог с проблемой справится, ко мне приходила делегация, и я пытался им помочь.
Ну, это само собой.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, 31415926, Вы писали:
3>Здравствуйте, LaptevVV, Вы писали:
LVV>>Ну, Ткачев не только физик, но и препод. И обучает и школьников, и студентов. В МГУ. LVV>>Его попытка вычленить самое существенное в циклах совсем не кажется мне фарсом, а напротив, весьма полезной абстракцией. LVV>>Во всяком случае, наши первачки как-то хорошо такую постановку вопроса воспринимают. LVV>>Кроме того, Илья Ермаков пришел к тем же идеям. Он не только студентов обучает, но и сотрудников для своей конторы готовит, то есть производственник. И отнюдь не физик.
3>Ну — если сам Илья Ермаков.... Кстати — он кто такой? Губернатор острова Борнео? А по поводу Ваших первокурсников — легкость восприятия идеи/понятия, как известно, не является доказательством справедливости и/или полезности оных.
Не... Принцип KISS — это практически один из главных принципов в реальном программировании. Поэтому если одна и та же конструкция сначала воспринималась трудно, а при повороте мысли стала восприниматься значительно легче — это ХОРОШИЙ поворот мысли. Не следует искать сложность там, где без нее можно обойтись. Сложность — она нас и так достанет...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, 31415926, Вы писали:
3>>Ну — если сам Илья Ермаков.... Кстати — он кто такой? Губернатор острова Борнео? А по поводу Ваших первокурсников — легкость восприятия идеи/понятия, как известно, не является доказательством справедливости и/или полезности оных. LVV>Не... Принцип KISS — это практически один из главных принципов в реальном программировании. Поэтому если одна и та же конструкция сначала воспринималась трудно, а при повороте мысли стала восприниматься значительно легче — это ХОРОШИЙ поворот мысли. Не следует искать сложность там, где без нее можно обойтись. Сложность — она нас и так достанет...
Ладно, продолжайте в том же духе.... Так все-таки — кто такой Илья Ермаков? Я нашел упоминание человеке с таким именем только в связи с бульварным изданием для "чайников". Это он для Вас авторитет?
Здравствуйте, 31415926, Вы писали:
3>Ладно, продолжайте в том же духе.... Так все-таки — кто такой Илья Ермаков? Я нашел упоминание человеке с таким именем только в связи с бульварным изданием для "чайников". Это он для Вас авторитет?
Не... Это директор ООО Метасистемы. И по совместительству — препод. В Орле работают...
Дело не в авторитете, а в рассмотрении разного опыта. Пржде, чем объявлять что-то бредом, полезно хотя бы познакомиться немного... А потом уж решать, бред это или нет...ИМХО так как-то...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, 31415926, Вы писали:
3>>Ну — если сам Илья Ермаков.... Кстати — он кто такой? Губернатор острова Борнео? А по поводу Ваших первокурсников — легкость восприятия идеи/понятия, как известно, не является доказательством справедливости и/или полезности оных. LVV>Не... Принцип KISS — это практически один из главных принципов в реальном программировании. Поэтому если одна и та же конструкция сначала воспринималась трудно, а при повороте мысли стала восприниматься значительно легче — это ХОРОШИЙ поворот мысли. Не следует искать сложность там, где без нее можно обойтись. Сложность — она нас и так достанет...
очень непонятно к какому месту ввёрнут KISS про губернатора острова Борнео
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, LaptevVV, Вы писали:
LVV>>Здравствуйте, 31415926, Вы писали:
3>>>Ну — если сам Илья Ермаков.... Кстати — он кто такой? Губернатор острова Борнео? А по поводу Ваших первокурсников — легкость восприятия идеи/понятия, как известно, не является доказательством справедливости и/или полезности оных. LVV>>Не... Принцип KISS — это практически один из главных принципов в реальном программировании. Поэтому если одна и та же конструкция сначала воспринималась трудно, а при повороте мысли стала восприниматься значительно легче — это ХОРОШИЙ поворот мысли. Не следует искать сложность там, где без нее можно обойтись. Сложность — она нас и так достанет...
К>очень непонятно к какому месту ввёрнут KISS про губернатора острова Борнео
Это не о Борнео. А о легкости восприятия...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV,
LVV>>>Практически в любой сфере деятельности (особенно в творческих профессиях) "ставят" технику. Особенно наглядно это видно у музыкантов и спортсменов. LVV>>>Причем, совершенно очевидно, что у профи техника "поставлена" и это их РАЗИТЕЛЬНО отличает от любителей. LVV>>>Что следует понимать под техникой программирования и как ее надо "ставить"? ГМ>>-- ГМ>>Я бы определил технику программирования как свод непрерывно меняющихся правил программирования, индивидуальный для каждого программиста. IMHO, ключевые слова здесь — "непрерывно меняющиеся" и "индивидуальные". LVV>Это непонятно. Как это — непрерывно меняющийся? Техника, она на то и техника, что она на уровне подсознания работает. То есть постоянна.
--
Well, предлагаю посмотреть на себя Разве Вы не видите изменения своей техники программирования с течением времени? Вы же сами пишете — "ставится", а это подразумевает процесс, действие.
Я действительно считаю, что у активно работающего программиста техника программирования меняется, он таки да продолжает обучаться. Может быть, кривая обучения становится только более пологой.
LVV>Кроме того, например, корпоративный стандарт кодирования сразу пресекает всякое "свободное изложение". ГМ>>На всех этапах обучения (лекции, практика, курсовые работы) показывал образцы применения правил программирования и оформления программ (например, громадное множество таких микро-примеров можно найти в известной книге Code Complete). LVV>Ой, осторожно нужно к этой книжке относится... Некоторые примеры (однократный цикл, в частности) — это бред сивой кобылы.
--
Вот и отлично! Попросите студентов найти и объяснить этот бред и обязательно поощряйте их за каждую найденную ошибку. Так, например, сделали мои аспиранты с моим опусом, когда я закончил активную преподавательскую работу и, по их словам, эффект был поразительным.
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, 31415926, Вы писали:
3>>Ладно, продолжайте в том же духе.... Так все-таки — кто такой Илья Ермаков? Я нашел упоминание человеке с таким именем только в связи с бульварным изданием для "чайников". Это он для Вас авторитет? LVV>Не... Это директор ООО Метасистемы. И по совместительству — препод. В Орле работают... LVV>Дело не в авторитете, а в рассмотрении разного опыта. Пржде, чем объявлять что-то бредом, полезно хотя бы познакомиться немного... А потом уж решать, бред это или нет...ИМХО так как-то...
Да я знакомлюсь, знакомлюсь — с разным опытом. Вот только программирование для меня — это профессия и тратить время на ознакомление с идеями/опытом маргиналов от ИТ нет возможности, причем не скажу, что к сожалению. Творческих Вам успехов!
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>>>Я бы определил технику программирования как свод непрерывно меняющихся правил программирования, индивидуальный для каждого программиста. IMHO, ключевые слова здесь — "непрерывно меняющиеся" и "индивидуальные". LVV>>Это непонятно. Как это — непрерывно меняющийся? Техника, она на то и техника, что она на уровне подсознания работает. То есть постоянна. ГМ>-- ГМ>Well, предлагаю посмотреть на себя Разве Вы не видите изменения своей техники программирования с течением времени? Вы же сами пишете — "ставится", а это подразумевает процесс, действие. ГМ>Я действительно считаю, что у активно работающего программиста техника программирования меняется, он таки да продолжает обучаться. Может быть, кривая обучения становится только более пологой.
Ага, понятно. Просто я под техникой имел ввиду базовую технику написания языковых конструкций, а вы смотрели ширше...
Например, ИМХО, техника написания цикла для поиска не должна меняться со временем. Раз и навсегда усвоенный шаблон сильно облегчает жизнь программиста. 1. усвоение шаблона освобождает мозги для мышления о более существенных моментах задачи-программы...
2. Шаблон заведомо правильный — ошибок не может быть... LVV>>Ой, осторожно нужно к этой книжке относится... Некоторые примеры (однократный цикл, в частности) — это бред сивой кобылы. ГМ>Вот и отлично! Попросите студентов найти и объяснить этот бред и обязательно поощряйте их за каждую найденную ошибку. Так, например, сделали мои аспиранты с моим опусом, когда я закончил активную преподавательскую работу и, по их словам, эффект был поразительным.
Хорошая мысль!
Но это — для старших. Первачки наши пока до таких книжек не доросли...
Им бы конструкции понять и усвоить...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, 31415926, Вы писали:
3>Да я знакомлюсь, знакомлюсь — с разным опытом. Вот только программирование для меня — это профессия и тратить время на ознакомление с идеями/опытом маргиналов от ИТ нет возможности, причем не скажу, что к сожалению. Творческих Вам успехов!
Ну почему ж сразу маргиналов-то. Народ давно и довольно успешно работает. И в процессе работы мигрировали с С++ в БлэкБокс... Интересно, почему у них так получилось...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, 31415926, Вы писали:
3>>Да я знакомлюсь, знакомлюсь — с разным опытом. Вот только программирование для меня — это профессия и тратить время на ознакомление с идеями/опытом маргиналов от ИТ нет возможности, причем не скажу, что к сожалению. Творческих Вам успехов! LVV>Ну почему ж сразу маргиналов-то. Народ давно и довольно успешно работает. И в процессе работы мигрировали с С++ в БлэкБокс... Интересно, почему у них так получилось...
Вы, как я понимаю, очень далеки от промышленного программирования, так что объяснять Вам, почему я считаю ребят, лабающих в Орле что-то на Обероне маргиналами — бесполезно. Кстати — а цикл event dispatcher'а (например, в X-Windows или AWT/SWT) — это перебор или поиск? Ну ладно — этот цикл бесконечный. А вот цикл, возникающий при StAX XML parsing — это что? Или (совсем простой случай) — цикл, возникающий при чтении из сокета тела HTTP-запроса/ответа?
Вообще-то, я полагаю, что при обучении прграммированию нужно как можно больше разбирать примеров, а не разводить теоретизирование вокруг вещей, и так интуитивно ясных (убежден, что если человек не понимает, что такое цикл, ему лучше поискать себя в другой профессии).
Здравствуйте, LaptevVV,
ГМ>>>>Я бы определил технику программирования как свод непрерывно меняющихся правил программирования, индивидуальный для каждого программиста. IMHO, ключевые слова здесь — "непрерывно меняющиеся" и "индивидуальные". LVV>Ага, понятно. Просто я под техникой имел ввиду базовую технику написания языковых конструкций, а вы смотрели ширше... LVV>Например, ИМХО, техника написания цикла для поиска не должна меняться со временем. Раз и навсегда усвоенный шаблон сильно облегчает жизнь программиста. 1. усвоение шаблона освобождает мозги для мышления о более существенных моментах задачи-программы... LVV>2. Шаблон заведомо правильный — ошибок не может быть...
--
Попробую привести опровергающий пример, показывающий изменение техники написания кода для того же цикла перебора элемента
Вот так может выглядеть код для начинающих
#define A_SIZE (10)
int A[ A_SIZE ];
for ( size_t i = 0 ; i < A_SIZE ; i++ ) {
...
}
А вот то же самое для STL::vector для продвинутых пользователей
std::vector< int > B;
for ( size_t i = 0 , Len = B.size() ; i < Len ; i++ ) {
...
}
А для std::list цикл будет другим, а потом мы еще расскажем о std::for_each и т.д.
LVV>>>Ой, осторожно нужно к этой книжке относится... Некоторые примеры (однократный цикл, в частности) — это бред сивой кобылы. ГМ>>Вот и отлично! Попросите студентов найти и объяснить этот бред и обязательно поощряйте их за каждую найденную ошибку. Так, например, сделали мои аспиранты с моим опусом, когда я закончил активную преподавательскую работу и, по их словам, эффект был поразительным. LVV>Но это — для старших. Первачки наши пока до таких книжек не доросли...
--
Ну, можно им и подыграть, явно сделав какую-то ошибку на занятии... Заодно определите лидеров в потоке.
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Попробую привести опровергающий пример, показывающий изменение техники написания кода для того же цикла перебора элемента ГМ>Вот так может выглядеть код для начинающих ГМ>
ГМ>А вот то же самое для STL::vector для продвинутых пользователей ГМ>
ГМ>std::vector< int > B;
ГМ>for ( size_t i = 0 , Len = B.size() ; i < Len ; i++ ) {
ГМ>...
ГМ>}
ГМ>
ГМ>А для std::list цикл будет другим, а потом мы еще расскажем о std::for_each и т.д.
Ага, понятно, что вы имеете ввиду под техникой. Выходит, сначала надо определиться с самим понятием техники...
Паттерн-то все равно для всех примеров один — полный перебор элементов последовательности...
А конкретное исполнение — возникают технические детали...
LVV>>Но это — для старших. Первачки наши пока до таких книжек не доросли... ГМ>Ну, можно им и подыграть, явно сделав какую-то ошибку на занятии... Заодно определите лидеров в потоке.
Ну, эт мы применяем время от времени...
Спасибо. Полезно для меня...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Что следует понимать под техникой программирования и как ее надо "ставить"?
Техника, это набор базовых приемов, которые специалист использует в своей деятельности.
Их обычно не много, но они видоизменяются и комбинируются в зависимости от поставленной задачи.
Посмотрите на мастеров боевых искусств и все вопросы о том, что такое техника отпадут. А потом посмотрите как тренируют новичков. Раз за разом повторение одних и тех же движений за учителем, до тех пор, пока не придёт понимание.
Примерно то же самое и в программировании.
В качестве способов обучения: наблюдение за работой мастера и попытки самостоятельно повторить. В программировании, это анализ архитектуры и программного кода, написанного профессионалами, плюс попытки сделать нечто подобное самостоятельно.
И самое главное: больше ошибок хороших и разных. За ошибки не наказывать а поощрять. Инженеры это не павловские собаки. У хорошего специалиста должен быть пытливый ум. Он не должен бояться экспериментов.
Здравствуйте, 31415926, Вы писали:
3>Вы, как я понимаю, очень далеки от промышленного программирования, так что объяснять Вам, почему я считаю ребят, лабающих в Орле что-то на Обероне маргиналами — бесполезно. Кстати — а цикл event dispatcher'а (например, в X-Windows или AWT/SWT) — это перебор или поиск? Ну ладно — этот цикл бесконечный. А вот цикл, возникающий при StAX XML parsing — это что? Или (совсем простой случай) — цикл, возникающий при чтении из сокета тела HTTP-запроса/ответа?
Цикл event dispatcher — это совсем другой уровень программистских знаний. Асинхронные события — это надо думать отдельно...
Цикл, возникающий при StAX XML parsing — зависит от целей цикла. Либо перебираете все вершины дерева, либо ищете определенную.
Wикл, возникающий при чтении из сокета тела HTTP-запроса/ответа?
while(contentLength > 0)
{
if(writer == null)
{
// Read strings
String bodyLine = in.readLine();
contentLength -= bodyLine.length() + 2;
// Find name of file
if(bodyLine.length() > 0)
{
Matcher m = fileNamePattern.matcher(bodyLine);
if(m.find())
{
fileName = m.group(1);
}
}
else if(fileName != null)
{
OutputStream stream = new FileOutputStream(fileName);
if(digestMD5 != null)
stream = new DigestOutputStream(stream, digestMD5);
writer = new OutputStreamWriter(stream, streamCharset);
}
else
throw new RuntimeException("Name of uploaded file not found");
}
Очевидно, перебор. 3>Вообще-то, я полагаю, что при обучении прграммированию нужно как можно больше разбирать примеров, а не разводить теоретизирование вокруг вещей, и так интуитивно ясных (убежден, что если человек не понимает, что такое цикл, ему лучше поискать себя в другой профессии).
Для разбора примеров нужны критерии хорошести и плохости...
Которых в настоящее время столько — сколько программистов вокруг...А должны быть
Это для вас интуитивно ясно. После стольких лет в программировании...
А пацан эту штуку первый раз видит...
Спасибо, полезное для меня.
Вот вам ссылочка:
viewtopic.php?p=46165
Может быть, обнаружите для себя что-то полезное...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Курилка, Вы писали:
LVV>>Может быть, обнаружите для себя что-то полезное... К>Это из серии "хлопок одной рукой"?
Тогда посмотрите вот сюда:
Да, вот внезапно чётко понял, с примером, что меня раздражает в досрочном выходе. Концептуально.
Вот есть процедуры:
PROCEDURE P1 (...);
BEGIN
BlockA
END P1;
PROCEDURE P2 (...);
BEGIN
BlockB
END P2;
...
Я хочу выполнить вполне безобидное преобразование — добавить в P1 и P2 в конец по операции. (Например, логирование. Да что угодно. Какое-то освобождение. Не суть.)
Скажите мне, я имею право это сделать? Если BlockA и BlockB — это нормальные блоки, то я имею право применить последовательную композицию и получить таким преобразованием новые процедуры, какие мне надо (с семантикой "сначала происходит BlockA, потом NewBlock")? Имею право? Да. Это право мне гарантировано свойствами структурных конструкций. Любой блок программы должен допускать последовательную композицию с другими блоками. И не только последовательную, но и вкладывание в объемлющие конструкции. И я не обязан изучать внутреннее устройство этого блока, если нет связей по потокам данных.
Т.е. блоки, в которых использована инструкция выхода из процедуры, являются дефектными, неполноценными, потому что не поддерживают вполне законную композицию в объемлющем блоке.
Если говорить юридически, то оказывается, что требование не использовать досрочные выходы — это не "глупая буква закона", а как раз вполне в терминах "гражданских прав", так сказать. Свобода программиста ставить EXIT-ы ограничивается в силу того, что эта свобода ограничила бы свободу других (осуществлять ЗАКОННУЮ композицию этого блока).
Технически же говоря (ну да, придираясь, но тем не менее...), это ухудшает свойства объемлющей системы в плане возможностей развития.
Мелочь? Само по себе (в отличие от циклов) — может быть, и да. Но если мы вообще принимаем инженерную культуру, как внимание к свойствам своих систем, то непонятно, почему в данном случае нам тоже ей не следовать. Внимание к мелочам — одно из качеств профессионала. Следующее из опыта, что мелочей в серьёзном деле нет...
Если вы не согласны, то, может быть, прочитаете книгу "Чистый код" Роберта Мартина?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Dufrenite, Вы писали:
LVV>>Что следует понимать под техникой программирования и как ее надо "ставить"?
D>Техника, это набор базовых приемов, которые специалист использует в своей деятельности. D>Их обычно не много, но они видоизменяются и комбинируются в зависимости от поставленной задачи. D>Посмотрите на мастеров боевых искусств и все вопросы о том, что такое техника отпадут. А потом посмотрите как тренируют новичков. Раз за разом повторение одних и тех же движений за учителем, до тех пор, пока не придёт понимание. D>Примерно то же самое и в программировании.
Не... В программировании как раз не то же самое. Хотя бы потому, что в боевых искусствах один и тот же прием — он хоть в Африке, хоть в России. А в программировании еще не выработались критерии общепризнанных приемов.
Вот например, в шахматах есть такое правило для новичков: конь на краю доски — плохо. Но гроссы его запросто нарушают. А для новичков — ПЛОХО!
Вот например, написал чел цикл:
while (true)
{ // ...if(некое условие) break;
// ...
}
Это "хороший" цикл? Или такой цикл для новичков лучше запретить? А профи могут им пользоваться, ибо понимают, что и зачем... D>В качестве способов обучения: наблюдение за работой мастера и попытки самостоятельно повторить. В программировании, это анализ архитектуры и программного кода, написанного профессионалами, плюс попытки сделать нечто подобное самостоятельно.
Да это все понятно. Только как отличить мастера от немастера... Тот же Макконелл иногда такие советы дает — хоть к стенке его ставь заа развращение малолетних!
А все потому, что критериев нет. D>И самое главное: больше ошибок хороших и разных. За ошибки не наказывать а поощрять. Инженеры это не павловские собаки. У хорошего специалиста должен быть пытливый ум. Он не должен бояться экспериментов.
А это — обучение методом проб и ошибок! В боевых искусствах — совсем не так. Там проб и ошибок нет, там сразу ставят прием правильно!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
LVV>Вот возьмем циклы. По сути есть только два варианта использования цикла (Ф.В. Ткачев):
LVV>а) полный перебор;
LVV>б) поиск по заданному условию;
LVV>Для этих вариантов нужно написать шаблон цикла и сказать ученику: делай так!
Для снижения градуса возбуждения, добавлю, что такое утверждение — только две схемы цикла — как раз для новичков, для постановки БАЗОВОЙ техники...
Это же два квантора: для любого и существует.
Сначала новичков следует научить этим самым общим схемам, а потом, естественно, можно углубляться...
По мере увеличения уровня обученности, чел научится и "конь на краю доски" применять грамотно и безболезненно...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!