Работающий код - это только начало
Написать код, который решает задачу, может любой программист. Накидал 100500 строк в кучу в один файл, запустил - работает. И так сойдет!
Но работающий код - это только начало. Хороший программист должен подумать о том, как этот код будет поддерживаться. Мы гораздо чаще читаем код, чем пишем. А ещё наш код будут читать другие программисты, которые могут быть менее опытными и не погруженными в контекст так хорошо, как мы.
Представьте, что вы разрабатываете сервис, который будет жить не месяц, а несколько лет. За это время много чего поменяется: технологии, нагрузки, требования, а команда разработчиков сменится несколько раз! Если ваш код будет гибким и поддерживаемым, он сможет адаптироваться к этим изменениям. Если нет, то станет техническим долгом, который проще удалить.
Мастерство программирования - это не столько умение решать задачи, сколько способность предвидеть будущее. Писать код, который работает сейчас, — это важно, но писать код, который будет легко изменить завтра, — вот цель, к которой мы должны стремиться.
Любой программист может заставить код работать именно сейчас. Однако совершенно другое дело - создать приложение, которое можно будет легко изменить. Это качество и является показателем мастерства программирования.
Сэнди Метц, Ruby, объектно-ориентированное проектирование
Написать код, который решает задачу, может любой программист. Накидал 100500 строк в кучу в один файл, запустил - работает. И так сойдет!
Но работающий код - это только начало. Хороший программист должен подумать о том, как этот код будет поддерживаться. Мы гораздо чаще читаем код, чем пишем. А ещё наш код будут читать другие программисты, которые могут быть менее опытными и не погруженными в контекст так хорошо, как мы.
Представьте, что вы разрабатываете сервис, который будет жить не месяц, а несколько лет. За это время много чего поменяется: технологии, нагрузки, требования, а команда разработчиков сменится несколько раз! Если ваш код будет гибким и поддерживаемым, он сможет адаптироваться к этим изменениям. Если нет, то станет техническим долгом, который проще удалить.
Мастерство программирования - это не столько умение решать задачи, сколько способность предвидеть будущее. Писать код, который работает сейчас, — это важно, но писать код, который будет легко изменить завтра, — вот цель, к которой мы должны стремиться.
👏1🤔1
Вопрос на собес: тормозит SQL-запрос
Постановка задачи
У вас есть SQL-запрос на чтение из базы данных и время его выполнения стало неоправданно большим. Что будете делать для его ускорения?
Почему спрашиваю?
Хочу понять, какой у кандидата опыт работы с БД, насколько хорошо он понимает устройство баз данных, способы профилирования, оптимизации и масштабирования.
Что ожидаю услышать?
Первым делом, смотрим план выполнения запроса (explain). В нём, например, будет видно, где база делает full scan.
Далее
⁃ Анализируем структуру запроса. Возможно есть подзапросы, которые не нужны. Или выполняются группировки и агрегации, результат которых не используется в бизнес логике. Или запрашиваются все данные, а используются первые N записей
⁃ Проверяем индексы. Довольно часто проблема решается добавлением правильного индекса
⁃ Смотрим на профиль нагрузки: чего больше - чтения или записи? Возможно добавлением индекса только ухудшим ситуацию
Если простые способы не помогли, то можно подумать:
⁃ о разделении запроса на несколько простых
⁃ денормализации данных
⁃ материальном представлении
⁃ масштабировании через шардирование или партиционирование
Случай из практики
Работал с одним легаси проектом на PHP. Одна из страниц веб сервиса жёстко тормозила. Выяснилось, что запрос в базу вытаскивал все данные (все, Карл!), сохранял в массив, а дальше циклом пробегался по нему и выбирал нужный кусок в соответствии с пейджингом
#вопрос_на_собес
Постановка задачи
У вас есть SQL-запрос на чтение из базы данных и время его выполнения стало неоправданно большим. Что будете делать для его ускорения?
Почему спрашиваю?
Хочу понять, какой у кандидата опыт работы с БД, насколько хорошо он понимает устройство баз данных, способы профилирования, оптимизации и масштабирования.
Что ожидаю услышать?
Далее
⁃ Анализируем структуру запроса. Возможно есть подзапросы, которые не нужны. Или выполняются группировки и агрегации, результат которых не используется в бизнес логике. Или запрашиваются все данные, а используются первые N записей
⁃ Проверяем индексы. Довольно часто проблема решается добавлением правильного индекса
⁃ Смотрим на профиль нагрузки: чего больше - чтения или записи? Возможно добавлением индекса только ухудшим ситуацию
Если простые способы не помогли, то можно подумать:
⁃ о разделении запроса на несколько простых
⁃ денормализации данных
⁃ материальном представлении
⁃ масштабировании через шардирование или партиционирование
Случай из практики
Работал с одним легаси проектом на PHP. Одна из страниц веб сервиса жёстко тормозила. Выяснилось, что запрос в базу вытаскивал все данные (все, Карл!), сохранял в массив, а дальше циклом пробегался по нему и выбирал нужный кусок в соответствии с пейджингом
#вопрос_на_собес
👍2🤯1
Совет на собес: не говорите "нет"
На любом этапе собеса не стоит говорить "нет”. Часто вижу, как кандидаты сами себе роют яму, отвечая "нет" на простые вопросы.
Основное правило: избегайте категоричного "нет". Всегда найдется способ ответить положительно и конструктивно, избежать негативной окраски.
У вас есть опыт работы с технологией X?
Напрямую с X не работал, но использовал похожие технологии Y и Z. Изучал X в пет-проектах. Учитывая мой опыт с аналогичными инструментами, уверен, что быстро освою X в боевых проектах.
Работали с большими нагрузками?
В моей практике были проекты с разной спецификой нагрузки. Например, система с небольшим общим трафиком, но большими пиками в определенные моменты. Это научило меня правильно проектировать архитектуру под конкретные задачи.
Готовы работать с legacy-кодом?
Конечно. Legacy есть в любом живом проекте, включая те, над которыми я работал. Это нормальная часть эволюции программного обеспечения. Главное – уметь грамотно его развивать и постепенно улучшать. Плох тот программист, который не хочет переписать свой код спустя некоторое время.
Помните, что собеседование - это не экзамен и допрос, а диалог. Ваша основная задача - понравиться, показать потенциал и готовность развиваться.
На любом этапе собеса не стоит говорить "нет”. Часто вижу, как кандидаты сами себе роют яму, отвечая "нет" на простые вопросы.
Основное правило: избегайте категоричного "нет". Всегда найдется способ ответить положительно и конструктивно, избежать негативной окраски.
У вас есть опыт работы с технологией X?
Напрямую с X не работал, но использовал похожие технологии Y и Z. Изучал X в пет-проектах. Учитывая мой опыт с аналогичными инструментами, уверен, что быстро освою X в боевых проектах.
Работали с большими нагрузками?
В моей практике были проекты с разной спецификой нагрузки. Например, система с небольшим общим трафиком, но большими пиками в определенные моменты. Это научило меня правильно проектировать архитектуру под конкретные задачи.
Готовы работать с legacy-кодом?
Конечно. Legacy есть в любом живом проекте, включая те, над которыми я работал. Это нормальная часть эволюции программного обеспечения. Главное – уметь грамотно его развивать и постепенно улучшать. Плох тот программист, который не хочет переписать свой код спустя некоторое время.
Помните, что собеседование - это не экзамен и допрос, а диалог. Ваша основная задача - понравиться, показать потенциал и готовность развиваться.
👍2✍1🔥1👌1
Как развивать айтишников: практический подход
Развитие разработчиков - это не просто набор активностей для галочки. Это системный процесс, который должен приносить реальную пользу и команде, и бизнесу. Существует много подходов, выделю три, которые применял на практике и уверен в результате.
1. Совместное изучение материалов
- Организуйте регулярные встречи для разбора курсов Стэнфорда, MIT или других топовых вузов (благо такого материала в свободном доступе достаточно)
- Создайте книжный клуб: выбирайте актуальные технические книги, статьи и обсуждайте по главам
Важно: не просто смотреть/читать, а именно разбирать и обсуждать, применять знания к текущим проектам.
2. Хакатоны и соревнования
- Внутренние хакатоны отлично работают для решения реальных проблем, при этом можно вообще не ограничивать стек технологий
- Участие во внешних IT соревнованиях даёт свежий взгляд и новые идеи
Главное: создать естественную мотивацию, без принуждения к участию. Можно придумать плюшки за хорошие результаты
3. Внутренние выступления
- Регулярные технические митапы, где разработчики делятся опытом
- Короткие рассказы на 5-10 минут о новых технологиях или найденных решениях (можно в рамках дейликов или других командных мероприятий)
- Разбор сложных багов или интересных кейсов
Важно: поощрять выступления джунов, это отличный способ прокачать soft skills. От синьоров просить рассказы о сложном простым языком.
Развитие команды - это марафон, а не спринт. Не стоит пытаться внедрить всё и сразу. Начните с малого, получите обратную связь, скорректируйте подход.
А какие мероприятия помогают развиваться вам или вашим коллегам? Поделитесь в комментариях
Развитие разработчиков - это не просто набор активностей для галочки. Это системный процесс, который должен приносить реальную пользу и команде, и бизнесу. Существует много подходов, выделю три, которые применял на практике и уверен в результате.
1. Совместное изучение материалов
- Организуйте регулярные встречи для разбора курсов Стэнфорда, MIT или других топовых вузов (благо такого материала в свободном доступе достаточно)
- Создайте книжный клуб: выбирайте актуальные технические книги, статьи и обсуждайте по главам
Важно: не просто смотреть/читать, а именно разбирать и обсуждать, применять знания к текущим проектам.
2. Хакатоны и соревнования
- Внутренние хакатоны отлично работают для решения реальных проблем, при этом можно вообще не ограничивать стек технологий
- Участие во внешних IT соревнованиях даёт свежий взгляд и новые идеи
Главное: создать естественную мотивацию, без принуждения к участию. Можно придумать плюшки за хорошие результаты
3. Внутренние выступления
- Регулярные технические митапы, где разработчики делятся опытом
- Короткие рассказы на 5-10 минут о новых технологиях или найденных решениях (можно в рамках дейликов или других командных мероприятий)
- Разбор сложных багов или интересных кейсов
Важно: поощрять выступления джунов, это отличный способ прокачать soft skills. От синьоров просить рассказы о сложном простым языком.
Развитие команды - это марафон, а не спринт. Не стоит пытаться внедрить всё и сразу. Начните с малого, получите обратную связь, скорректируйте подход.
А какие мероприятия помогают развиваться вам или вашим коллегам? Поделитесь в комментариях
🔥3👍2👏1
Вопрос на собес: максимальное значение int
Постановка задачи
Просим кандидата рассказать о максимальном значении целочисленного типа данных в конкретном языке программирования. Казалось бы, простой вопрос, но он раскрывает глубину понимания базовых концепций.
Почему спрашиваю?
Этот вопрос помогает выявить несколько важных аспектов:
- Понимание внутреннего устройства типов данных
- Знание ограничений языка программирования
- Умение выполнять простые математические расчёты
- Способность объяснить технические детали
Что ожидаю услышать?
Хороший ответ должен включать следующие моменты:
- Указание на то, что в разных языках это реализовано по-разному
- Для языков с фиксированным размером (C++, Java): максимальное значение для 4 байт = 2^31 - 1 ≈ 2.147 млрд
- Есть языки без ограничений (Ruby, Python)
- Объяснение, почему именно такое число: 4 байта = 32 бита, один бит под знак, остальные под значение
Вопрос со звездочкой
Как программно получить количество цифр в числе?
👍 если ответил на вопрос
Постановка задачи
Просим кандидата рассказать о максимальном значении целочисленного типа данных в конкретном языке программирования. Казалось бы, простой вопрос, но он раскрывает глубину понимания базовых концепций.
Почему спрашиваю?
Этот вопрос помогает выявить несколько важных аспектов:
- Понимание внутреннего устройства типов данных
- Знание ограничений языка программирования
- Умение выполнять простые математические расчёты
- Способность объяснить технические детали
Что ожидаю услышать?
- Указание на то, что в разных языках это реализовано по-разному
- Для языков с фиксированным размером (C++, Java): максимальное значение для 4 байт = 2^31 - 1 ≈ 2.147 млрд
- Есть языки без ограничений (Ruby, Python)
- Объяснение, почему именно такое число: 4 байта = 32 бита, один бит под знак, остальные под значение
Вопрос со звездочкой
Как программно получить количество цифр в числе?
👍 если ответил на вопрос
👍2
Для именования спринтов мы используем интересный подход. Придумал его предыдущий лид команды бекенда.
В названии загадывается элемент таблицы Менделеева. Придумывает команда бека (так сложилось). А на старте спринта кросс-платформенная команда пытается его угадать.
Например, у нас были спринты "Абанутобани" (Сера) и "Друг Геннадия" (Ванадий)
Текущий спринт мы назвали "Роща остролиста". Как думаете, какой химический элемент мы загадали?
В названии загадывается элемент таблицы Менделеева. Придумывает команда бека (так сложилось). А на старте спринта кросс-платформенная команда пытается его угадать.
Например, у нас были спринты "Абанутобани" (Сера) и "Друг Геннадия" (Ванадий)
Текущий спринт мы назвали "Роща остролиста". Как думаете, какой химический элемент мы загадали?
🤣2👍1🔥1🤔1
Новый спринт назвали: Berghain.
Как думаете, какой химический элемент загадан?
Berghain - это известный техно-клуб в Берлине. А загадали мы Технеций
Как думаете, какой химический элемент загадан?
🤔2
В этот раз проще, новый спринт назвали: Бобр курва
Это полоний, радиоактивный химический элемент, открытый супругами Кюри. И названный в честь родины Марии Кюри - Польши. Мем бобр курва пришел к нам как раз оттуда
👍3🔥1😱1🤣1
Новый спринт, новая загадка: Пекловод
Это Плутоний. Назван в честь планеты Плутон. В римской мифологии Плутон (он же Аид в греческой мифологии) - бог смерти и подземного царства мертвых
😁1
Виновата скамейка
Есть такой известный тест для детей. Ребенку показывают две картинки, на обеих изображены мальчик и скамейка. На первой мальчик бежит, на второй - спотыкается о скамейку и падает. На вопрос: "кто виноват?" дети в три года отвечают, что скамейка, так как она помешала мальчику. Дети постарше говорят, что виноват мальчик, так как не посмотрел, куда бежит.
Разница в ответах вызвана тем, что в три года у ребенка отсутствует критическое отношение к себе. Весь мир вращается вокруг него и для него одного. Он не может быть ни в чем виноват.
Но есть разработчики, у которых до сих пор виновата скамейка. И их много. Они везде, возможно даже это вы. А может и я 🙈
Есть такой известный тест для детей. Ребенку показывают две картинки, на обеих изображены мальчик и скамейка. На первой мальчик бежит, на второй - спотыкается о скамейку и падает. На вопрос: "кто виноват?" дети в три года отвечают, что скамейка, так как она помешала мальчику. Дети постарше говорят, что виноват мальчик, так как не посмотрел, куда бежит.
Разница в ответах вызвана тем, что в три года у ребенка отсутствует критическое отношение к себе. Весь мир вращается вокруг него и для него одного. Он не может быть ни в чем виноват.
Но есть разработчики, у которых до сих пор виновата скамейка. И их много. Они везде, возможно даже это вы. А может и я 🙈
😁3🔥1🤔1💯1
Очередной спринт назвали: Кофе у обочины
Какой химический элемент загадали на этот раз? ⚗️
Цирконий
Какой химический элемент загадали на этот раз? ⚗️
🤔1
В этот раз всё просто: На берегу таксишных волн
"На берегу пустынных волн..." - вступление к поэме Пушкина "Медный всадник". Ответ: медь
Telegram
IT вентилятор
Для именования спринтов мы используем интересный подход. Придумал его предыдущий лид команды бекенда.
В названии загадывается элемент таблицы Менделеева. Придумывает команда бека (так сложилось). А на старте спринта кросс-платформенная команда пытается…
В названии загадывается элемент таблицы Менделеева. Придумывает команда бека (так сложилось). А на старте спринта кросс-платформенная команда пытается…
😁1
Сможете ответить на вопрос: куда впадает Волга?
Под спойлером ответ, ставьте 👍 если правильно ответили и 👎 если прогуливали географию в школе
Куда впадает река Волга? Из молодых людей, в возрасте от 18 до 24 лет, только 18 процентов знает, что Волга впадает в Каспийское море. Среди старшего поколения, закончившего еще советскую школу, правильный ответ тоже знают не все, но все же это 60-70 процентов
Под спойлером ответ, ставьте 👍 если правильно ответили и 👎 если прогуливали географию в школе
👍4
Хотите с утра задачку по математике за 4 класс общеобразовательной программы?
У Ани 35 монет по 2 руб. и 5 руб., причем сумма денег в 2-рублевых монетах равна сумме денег в 5-рублевых монетах. Сколько у Ани 5-рублевых монет?
Через систему уравнений мы взрослые дядьки решим быстро. Но дети это ещё не проходили. Сможете придумать "детское" решение?
У Ани 35 монет по 2 руб. и 5 руб., причем сумма денег в 2-рублевых монетах равна сумме денег в 5-рублевых монетах. Сколько у Ани 5-рублевых монет?
Через систему уравнений мы взрослые дядьки решим быстро. Но дети это ещё не проходили. Сможете придумать "детское" решение?
🤔2👍1🔥1
Новый спринт назвали: Mine herz brennt
Какой химический элемент загадали?
Какой химический элемент загадали?
🤔1
Mine herz brennt
Загадан был Криптон. Mine написано с ошибкой с точки зрения немецкого, надо было на это слово обратить внимание. А дальше ассоции Mine -> mining -> криптовалюты -> Криптон
Загадан был Криптон. Mine написано с ошибкой с точки зрения немецкого, надо было на это слово обратить внимание. А дальше ассоции Mine -> mining -> криптовалюты -> Криптон
🤯1🤣1