Автор | Сообщение |
|
| Завсегдатай
|
|
|
Отправлено: 21.04.11 14:21. Заголовок: Отцы и дети
Первый рассказ Сын спросил, сколько времени надо, чтобы написать програму. Я подумал и ответил вопросом: - А сколько времени потребуется для уборки квартиры? Он понял, что где-то есть подвох, но не понял где и ответил : - Пол дня, может – день. Тогда я продолжил: - А сколько времени потребуется для поиска потерянной вещи? Сын ответил, что неизвестно. Тогда я сказал, что при написании программы приходится решать разные вопросы, для одних из них прогнозируемы, другие – нет. Сын нахмурился, мой ответ он понял, но он не решал его проблемы. И он опять спросил, а как же правильно запланировать время для написания программы? Я опять подумал и опять ответил вопросом: - А что ты делаешь, если утерянную вещь не находишь? Сын перебрал несколько вариантов и мы остановились на варианте, что жизнь от этого «не останавливается». Я же пояснил, что важно уметь вовремя принимать решения рубить «гордиев узел» . Сын перестал хмуриться, но ответом он не был удовлетворен. Тогда я посчитал, что он готов услышать старую истину и сказал: - Прикинь, сколько времени потребуется тебе чтобы написать такую программу. Потом умножь на два. Так ты получишь время, которое потребуется для опытного программиста. А для себя – умножай на три. Сын ушел. Он все понял, но по нему было видно, что он будет усерден и «ему-то это умножение не понадобится». Спустя три «срока» я написал этот первый рассказ. А сын закончил писать свою первую программу.
| |
|
Ответов - 13
[только новые]
|
|
|
| Завсегдатай
|
|
|
Отправлено: 21.04.11 14:23. Заголовок: Второй рассказ (Неза..
Второй рассказ (Незаконченный разговор с сыном о простом и сложном.) Мой «первый рассказ» уже благополучно удален с газеты.лв, не смотря на наличие всех точек и картинок, а я пока рискну предложить уважаемой публике свой «второй рассказ». Опять вчера с техническим вопросом пришел сын. Я его выслушал и ответил: - Если по простому сделать сложно, значит придется делать сложно, но простыми способами. В ответ в глазах сына увидел недоумение, мои слова ему показались белибердой. А мне пришлось задуматься над подходящей к этому случаю аналогией. Вскоре я продолжил: - Представь, что я попрошу тебя купить и принести из магазина тонну сахара. Тебе, само собой, такой вес не то что нести, но и поднять нельзя. Но значит ли это, что задача нерешима? Конечно нет. Для ее решения достаточно будет сто раз сходить в магазин и принести по 10 килограмм. Энтузиазма моя аналогия сыну не прибавила. Я продолжил: - Тебе кажется, что твоя проблема очень сложная, я мой рассказ очень прост? И между ними ничего общего? Он кивнул. - Хорошо, усложним задачу. Тебе некогда идти в магазин, тебе надо спешить в институт. Но и в этом случае задача разрешима (можно договориться с друзьями, договориться о доставке товара на дом, отложить задачу на позднее время...). Дроби задачу на простые этапы и решай их. Кроме того, такие применение таких методов тебе окупится сторицей. Тут я глянул на сына и закончил свой монолог: он наклонил голову над листом бумаги и, как я понял, уже вовсю «дробил» свою проблему на квадратики простых этапов. Ладно, про опасность простых сложных методов (которые люблю за элегантность) в противовес сложным простым (которые не люблю за большой обьем и примитивность) я ему расскажу в другой раз.
| |
|
|
| Завсегдатай
|
|
|
Отправлено: 21.04.11 14:24. Заголовок: Третий рассказ Вчер..
Третий рассказ Вчера снова состоялся разговор с сыном. Я видел, что его что-то переполняет какой-то свой вопрос, но начал он деликатно и издалека: - Ты в прошлый раз что-то про сложные сложности недорассказал... Я рассмеялся: - Ну ты и подлиза! Не томи душу, выкладывай, с чем пожаловал? После небольшого изображения недоумения мне был показан результат решения его сложной проблемы (аж на трех листах). Показ сопровождался рассказами, как все было непросто. Я тоже был доволен. Доволен его настроением и его упорством. Но его рассказы про «не просто» меня раззадорили и я предложил: - А давай я посмотрю твой код и прокомментирую его? А взамен дам тебе несколько строк своего кода, но ты должен будешь сказать хотя-бы что-то о его работе или назначении ? Через несколько минут наступила его очередь смотреть мой код. (Если вдруг кому станет интересно, см.здесь. (http://mnogo.times.lv/php.pdf). Наступила затяжная пауза. Выждав, я сказал: - Не мучайся. Я тоже не в состоянии его комментировать. Как и ты, вижу отдельные операции, но «за деревьями леса не разобрать». Сын ухмыльнулся: - С гугля копипастнул? - Не суди по себе, этот код я написал тогда, когда гугля еще не было Сын сочуственно поддержал: - Ну да... За это время многое вспомнить трудно! Что же делать? Как проще проще обьяснить, что бывают вещи, которые просто находятся за гранями понимания ? - Знаешь, продолжил я, тут – другое. Для одного проекта я написал код. Подобно твоему, он был длинным и понятным. Но он был неоптимальным и медленно исполнялся. Зная основы формальной логики и работая на уровне битовой обработки мне удалось сильно упростить код. (После этого я вижу в нём даже некоторую элегантность!) Зато напрочь пропала прозрачность для понимания и, как результат, возможность отлаживать и развивать такой код. - Ого, значит достаточно одной описки и ошибку обнаружить становится почти невозможно? - Да, ты уловил главное. Поэтому, пусть более медленный, неоптимальный, более обьемный, но хорошо прокомментированный код дает проекту большую живучесть. Когда сын уходил, я вдогонку спросил: - Так какой код сложнее, твой длинный или мой короткий? - Да длина тут не причём. Сложнее тот код, который сложнее для понимания. Ответ меня порадовал и он точно был взят не из Гугла.
| |
|
|
| Завсегдатай
|
настроение....: гибкое
|
|
Отправлено: 21.04.11 14:46. Заголовок: http://jpe.ru/gif/s..
| |
|
|
| Завсегдатай
|
|
|
Отправлено: 01.05.11 13:33. Заголовок: Четвертый рассказ Бе..
Четвертый рассказ Беседа с сыном про работу над ошибками. Недавно опять разговаривал с сыном о программировании и он посетовал на то, что его программа порой глючит с расчетами. Я спросил: – Как думаешь, этот глюк из-за твоей ошибки или это глюк самого компа? – Не, алгоритм прост, ошибок нет. Раз сто уже проверял, пошаговая отладка не помогла. – Ты искал те ошибки, которые знаешь. А бывают такие, о которых не догадываешься. Сын покачал головой и сказал: – Не понял. Поясни? Ладно, потратил пять минут на пояснения и еще минут через пять сын опять вернулся к разговору: – Ты был прав, переменная в таблице хранилась как текст, а я ее использовал в расчетах как число. Я продолжил: – Теперь ты готов, чтобы поговорить про работу с ошибками. Знаешь, среди айтишников бытует мнение, что «программа настолько хороша, насколько хорошо умеет обрабатывать ошибки». ... В конце нашего разговора сын задумчиво сказал: – Я как-то раньше считал, что ошибки – это плохо, что это как-бы то, чего не должно быть. А ты перевернул все по другому: не ошибок не должно быть, а должна быть продумана их обработка, их исправление... – Это как в жизни. Можно ошибку встретить (или допустить), но, разобравшись, больше «на эти грабли не наступать». Хотя в жизни все сложнее. Чаще верх берут лень и амбиции, нежелание признавать собственные ошибки. Знаешь, кому хуже от необработвнных ошибок? – Знаю ! Тем, кто любит приобретать себе «грабли» ? – Это точно. Вот такой состоялся у меня разговор с сыном. Технические детали, чтобы не утомлять читателя, я постарался из рассказа убрать. Также убрал подробности, чтобы не перегружать этот рассказ и которые, может быть, сами будут пересказаны, как отдельные байки. P.S. Вчера сын принес мне деньги. С ним расчитался заказчик за его первую программу. Сын сказал, что без моих подсказок он бы не справился и поэтому половина причитается мне.
| |
|
|
| Завсегдатай
|
настроение....: гибкое
|
|
Отправлено: 02.05.11 13:17. Заголовок: Что касается последн..
Что касается последней проблемы... В свою программстскую бытность, насытившись многочисленными ошибками ввода, я сделал и запомнил в своей личной библиотеке свлю собственную подпрограмму ввода данных. В этой подпрограмме я собрал все ошибки, на которые напоролся в практике. Например, там были такие преобразования -- запятая и точка преобразовывались в десятичную точку, буква З становилась цифрой Три, а О - нулем и т.д. Эта подпрограммка с именем input разошлась среди коллег и с успехом использовалась в самых разных программах.
| |
|
|
| Почетный Завсегдатай
|
|
|
Отправлено: 02.05.11 18:40. Заголовок: Ув.Особь! Как Я ра..
Ув.Особь! Как Я рада Вас видеть!Как буд-то машина времени перенесла нас в прошлое. Как мне нравятся Ваши рассказы "Советы программиста сыну!" Будет ли продолжение? С нетерпением жду.
| |
|
|
| Завсегдатай
|
|
|
Отправлено: 03.05.11 16:55. Заголовок: Здравствуйте! Отвечу..
Здравствуйте! Отвечу по порядку. Fell, вы правы насчет проверки ввода. Сейчас это "правило хорошего тона" в программировании, а для web-программирования это еще и суровая необходимость. Ибо большинство удачных хакерских атак были проведены через встраивание кода при заполнении форм. Таких, как например, при написание комментария на форуме. Дашенька! Спасибо за ваше хорошее отношение к этим потугам технаря изложить на бумаге размышления отца, помогающего сыну "встать на крыло". Многие переживания выразились через эти, довольно куцые и обрезанные истории. А начиналось все смешнее и тяжелее. Может быть (и это ваша "вина") про это я напишу "нулевой рассказ". Будет ли продолжение - неизвестно. Первые рассказы легли на бумагу легко, но по мере взросления становится все тяжелее отделить психологическую (рассказную) часть от сугубо технической, а это уже больше подходит для баек на профессиональных форумах. Как-то так.
| |
|
|
| Завсегдатай
|
|
|
Отправлено: 04.05.11 13:23. Заголовок: Между тем, неожиданн..
Между тем, неожиданно родился Пятый рассказ – Слушай, пап, тут такое дело... Есть данные, довольно сложным запросом вытаскиваю их из таблицы в читабельном виде. Это я сделал. Но надо их править и сохранять изменения обратно, а с этим у меня пока никак. А я в это время думал совсем о другом. Мне вспоминалисьте счастливые дни, когда солнце светило ярче, когда ухаживал за своей будущей женой, когда в нас, молодежь вкладывали душу и знания наши замечательные учителя. Все это вспомнилось потому, что теперь и сын дорос до того, чтобы кое-что рассказать и ему. Единственная трудность – это подобрать правильные аналогии. Впрочем время не ждет, я стряхнул с себя приятное наваждение и сказал: – Ты стараешься с данными работать как с тетрадкой: открыл, нашел нужное место, исправил и закрыл тетрадку. Но в твоем случае это невозможно. Сын тут же возразил: – Невозможно править и сохранять? Не может быть! – Нет, я говорил не про это, а про твои методы. Твоими методами решения не достичь. – Почему? Простые вопросы подчас оказываются самыми сложными. – Потому, что у тебе задача с нелинейным преобразованием, а ты ее решаешь как линейную. После этих слов сын заметно скис. По его виду можно было понять, что он напрасно теряет время: – И? – Представь себе идеальный почтовый ящик. В него бросить письмо можно, но через щель достать письмо обратно уже нельзя. Так и в твоем случае, ты данные получил, но тем же путем их обратно не сохранишь. Но ведь хозяин-то из почтового ящика свое письмо достанет без проблем ? Потому, что он его достает другим способом. – Ты хочешь сказать, что для сохранения данных надо писать другой запрос? – Абсолютно верно! Сын выглядел обескураженно: – Но... Но я даже не могу вытащенные данные отредактировать! Могу только просматривать! Я сделал наивное лицо и теперь уже я спросил: – Почему ? – Потому, что результат запроса не позволят редактирование! – А разве я спрашивал о твоем запросе? Я спрашивал о данных, которые тебе надо редактировать и сохранять. Сын уже не выглядел обескураженным. Он был похож скорее на охотничью собаку взявшую след: – Ты хочешь сказать, что... что результат моего запроса редактировать нельзя... редактировать надо данные, которые получены моим запросом... а редактировать данные можно в таблице... Наконец, в его глазах появилось удовлетворение: – Результат моего запроса надо сохранить во временной таблице, ее редактировать, а потом перенести данные в основную таблицу уже другим запросом? Это был не вопрос, это было утверждение. Даже больше того! Это было самоутверждение, ведь решение он опять нашел сам.
| |
|
|
| Почетный Завсегдатай
|
|
|
Отправлено: 04.05.11 13:32. Заголовок: http://jpe.ru/gif/s..
| |
|
|
| завсегдатай
|
настроение....: расположенное
|
|
Отправлено: 04.05.11 14:43. Заголовок: В этом подходе есть ..
В этом подходе есть и принципиальные ошибки, но все-равно….Браво! Надо было стать философом, а не технарём. Поскольку особь наверняка попросит огласить "ошибки", поступлю сразу в точности также, как и он поступал со своим сыном, - дам совет без ответа, -- в следующий раз, когда сын будет решать очередную задачу, или преодолевать возникшую проблему, можно ради опыта (один разок, изменяя самому себе) просто дать ему весь смысл и ход решения проблемы, чтобы он, составляя алгоритм обработки, не доказывал заодно теорему ферма, а также все оставшиеся не решенными задачи Пуанкаре..
| |
|
|
| Завсегдатай
|
|
|
Отправлено: 04.05.11 15:38. Заголовок: Спасибо за интересны..
Спасибо за интересный комментарий. Вот и вы меня побуждаете к написанию "нулевого рассказа"
| |
|
|
|
| завсегдатай
|
настроение....: расположенное
|
|
Отправлено: 04.05.11 15:56. Заголовок: Жду с интересом. И к..
Жду с интересом. И как видно по счетчику посещений, - не я один!
| |
|
|
| Завсегдатай
|
|
|
Отправлено: 05.05.11 21:25. Заголовок: Первокласник пишет: ..
Первокласник пишет: цитата: | -- в следующий раз, когда сын будет решать очередную задачу, или преодолевать возникшую проблему, можно ради опыта (один разок, изменяя самому себе) просто дать ему весь смысл и ход решения проблемы... |
| Однажды сын пришел и попросил помочь с экспортом в csv-файл. Сложность была в том, что для экспорта нужно было указывать шаблон, но файл в каждом случае мог содержать разное кол-во полей. Уточнив, что количество возможных вариантов известно и относительно невелико, я сразу дал решение. Не изящное. Но простое и прозрачное. Сын уходил от меня так, как будто его обжулили. Он ожидал, что я покажу, как изменить шаблон, или генерировать его. Я же предложил сделать необходимое количество шаблонов и переключателем (Select case) выбирать нужный. Позже, чтобы смягчить обстановку, я рассказал, как в первых ЭВМ, которые применяли для управления противозенитной стрельбой, существенно повысили быстродействие операции умножения: просто все результаты заранее рассчитали и записали в ПЗУ. Тоже, как бы некрасиво. Но тоже эффективно :)
| |
|
|
|