Marat
Хотелось бы увидеть на примере, что бы понимать нагляднее
Ну если тебе приходят данные, ты свитчем определяешь в зависимости от данных кому их передать на обработку. Лучше выделить интерфейс для работы с этими данными и циклом пройтись по потенциальным обработчика данных. Я так понял
Marat
Если данные кому то не подходят, скипать их в реализации return' ом
Andrii
class Bird { // ... double getSpeed() { switch (type) { case EUROPEAN: return getBaseSpeed(); case AFRICAN: return getBaseSpeed() - getLoadFactor() * numberOfCoconuts; case NORWEGIAN_BLUE: return (isNailed) ? 0 : getBaseSpeed(voltage); } throw new RuntimeException("Should be unreachable"); } } перейдёт в abstract class Bird { // ... abstract double getSpeed(); } class European extends Bird { double getSpeed() { return getBaseSpeed(); } } class African extends Bird { double getSpeed() { return getBaseSpeed() - getLoadFactor() * numberOfCoconuts; } } class NorwegianBlue extends Bird { double getSpeed() { return (isNailed) ? 0 : getBaseSpeed(voltage); } } // Somewhere in client code speed = bird.getSpeed(); ```
Andrey
Нет, тут больше о том, чтобы ввести классы с виртуальным методом
А когда у тебя их десятки, с "возможно будут сотни", что-то кроме magic enum может помочь?
Andrii
А когда у тебя их десятки, с "возможно будут сотни", что-то кроме magic enum может помочь?
Я голосую за алгебраичесскую теорию типов, а не за ООП. С иерархиями классов я работат не люблю, я уже говорил.
Andrii
Что за зверь такой?
Ну... подход такой в Haskell и Rust.
Andrii
Основанный на математике (и теории категорий)
Andrii
Вместо наследования у нас появля.ются типы, где каждый элемент может быть или одного типа с такими-то полями, или другого типа, с такими-то полями и т. п.
Пашок🗽
switch обычно быстрее чем полотно if'ов , и почти всегда предпочтительнее если нужно сравнивать 3+ значения
Andrii
switch обычно быстрее чем полотно if'ов , и почти всегда предпочтительнее если нужно сравнивать 3+ значения
Ну... есть нюанс — в условии может быть не только сравнение, но и полноправное условие
Andrii
Например, дерево в аглебраических типах объявится примерно так: data Tree a = Leaf a | Node (Tree a) (Tree a) что можно расшифровать примерно так: для любого типа a дерево (Tree) это или лист (Leaf) со значением типа a либо узел, который сорержит два поддерева тоже типа a каждое.
Andrey
Я голосую за алгебраичесскую теорию типов, а не за ООП. С иерархиями классов я работат не люблю, я уже говорил.
Ну если у тебя задача парсить файл карты в какой-нибудь игре, где уже 100 видов сущностей - ооп вариант хуже?
Andrii
ООП подобно кокаину, поначалу писать круто, потом не знаешь как со всего этого слезть :)
Andrii
100 различающихся сущностей, почему не 100 типов?
Andrey
100 различающихся сущностей, почему не 100 типов?
Каждая сущность отдельный класс со своей логикой.
Andrey
И какой то общей.
Andrey
Просто я не понимаю как это поддерживать в функциональном виде.
Andrii
Можно подробнее.
Вот, например, парсер CSV -- file: ch16/csv9.hs import Text.ParserCombinators.Parsec csvFile = endBy line eol line = sepBy cell (char ',') cell = quotedCell <|> many (noneOf ",\n\r") quotedCell = do char '"' content <- many quotedChar char '"' <?> "quote at end of cell" return content quotedChar = noneOf "\"" <|> try (string "\"\"" >> return '"') eol = try (string "\n\r") <|> try (string "\r\n") <|> string "\n" <|> string "\r" <?> "end of line" parseCSV :: String -> Either ParseError [[String]] parseCSV input = parse csvFile "(unknown)" input main = do c <- getContents case parse csvFile "(stdin)" c of Left e -> do putStrLn "Error parsing input:" print e Right r -> mapM_ print r
Marat
ООП подобно кокаину, поначалу писать круто, потом не знаешь как со всего этого слезть :)
ООП норм, если вместо наследования почаще композицию бы юзали
Marat
Как правило, из-за неё основная критика ооп
Andrii
Но всё равно, все эти переменные, которые можно менять где хочешь... Такая мельтешня...
Andrii
Шахматы. Файл: a2:pawn white a8:rook black - Class figure {draw, update = 0} - Class pawn : public figure - Switch (eFigureType) case pawn return new Pawn(coord, color) case...
НУ в чём проблема class Figure a = draw :: a -> IO () update :: a -> IO () data Piece = Pawn | Knight | Bishop | Rook | Queen | King data Color = White | Black data PieceOnBoard = PieceOnBoard { piece :: Piece, color :: Color } instance Figure PieceOnBoard = draw pieceOnBoard = undefined update pieceOnBoard = undefined
Andrey
Вообще, если сущностей много и планируется ещё больше и в разных местах, пора писать кодогенератор :D
Andrii
Спасибо, поразвлекаюсь как-нибудь на досуге, пока мой моск не доело ООП.
Опять же, посмотри на парсинг CSV. Там просто описывается грамматика csvFile = endBy line eol CSV файл это последователность строк (line), которая разделяется символами перевода строк (eol) и после последней строки eol обязательно (endBy) line = sepBy cell (char ',') строка в CSV файле это последовательностm ячеек (cell), разделённая символом запятая (char ',') которая на конце не нужна sepBy cell = quotedCell <|> many (noneOf ",\n\r") Ячейча это или заключена в кавычки (quotedCell) или <|> (many) много символов, среди которых не должны появляться (noneOf) ни запятая, ни переводы строк И т. д. т. е. мы строим парсинг их функций и добиваемся потрясающей выразительности
Andrii
Andrey
Зачем, если есть Haskell? Что может кодогенератор, чего не сумеет Haskell?
В пете - проблем нет. А в работе мне ещё далеко до возможности диктовать такие условия))
Andrii
Ну это другой вопрос... Плац ломом заметать, мне не надо, чтобы число, мне надо, что бы задолбались
joey
Всем дратути 😁 Алексей говорил, что у вас здесь и полезно и интересно
Oleksii
Попался мне мем про Си, но он с сексуальным подтекстом 😢
Oleksii
Зато этот можно
Максимус
Mikhail
обявязково, от тебя могут быть полезные комментарии как инсайдера с амазонов
В общем, с частью “Как собеседовать программиста” я не согласен, покрыты далеко не все важные навыки. Ну и покрытые - это не самые важные, на мой взгляд. Но опять-таки, у меня точка зрения с точки зрения больших компаний, назовем их “калифорнийского типа”. Допускаю, что в какой-то компании подобных навыков будет достаточно. По поводу “идеальное интервью” - тоже не совсем согласен, зависит от юзкейса/компании/позиции. Для ФААНГ/около-ФААНГ твои мысли вообще не подходят. Для каких-то средних компаний - возможно подойдет. В целом, какого-то универсального ответа на то, как проводить интервью - нет. Даже в ФААНГи разные интервью флоу могут быть, в зависимости от ситуации. Я понимаю, почему и как именно ФААНГи оценивают кандидатов. На самом деле, у каждого интервью (даже алгоритмического) есть своя скрытая цель. На результат влияет по большей части не конечный результат (решил/не решил), а дополнительные факторы, которые могут оцениваться в конкретном интервью (наприимер, maintainability, problesm solving, coding, etc). Ход мыслей и вопросы интервьюверу едва ли не важнее финального результата. То, что ты видишь, как кандидат 0 это лишь вершина айсберга.
Oleksii
Oleksii
Когда приходишь на собеседование:
Alexander
В общем, с частью “Как собеседовать программиста” я не согласен, покрыты далеко не все важные навыки. Ну и покрытые - это не самые важные, на мой взгляд. Но опять-таки, у меня точка зрения с точки зрения больших компаний, назовем их “калифорнийского типа”. Допускаю, что в какой-то компании подобных навыков будет достаточно. По поводу “идеальное интервью” - тоже не совсем согласен, зависит от юзкейса/компании/позиции. Для ФААНГ/около-ФААНГ твои мысли вообще не подходят. Для каких-то средних компаний - возможно подойдет. В целом, какого-то универсального ответа на то, как проводить интервью - нет. Даже в ФААНГи разные интервью флоу могут быть, в зависимости от ситуации. Я понимаю, почему и как именно ФААНГи оценивают кандидатов. На самом деле, у каждого интервью (даже алгоритмического) есть своя скрытая цель. На результат влияет по большей части не конечный результат (решил/не решил), а дополнительные факторы, которые могут оцениваться в конкретном интервью (наприимер, maintainability, problesm solving, coding, etc). Ход мыслей и вопросы интервьюверу едва ли не важнее финального результата. То, что ты видишь, как кандидат 0 это лишь вершина айсберга.
А какие самые важные, на твой взгляд?
Alexander
А ещё интересно, какие компании так бы отнес к околофанг
Mikhail
А какие самые важные, на твой взгляд?
Ну, я не хочу инсайдить откровенно уж. В целом, скажу так: cофт скиллс > хард скиллс. Хард скилы всегда можно подкачать, а вот софт скиллы обычно хрен изменишь. Ты софкусировался только на технической стороне. Если ищем в конкретную команду/конкретную позицию, то нужно ответить на два вопроса: 1. Достаточно ли технических навыков кандидата, чтобы наносить непоправимую пользу проекту? 2. Впишется ли кандидат в эту команду? Если поиск в целом, без привязки к конкретной позиции, то просто обобщаем эти вопросы. Собственно, это прям хай-левел требования. Отвечаем на оба вопроса “да” - . А как оценить - это уже другой вопрос. Плюс, не забываем, что в биг тех компаниях есть “бар рейзинг”, когда при найме ты должен руководствоваться фактом, что кандидат должен быть лучше как минимум 50% разработчиков в компании.
Mikhail
А какие самые важные, на твой взгляд?
Ну и в целом, даже если брать алгоритмы, то согласно моему опыту, кандидаты делятся на 2 большие группы: 1. Может рассказаьть, как решить задачу, но не может написать решение (problesm solving > coding) 2. Может закодить, но с трудом может объяснить рещение (либо зазубрено, либо есть проблемы с объяснением. Подвариант: бросается сразу кодить, без понимания проблемы, coding > problem solving). А нормальные кандидаты как раз где-то посередине. Только их мало.
Alexander
Спасибо, полезно. От себя хочу добавить, что собеседования в фаанг тоже очень разные. Амазон с точки зрения кандидата - один из наиболее нудных и муторных (т.к. 4 одинаковых по содержанию собеса, и только 2 по другой схеме, из которых одно походит на лилершип часть из других, что страшно напрягает). В Майкрософт процесс короче, поприятнее и поразнообразние без большого количества лидершип вопросов (в принципе релевантность информации от таких вопросов сомнительна) В других компаниях другие подходы, и конечно многое определяется такими факторами, как: 1) как много потециальных кандидатов на вход 2) как срочно из надо нанять 3) какая культура в компании .... (Список бесконечный)
Mikhail
Спасибо, полезно. От себя хочу добавить, что собеседования в фаанг тоже очень разные. Амазон с точки зрения кандидата - один из наиболее нудных и муторных (т.к. 4 одинаковых по содержанию собеса, и только 2 по другой схеме, из которых одно походит на лилершип часть из других, что страшно напрягает). В Майкрософт процесс короче, поприятнее и поразнообразние без большого количества лидершип вопросов (в принципе релевантность информации от таких вопросов сомнительна) В других компаниях другие подходы, и конечно многое определяется такими факторами, как: 1) как много потециальных кандидатов на вход 2) как срочно из надо нанять 3) какая культура в компании .... (Список бесконечный)
Кстати, по секрету, Амазоновские собеседования совсем не одинаковые, и каждый покрывает что-то свое, даже если для кандидата выглядят одинаково ;D Как и лидершип принципы - это супер фреймворк по оценке софт скиллов. У гугла есть Googliness, который в чем-то похож по структуре (правда, оцениваются по разному). У FB по большей части своровано с Google со своими особенностями. По поводу списка - естественно. В биг-тех компаниях тебя просто не нанимают на конкретную позицию чаще всего, тебя нанимают в целом в компанию, поэтому никто не знает, какова будет твоя day-to-day routine, соответственно твой комментарий сразу мимо 😉
Mikhail
В гугл алгоритмы спрашивают
Не понял к чему это, но хорошо.
Mikhail
Просто к слову)
Я в курсе, я проходил весь цикл дважды ;D
Mikhail
Тяжка?
Не особо. При доле удачи и хорошей подготовке проходится достаточно легко. Первый раз на хайринг комитете отвалился, второй раз до оффера дошли.
DrSens
Ребят кто здесь за unity шарит, можете подсказать какие основы нужно знать в с# и сколько у вас примерно ушло времени на язык.
DrSens
А какие стартовые данные то
Нууу с нуля. Ничем не занимался связанным с it
DrSens
Если вы про это
DrSens
А цель?
Игры делать.
Alexander
Игры делать.
Ну игры делать одним си шарп не обойдешься. Дело замороченное
Alexander
На вскидку от полугода до первых вменяемых результатов
Alexander
Если совсем с нуля может лучше пайгем с питоном сисярп не новичок-френдли
DrSens
И какие игры можно вообще на такой проге сделать?Можно ли их будет юзать и на ПК и на андроид?
DrSens
Рекомендую ознакомиться с всем этим на ютюбе
Это само собой разумеющееся, просто интересно было узнать мнение от тех кто непосредственно сам причастен к unity
Mikhail
Возможно я не совсем понял про комментарий, но мне кажется, что "нанимают в компанию" - это часть культуры компании?
Не-не, это я к видео возвращаюсь. Ты сказал, что идеальное интервью - это давать дейли рутину. В случае с бигтек - это не прокатит, ибо никто не знает твою дейли рутину.
Alexander
И какая прога работает на питоне?
На ПК можно, на андроид вряд-ли. Игры всякие можно, проще всего наверное платформера.
Alexander
Андрей
Люди подскажите за geekbrains кто учился стоит ли ?
Marat
Люди подскажите за geekbrains кто учился стоит ли ?
Основной минус, который я слышал - разные подходы к преподаванию