Здравствуйте, SE, Вы писали:
SE>научил и отбрасывать несущественный хлам.
Это, кстати, факт! Хлама было порядочно, уж чему-чему, а этому научили в ВУЗ-е на 100% Думать, анализировать и учиться я лично умел и до ВУЗ-а, даже не знал, что кому-то надо этому учиться отдельно. Впрочем я думаю, что это скорее просто красивая и расхожая фраза.
Здравствуйте, AndrewVK, Вы писали:
И>>если ты мне расшифруешь на человеческий язык, что такое LSP, то я тебе скажу, знаю я, что это такое, или нет.
AVK>Я его в этом топике уже расшифровывал — Liskov substitution principle.
я ознакомился с этим принципом. паттерном мне его назвать сложно. принцип — это более правильное определение. но это на мой взгляд, настаивать не стану. если умные дядьки считают, что это паттерн, то пусть оно так и будет. просто лично я паттерны учил по книге, в которой было описано 26 паттернов (если мне не изменяет мой склероз). принцип лисков там не был описан, потому про него не в курсе. сейчас в курсе, благодаря вам, спасибо. и тем не менее, я не могу сказать, что знание/не знание этого принципа сможет охарактеризовать уровень программиста.
Здравствуйте, olegkr, Вы писали:
M>>Ваше мнение? O>Однозначно no hire. Не портите кандидату карьеру. Таких чудес, что бы из-за забытой формулы площади круга однозначно отсеивали неплохих специалистов я не встречал. Тут ты переплюнул всех, абсолютный рекорд! Вы там чем, простите, занимаетесь? На Ajax пишете или площади люков считаете?
Ваша категоричность суждений по трём предложениям (вопросам) ни в чём не уступает категоричности автора. Точно так же: белое-чёрное, ноль-еденица.
Человек же, работник, специалист — шире и выше этого. Я сейчас не о кандидате на джодлжность, а о нанимателе.
Представьте ситуации. Компания ищет С++-ника, а приходит человек с исключительно php-бэкграундом. За отрицательный ответ на один-единственный вопрос "знаете ли С++?" работодатель _имеет_ [моральное] право (не "обязан"!) отказать. Согласны?
Теперь: в конторе круто используется буст, а кандидат, хоть и С++-ник, но кроме MFC ничего не видел. Имеет моральное право компания по одному этому критерию отказать?
Кто-то, например, не вспомнит площать круга, но минут за пятнадцать выведет её сам, но зато не сможет написать ни одного алгоритма сортировки.
Кто-то, наоборот, чудно умеет готовить алгоритмы, но пишет небрежный код.
Все мы разные. И работодатель, смотря на нас, имеет право (и должен) настраивать фильтры как ему надо, на свой страх и риск (именно это и просил автор — не слишком ли круто).
В некоей компании уже может может быть сформировавшийся сработавшийся коллектив с определёнными взглядами на мир и на профессиональную деятельность, и ничего странного, что человек без некоторых знаний может оказаться в нём (коллективе) не в своей тарелке. Позвольте это решать нанимателю и постарайтесь удержаться от оскорблений в его адрес. Ругать можно за обман, например, а не за алгоритм принятия решения.
В общем, всё вышесказанное было написано под влиянием негатива, опустившегося на уши топикстартера, и не вы один виновник всего
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, игппук, Вы писали:
И>я ознакомился с этим принципом. паттерном мне его назвать сложно.
А паттерном его никто и не называл.
И> принцип — это более правильное определение.
Он так и называется — принцип Ты с кем споришь то?
И>принцип лисков там не был описан, потому про него не в курсе.
Отож.
И> сейчас в курсе, благодаря вам, спасибо. и тем не менее, я не могу сказать, что знание/не знание этого принципа сможет охарактеризовать уровень программиста.
Программисты, они разные бывают. И задачи тоже разные. Проиллюстрирую. Когда только появлялись самолеты, паровые машины, первые ДВС и электродвигатели, и прочая машинерия времен разбега НТР, их как раз и делали по похожему принципу. Т.е. понимаем принцип действия (причем даже знания физических законов не нужно), берем эмпирически составленные справочники физ. величин и гнотовых решений, комбинируем и модифицируем это все, исходя из здравого смысла и интуиции, и получаем результат. Иногда получался неплохой результат, иногда не очень, но современную технику так уже нико не делает.
Поэтому да, пользуясь потрясающей гибкостью программных сред, превосходным запасом ресурсов, и тяжелой ситуацией с детальным анализом реальных программных систем ввиду их чудовищной сложности, вполне получается создавать коммерчески пригодные программные продукты, не отягощая голову математикой, принципами проектирования и прочей чешуйней. Особливо если нужно не что то принципиально новое, а yet another web site.
Так что каждый решает для себя сам — то ли ему достигнуть среднепотолочного уровня, а дальше просто, как советуют в соседнем топике, относится к программированию как к неизбежному злу для зарабатывания бабок, то ли реализовать свое желание покомандовать и уйти в менеджеры, то ли продолжать развиваться дальше в качестве технического специалиста. Знание теории необходимо только для последнего варианта развития событий.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, olegkr, Вы писали:
O>Впрочем я думаю, что это скорее просто красивая и расхожая фраза.
Для меня институт действительно был существенным шагом вперед. До этого в школе у меня просто не было достаточных стимулов, к сожалению. Все как-то по накатанной да само-собой, а тут вдруг пришлось поднапрячься. Конечно это было только один из множества шагов, но существенный.
Здравствуйте, AndrewVK, Вы писали:
И>>я ознакомился с этим принципом. паттерном мне его назвать сложно.
AVK>А паттерном его никто и не называл.
И>> принцип — это более правильное определение.
AVK>Он так и называется — принцип Ты с кем споришь то?
для начала разберитесь в своих же словах. я не телепат, и в мозги к вам залезть не могу. цитирую то, что мне написали вы, ранее. и после этого вы мне еще будете доказывать, что про паттерны ничего не говорили?
И>а между тем, на собеседованиях оч часто спрашивают конкретную реализацию конкретного паттерна. и вот это логично и правильно.
AVK>Ты тоже не в курсе, что такое LSP?
И>может и в курсе, а может и нет. по крайней мере эта аббревиатура мне ни о чем не говорит. мне пойти повеситься?
AVK>Нет, идти учить паттерны.
Здравствуйте, _FRED_, Вы писали:
_FR>Представьте ситуации.
Да все понятно. Удивляет то, что вопрос вообще никаким боком не относится к собственно теме разработки и по нему выносится однозначное моментальное решение.
_FR>Позвольте это решать нанимателю и постарайтесь удержаться от оскорблений в его адрес. Ругать можно за обман, например, а не за алгоритм принятия решения.
Да я и не ругал, дело их, просто очень сильно удивился.
Здравствуйте, AndrewVK, Вы писали:
AVK>продолжать развиваться дальше в качестве технического специалиста. Знание теории необходимо только для последнего варианта развития событий.
С этого момента поподробнее. Каким образом знание теорий, имеющих весьма отдаленное отношение к практике, может помочь развиться абстрактному программисту? Да и развиться куда, в каком направлении?
Здравствуйте, olegkr, Вы писали:
O>С этого момента поподробнее. Каким образом знание теорий, имеющих весьма отдаленное отношение к практике, может помочь развиться абстрактному программисту?
Думаю, тебе это объяснять бесполезно, ты для себя уже все решил.
O> Да и развиться куда, в каком направлении?
В направлении технического специалиста.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Не, это ты лучше разберись, что ты там себе навыдумывал. Или приведи цитату, где я утверждал, что LSP это паттерн.
ну естесственно, теперь я все не так понял. значит, ту последовательность высказываний, что я привел, скипнули? интересно, а собеседования вы тоже так проводите, что вас кандидат не понимает?
Здравствуйте, olegkr, Вы писали:
ГВ>>Ну вот видишь, а я это не считаю даже изменениями, не говоря об их критичности. O>Зря не считаешь. Тот же переход на ООП породил интересную проблему — программисты, давно работающие испытывали сложности с переходом. Для них не было проблемы перейти с фортрана на C, решать сложнейшие задачи, но новая объектно-ориентированная концепция просто не вписывалась в их понимание. Это была самая настоящая ломка. Частенько недавние бывшие студенты легче воспринимали ООП, чем ветераны. Это я заметил даже в России на опыте коллег, хотя у нас это было малоактуально.
Я был свидетелем этих трудностей. Сам "пропихивал" ООП где надо и не надо. Правда, большой вопрос, стоило ли это делать так рьяно, но уж что было, то было. Сейчас я, правда, уверен, что "ломки" отечественных программистов связаны были не столько с распространением ООП, сколько с разрушением СССР и сопутствующей потерей много чего. ИМХО, это был самый тяжёлый фактор.
O>Но настоящая проблема была на западе, судя по прочитанными мною статьям.
Ничего удивительного на самом деле. Новый подход к формулировке решений породил вполне естественную волну ошибок, завышенных ожиданий, разочарований и ещё много чего. Та же история повторилась с 4GL, Java, COM, Web, вебсервисами...
O>Если ты не считаешь изменение всего мировоззрения даже изменением, то я не знаю, что ты таковым считаешь. Приведи пример, пожалуйста.
Пожалуй, на сегодняшний день это появление многопроцессорных настольных компьютеров.
ГВ>>Хм. То, о чём я упомянул, применялось в самом обычном бизнес-софте: склады, бухгалтерии, биллинги, какая-то ещё хрень того же порядка. Это узкая специализация? O>У меня знакомый работает со складом и бухгалтерией. Чего-то в 1С ничего подобного он не пишет. Я писал биллинг, не очень большой, на полмиллиона абонентов. И скажу я тебе, что самая большая Ж у нас была с самописным языком по разбору логов [...].
Я тоже могу привести примеры неудачных решений. Ты спрашивал о моей специализации, я ответил.
ГВ>>Для того, чтобы не зубрить "паттерны" и массу странных слов, хотя бы. Сильно экономит время и нервы. O>Было бы интересно посмотреть пример. Вот возьмем, банальный, всем известный паттерн Abstract Factory. Как его из LSP вывести?
Очень просто. Берём операцию "создать объект по параметру selector и работать с его интерфейсом SomeClass" и последовательно устраняем упоминания реализующих типов.
public void someMethod() {
SomeClass obj; // = NULL, тут объекта ещё нет
[** ... что-то делаем в зависимости от параметра SomeSelector() ...]
obj.method(); // А вот тут obj уже не NULL
}
Исходно [**] выглядит, например, так:
switch(SomeSelector())
{
case 1: obj = new SomeClass1;
case 2: obj = new SomeClass2;
}
Плохо, что упоминаются классы реализации. Сворачиваем, убирая упоминания SomeClass1, SomeClass2 в отдельный класс:
class Factory {
public SomeClass createInstance(selector);
};
Теперь [**] выглядят так (Это — паттерн Factory):
Factory f = new Factory;
obj = f.createInstance(SomeSelector());
Лучше, на этом можно бы и остановиться. Но похоже, что нам придётся добавлять ещё какие-то классы вместо SomeClass1 и SomeClass2. И очень сильно похоже, что для этого придётся сделать ещё одну фабрику. Так что, теперь хорошо бы исключить ещё и упоминание о типе самой фабрики. Модернизируем решение в соответствии с LSP:
Теперь интерфейс Factory приезжает откуда-то извне, возможно, что это некий глобальный синглтон или, скажем, он передан параметром при создании экземпляра текущего класса. Как бы то ни было, но [**] сейчас выглядит так:
obj = factory.createInstance(SomeSelector());
Для определённости полагаем, что интерфейс Factory приезжает через параметр someMethod:
Сам экземпляр фабрики порождается где-то очень сильно в стороне.
Итак, по ходу дела получились "паттерны" Factory и Abstract Factory. Произошло это вследствие последовательного вытеснения упоминаний типов уровня реализации из использующего кода. В строгом соответствии с LSP.
Вернее сказать, LSP тут используется для проверки того, что использующий код не зависит от реализаций.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, BulatZiganshin, Вы писали:
BZ>вопрос в том, какеой процент времени ты в вузе изучал то, что пригодилось? в моём вузе то например было всего 10-20%, остальное — многочисленный хлам от матана до автокода
Трудно сказать. Без дискретки нам не давали бы ни электронику, ни базы данных. Дискретку не стали бы давать не рассказав, например, о том, что такое "матрица", о чём рассказывалось на ВМ первого курса. Без матриц не стали бы рассказывать о компьютерной графике. В свою очередь, электронику не стали бы давать, не натаскав в электротехнике. Электротехнику не стали бы давать без некоторых разделов математики — в частности, функции комплексной переменной. Формальные грамматики не стали бы читать не познакомив школяров с программированием вообще (Assembler, RPASCAL, ЕС1035) и с дискретной математикой в частности. И так далее в том же духе. Были, конечно, лабораторные на фортране, но это такие минимальные издержки, что и говорить ни к чему.
В реальной жизни больше и чаще всего пригождались только верхушки, это ежу понятно. Ну так эти ж верхушки надо было на чём-то вырастить, правильно? Это как раз и есть та самая системность образования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>В реальной жизни больше и чаще всего пригождались только верхушки, это ежу понятно. Ну так эти ж верхушки надо было на чём-то вырастить, правильно? Это как раз и есть та самая системность образования.
ты и не трахаешься наверно, поскольку не специалист в сексологии?
Здравствуйте, SE, Вы писали:
SE>Хм. А по-моему так же часто как и остальные. Вот конечные автоматы просто в каждом проекте из года в год. Может это специфика веба? Деревья тоже с завидной регулярностью встречаются. Тоже специфика? Да, это не вторые производные и не интегралы, это дискретка, но это тоже математика.
это не дискретка и вообще не математика, а CS. о существовании которой советские студенты просто не в курсе
Здравствуйте, SE, Вы писали:
SE>Здравствуйте, BulatZiganshin, Вы писали:
BZ>>вопрос в том, какеой процент времени ты в вузе изучал то, что пригодилось? в моём вузе то например было всего 10-20%, остальное — многочисленный хлам от матана до автокода
SE>Не знаю, как Геннадия, а меня ВУЗ научил прежде всего думать, анализировать, и впитывать знания, в том числе научил и отбрасывать несущественный хлам. Но даже не отбрасывать, а откладывать на потом, потому что мало ли что может понадобиться. SE>Мне кажется в этом и состоял смысл института — не в тоннах теории, а в выращивании инженерного мышления.
а крепостных в Росси порют чтобы вырастить свободных людей?
не верится мне что кто-то не умел в школе думать, а в вузе вдруг научился. по-моему, те кто в школе брал лишь трудолюием и упорством — так же учились и в вузе и так же наверно потом и работали. кто в школе был звёздным мальчиком — тот и вуз легко прошёл. вообше, эа легенда о том, что вуз не даёт знаний а просто "учит учиться" — сама по себе противоестественна. если судить по корочкам, то вузы должны давать знания. устаревшие и никому не нужные
Здравствуйте, BulatZiganshin, Вы писали:
BZ>ты и не трахаешься наверно, поскольку не специалист в сексологии?
Высказался, да?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, BulatZiganshin, Вы писали:
SE>>Хм. А по-моему так же часто как и остальные. Вот конечные автоматы просто в каждом проекте из года в год. Может это специфика веба? Деревья тоже с завидной регулярностью встречаются. Тоже специфика? Да, это не вторые производные и не интегралы, это дискретка, но это тоже математика.
BZ>это не дискретка и вообще не математика, а CS. о существовании которой советские студенты просто не в курсе
Только это всё стоит на теории графов и прочей ДМ.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Очень просто. Берём операцию "создать объект по параметру selector и работать с его интерфейсом SomeClass" и последовательно устраняем упоминания реализующих типов.
если ты будешь думать в терминах high-order functions, то жить станет гораздо проще. хотя я понимаю, "поколению ООП" это недоступно, несмотря на всю их веру в своё "умение учиться"