Тема: Обязательно ли хорошее знание ООП, чтобы найти работу?

Знаю много языков и технологий, сделал много проектов, но про ООП знаю только основы, типа того, что бывают методы и свойства, а вот нюансы, связанные с перегрузкой методов недоступны для моего понимания. На собеседовании пару лет назад мне дали тест, где вопросы были в основном по ООП. Подозреваю, что в случае поиска работы мне придется вникать в ООП, иначе будет ОЧЕНЬ сложно найти что-то хорошее. В связи с этим вопрос, в основном к тем, кто проводит собеседования или недавно проходил оное:

Какие у меня шансы найти хорошую работу, если я могу решить задачу любой сложности в сфере бизнеса, но совсем плохо знаю ООП?

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Если вы знаете C и сильный алгоритмист - пришлите резюме на Softeq. Наша тема - firmware, людей сейчас берём.

3

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Если известные языки были неООП, то в чем проблема? А если все же ООП, то непонимание принципов ООП и опыт в таком языке смотрится как минимум странно.

4

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Скорее всего, шансы низкие. Не потому, что ООП так жизненно необходимо при программированиии, а потому что это модное слово, и его очень любят спрашивать на собеседованиях.

5

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Да ладно, модное слово. ООП - это одна из наиболее распространненных моделей, и если человек реализовывал проекты на ОО языках без понимания самой сути этой модели, значит он реализовывал их не оптимальным образом, или на интуитивном уровне. В любом случае ознаокомиться с общепринятой терминологией имеет смысл, дабы говорить со всеми на одном языке ну и не изобретать велосипеды.

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Come-from-Beyond пишет:

Какие у меня шансы найти хорошую работу, если я могу решить задачу любой сложности в сфере бизнеса, но совсем плохо знаю ООП?

Вы бы написали что для вас хорошая работа и какие языки вы знаете.

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

agentcooper пишет:

Если вы знаете C и сильный алгоритмист - пришлите резюме на Softeq. Наша тема - firmware, людей сейчас берём.

Спасибо, но я до осени на контракте, с которого не соскочить.

Dziman пишет:

А если все же ООП, то непонимание принципов ООП и опыт в таком языке смотрится как минимум странно.

lucker пишет:

...значит он реализовывал их не оптимальным образом, или на интуитивном уровне.

Языки ООП, но понимание на интуитивном уровне.

Tanheiser пишет:

Вы бы написали что для вас хорошая работа и какие языки вы знаете.

Хорошая работа - это интересная и творческая работа с ЗП от 4 млн.
Языки: Assembler, Basic, HTML, Java (J2EE, J2ME, J2SE), Pascal, SQL, Visual C++, Visual C#.

Отредактировано Come-from-Beyond (12 марта 2010 16:54)

8

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Come-from-Beyond пишет:

Языки ООП, но понимание на интуитивном уровне.

Что значит на интуитивном уровне?
P.S. Распределение?

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Dziman пишет:

Что значит на интуитивном уровне?
P.S. Распределение?

Делаю по аналогии с чужим кодом. Постепенно вырабатываются шаблоны кода, который я не могу объяснить, но могу использовать.
PS: Не распределение. Я на этой фирме 8 лет работаю, до завершения контракта меня не отпустят, а высокая лояльность не позволит действовать в обход закона.

10

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Come-from-Beyond пишет:

Делаю по аналогии с чужим кодом. Постепенно вырабатываются шаблоны кода, который я не могу объяснить, но могу использовать.
PS: Не распределение. Я на этой фирме 8 лет работаю, до завершения контракта меня не отпустят, а высокая лояльность не позволит действовать в обход закона.

Ясно. Мне кажется что с текущими знаниями трудно будет найти желаемую работу: на мой взгляд бездумное поведение по аналогии очень опасно в нормальном проекте. Лично я бы никогда не взял такого человека. Тем более что за 8 лет он не собрался и разобрался как и почему все работает.
Все это относится к кандидату на роль программиста. Вполне вероятно, что БА или смежное что-нибудь более правильная специальность, если "я могу решить задачу любой сложности в сфере бизнеса"

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Dziman пишет:

Ясно. Мне кажется что с текущими знаниями трудно будет найти желаемую работу: на мой взгляд бездумное поведение по аналогии очень опасно в нормальном проекте. Лично я бы никогда не взял такого человека. Тем более что за 8 лет он не собрался и разобрался как и почему все работает.
Все это относится к кандидату на роль программиста. Вполне вероятно, что БА или смежное что-нибудь более правильная специальность, если "я могу решить задачу любой сложности в сфере бизнеса"

Вот и я подозреваю, что без теоретической подготовки заявления типа "на моем софте работают фирмы с многомиллиардными оборотами (в BYR)" мало кого впечатлят. Спасибо за ответы, они помогли определиться чем заняться в следующие полгода.

12

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Come-from-Beyond пишет:
Tanheiser пишет:

Вы бы написали что для вас хорошая работа и какие языки вы знаете.

Хорошая работа - это интересная и творческая работа с ЗП от 4 млн.
Языки: Assembler, Basic, HTML, Java (J2EE, J2ME, J2SE), Pascal, SQL, Visual C++, Visual C#.

Думаю интересность  работы напрямую не связана со знанием ООП,
но если вы ищите просто более другую работу на Java, C++, C# то думаю ООП будут везде спрашивать,
кроме этого будут спрашивать и UML.

По скольку контракт у вас истекает не завтра, прочитайте несколько книжек  за это время.
1. В базовой книге по выбранному языку прочитайте секцию про то как реализуется ООП модель средствами данного языка. Какие есть ограничения.
2. Если ООП совсем темный лес, то можно старого доброго Гради Буча почитать. Там конечно много воды, но может быть как раз это и поможет.
3. Обязательно какую нибудь книгу по GOF Design Patterns, без этого тоже редкое интервью пройдет
4. Для J2EE сответственноо J2EE Design Patterns http://java.sun.com/blueprints/corej2ee … index.html
5. Ну и "UML в кратком изложении" от Мартина Фаулера. (Необходимый и достаточный минимум по UML для интервью)

Отредактировано Tanheiser (12 марта 2010 18:26)

13

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Да ладно, модное слово. ООП - это одна из наиболее распространненных моделей

99% кода на так называемых ОО-языках - это либо процедурное, либо модульное программирование, а значит для практического успеха в реальных проектах нужно в первую очередь хорошо разбираться в этих парадигмах, а не в объектно-ориентированных заморочках. К тому же, эти так называемые ОО-языки зачастую нарушают основополагающие принципы всей парадигмы (например, Java нарушает принцип полиморфизма, вводя отдельные классы для Reader'а и Stream'а, хотя суть их одинакова).

14

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Я это всё к тому, что литературу по ООП лучше читать именно к собеседованию, а для себя полезнее будет поизучать что-нибудь более широкого профиля.

15

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

keil пишет:

99% кода на так называемых ОО-языках - это либо процедурное, либо модульное программирование, а значит для практического успеха в реальных проектах нужно в первую очередь хорошо разбираться в этих парадигмах, а не в объектно-ориентированных заморочках.

Вот именно по тому, что люди не понимают ООП и появляется куча воняющего кода, с изобилием if-else и case, с километровыми классами и даже методами, с огромадным количеством статических мемберов и так далее.  Но если все прыгают из окна, совсем не значит что и вам нужно делать тоже самое.

keil пишет:

К тому же, эти так называемые ОО-языки зачастую нарушают основополагающие принципы всей парадигмы (например, Java нарушает принцип полиморфизма, вводя отдельные классы для Reader'а и Stream'а, хотя суть их одинакова).

 
Где нарушение полиморфизма? Нарушен принцип "Don't repeat yourself", но к ООП он имеет перпендикулярное отношение.  Конечно, сейчас можно было бы привести два калсса к одному интерфейсу, но в те времена, когда они появились еще не было генериков. А так поддержка полиморфизм встроена в язык, и она замечательно работает.

16

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Ужас, как можно писать на C++, C# и тем более Java, не понимая ООП. Может вы просто боитесь этого слова? Потому что концепция элементарная - сейчас любой студент КСиСа на 2м курсе (а кое-где на 1м) абсолютно свободно владеет этим пониманием ООП. Просто уделите некоторое время и прочитайте какую-нить элементарную книжку для начинающих, где всё доступно объяснено, и если у вас хоть что-то на плечах есть, то наверняка разберётесь - это не ассемблере писать smile
Удачи

17

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Come-from-Beyond пишет:

нюансы, связанные с перегрузкой методов недоступны для моего понимания

Come-from-Beyond пишет:

могу решить задачу любой сложности в сфере бизнеса

Как-то одно с другим не согласуется big_smile

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Come-from-Beyond пишет:

Хорошая работа - это интересная и творческая работа с ЗП от 4 млн.
Языки: Assembler, Basic, HTML, Java (J2EE, J2ME, J2SE), Pascal, SQL, Visual C++, Visual C#.

"- в чём вы работаете? - во вьёрде"

"высококвалифицированный специалист широкого профиля"...
зарплату от 4 млн...

по-моему в нашей стране можно найти людей, которые считают, что им должны давать деньги вообще за просто так

P.S.: типичный студент 2-го курса знает определение ООП, и написал 15 простых примеров с использованием ООП.
но он всё ещё не знает ООП

Отредактировано rilley_elf (13 марта 2010 15:29)

19

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Вот именно по тому, что люди не понимают ООП и появляется куча воняющего кода, с изобилием if-else и case, с километровыми классами и даже методами, с огромадным количеством статических мемберов и так далее.  Но если все прыгают из окна, совсем не значит что и вам нужно делать тоже самое.

Можете привести пример?

lucker пишет:

Где нарушение полиморфизма? Нарушен принцип "Don't repeat yourself", но к ООП он имеет перпендикулярное отношение.

Смысл полиморфизма то в чём? Не в том ли, чтобы можно было в одну процедуру передавать множество различных типов? Захотели - передали список, захотели - файл, захотели - строку. Со всеми ними можно обращаться одинаково, полиморфно. И, нет, полиморфизм тут уже не работает: вы не можете не влезая в реализацию этих классов привести их к единому интерфейсу.

20

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

keil пишет:

Можете привести пример?

Привер чего? Воняющего кода? Почитайте Мартина Фаулера "Рефакторинг", если еще этого не сделали, там очень красочно описано большинство запахов, и даже даны рецепты их устранения.

keil пишет:

Смысл полиморфизма то в чём? Не в том ли, чтобы можно было в одну процедуру передавать множество различных типов? Захотели - передали список, захотели - файл, захотели - строку. Со всеми ними можно обращаться одинаково, полиморфно. И, нет, полиморфизм тут уже не работает: вы не можете не влезая в реализацию этих классов привести их к единому интерфейсу.

Я понимаю к чему вы клоните. Да, Java язык со статической типизацией, и тип объекта нельзя расширить не имея доступ к исходному коду. Да, у этого есть плюсы и есть минусы. И нет, это не нарушаает принцип полиморфизма, и если нужно полиморфно работать со списками, файлами и строками то есть множество приемов, как это сделать.

21

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Привер чего? Воняющего кода? Почитайте Мартина Фаулера "Рефакторинг", если еще этого не сделали, там очень красочно описано большинство запахов, и даже даны рецепты их устранения.

Ну ок. Вы упоминали про if-else-case, пусть будет он. Фаулер предлагает для уменьшения количества подобных конструкций использовать полиморфизм, однако такое решение не покрывает все возможные варианты их использования. Например, вы ну никак не закодируете через полиморфизм таблицу переходов  конечного автомата. Всё, что вы можете сказать, когда видете множество одинаковых switch'ей или if-else'ов, так это то, что их можно вынести в одну какую-то процедуру, чтобы в дальнейшем можно было внести изменения только в неё. Как видите, пока что никакого ООП. Дальше вы смотрите, сводятся ли все условия к проверке одного или нескольких фиксированных критериев. Если это так, то можно воспользоваться паттерном диспетчеризации. Процедурным паттерном, который существовал за долго до появления первых ОО-языков, и который гораздо важнее для понимая, чем любой полиморфизм. Дальше вы смотрите, по скольки параметрам проходит диспетчеризация. И вот тууут, если диспетчеризация проходит только по одному параметру, вы вспоминаете, что у вас в языке уже есть механизм для этого, и называется он полиморфизм. В конце вы ещё проверяете, можете ли привести все необходимые  типы к единому интерфейсу и добавить этим типам нужный метод. Прокатило? Круто, вы использовали ООП для решения своей проблемы. Именно использовали его, оно сыграло положительную роль. Если же вы не прошли в своей голове всю эту логическую цепочку, или если не выполнилось хотя бы одно из указанный условий (диспетчеризация по нескольким параметрам, диспетчеризация не по типу, а по какому-то другому критерию, etc), то вы попадаете в просак, и начинаете бороться с языком, изобретая паттерны двойной диспетчеризации, стратегии и т.д.
Таким образом, необходимо в первую очередь знать наиболее общие и фундаментальные способы решения проблем, а затем уже отыскивать подходящие средства в своём конкретном языке программирования.

lucker пишет:

Я понимаю к чему вы клоните. Да, Java язык со статической типизацией, и тип объекта нельзя расширить не имея доступ к исходному коду. Да, у этого есть плюсы и есть минусы. И нет, это не нарушаает принцип полиморфизма, и если нужно полиморфно работать со списками, файлами и строками то есть множество приемов, как это сделать.

Хорошо, скажу по-другому: несмотря на то, что полиморфизм объявлен одним из основополагающих принципов ООП (и Java, в частности), его не только несправедливо мало используют в самом языке, но и крайне редко он встречается и в прикладных библиотеках: строка - отдельный класс, файл - отдельный класс, консольный поток символов - отдельный, список - отдельный, поток токенов - тоже отдельный. Придумали даже спеицальный итератор, чтобы бегать по структурным данным, но вот невезуха - тоже не прижился. Ну и какой смысл после этого хорошо знать ООП, если применить его негде?

22

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Вот именно по тому, что люди не понимают ООП и появляется куча воняющего кода, с изобилием if-else и case, с километровыми классами и даже методами, с огромадным количеством статических мемберов и так далее.

Чтобы разговор не ушёл не в ту сторону, ещё раз поясню: такой "воняющий" код резуьтат незнания не ООП, а всего программирования. Дейкстра вон ещё в незопамятные времена ввёл правило, что процедура не должна превышать по размеру 5 строчек, и говоря это он явно не подразумевал Java.

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Peet пишет:

Ужас, как можно писать на C++, C# и тем более Java, не понимая ООП. Может вы просто боитесь этого слова? Потому что концепция элементарная - сейчас любой студент КСиСа на 2м курсе (а кое-где на 1м) абсолютно свободно владеет этим пониманием ООП. Просто уделите некоторое время и прочитайте какую-нить элементарную книжку для начинающих, где всё доступно объяснено, и если у вас хоть что-то на плечах есть, то наверняка разберётесь - это не ассемблере писать smile
Удачи

Я понимаю ООП, но на интуитивном уровне. ООП в C++, C# и Java конечно же использую, но на уровне СоздалОбъект -> ВызвалМетод -> ПрочиталЗначенияСвойств.

alexxale пишет:

Как-то одно с другим не согласуется

Сложные задачи решаю за счет знаний и опыта, а ООП и не нужен. К примеру, текущую задачу "Позволить консультантам торгового зала обслуживать покупателей и печатать чеки со своего мобильника" решаю таким образом:
1. На компьютере с подключенным фискальным регистратором повесил программу на C#, которая с помощью HttpListener обрабатывает HTTP-запросы и на их основе печатает чеки через COM-объект драйвера фискального регистратора.
2. Java-сервлет на сервере обрабатывает HTTP-запросы на поиск товаров и ведение розничного учета в базе данных MS SQL Server 2008.
3. Java-мидлеты на мобильниках по Wi-Fi работают с сервером розничного учета и сервером, печатающим чеки.
Используется знание Ajax, SQL, J2EE, J2ME и C#. И практически никакого ООП. А задача совершенно нетривиальная, по Минску редко где увидишь место кассира без компьютера.

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

keil пишет:

Скорее всего, шансы низкие. Не потому, что ООП так жизненно необходимо при программированиии, а потому что это модное слово, и его очень любят спрашивать на собеседованиях.

ООП является "модным словом" уже около 25 лет. Давайте разберёмся, почему.

Вы говорите "человек идёт" (person.Move()), а не "движение перемещает человека" (Move(person)).
Вы говорите "птица поёт" (bird.Sing()), а не "пение выполняется птицей" (Sing(bird)).
Когда вы думаете о диспетчеризации, вы неявно подразумеваете объект Dispatcher с соответствующими методами, а не набор функций, обрабатывающих структуру DispatchingState.
И т.д.

Таким образом, ООП популярно потому, что это один из наиболее естественных для понимания человеком способов представления программы. В общем случае ООП не является наиболее эффективным программированием ни по объёму кода, ни по скорости его выполнения. Но мы выбираем ООП, потому что не все могут мыслить в терминах предикатов и писать на Prolog (и других специализированных языках программирования) smile.

Возвращаясь к "модному слову", отмечу, что из более десятка пройденных мной собеседований, вопросы по ООП задавали только в одном месте (при проведении собеседований сам я всегда спрашивал по ООП). Так что с моей точки зрения, необоснованно модными и распространенными являются вопросы не по ООП, а по паттернам GOF.

25

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Уважаемый кейл, научитесь говорить от своего лица, а то можете попасть в просак. То что вы описали - эта ваша модель построения ПО. Я же когда создаю ПО представляю его в виде множества взаимодействующих объектов. Именно объектов, а не классов, и уж тем более не процедур. Я не утверждаю, что на ООП свет клином сошелся, и для ряда задач естьболее подходящие модели. И хотя я и не вижу проблемы реализовать конечный автомат с испольщованием ООП подхода (тот же шаблон Состояние, на основе того же полиморфизма), веротяно  я этого далать не буду, потому что есть инструменты, справляющиеся с этим более ефективно.
И все равно я не пойму, с чего вы взяли, что в Java мало используется полиморфизм? Да посмотрите хотя бы на тот же  Collections Framewok, всякие парсеры, форматтеры, всякие MVC фреймворки, фреймворки создания Mock объектов для тестирования  и так далее. Да господи, а чем я говорю - везде сплошной полиморфизм. Даже есть принцип такой -  разработка через интерфейсы - при правильном следовании которому больше шансов построить стабильное, легко сопровождаемое и расширяемое приложение, а не монолит, в котором черт ногу сломит.

26

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Сложные задачи решаю за счет знаний и опыта, а ООП и не нужен. К примеру, текущую задачу "Позволить консультантам торгового зала обслуживать покупателей и печатать чеки со своего мобильника" решаю таким образом:
1. На компьютере с подключенным фискальным регистратором повесил программу на C#, которая с помощью HttpListener обрабатывает HTTP-запросы и на их основе печатает чеки через COM-объект драйвера фискального регистратора.
2. Java-сервлет на сервере обрабатывает HTTP-запросы на поиск товаров и ведение розничного учета в базе данных MS SQL Server 2008.
3. Java-мидлеты на мобильниках по Wi-Fi работают с сервером розничного учета и сервером, печатающим чеки.
Используется знание Ajax, SQL, J2EE, J2ME и C#. И практически никакого ООП. А задача совершенно нетривиальная, по Минску редко где увидишь место кассира без компьютера.


Кстати, раз уж вы решили подготовиться к будущему собеседованию, то вам очень неплохо было бы хорошо разобраться в большом количестве популярных ныне фреймворков для J2EE. Я имею в виду Spring, Struts, EJB, Hibernate, JSF etc. Возможно вы конечно их знаете, но судя по вашему описанию решения проблемы я предположил что для вас эти технологии являются малоизвестными. И да, на изучение этих фреймворков уйдёт гораздо больше времени, чем на понимание принципов ООП...

27

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Abrakadabr пишет:

Вы говорите "человек идёт" (person.Move()), а не "движение перемещает человека" (Move(person)).
Вы говорите "птица поёт" (bird.Sing()), а не "пение выполняется птицей" (Sing(bird)).

Вот раз за разом, уже надоело, чесслово. Давно в вашей программе какой-нибудь объект сам что-то делал? Часто вы птиц программируете?
Вот просто наугад открываем проект на googlecode:
http://code.google.com/p/xedy/source/br … g/gft/xedy
Классы: Field, Message, Segment... Какой из этих объектов в вашей системе будет сам что-то делать? По логике, никакой - это всё пассивные объекты, над которыми совершаются действия. Но поскольку эти действия нужно куда-то засунуть, то их засовывают прямо внутрь этих классов:
http://code.google.com/p/xedy/source/br … gment.java
Методы класса "Сегмент":
segment.clone() - "сегмент клонирует" вместо "клонировать сегмент";
segment.remove(tokens) - "сегмент удаляет токены" вместо "удалить токены из сегмента";
segment.setDate() - "сегмент устанавливает дату" вместо "установить в сегменте дату", etc.
Так что говорите о каких угодно достоинствах ООП, но только, пожалуйста, не бредьте насчёт того, что оно выражает человеческую речь.

Abrakadabr пишет:

Возвращаясь к "модному слову", отмечу, что из более десятка пройденных мной собеседований, вопросы по ООП задавали только в одном месте (при проведении собеседований сам я всегда спрашивал по ООП). Так что с моей точки зрения, необоснованно модными и распространенными являются вопросы не по ООП, а по паттернам GOF.

Паттерны банды четырёх - это как раз то, что помогает преодолеть большинство недоработок в ООП языках (чтобы не быть голословным: паттерн Синглтон - замена модуля, паттерн Стратегия - замена переменных типа "функция"). В общем-то, я о них и говорю - если вы умеете использовать фукнциональные переменные, то сможете эффективно использовать Стратегию, но если вы не знакомы с таким понятием, то вряд ли до конца осознаете его возможности.

Отредактировано keil (15 марта 2010 01:29)

28

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Я же когда создаю ПО представляю его в виде множества взаимодействующих объектов. Именно объектов, а не классов, и уж тем более не процедур.

Вот тут соглашусь: именно объектов, а не классов. Вот за что не люблю терминологию ООП, так это за то, что оно так нагло прихватизировало термин "объект", который, вообще говоря, означает любой объект системы, а не только экземпляр класса.
А процедуры нужны чтобы связывать эти объекты, как никак.

lucker пишет:

И хотя я и не вижу проблемы реализовать конечный автомат с испольщованием ООП подхода (тот же шаблон Состояние, на основе того же полиморфизма)...

Я думаю, вы согласитесь, что понятие конечного автомата куда более фундаментально и важно для понимания, чем его частная реализация в виде паттерна ООП. Так не правильнее ли сначала понять основополагающие принципы проектирования, а затем уже смотреть на то, как они реализованы в конкретных языках?

lucker пишет:

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

См. выше, про то, как этот принцип реализован для базовых джавовских классов.
Вы всё правильно говорите, и так всё могло бы быть, и даже какие то задатки в языке для этого есть, но на практике это не работает. Посмотрите на Clojure - та же JVM, но работа с коллекциями гораздо более полиморфная. Всё познаётся в сравнении, как никак.

29

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

keil пишет:

Вы всё правильно говорите, и так всё могло бы быть, и даже какие то задатки в языке для этого есть, но на практике это не работает. Посмотрите на Clojure - та же JVM, но работа с коллекциями гораздо более полиморфная. Всё познаётся в сравнении, как никак.

Не потому ли, что сам язык основан на коллекциях, точнее листах - в нем все есть лист, даже сама праграмма - это лист. Ясно что любой элемент программы полиморфен в контексте работы с листом. Такая модель языка, и мне она симпотична, но для среднестатистического человека она может быть не удобна - представлять взаимодействие объектов проще чем взаимодействие листов.  Да и опять же Clojure - функциональный язык, и я бы не стал его втягивать в разговор про ООП.
Я помню в студенчестве, у нас на кафедре была разработка - графодинамический язык, модель которого была основана на графах, и даже сама программа интерпретировалась в граф, который сама же программа могла менять в процессе выполнения. Вот это была та еще трава.   
И да, в эмпирических языках программирования нам не уйти от процедурных участков кода, как бы мы не хотели, но в ООП языках процедуры эти должны быть простыми для понимания и выражать одну мысль, а структура программы и взаимодействие ее элементов должны строиться на принципах ООП.

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Продолжайте, господа. И тогда мне не понадобится читать книги по ООП smile.

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

прийдётся

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

keil пишет:

Вот раз за разом, уже надоело, чесслово. Давно в вашей программе какой-нибудь объект сам что-то делал? Часто вы птиц программируете?

Птиц программирую нечасто. Вы увидели то, что хотели увидеть, и пропустили пример про диспетчера.
По иронии судьбы, дальше вы сами приводите пример того, как объект САМ что-то делает.

keil пишет:

Методы класса "Сегмент":
segment.clone() - "сегмент клонирует" вместо "клонировать сегмент";
segment.remove(tokens) - "сегмент удаляет токены" вместо "удалить токены из сегмента";
segment.setDate() - "сегмент устанавливает дату" вместо "установить в сегменте дату", etc.

Не убавить, не прибавить smile

keil пишет:

Так что говорите о каких угодно достоинствах ООП, но только, пожалуйста, не бредьте насчёт того, что оно выражает человеческую речь.

Судя по тональности нашей беседы, мне кажется, что вам тяжело будет изменить свою точку зрения, тем более что мы ведём речь о простых вещах.

Отредактировано Abrakadabr (15 марта 2010 12:40)

33

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Не потому ли, что сам язык основан на коллекциях, точнее листах - в нем все есть лист, даже сама праграмма - это лист. Ясно что любой элемент программы полиморфен в контексте работы с листом. Такая модель языка, и мне она симпотична, но для среднестатистического человека она может быть не удобна - представлять взаимодействие объектов проще чем взаимодействие листов.  Да и опять же Clojure - функциональный язык, и я бы не стал его втягивать в разговор про ООП.

Пфф, Common Lisp тоже на списках основан, но там всё далеко не так тотально, и работа с теми же файлами не так уж отличается от таковой в других языках.
С другой стороны, в Python (найдёте более ООП-изированный язык, чем тот, в котором действительно всё есть объект?) ширико распространены file-like объекты - объекты с единым интерфейсом считывания данных, не зависимым от первоначального источника: сокеты, потоки, собственно файлы...

34

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Ай, keil, с вамистановится скучно. Не помню что там было в Лиспе с файлами, так как дальше решения задач в академических целях я не пошел, но помню что язык в рамках его модели был весьма лаконичен,  и если чего-то  у вас не получалось делать в терминах модели языка, это не значит, что язык слабоват, просто вы не нашли как его правильно использовать или использовали не для того. То же касается и Java. Насчет питона не знаю, тесно с ним не работал, но подозреваю что типизация в нем динамическая, или как сейчас модно говорить "утинная", да и сам язык является скриптовым, что налагает на него ряд обязанностей по работе в том числе и с вводом - это должно быть максимально просто и удобно. Java  чистом виде такого вам позволить не может по ряду причин, именно по этому и появляются Groovy, Clojure и иже с ними. Но все это не дает вам права утверждать, что  в Java повсеместно нарушают принципы ООП и не используют на полную полиморфизм.  Все. Я ставлю точку, потому что дискуссия превратилась в полемику.

35

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Abrakadabr пишет:

Птиц программирую нечасто. Вы увидели то, что хотели увидеть, и пропустили пример про диспетчера.
По иронии судьбы, дальше вы сами приводите пример того, как объект САМ что-то делает.

keil пишет:

Методы класса "Сегмент":
segment.clone() - "сегмент клонирует" вместо "клонировать сегмент";
segment.remove(tokens) - "сегмент удаляет токены" вместо "удалить токены из сегмента";
segment.setDate() - "сегмент устанавливает дату" вместо "установить в сегменте дату", etc.

Не убавить, не прибавить smile

Где объект сам что-то делает? Сегмент себя клонирует? Сообщение себя пишет? Вы предсталяете этот сюжет из ужастика, когда ваше e-mail сообщение вдруг оживает и начинает посылать себя по вашему контакт-листу? Ну что за бред, честное слово...
Про диспетчер я не пропустил, а опустил, чтобы не начинать новую ветку ни о чём, но если так уж хотите, то возьмите моё описание диспетчеризации выше, пройдитесь по всем условиям и напишите решение всех этих задач с использованием ООП, а потом посмотрите, будет ли это решение более простым, чем процедурная реализация. Можете начать с переписывания на чистое красивое ООП такого куска:

ext = get_extension(filename)
parser_name = ext.upper() + 'Parser'
parser_class = getattr(myparsersmodule, parser_name)
parser = parser_class()
parser.parse(filename)

Код на Питоне, суть в диспетчеризации обработки файла нужным парсером. Покажите, как это сделать более ООПизировано.

Abrakadabr пишет:

Судя по тональности нашей беседы, мне кажется, что вам тяжело будет изменить свою точку зрения, тем более что мы ведём речь о простых вещах.

Я, в общем-то, не надеюсь, что вы измените свою, но если захотите взглянуть на объекты по-другому, то почитайте вот это.

36

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Ай, keil, с вамистановится скучно. Не помню что там было в Лиспе с файлами, так как дальше решения задач в академических целях я не пошел, но помню что язык в рамках его модели был весьма лаконичен,  и если чего-то  у вас не получалось делать в терминах модели языка, это не значит, что язык слабоват, просто вы не нашли как его правильно использовать или использовали не для того. То же касается и Java. Насчет питона не знаю, тесно с ним не работал, но подозреваю что типизация в нем динамическая, или как сейчас модно говорить "утинная", да и сам язык является скриптовым, что налагает на него ряд обязанностей по работе в том числе и с вводом - это должно быть максимально просто и удобно. Java  чистом виде такого вам позволить не может по ряду причин, именно по этому и появляются Groovy, Clojure и иже с ними. Но все это не дает вам права утверждать, что  в Java повсеместно нарушают принципы ООП и не используют на полную полиморфизм.  Все. Я ставлю точку, потому что дискуссия превратилась в полемику.

CL я никогда и не называл слабым - это было бы идиотизмом, учитывая, что язык позволяет практически всё, в том числе и достроить нужную вам работу с файлами. Про слабость Java я, в общем-то, тоже ничего не говорил, вы не уловили мысль: я считаю глупым причислять к некой парадигме язык, который не использует правила этой парадигмы на всю катушку. Как видите, ни слова ни про мощнгость языка, ни про умение его использовать.

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

keil пишет:

Где объект сам что-то делает? Сегмент себя клонирует?

Да, сегмент себя клонирует. Конструкция

segment.clone()

для вызывающего кода выглядит именно так, как будто сегмент себя клонирует.

keil пишет:

Сообщение себя пишет? Вы предсталяете этот сюжет из ужастика, когда ваше e-mail сообщение вдруг оживает и начинает посылать себя по вашему контакт-листу? Ну что за бред, честное слово...

Я не изучал приведенные вами ссылки, но вполне допускаю конструкцию

message.write(stream)

которая означает, что сообщение пишет себя в поток. Возможно, вас смущает тот факт, что вызов методов объекта всегда осуществляется извне самого объекта (принцип "Tell, Don't Ask"), и с этой точки зрения объект действительно ничего не делает сам, однако сути ООП это не меняет. Фраза "объект может выполнять действие X" означает, что интерфейс объекта содержит сигнатуру метода X.

Переписать предлагаемый вами пример можно. Количество строк кода после переписывания увеличится в несколько раз. Поэтому я ещё раз повторю написанное мной выше: в общем случае ООП не является наиболее эффективным программированием ни по объёму кода, ни по скорости его выполнения.

38

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Abrakadabr пишет:

Фраза "объект может выполнять действие X" означает, что интерфейс объекта содержит сигнатуру метода X.

Ага, вы только что ввели дополнительные условные обозначения в правила интерпретации подобной нотации, вы обозначили правила, как это читать, потому что просто так, на интуитивном уровне это непонятно. Математики тоже используют простые правила интерпретации, но никто же не утверждает, что нормальные (не связанные с этой профессией) люди разговаривают так в обычной жизни.
Другими словами, фраза  "объект может выполнять действие X" означает "интерфейс объекта содержит сигнатуру метода X", а фраза "записать сообщенеи в поток" означает "записать сообщение в поток". Чувствуете разницу?

Abrakadabr пишет:

Переписать предлагаемый вами пример можно. Количество строк кода после переписывания увеличится в несколько раз. Поэтому я ещё раз повторю написанное мной выше: в общем случае ООП не является наиболее эффективным программированием ни по объёму кода, ни по скорости его выполнения.

Самым простым и эффективным способом переписать это на Java будет использование рефлексии и того же самого алгоритма. И это тоже будет диспетчер, паттерн проектирования, который гораздо шире чем то, что принято описывать в ООП. То есть, изучая общие паттерны, вы охватываете гораздо более широкий класс проблем, чем изучая их объектно-ориентированный вариант.

Отредактировано keil (15 марта 2010 16:37)

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

keil пишет:
Abrakadabr пишет:

Фраза "объект может выполнять действие X" означает, что интерфейс объекта содержит сигнатуру метода X.

Ага, вы только что ввели дополнительные условные обозначения в правила интерпретации подобной нотации, вы обозначили правила, как это читать, потому что просто так, на интуитивном уровне это непонятно. Математики тоже используют простые правила интерпретации, но никто же не утверждает, что нормальные (не связанные с этой профессией) люди разговаривают так в обычной жизни.
Другими словами, фраза  "объект может выполнять действие X" означает "интерфейс объекта содержит сигнатуру метода X", а фраза "записать сообщенеи в поток" означает "записать сообщение в поток". Чувствуете разницу?

Вы вынудили меня объяснять то, что, наверное, понятно подавляющему большинству программистов, а теперь используете этот факт как аргумент, подтверждающий сложность объясняемой концепции? Если уж быть совсем точным, то конструкцию ООП

message.write(stream)

можно читать как "изменить (возможно) состояние объекта message вызовом метода write с параметром-объектом stream", а конструкцию процедурного программирования

write(message, stream)

как "выполнить операцию write, изменяющую (возможно) структуры данных message и stream". Определить, насколько понятной является та и другая конструкция, в нашем случае можно только путём проведения опроса с привлечением третьих лиц smile. Лично мне вторая конструкция кажется более машинно-ориентированной и более подходящей для описания алгоритмов. Если вам и вашей команде удобно использовать процедурное программирование для реализации ваших задач - то вы сделали правильный выбор.

В конечном счёте, как грамотно написано на http://ru.wikipedia.org/wiki/Парадигма_программирования, "ООП есть по сути императивное программирование, дополненное принципом инкапсуляции данных и методов в объект (принцип модульности) и наследованием (принципом повторного использования разработанного функционала)." Так что если задача хорошо решается без инкапсуляции и наследования, то их и не нужно использовать. В моей практике таких задач мало.

40

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Abrakadabr пишет:

Вы вынудили меня объяснять то, что, наверное, понятно подавляющему большинству программистов, а теперь используете этот факт как аргумент, подтверждающий сложность объясняемой концепции?

Не объяснения концепции, а сложности самой фразы. Перечитайте своё исходное сообщение: вы говорили "птица поёт", "человек идёт" - это естественные фразы, обычная каждодневная речь. И во что она превратилась? "Изменить состояние объекта message вызовом метода write с параметром-объектом stream". Пойду ка я изменю состояние своей чашки методом наливания туда жидкости с параметром кофе hmm Так вы говорите? Или всё таки "пойду налью в чашку кофе"? Если учитывать, что это не сами объекты совершают действие (мы наливаем кофе, а не кофе само наливается), то приходим к правилам русского, английского, да и любого из европейских языков - дополнение ставится после сказуемого, и никак иначе.
Ну не верите вы мне, спросите у детей, как им понятней. Не верите детям, обратитесь в математику за любым из определений сложности - вон колмогоровская сложность, например, скажет, что в вашей записи больше слов, а значит она сложнее.
В общем, оставляю это на ваше осознание. Если фраза "сообщение.написать" всё ещё кажется вам более естественной, чем "написать сообщение", то уж извините, русский язык - не моя стезя.

41

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Пишите драйверы , модули ядра - норм катит и без ООП , например на чистом C.
Хотя наврятли придется заниматься только этим , наверняка придется программировать еще и гуйню , а это уже наверняка ООП big_smile

Отредактировано rwx (13 мая 2010 22:20)

42

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Да ладно, модное слово. ООП - это одна из наиболее распространненных моделей, и если человек реализовывал проекты на ОО языках без понимания самой сути этой модели, значит он реализовывал их не оптимальным образом, или на интуитивном уровне. В любом случае ознаокомиться с общепринятой терминологией имеет смысл, дабы говорить со всеми на одном языке ну и не изобретать велосипеды.

Я более склоняюсь к тому, что с практикой теория забывается. Когдато я ее знал хорошо, и на собеседовании мог рассказать. А сейчас я знаю ООП на интуитивном уровне (так сказать набита рука). Конечно, сильно подумав я могу изложить ее, но все же проще на какой нить вопрос привести пример.

43

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Согласен. Хорошо если ты работаешь преподом и постоянно читаешь лекции, а в практике просто используешь конструкции и все. Я как то с другом пил пиво, и зашла речь о создающемся фреймворке. Друг у меня умный, теоретически подкованный, не то что я. Так оказалось что приличная часть этого фреймворка использует фичи, названия которых я давным давно забыл..., если вообще знал big_smile Для меня это как бы очевидно и логично.
Он, кстати, придерживается идеи что, на собеседовании не теоретические знания смотреть надо, а как человек решает поставленную задачу. А остальное... мозг есть, и напихать туда можно чего угодно. cool

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

ООП - зло smile

45

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

North пишет:
lucker пишет:

Да ладно, модное слово. ООП - это одна из наиболее распространненных моделей, и если человек реализовывал проекты на ОО языках без понимания самой сути этой модели, значит он реализовывал их не оптимальным образом, или на интуитивном уровне. В любом случае ознаокомиться с общепринятой терминологией имеет смысл, дабы говорить со всеми на одном языке ну и не изобретать велосипеды.

Я более склоняюсь к тому, что с практикой теория забывается. Когдато я ее знал хорошо, и на собеседовании мог рассказать. А сейчас я знаю ООП на интуитивном уровне (так сказать набита рука). Конечно, сильно подумав я могу изложить ее, но все же проще на какой нить вопрос привести пример.

Вы ещё очень молоды чтобы так говорить. Опыт работы в 2.5 года - и уже забыта теория ....
Читайте больше литературы не привязанной к определенной технологии.

46

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

Belorus пишет:

Вы ещё очень молоды чтобы так говорить. Опыт работы в 2.5 года - и уже забыта теория ....
Читайте больше литературы не привязанной к определенной технологии.

Да не то чтобы забыта... Как то более привязана уже к конкретным примерам. Когда речь идет об чем то, сразу вспоминаются конкретные примеры где это было реализовано. А напрягая мозг - уже можно вспомнить теорию. Как то так.

47

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

IMHO, ООП и структурное программирование -- подходы, которые должны использоваться на разных уровнях реализации продукта. ОО-программа является красивым отображением ОО-проекта, который получается в результате ОО-анализа задачи. Использование ООП для решения простых задач как минимум неоправдано, а скорее всего и просто невозможно. Одно дело -- реализация некой информационной системы, которая, конечно, должна выполняться путём конструирования из блоков, предоставляемых неким фреймворком. Другое дело -- программирование самих блоков фреймворка, реализация алгоритмов обработки данных. В конечном счёте, современные процессоры, на которых выполняются любые программы, плохо приспособлены к объектно-ориентированной парадигме.

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

Я хочу сказать, что было бы не совсем правильным противопоставлять ООП и структурное программирование. Эти подходы дополняют друг друга и обречены сосуществовать вместе. Их появление результат исторического развития технологии разработки программных систем. Так же, как теория относительности не отрицает законов классической механики, а лишь устанавливает границы их применимости.

На каком-то уровне детализации в элементарной задаче уже нет места категориям ООП, и нужно просто описать последовательность действий по обработке данных. Если подниматься выше этого уровня не предполагается, то, гипотетически, можно и без знания ООП обойтись. Но тем самым обречь себя на "чёрную" работу кодировщика без понимания цели этой работы.

Отредактировано R0bur (17 июля 2010 18:57)

48

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

ПОнять и разобраться в ООП от корки до корки по мойму дело нескольких дней + ньюансы языка на котором вы собираетесь работать.

Отредактировано Elendil (20 июля 2010 14:40)

Re: Обязательно ли хорошее знание ООП, чтобы найти работу?

lucker пишет:

Вот именно по тому, что люди не понимают ООП и появляется куча воняющего кода, с изобилием if-else и case, с километровыми классами и даже методами, с огромадным количеством статических мемберов и так далее.

Вы наверное имеете ввиду наличие у человека знания паттернов, а не ООП.