LINUX.ORG.RU

вопрос на собеседование фроненд программисту

 , , ,


0

1

Итак вам дали легаси код на одном из языков шаблонов (Smarty, Twig, Handlebars, Mustache, FreeMaker) .

В нем есть блок формирования списка однотипных ссылок, который предыдущий (ушедший) программист формирует в цикле for с индексом от 1 до N. А так же есть ссылки как до, так и после этого цикла. Ну и они так и просятся в какой то универсальный цикл.

Вам дано задание: убрать и цикла элементы скажем с номерами 3, 5, 7 и 11.

Как нужно поступить правильно в этой ситуации? Нужно ли делать сначала рефакторинг цикла? Какой именно?

И да, почему уволили предыдущего программиста?

Как нужно поступить правильно в этой ситуации

поблагодарить за рыбу и пожелать удачи. ну и пойти по своим делам.

anonymous ()

Не рашать эту проблему на стороне шаблонизатора, а просто не добавлять ссылки в массив для for.

А так бы сделал следующим образом:

links.each_with_index.select { |_, i| ![3, 5, 7, 11].include? i } .map { |l, _| l }

anonymous ()

php

array_filter до шаблона.

x3al ★★★★★ ()

Конечно же, я бы произвел рефакторинг и развернул цикл, убрав лишние повторения.

почему уволили предыдущего программиста?

Очевидно, потому что он не знал о таком широкоизвестном, классическом и гениальном приеме рефакторинга и оптимизации!

// Хосспаде, надеюсь, работодатели профиль на ЛОРе перед наймом не смотрят. А то ведь подумают вне контекста, что я серьезно.

unikoid ★★★ ()

легаси? на свалку.

выборка -> фильтр -> foreach

Ему надоело. Забухал. Поссорился. Уехал жить на Галапагосские острова. Жена запилила маленькой зп, пришлось идти грузчиком. Ему предложили работу в google. Ему предложили работу не в google. Открыл свой бизнеЦ. Умер.

xSudo ★★★ ()

Голос со стороны бекенда...

Smarty, Twig, Handlebars, Mustache, FreeMaker

А вот современному фронтендеру обязательно знать кучу хипстерского г***а? Вопрос скорее риторический. Про mustache я чето слышал даже.

Вам дано задание: убрать и цикла элементы скажем с номерами 3, 5, 7 и 11.

Не подавать их на вход шаблонизатора? Вот прямо серверсайд отсечь ненужные данные. Я не думаю, что это менее красивое решение, чем закат солнца вручную развертка цикла.

Midael ★★★★★ ()
Ответ на: комментарий от Kuzy

Дунчи, я лениво гуглил на select with index и ничего не найдя оставил так. Как эту проблему решают компьютерные учённые? // лень думать сорь

anonymous ()
Ответ на: комментарий от i-rinat

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

Я думаю в веб деве их не будет

EnterpriseMobility ()
Ответ на: комментарий от EnterpriseMobility

Это ж к пхп примочка? Ну заведи хешмап или как оно там в пхп делается, с индексами, которые нужно проигнорировать. И проверяй наличие. В чем проблема такого подхода?

Midael ★★★★★ ()
Последнее исправление: Midael (всего исправлений: 3)
Ответ на: комментарий от Midael

проблема в том, что мы уже 3 дня обсуждаем эту хрень.

А клиенту нужно вчера. И изменяться оно будет очень редко.

Зачем городить город с циклами и прочими pure mvc решениями?

Разверни цикл, бро! И удали не нужно! Это же так просто! Для этого дзахе не надо быть погромиздом.

И это не оптимизация, это рефакторинг. Оно попадает под все его определения

EnterpriseMobility ()
Ответ на: комментарий от theNamelessOne

Здорово, спасибо! Так гораздо лучше.

anonymous ()
Ответ на: комментарий от EnterpriseMobility

проблема в том, что мы уже 3 дня обсуждаем эту хрень.

Хрень это мягко сказано. Я бы сказал это бред неадеквата. Если бы ты ко мне на собеседование пришел с такими вот методиками, я тебя ссаными тряпками бы гнал и с лестницы спустил.

Зачем городить город с циклами и прочими pure mvc решениями?

Действительно.

Разверни цикл, бро! И удали не нужно! Это же так просто! Для этого дзахе не надо быть погромиздом.

Давай еще этих твоих эффективных рефакторингов, да заведи блог для этого.

Deleted ()
Ответ на: комментарий от EnterpriseMobility

проблема в том, что мы уже 3 дня обсуждаем эту хрень.

А клиенту нужно вчера. И изменяться оно будет очень редко.

Любой миддл может реализовать практически любую фичу в сжатые сроки. Сделать так, чтобы она потом не увеличила время на поддержку проекта (как ты предлагаешь) — сложнее.

Это не рефакторинг, а способ раздуть технический долг.

x3al ★★★★★ ()
Ответ на: комментарий от Twissel

ОК, давай серьезно. Причем я пока еще не знаю, как делать дальше.

Более продвинутый пример:

Имеется legacy HTML код, содержащий 16 однотипных элементов, который так и просятся в цикл.

ОК, я выделил шаблон (Smarty) и данные для него в JSON.

А дальше что? должен я каждый раз читать JSON из файловой системы, формировать исходный HTML вывод?

EnterpriseMobility ()
Ответ на: комментарий от Twissel

понимаешь в чем дело, этот smarty шаблон должен храниться в базе данных, откуда вызывается фреймворком.

А где будет храниться сам JSON?

Напрашивается вывод: а не нужно ли ОДИН РАЗ на этапе design time сформировать HTML output,а не городить огород с чтением из smarty шаблона этого самого JSON файла (и где его хранить, чтобы его случайно не приняли за мусор и не забыли при перемещении контента из одной базы в другую)

EnterpriseMobility ()
Ответ на: комментарий от EnterpriseMobility

smarty шаблон должен храниться в базе данных

Аргументация почему не на диске есть?

Сами себе проблему создали, сами решаем.

Twissel ★★★★★ ()
Ответ на: комментарий от Twissel

а теперь внимание вопрос: каким простейшим JS фреймоврком можно на стороне клиента формировать HTML из шаблона и JSON данных для этого шаблона?

EnterpriseMobility ()
Ответ на: комментарий от ThisNameWasFree

;(

Ну да, вот так:

for($i = 0; $i < 1000; ++$i) {
  SomeFu__ingFunction($i);
}
веселее будет.

anonymous ()

программист формирует в цикле for с индексом от 1 до N

И правильно делает. Вообще такой цикл можно вытащить в подшаблон и толкать везде.

Вам дано задание: убрать и цикла элементы скажем с номерами 3, 5, 7 и 11

array_filter или array_intersect_key, цикл трогать не надо.

Нужно ли делать сначала рефакторинг цикла?

Не нужно. Свой анролл засунь себе в зад, т.к. это уменьшает code reuse = тупая работа.

почему уволили предыдущего программиста

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

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от EnterpriseMobility

каким простейшим JS фреймоврком можно на стороне клиента формировать HTML из шаблона и JSON данных для этого шаблона?

Тысячи их, начни с handlebars.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)

Я бы в джанго вообще решил бы это на стороне сервера.

FIL ★★★★ ()
Ответ на: комментарий от no-such-file

Ни разу не видел чтобы программиста увольняли - это слишком дорого, искать нового.

если программист ничего не делает на работе и/или некомпетентен, то он приносит больше убытков, чем прибыли.

Не нужно. Свой анролл засунь себе в зад, т.к. это уменьшает code reuse = тупая работа.

Мы с сеньором с тобой не согласны.

EnterpriseMobility ()
Ответ на: комментарий от EnterpriseMobility

если программист ничего не делает на работе и/или некомпетентен

То выгнать надо HR или кто там его принимал/собеседовал.

Мы с сеньором с тобой не согласны

А мне начхать на тебя и твоего сеньора. Шах и мат.

no-such-file ★★★★★ ()
Ответ на: комментарий от EnterpriseMobility

понимаешь в чем дело, этот smarty шаблон должен храниться в базе данных, откуда вызывается фреймворком.

Бежать, бежать их этой конторы, оставляя за собой растяжки, чтобы не догнали.

WARNING ★★★★ ()
Ответ на: комментарий от EnterpriseMobility

А дальше что? должен я каждый раз читать JSON из файловой системы, формировать исходный HTML вывод?

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

А где будет храниться сам JSON?

Модель? Нет, не слышал.

no-such-file ★★★★★ ()

А какого хрена вообще решение о том какие ссылки выводить, а какие нет принимается в шаблоне? Это тогда уже не шаблон. А раз это не шаблон то зачем у тебя оно на Smarty, Twig, Handlebars, Mustache, FreeMake и т.п?

Suntechnic ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.