Лишнего там ничего нет. То, что сделал ты, это больше похоже на преждевременную оптимизацую. Что мой код работает за O(n), что твой. Но чей легче понять? n невелико, разницы в производительности заметить будет нереально, а следовательно, оптимизировать скрытую константу не стоит.
spaun @ 2.11.2016 Что мой код работает за O(n), что твой. <...> n невелико, разницы в производительности заметить будет нереально, а следовательно, оптимизировать скрытую константу не стоит.
Где я писал хоть что-то про то, что один вариант работает быстрее другого? Оба способа даже написаны на разных языках, о каком сравнении быстродействия может идти речь? И тем более, без запусков кода и замеров.
spaun @ 2.11.2016 То, что сделал ты, это больше похоже на преждевременную оптимизацую
Опять же, никакой конкретики. Для меня не похоже.
spaun @ 2.11.2016 Но чей легче понять?
Это, наверное, единственный параметр, по которому можно сравнивать оба варианта. Оставлю это на суд аудитории.
Имелось ввиду, что мой и твой алгоритмы требуют порядка n операций, и если их реализовать на одном ЯП, то разница несущественна. Далее, у меня один цикл лишний, да и вообще можно обойтись двумя переменными. Да, это так. Ну и что? Разве стремление сэкономить на такой ерунде не есть преждевременная оптимизация? Когда я смотрел на твой код (первоначальный), я несколько раз подумал, не вылезаешь ли ты таким циклом за границы. Потом пришлось заглянуть в другую функцию и посмотреть, что ты делаешь с отрицательными индексами. И, как видишь, нашлась ошибка. Может быть, это как раз и было следствием такой оптимизации? Даже если бы ты там поставил большую константу, возник бы вопрос, а что это вообще такое, лол. Может можно было обойтись без черной магии. Хотя соглашусь, пример игрушечный, может и не стоит на этом заострять внимание.
spaun, кажется я понял что ты имеешь в виду. Я не оценивал код с точки зрения быстродействия. Ты прав, эти варианты оба будут работать за О(n) и пример игрушечный. Поэтому я в своем решении старался сделать упор на минимизации количества строк кода. Именно поэтому мне и хочется запихнуть все в один цикл (как, в принципе, я и сделал в первом варианте не очень удачно)
Во втором я постарался сделать это более изящно. Но для продакшена не стал бы так писать.
Все-таки обучение - процесс полезный не только для ученика.
На недавнем занятии рассказывал ученице про один из дефолтных вопросов на собеседовании на тему коллекций в джаве, который, например, задавала моя коллега, собеседуя человека на позицию старшего разработчика в проект - Что будет, если мы в цикле for-each удалим элемент из листа? (тот факт, что так делать не стоит, опускается) Другими словами, что будет в результате выполнения данного кода -
Я всю жизнь считал, что это приведет к такому (и приведенный код действительно ведет себя так) -
Exception in thread "main" java.util.ConcurrentModificationException at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:966) at java.util.LinkedList$ListItr.next(LinkedList.java:888) at com.strkk.teaching.collections.Example.main(Example.java:14)
На джавараше, к примеру, именно так и пишут (#3), в видеокурсах тоже встречал такой пример.
Однако, когда я написал похожий код для иллюстрации -
сказал с умным видом "сейчас вылетит ошибка" и запустил, неожиданно оказалось, что он нормально работает и пишет в консоль [0, 1], т.е. элемент спокойно удаляется безо всяких ошибок.
Пришлось искать объяснение такому конфузу и лезть в код стандартной библиотеки. Как выяснилось, ошибка возникает почти всегда. Если мы проделываем все это на предпоследнем элементе листа (и только на нем), то мы можем уменьшить размер листа на 1 элемент и это ничего не сломает. Более того, мы можем просто удалить все из списка и напихать туда новых элементов. Главное, чтобы итоговый размер был меньше начального на единицу. То есть, такой код полностью меняет содержимое листа и спокойно выдает [a, b, c, d] в консоль, т.к. в начале у нас было 5 элементов, а после удаления всего содержимого мы добавляем только 4, уменьшая размер ровно на 1. Хотя для интернета такая штука давно не новость и на stackoverflow есть подробное объяснение происходящего. На русском тоже. Дикая и неочевидная наркомания.
Learn Java, they said... Java is fun, they said...
Недавно на бескрайних просторах интернета открыл для себя интересный сайт - https://programmingbydoing.com/ Также интересные задания там - блекджек и поле чудес Оба задания интересны тем, что их можно существенно усложнять в зависимости от уровня хардкорности.
Например, для обоих заданий можно написать бота-игрока и смотреть за тем, как они играют. Или реализовать наиболее быстрый механизм поиска слова (для поля чудес), а так же сделать несколько колод и игроков (для блекджека).
Впрочем, большинство заданий нацелено на новичков. Есть даже ветка на реддите посвященная задачам с сайта.
Также напомню вам про очень хороший сайт для практики, о котором я упоминал уже - codingbat. Задачки трех разных уровней сложности для тренировок работы с массивами, строками, логическими выражениями, рекурсией и т.д. Помимо Java, есть задачки и для Python. Ну и наличие автоматических тестов это очень большой плюс. Еще там можно посмотреть "эталонное" решение и сравнить со своим. В общем, очень рекомендую.
Срочно в номер - для интересующихся темой поиска работы в сфере ИТ проводится форум "Найти ИТ" в Питере и Москве. Обычно проходит 2 раза в год, весной и осенью. Можно свободно приходить или сначала зарегиться на сайте http://nayti-it.ru, там вроде зарегистрированным дают какой-то сувенир. Будут стенды разных компаний, можно походить, пособирать буклеты и потрепаться с представителями. Также раздают и разыгрывают всякие сувериры с корпоративной символикой и проводят лекции по теме трудоустройства в ИТ. В питере состоится завтра, 12 ноября.
Я собираюсь сходить с девушкой, пофармить себе ништяков всяких. До этого был там весной прошлого года, получил настольные часы от Дойче банка (которые, правда, хреново работают и всегда отстают) В общем, полезная тема для соискателей и для тех, кому перспектива работы интересна.
strkk @ 11.11.2016 Срочно в номер - для интересующихся темой поиска работы в сфере ИТ проводится форум "Найти ИТ" в Питере и Москве. Обычно проходит 2 раза в год, весной и осенью. Можно свободно приходить или сначала зарегиться на сайте http://nayti-it.ru, там вроде зарегистрированным дают какой-то сувенир. Будут стенды разных компаний, можно походить, пособирать буклеты и потрепаться с представителями. Также раздают и разыгрывают всякие сувериры с корпоративной символикой и проводят лекции по теме трудоустройства в ИТ. В питере состоится завтра, 12 ноября.
Я собираюсь сходить с девушкой, пофармить себе ништяков всяких. До этого был там весной прошлого года, получил настольные часы от Дойче банка (которые, правда, хреново работают и всегда отстают) В общем, полезная тема для соискателей и для тех, кому перспектива работы интересна.
А не проще, когда задумаешься о смене работы, прошерстить hh и статус в LinkedIn'е изменить (правда, второй вариант скоро будет не очень актуален из-за РКН)? Я периодически просматриваю вакансии на hh (и иногда даже хожу собеседоваться в особо заинтересовавшие места, хотя работу менять не планирую), но в целом, т.к. после учёбы на мат-мехе круг друзей/знакомых в IT довольно широкий + активно участвую в дискуссиях проф. сообщества, то знаю о ситуации в большинстве крупных компаний (Яндекс, Люксофт, Сбертех, T-Systems и прочие), а небольшие и средние компании (в которых чаще и можно встретить интересную вакансию, как в плане проекта, так и в плане зп) на таких выставках обычно не представлены, или я ошибаюсь? Кстати, считаю хорошей практикой хотя бы раз в год сходить на пару собеседований - это позволяет держать себя в форме и когда придёт момент для смены работы, сам факт собеседования не будет таким волнительным, как это у многих бывает. З.Ы. работаю QA лидом и периодически почитываю твой блог.
Dalay_LAMO, Привет, спасибо за то что читаешь. Всегда рад видеть в списке читателей коллег.
Dalay_LAMO @ 11.11.2016 А не проще, когда задумаешься о смене работы, прошерстить hh и статус в LinkedIn'е изменить (правда, второй вариант скоро будет не очень актуален из-за РКН)?
Само собой проще. Только все дело в том, что "Найти ИТ" больше направлено на начинающих (в большинстве своем - студентов) без опыта работы и нормального профиля в LinkedIn, резюме на hh и т.д. Ну а я сам не за сменой работы туда иду :)
Dalay_LAMO @ 11.11.2016 а небольшие и средние компании на таких выставках обычно не представлены, или я ошибаюсь?
Ты полностью прав. Там в большинстве своем крупные конторы, которые готовы тратить деньги и время на то, чтобы вырастить специалиста из вчерашнего студента. Небольшие компании не так часто занимаются этим.
Dalay_LAMO @ 11.11.2016 считаю хорошей практикой хотя бы раз в год сходить на пару собеседований
Как я понял, это делается не для поиска потенциального работодателя, а для собственной проверки? Это весьма спорный момент. Лично мне кажется немного неэтичным тратить время людей (и свое тоже), которые рассматривают в тебе потенциального работника, но при этом не имеют шансов нанять тебя. По сути, в таком случае человек сознательно вводит их в заблуждение. Вряд ли они стали бы собеседовать человека, который просто пришел "проверить себя и быть в форме когда время настанет".
Для собственной проверки можно сертификации сдавать :) Ну или более специфический вариант - заняться обучением. Это довольно действенный способ, если готовиться к занятиям и продумывать занятия.
strkk @ 11.11.2016 Как я понял, это делается не для поиска потенциального работодателя, а для собственной проверки?
Нет, на собеседования чисто ради собеседований я не хожу - всегда есть шанс, что я приму оффер.
strkk @ 11.11.2016 Это весьма спорный момент. Лично мне кажется немного неэтичным тратить время людей (и свое тоже), которые рассматривают в тебе потенциального работника, но при этом не имеют шансов нанять тебя. По сути, в таком случае человек сознательно вводит их в заблуждение. Вряд ли они стали бы собеседовать человека, который просто пришел "проверить себя и быть в форме когда время настанет".
Во-первых, отказ кандидата от оффера - обычная рабочая ситуация (выбрал другой оффер, на текущей работе повысили зп/дали повышение и т.д.) и время, которое тратится на моё собеседование, людям оплачивается. Во-вторых, в этой "игре" работодатели гораздо чаще ведут себя не очень этично. Начиная с неозвучивания зарплатной вилки (она указана хорошо если в половине вакансий на hh), заканчивая непредоставлением фидбека по результатам интервью (этим грешит подавляющее большинство). Так как я достаточно был в обеих ролях (и собеседующего, и кандидата), то не вижу ничего страшного в таких интервью.
strkk @ 11.11.2016 Для собственной проверки можно сертификации сдавать :) Ну или более специфический вариант - заняться обучением. Это довольно действенный способ, если готовиться к занятиям и продумывать занятия.
Сертификации - это скорее энтерпрайзная тема, плюс если у админов и джавистов существует довольно много сертификатов, которые можно получить, то в QA сфере такой сертификат всего один - ISTQB. Я планирую получить его в ближайшем будущем, но чисто для себя, т.к. на работе мне это никакого профита не принесёт. Про обучение согласен абсолютно и рассматривал этот вариант, но на это надо тратить довольно много сил и времени, и я пока не созрел для этого.
Dalay_LAMO @ 12.11.2016 не вижу ничего страшного в таких интервью
Говорю же, вопрос спорный :) Но добавлю пару ремарок -
Dalay_LAMO @ 12.11.2016 тказ кандидата от оффера - обычная рабочая ситуация
Согласен. Мое замечание больше относилось когда мы идем чисто для проверки своих знаний сторонним аудитом. Интересно, отсутствие вопросов со стороны кандитата (про компанию, условия, проект и т.п.) может ли являться признаком того, что человек пришел на "проверку"? И с какой вероятностью?
Dalay_LAMO @ 12.11.2016 в этой "игре" работодатели гораздо чаще ведут себя не очень этично
Как думаешь без каких качеств не стать хорошим программистом? И вообще, может ли это сделать любой? Что ты скажешь в ответ на то что потолок здесь 150 т.р., по крайней мере в России? По мне это большие деньги, но может для Москвы нет.
strkk @ 12.11.2016 Согласен. Мое замечание больше относилось когда мы идем чисто для проверки своих знаний сторонним аудитом.
Ну вот аудит получается сомнительный, т.к. работодатели дают фидбек по результатам интервью крайне редко) Получается эдакая тренировка, оплаченная потенциальным работодателем. Неэтично? Может быть, но это в первую очередь business - я продаю своё время, компании хотят его купить и получить прибыль.
strkk @ 12.11.2016 Интересно, отсутствие вопросов со стороны кандитата (про компанию, условия, проект и т.п.) может ли являться признаком того, что человек пришел на "проверку"? И с какой вероятностью?
Есть люди, которые никогда не задают вопросов про условия - создаётся впечатление, что им в некоторой степени всё равно, где работать (что для меня очень странно, учитывая, что на работе проводишь огромную часть своего времени). И ничто не мешает человеку, который пришёл "просто так" позадавать эти вопросы)
Кстати, ещё один аргумент в пользу хождения по собеседованиям - с оффером на руках гораздо проще разговаривать о повышении зп на текущем месте.
molochnik @ 14.11.2016 Как думаешь без каких качеств не стать хорошим программистом? И вообще, может ли это сделать любой? Что ты скажешь в ответ на то что потолок здесь 150 т.р., по крайней мере в России? По мне это большие деньги, но может для Москвы нет.
Понятие "хорошего" или "настоящего" программиста очень часто порождает холивар. Я бы сказал так - стать программистом, работающим в коммерческой разработке, может практически любой. А вот потолок зп как раз будет зависеть от индивидуальных качеств (склада ума, внимательности, усидчивости, знания английского и прочие soft skills, умения себя продать и т.д.). Для многих и 150к - недостижимая планка, независимо от количества лет работы. Но в среднем, 100к после 3 лет работы - это обычная зарплата на данный момент (также есть как те, кто после трёх лет получает 70-80, так и те, кто 150+).
molochnik @ 14.11.2016 Как думаешь без каких качеств не стать хорошим программистом?И вообще, может ли это сделать любой?
Когда стану хорошим программистом - скажу
А если серьезно - то постом выше абсолюнто верно ответили. Еще добавлю, что нужно постоянно учиться.
molochnik @ 14.11.2016 Что ты скажешь в ответ на то что потолок здесь 150 т.р., по крайней мере в России? По мне это большие деньги, но может для Москвы нет.
Совсем не потолок. Опять же, я согласен с тем, что написано в посте выше.
kazkachi @ 15.11.2016 Насчет удаления элемента в листе, я обычно просто прохожу обычным циклом. Это костыль или есть какой-то более элегантный способ удаления в цикле?
Ну, удаление элемента в листе по индексу в цикле это так себе затея. Рекомендуется делать это через итератор (для листа - листитератор) и его метод remove(). Конечно, в самом простом случае (удаление 1 элемента без дополнительных условий) оба будут работать. Однако, если добавить малейшее условие, то цикл может стать некорректной реализацией. Например, такой код - тут мы пытаемся выпилить тройки и четверки из листа. Результат будет таким index >> [1, 2, 4, 5, 67] iterator >> [1, 2, 5, 67]
Rockstardk @ 15.11.2016 Почему создал блог на Джипситим, а не каком-нибудь крутом форуме для программистов?
Причин сразу несколько - - Я не знаю "крутых" форумов для программистов, а уж тем более с блогами. Тем более, я не крутой программист, что мне там делать.
- Раньше я занимался покером (и даже немного продолжал играть на момент открытия сего блога), поэтому я здесь не совсем чужой и кое-что понимаю.
- Если продолжать тему с обучением джаве и искать людей, то аудитория здесь куда более подходящая. Мне писали и интересовались несколько человек, однако до конкретики ни с кем не дошло, также провел пару консультаций по скайпу по общим вопросам.
Rockstardk, не пойму к чему эти вопросы? На форуме полно людей, которые интересуются чем-то кроме покера и программирование это одна из самых близких тем к покеру, кстати, ну если не считать ставок и казино
Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
На каждой странице будет видно, где появились новые посты и комментарии.
Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.