S — драйвер видеокарты не установит драйвер на принтер, значит и внтури драйвера (код) нет ничего для этого. У каждого пользователя windows свой фолдер в списке Users.
O — плагины для фотошопа, vs.
D — windows — hardware abstraction layer (HAL).
Примеры, не кода, а из головы:
S — не нужно мутить в одном классе парсинг XML, его сохранение на диск и отправку по Email.
O — Не храните рецепты в поваре. Не копируйте класс целиком если нужно создать такой же но с дополнительными полями.
L — не наследуйте пользователя от телефона, поезд от автомобиля.
I — не запихивайте в один I несвязанные контракты.
D — нужны тесты? хочешь пилить свою фичу не дожидаясь выполнения всех других? хочешь TDD? нужно написать модуль для работы с железом которого еще нет?
Понятно что нет пилюли, или лучших примеров на всех случаи. Хорошее решение сегодня, может оказаться плохим завтра.
Если вы найдете, то буду очень рад если поделитесь.
*И да, не надо пытаться применять SOLID/GRASP/GOF везде где только можно, это зачастую только усложняет код. Об этом пишут во многих книгах.
Я в книгах наоборот это редко встречаю («ООАиП» Гради Буч, «ООАиП» Крег Ларман, «Принц. пат. и мет. г.р.» Роберт Мартин, «Чистая архитектура» Роберт Мартин). Выбор между наследованием, ассоциацией, композицей и агрегацией не всегда прост, если в предметной области не сильно разбираешься.
Я не те книги возможно читаю.
Но меня тоже иногда тревожит, когда например, абстрактный класс сенсор имеет наследников на 3-4 уровня. Подобное на проде я бы и сам побоялся сделать.
Но в целом да, более гибко, по обстоятельствам короче.
И уже не важно, что я на самом деле стараюсь избегать классического наследования, предпочитая ему композицию, и проектирую свои классы и системы таким образом, чтобы от них не требовалось делать наследников.
Спасибо за статью, смотрел на подобные форумы много лет назад.
Я живу в Германии 5 лет и постоянно вижу то внимание и заботу, с которыми любые германские ведомства и коммерческие организации относятся к персональным данным.
Вы хорошо смотрели? Верится с трудом, что непробиваемые админы и БД только за пределами СНГ. Коррупция, хакеры, черный рынок — оно везде, масштабы только разные. Проблема то не в ПО, а в человеке, а как можно быть уверенным в десятках миллионах людей. Никак.
Норм.
Конторы продают zero day белым днем, а тут одну опубликовали даром. Быстрее закроют.
Теперь у большинства пользователей windows обновляется сам, так что не нужно заставлять и напоминать.
В целом считаю что лучшее что вы с этого получили это знания в процессе подготовки.
Но ничто не мешает развиваться почти также и без подготовки куда либо, а просто по фану и наличию свободного времени. Тогда и собеседования в такие компании не будут проблемой, слышал (точнее видел интервью с ними) как люди с первого раза проходили чуть ли не в любую компанию.
Сам в алгоритмах не силен, просто прочитал пару книг, и иногда напоминаю себе что и такое бывает :)
Не понимаю как можно читать больше 1-2 технических книг в месяц.
Это брошюры по 30 страниц? Как можно обрабатывать большой объем информации, если книга это от 250 до 750 страниц, и на некоторых зависаешь по минут 10.
Если бы у меня получалось понимать и запоминать то что я прочитал с первого раза, то 10 книг достаточно что бы быть чуть ли не гуру, имхо.
Информацию недостаточно просто услышать, ее нужно обдумать, на это уходит время. Я прочитал 10-25 страниц технической литературы, и все, дальше пауза. Иначе забывается о чем вообще была речь. Почти каждый вечер небольшими порциями на планшете, в тишине и покое.
Прогулка для прогулки, сон для сна, обед для обеда, это не время для чтения.
Всем хочется стать крутым за 6 месяцев прочитав 100 книг, но это вундеркинды :)
Слышал что Билл Гейтс много читает, сейчас вот погуглил его советы, и они полностью совпали с моим пониманием дела. Читаем ~1 час в день, вдумчиво, делаем заметки. Но у него 50 шт. в год, это очень и очень много. Посмотрел что именно он рекомендует, это книги от 150 до 300 страниц, не технические. Вполне реально, но все равно многовато, не мой уровень, я может 50 комиксов успею прочитать :)
Читать не размышляя, все равно, что есть и не переваривать.
Э.Борк
Естественно нейронка массив чисел быстрее не отсортирует и т.п. (сходу не могу представить даже как), а вот картинку распознает значительно быстрее поиска ближайших соседей. Это впрос к задаче «Т», что лучше использовать.
И да, я имею неосторожность не учитывать все возможные варинаты вопросов на свои комменты. Продумать ответ так что бы их даже не возникало, ошибаюсь как и все.
И нейронка это такой же алгоритм, как и любой другой, как и поход в магазин, если уж на то пошло. Выше видел что в кавычки взяли.
О чем речь вообще.
Для каждой задачи свой инструмент, используй то что удобнее и проще для тебя и твоей команды.
Задача T.
Можно решить технологией X, Y, Z.
X — сложно, дорого, не все знают, быстро работает.
Y — просто, дешево, знает половина, работает долго.
Z — средне, средне, знают все, работает средне.
Оцениваем важность каждого показателя, берем тот который набрал больше баллов. Или рисуем три кружка, подымаем голову вверх, водим ручкой в пределах этих кружков и на любимую считалку тыками на искомый вариант.
*Фишка нейронок — они очень и очень быстро решают задачи на которые обучены. Никакой алгоритм не сделает того же с подобной скоростью.
Парсим все фото из сети с геотегами. Где больше фото, там и нужно ходить.
Парсим все форумы где фотают/обсуждают красивые места и т.п., на что больше ссылаются то и посещаем.
Места которые нужно обходить можно искать также.
Нейронка по фото может определять наличие нежелательных элементов.
Маршруты должны проходить мимо кафе, общественных остановок, метро и т.п.
SRP — не мешаем в одном месте работу разных по возможностям и уровням доступа пользователей. У которых разные желания и разные причины для изменения.
OCP — то что часто меняется или добавляется выносим наружу, внутрь это дело прокидываем как стратегию/шаблон. Например, повар и рецепты которые он выполняет лучше хранить и развивать отдельно, навигатор и алгоритм расчета пути из точки А в точку Б.
LSP — производный класс при привидении его к базому должен вести себя как базовый класс.
ISP — не пытаемся засунуть все в один интерфейс, на то и позволена множественная реализация.
DIP — если у вас есть зависимость от внешнего типа, и вам хочется писать тесты, и вы хотите иметь возможность менять реализации внося минимум изменений — инвертируйте зависимость. Пусть не она говорит вам что она хочет и делает, а вы сообщаете ей чего желалете иметь.
То то мой Испанский не забылся полностью за 2 года простоя, а «свежие» Английские слова заученные в других аппах (линго, мемрайз) не держатся и пары месяцев.
Еще заметил что хорошо помогают картинки, я даже не слово вспоминаю а картинку, и уже через нее фразу. Об этом говорит еще и полиглот Дмитрий Петров, как у детей, учишь название чего либо и сразу смотришь на это.
S — драйвер видеокарты не установит драйвер на принтер, значит и внтури драйвера (код) нет ничего для этого. У каждого пользователя windows свой фолдер в списке Users.
O — плагины для фотошопа, vs.
D — windows — hardware abstraction layer (HAL).
S — не нужно мутить в одном классе парсинг XML, его сохранение на диск и отправку по Email.
O — Не храните рецепты в поваре. Не копируйте класс целиком если нужно создать такой же но с дополнительными полями.
L — не наследуйте пользователя от телефона, поезд от автомобиля.
I — не запихивайте в один I несвязанные контракты.
D — нужны тесты? хочешь пилить свою фичу не дожидаясь выполнения всех других? хочешь TDD? нужно написать модуль для работы с железом которого еще нет?
Понятно что нет пилюли, или лучших примеров на всех случаи. Хорошее решение сегодня, может оказаться плохим завтра.
Если вы найдете, то буду очень рад если поделитесь.
*И да, не надо пытаться применять SOLID/GRASP/GOF везде где только можно, это зачастую только усложняет код. Об этом пишут во многих книгах.
…
Объектно-ориентированное программирование… 1966 год.… привело к открытию полиморфизма -> Инверсия зависимости (D).
Источник
Смотрел недавно видео интерьвю на youtube, тоже парень из гугла, и тоже рассказал как проводит собеседования. Многое совпало :)
В целом с подходом понятно, и нормально.
Я не те книги возможно читаю.
Но меня тоже иногда тревожит, когда например, абстрактный класс сенсор имеет наследников на 3-4 уровня. Подобное на проде я бы и сам побоялся сделать.
Но в целом да, более гибко, по обстоятельствам короче.
Почему так?
Вы хорошо смотрели? Верится с трудом, что непробиваемые админы и БД только за пределами СНГ. Коррупция, хакеры, черный рынок — оно везде, масштабы только разные. Проблема то не в ПО, а в человеке, а как можно быть уверенным в десятках миллионах людей. Никак.
Сам удаленку воспринимаю положительно, это круто, с самодисциплиной все ок.
Но плюсы офиса и личного присутствия пока перевешивают, растешь быстрее.
Конторы продают zero day белым днем, а тут одну опубликовали даром. Быстрее закроют.
Теперь у большинства пользователей windows обновляется сам, так что не нужно заставлять и напоминать.
В целом считаю что лучшее что вы с этого получили это знания в процессе подготовки.
Но ничто не мешает развиваться почти также и без подготовки куда либо, а просто по фану и наличию свободного времени. Тогда и собеседования в такие компании не будут проблемой, слышал (точнее видел интервью с ними) как люди с первого раза проходили чуть ли не в любую компанию.
Сам в алгоритмах не силен, просто прочитал пару книг, и иногда напоминаю себе что и такое бывает :)
Это брошюры по 30 страниц? Как можно обрабатывать большой объем информации, если книга это от 250 до 750 страниц, и на некоторых зависаешь по минут 10.
Если бы у меня получалось понимать и запоминать то что я прочитал с первого раза, то 10 книг достаточно что бы быть чуть ли не гуру, имхо.
Информацию недостаточно просто услышать, ее нужно обдумать, на это уходит время. Я прочитал 10-25 страниц технической литературы, и все, дальше пауза. Иначе забывается о чем вообще была речь. Почти каждый вечер небольшими порциями на планшете, в тишине и покое.
Прогулка для прогулки, сон для сна, обед для обеда, это не время для чтения.
Всем хочется стать крутым за 6 месяцев прочитав 100 книг, но это вундеркинды :)
Слышал что Билл Гейтс много читает, сейчас вот погуглил его советы, и они полностью совпали с моим пониманием дела. Читаем ~1 час в день, вдумчиво, делаем заметки. Но у него 50 шт. в год, это очень и очень много. Посмотрел что именно он рекомендует, это книги от 150 до 300 страниц, не технические. Вполне реально, но все равно многовато, не мой уровень, я может 50 комиксов успею прочитать :)
Но дома переделал свое место под стоячее, доволен, нравится.
Естественно нейронка массив чисел быстрее не отсортирует и т.п. (сходу не могу представить даже как), а вот картинку распознает значительно быстрее поиска ближайших соседей. Это впрос к задаче «Т», что лучше использовать.
И да, я имею неосторожность не учитывать все возможные варинаты вопросов на свои комменты. Продумать ответ так что бы их даже не возникало, ошибаюсь как и все.
И нейронка это такой же алгоритм, как и любой другой, как и поход в магазин, если уж на то пошло. Выше видел что в кавычки взяли.
Для каждой задачи свой инструмент, используй то что удобнее и проще для тебя и твоей команды.
Задача T.
Можно решить технологией X, Y, Z.
X — сложно, дорого, не все знают, быстро работает.
Y — просто, дешево, знает половина, работает долго.
Z — средне, средне, знают все, работает средне.
Оцениваем важность каждого показателя, берем тот который набрал больше баллов. Или рисуем три кружка, подымаем голову вверх, водим ручкой в пределах этих кружков и на любимую считалку тыками на искомый вариант.
*Фишка нейронок — они очень и очень быстро решают задачи на которые обучены. Никакой алгоритм не сделает того же с подобной скоростью.
Парсим все фото из сети с геотегами. Где больше фото, там и нужно ходить.
Парсим все форумы где фотают/обсуждают красивые места и т.п., на что больше ссылаются то и посещаем.
Места которые нужно обходить можно искать также.
Нейронка по фото может определять наличие нежелательных элементов.
Маршруты должны проходить мимо кафе, общественных остановок, метро и т.п.
Спасибо, запишу это себе как новую цитату :)
В тему еще будет это 57й подкаст Solo На .Net — Нытьё Картавого Пенсионера
И это Russian Mafia in LA. Оффициант на Ламборгини.
SRP — не мешаем в одном месте работу разных по возможностям и уровням доступа пользователей. У которых разные желания и разные причины для изменения.
OCP — то что часто меняется или добавляется выносим наружу, внутрь это дело прокидываем как стратегию/шаблон. Например, повар и рецепты которые он выполняет лучше хранить и развивать отдельно, навигатор и алгоритм расчета пути из точки А в точку Б.
LSP — производный класс при привидении его к базому должен вести себя как базовый класс.
ISP — не пытаемся засунуть все в один интерфейс, на то и позволена множественная реализация.
DIP — если у вас есть зависимость от внешнего типа, и вам хочется писать тесты, и вы хотите иметь возможность менять реализации внося минимум изменений — инвертируйте зависимость. Пусть не она говорит вам что она хочет и делает, а вы сообщаете ей чего желалете иметь.
То то мой Испанский не забылся полностью за 2 года простоя, а «свежие» Английские слова заученные в других аппах (линго, мемрайз) не держатся и пары месяцев.
Еще заметил что хорошо помогают картинки, я даже не слово вспоминаю а картинку, и уже через нее фразу. Об этом говорит еще и полиглот Дмитрий Петров, как у детей, учишь название чего либо и сразу смотришь на это.