Кодинг на собеседовании

Кодинг на собеседовании

Набираем человека в команду. Надо придумать задачу на собеседование, ну в смысле написать какой-нибудь код минут за 15-20. Я обычно прошу написать какой-нибудь триггер, типа сделать как, чтобы на одного человека не вешали больше одного кейса. Но, что-то чувствую это слишком банально.
А что вы просите написать на собеседовании?

А на счёт банальности. Тут на форуме все помнят какие контекстные переменные(Trigger.new, Trigger.old и т.д.) доступны для каждой DML операции? Речь о полном списке.
п.с. я ещё таких людей не встречал, кто это в памяти держит.
Так что написать триггер для решения какой-то задачи может и просто, а написать универсальный обработчик триггера может и не получится не имея гугла перед глазами, за исключением ситуаций, когда человек специально это учил к собеседованию.

Я бы продолжил на твоём месте давать те же самые задания, но просто к проверке работоспособности добавил code review на best practices по производительности(dml/soql/sosl в for цикле и т.д.), внешнему виду(названия переменных, классов, методов и т.д.) и многое другое, а то часто читаешь код и глаз начинает дёргаться. И главное, что у человека гугл то был перед глазами, т.к. это проектный код за несколько месяцев.

Developer
А на счёт банальности. Тут на форуме все помнят какие контекстные переменные(Trigger.new, Trigger.old и т.д.) доступны для каждой DML операции? Речь о полном списке.

Конечно, это же прям логично и вытекает из операции

Перечисли пожалуйста весь список в ближайшие 3-4 минуты
операция - контекстные переменные

Можно дать простое задание, но поспрашивать поглубже про триггеры, как, например, они будут срабатывать на массовые операции, из-за чего могут быть локи итд

Gres
Можно дать простое задание, но поспрашивать поглубже про триггеры, как, например, они будут срабатывать на массовые операции, из-за чего могут быть локи итд

Кстати "глубиной" можно завалить любого человека, если он в последнее время этим не занимался, т.к. это надо либо иметь скил уровня архитектор, либо очень хорошую память, чтобы помнить тонкости по каждой теме в Salesforce. Это обычная психология людей - мозг избавляется через какое-то время от информации, которую считает лишней. Человек должен иметь хорошую логику и быстро разбираться в новом, а не становится ходячей энциклопедией за 10 лет.

Так и собеседуемый может завалить того, кто его собеседует, если он активно над чем-то работал в последние месяцы, а другой этого не знает или лишь слышал об этом :)

Developer
Так и собеседуемый может завалить того, кто его собеседует, если он активно над чем-то работал в последние месяцы, а другой этого не знает или лишь слышал об этом :)

Ну очень странно спращивать, про то что ты не знаешь

Developer
Человек должен иметь хорошую логику и быстро разбираться в новом, а не становится ходячей энциклопедией за 10 лет.

Согласен, но он еще должен иметь какой-т скилл в той технологии на которую собеседуется, и это в принципе легко понять по его проектам и ответам на вопросы.

Gres
Developer
Так и собеседуемый может завалить того, кто его собеседует, если он активно над чем-то работал в последние месяцы, а другой этого не знает или лишь слышал об этом :)

Ну очень странно спращивать, про то что ты не знаешь

Так речь о том, что собеседуемый может спросить свою комиссию о чём-то, а та не сможет ответить. Хотя это и выглядит странно и никто на это не согласится, но это вполне возможно.

Gres
Developer
Человек должен иметь хорошую логику и быстро разбираться в новом, а не становится ходячей энциклопедией за 10 лет.

Согласен, но он еще должен иметь какой-т скилл в той технологии на которую собеседуется, и это в принципе легко понять по его проектам и ответам на вопросы.

Лучше всего это выявлять тестовым заданием и его последующим обсуждением. Почему выбран именно такой подход? Как пишет человек и т.д.
Это и есть реальные обсуждения, а не вопрос, который может знать только тот кто спрашивает.
Так можно понять как мыслит человек, умеет ли отстаивать своё мнение, если оно правильное(а это очень важно, иначе потом случается, когда зазнавшийся тех. лид запросил полную чушь, а девелопер смирно начал пытаться делать именно так, даже если в итоге это нереализуемо. Да и не может человек без собственного мнения становится кем-то выше джуниора.). Что вообще знает и как умеет применять на практике.

Как вариант, я прошу написать триггер, который считает количество контактов на аккаунте. Задачу можно решить, как минимум, тремя способами. Больше обращаю внимание на рассуждение, задаю уточняющие вопросы - почему такой экшен выбрал для реализации, какие еще видит решения данной задачи, какие плюсы, минусы.

При выборе задания исхожу из того, чтобы было несколько вариантов реализации.

Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

Mike V
Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

Я имел ввиду три реализации триггера.

Mike V
Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

И все способы с помощью триггера?
Или кто-то не до конца описал задание, либо я уже из-за работы запутался

триггер должен быть один )

trigger ContactTrigger on Contact (after insert, after delete, after undelete) {

ContactTriggerHandler handler = new ContactTriggerHandler();

if (trigger.isInsert) {
handler.afterInsertHandler(trigger.newMap);
}

if (trigger.isDelete) {
handler.afterDeleteHandler(trigger.oldMap);
}

if (trigger.isUndelete) {
handler.afterUndeleteHandler(trigger.newMap);
}
}

Дмитрий Черник
Mike V
Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

Я имел ввиду три реализации триггера.

Не посчитаешь с помощью триггера, если на орге уже есть аккаунты где контактов более 50000. Первый подсчёт надо делать каким-нибудь батчем или queueable и записать в кастомное поле Count на Аккаунте, а дальше уже делать в триггере инкремент кастомного поля при добавлении каждого контакта.

Developer
Mike V
Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

И все способы с помощью триггера?
Или кто-то не до конца описал задание, либо я уже из-за работы запутался :o

Да, все способы при помощи триггера. Кто-то плюсует/минусует к существующему значению поля, кто-то составляет мапку, кто-то делает субзапрос, а кто-то делает агрегированный запрос. Здание звучит, как и описано, уточняющие вопросы приветствуются.

Developer
Дмитрий Черник
Mike V
Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

Я имел ввиду три реализации триггера.

Не посчитаешь с помощью триггера, если на орге уже есть аккаунты где контактов более 50000. Первый подсчёт надо делать каким-нибудь батчем или queueable и записать в кастомное поле Count на Аккаунте, а дальше уже делать в триггере инкремент кастомного поля при добавлении каждого контакта.

Спасибо :)

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

Из триггера получаешь Id аккаунтов, делаешь выборку

accounts = [

Select id, Count_of_contacts__c, (Select id from AccountContactRelations)
from Account
where Id in : accountIds
];

и итерируешься по два раза:
List<Account> accounts = getRelatedAccounts(accountIds);

for (Account account : accounts) {
Decimal counter = 0;
for(AccountContactRelation contact : account.AccountContactRelations) {
counter += 1;
}
account.Count_of_contacts__c = counter;
}

update accounts;

akr0bat
триггер должен быть один )

trigger ContactTrigger on Contact (after insert, after delete, after undelete) {

ContactTriggerHandler handler = new ContactTriggerHandler();

if (trigger.isInsert) {
handler.afterInsertHandler(trigger.newMap);
}

if (trigger.isDelete) {
handler.afterDeleteHandler(trigger.oldMap);
}

if (trigger.isUndelete) {
handler.afterUndeleteHandler(trigger.newMap);
}
}

Тогда уже следовать хорошим практикам до конца и писать "trigger" с большой буквы, т.к. это класс, а не объект. Когда я пришёл первый раз с Java на Salesforce для меня это стало настоящим кошмаром, когда я видел классы с маленькой буквы и начинал усиленно искать этот объект в коде, а его не было. Оказалось, что Apex лоялен к быдлокодерам и можно писать как угодно забивая на регистр.
п.с. каких только я чудес не видел с разными регистрами. Некоторые как жирные троли делали специально всё наоборот - классы с маленькой буквы, переменные и методы с большой буквы и т.д. Я уже молчу про константы с маленькой буквы...

akr0bat
и итерируешься по два раза

Лимиты на 50000 записей за один контекст уже отменили?
п.с. 2й for делать не надо - можно добавить сразу размер коллекции к каунтеру. Вложенные циклы только cpu нагружают.
На одном проекте мне попалось, как валился код по cpu, т.к. там было в 5 этажей for. Перевёл в один for и всё стало нормально, хотя проект надо было целиком переписывать.

akr0bat
account.AccountContactRelations

Ну, во первых зачем итерироваться по внутреннему запросу, если можно взять size(), во вторых, как заметили выше, такой подсчет не будет работать корректно, если у вас > 50000 контактов на одном аккаунте

Developer
Оказалось, что Apex лоялен к быдлокодерам и можно писать как угодно забивая на регистр.
п.с. каких только я чудес не видел с разными регистрами. Некоторые как жирные троли делали специально всё наоборот - классы с маленькой буквы, переменные и методы с большой буквы и т.д. Я уже молчу про константы с маленькой буквы...

Как Вы резко, быдлокодеры все сразу. Существовали целые языки программирования, например Visual Basic, нечувствительные к регистру букв переменных. Да и в Apex это имеет некоторый смысл, хотя бы потому что SOQL нечувствителен (как производная от SQL).

В данном случае это всего лишь definition keyword и да он пишется с маленькой буквы )))
Trigger Syntax
The syntax of a trigger definition is different from a class definition’s syntax. A trigger definition starts with the trigger keyword. It is then followed by the name of the trigger, the Salesforce object that the trigger is associated with, and the conditions under which it fires. A trigger has the following syntax:
trigger TriggerName on ObjectName (trigger_events) {
code_block
}
https://trailhead.salesforce.com/en/modules/apex_triggers/units/apex_triggers_intro

Дмитрий Черник
Да, все способы при помощи триггера. Кто-то плюсует/минусует к существующему значению поля, кто-то составляет мапку, кто-то делает субзапрос, а кто-то делает агрегированный запрос. Здание звучит, как и описано, уточняющие вопросы приветствуются.

Принципиально способа два с использованием триггера: считать заново каждый раз (в общем случае это неправильно, как многие уже отметили выше), и пересчитывать текущее значение (в предположении что оно было подсчитано до этого).

Я не сказал, что все быдлокодеры. Прошу прощения если обидел.
Я имел в виду, что нет ограничений для тех, кто такими является. Просто я по большей части работаю с чужим кодом и кроме ужасной логики ещё и читается код очень долго из-за небрежного оформления.

akr0bat
В данном случае это всего лишь definition keyword и да он пишется с маленькой буквы

именно объявление так и пишется как и слово class
trigger HelloWorldTrigger on Account
class HelloWorldClass

а в том случае был уже класс Trigger и его переменные(new и т.д.).

Developer
Дмитрий Черник
Mike V
Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

Я имел ввиду три реализации триггера.

Не посчитаешь с помощью триггера, если на орге уже есть аккаунты где контактов более 50000. Первый подсчёт надо делать каким-нибудь батчем или queueable и записать в кастомное поле Count на Аккаунте, а дальше уже делать в триггере инкремент кастомного поля при добавлении каждого контакта.

это уникальный случай который никак не соответствует best practices for LDV (рекомендуется вообще до 10к), конечно вокруг неправильно построенной дата модели приходится городить огороды из батчей. При такой модели вообще мало чего кроме батчей будет работать.

я спрашивал или у меня спрашивали такие задачи
1 person account, есть first name и last name как на Аккаунте так и на Контакте. Написать триггер который при апдейте Аккаунта апдейтит все чайлд контакты. Если испытуемый пишет для 1 аккаунта просим сделать bulkified. Написать тесты на свой триггер. (это задание почему-то вызывает сложности, далеко не все могут сходу на доске продумать мап чтобы потом знать какой контакт чем апдейтим)
2 есть кастомный обьект который хранит что нибудь. Обьект используется и в before и в after триггере. Как сделать чтобы данные были доступны за 1 SELECT в контексте? (по сути написать синглтон, но человеку даже не обязательно знать что это синглтон)
3 из стринг парсинг задач мне нравится следующая : есть строка чаров [abbbcacbae...], найти второй по количеству вхождений элемент (это спрашиваю у людей которые не имеют СФ знаний или если собеседую какихнибудь python test automation)
по СФ я спрашиваю: отличия юзер и систем контекстов? как проверить доступ в систем контексте? как работает security model? способы уменьшить view state? сталкивался ли с "uncommitted work pending", когда возникает ? сталкивался ли с "unable to lock row, unable to get exclusive access to record" , когда возникает ?
необязательно знать всё, просто попытка проверить наличие реального опыта

Developer
Не посчитаешь с помощью триггера, если на орге уже есть аккаунты где контактов более 50000.

Я бы не был так уверен :)

Sergey Prishchepa
Developer
Не посчитаешь с помощью триггера, если на орге уже есть аккаунты где контактов более 50000.

Я бы не был так уверен :)

Я же не запрещаю :)

Developer
п.с. 2й for делать не надо - можно добавить сразу размер коллекции к каунтеру. Вложенные циклы только cpu нагружают.

Дмитрий Черник
Ну, во первых зачем итерироваться по внутреннему запросу, если можно взять size()

Нельзя size() использовать, нужно итерировать так как при size() > 200 упадет ошибка QueryException in a SOQL for loop with the message Aggregate query has too many rows for direct assignment, use FOR loop (Salesforce doc)

Raman Silin
SOQL for loop

А где там SOQL for loop?
Обычный soql сначала, а потом уже бегаем по полученной коллекции.

List<Account> accounts = getRelatedAccounts(accountIds);

for (Account account : accounts) {
Decimal counter = 0;
for(AccountContactRelation contact : account.AccountContactRelations) {

В снипете все хорошо, там for loop и присутствует, но если как писалось вызвать account.AccountContactRelations.size() без for - то и упадет ошибка, если size > 200

Raman Silin
В снипете все хорошо, там for loop и присутствует, но если как писалось вызвать account.AccountContactRelations.size() без for - то и упадет ошибка, если size > 200

Ошибка, будет не всегда. You might get a QueryException in a SOQL for loop with the message Aggregate query has too many rows for direct assignment, use FOR loop. This exception is sometimes thrown.

На практике она возникает довольно редко даже с тысячами записей.

Дмитрий Черник
На практике она возникает довольно редко даже с тысячами записей.

Хм, интересно очень. У меня стабильно падала на проекте в таких участках, все места правил такие. Может проплачены доп ресурсы были?

Raman Silin
Дмитрий Черник
На практике она возникает довольно редко даже с тысячами записей.

Хм, интересно очень. У меня стабильно падала на проекте в таких участках, все места правил такие. Может проплачены доп ресурсы были?

Да, эта ошибка очень странная, и, по моим наблюдениям, зависит от sf инстанса.
Доп ресурсов не покупали.

Raman Silin
В снипете все хорошо, там for loop и присутствует, но если как писалось вызвать account.AccountContactRelations.size() без for - то и упадет ошибка, если size > 200

for loop присутствует, а soql for loop отсутствует, а следовательно и его правила на 200 записей в пачке.

You might get a QueryException in a SOQL for loop

Специально орг создал только что для тестирования.
https://cloud.mail.ru/public/Gom7/sfSU1Mk6v

Андрей
это уникальный случай который никак не соответствует best practices for LDV (рекомендуется вообще до 10к), к

я тебе могу больше сказать в некоторых случаях 20k, может тебе не вернутся, при плохом запросе. Это отдельня большая тема LDV.

Developer
for loop присутствует, а soql for loop отсутствует, а следовательно и его правила на 200 записей в пачке.

Круто, спасибо. Действительно, посмотрел в git все места, где падала ошибка - soql был в самом for!

Sergey Prishchepa
я тебе могу больше сказать в некоторых случаях 20k, может тебе не вернутся, при плохом запросе. Это отдельня большая тема LDV.

При плохом запросе вообще ничего может не вернуться)

уверен что кому-то кроме меня приходится собеседовать кандидатов, или например ктото ходит активно по интервью
поделитесь интересными вопросами, а то последнее время фантазия кончается быстрее чем время

Посчитать чего-нибудь в триггере.

Вот мне нравятся такие собеседователи!
Вы для чего кандидатов выбираете?
Чтобы их тупыми вопросами на собеседовании задушить и тем самым самоутвердиться?

С сегодняшней доступностью информации в интернете и скоростью изменения технологий намного важнее как кандидат справляется с поиском ответов и преобразованием информации в решения. А вы еще про триггеры спрашиваете. Звиздец. Может лучше спросите про то как в Lightning открыть модальное окно на редактирование записи? Или как правильно в Lightning запустить рефреш страницы из кода. Кто из местных гуру кто собеседует кандидатов честно скажет что знает ответ прям с ходу по памяти?

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

У меня вот например валяется одно такое задание. Только большенство с многолетним опытом его хер сделают :D, а те кто сделают точно без работы не останутся.

Dmitry Shnyrev
Не занимайтесь ерундой. Если вам реально нужен человек для работа, дайте ему тестовую задачу по нужным технологиям и поставьте сроки ограниченные.

А я выше предлагал тоже самое :)

А можно ещё взять на триал период и получить реальную выполненную задачу и не обидеть кандидата, так как не благое это дело бесплатно выполнять тестовые задания ;)

Dmitry Lisovsky
А можно ещё взять на триал период

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

Dmitry Lisovsky
А можно ещё взять на триал период и получить реальную выполненную задачу и не обидеть кандидата, так как не благое это дело бесплатно выполнять тестовые задания ;)

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

Dmitry Shnyrev
Не занимайтесь ерундой.

Я возможно сильно критично выразился. У меня своя колокольня и я опираюсь на свой маленький опыт

То что творится "там" и тем более связано с большими компаниями (как пишет Андрей прямо с поля боя) может сильно отличаться от наших представлений.

Часто бывает попадают статьи на хабре как товарищи с опытом кодинга который мне и не снился пытаются пробиться в именитые компании. Когда месяцы тратят на разборы типовых вопросов, до дыр зачитывают книги про собеседования, а потом в течении нескольких дней посещают от 3 до бесконечности собеседований начинаю от уборщицы и заканчиваю главами отделов. И их нисколько не смущает что там конкурс на место 10 человек и шанс пробиться мизерный. ЗНАЧИТ ЭТО СТОИТ ТОГО.

В наших реалиях все по другому. Мы же и так отстаем по развитию лет на 10 от них . Значит нас это все еще ждет!

Dmitry Shnyrev
В наших реалиях все по другому. Мы же и так отстаем по развитию лет на 10 от них . Значит нас это все еще ждет!

Это кого?

От стран первого мира (wiki)

Не наверное так правильнее
Западный мир

Андрей
Developer
Дмитрий Черник
Mike V
Интересный вопрос, я знаю два способа: посчитать количество всех контактов каждый раз в триггера или в завести custom field и обновлять его. А какой третий?

Я имел ввиду три реализации триггера.

Не посчитаешь с помощью триггера, если на орге уже есть аккаунты где контактов более 50000. Первый подсчёт надо делать каким-нибудь батчем или queueable и записать в кастомное поле Count на Аккаунте, а дальше уже делать в триггере инкремент кастомного поля при добавлении каждого контакта.

это уникальный случай который никак не соответствует best practices for LDV (рекомендуется вообще до 10к), конечно вокруг неправильно построенной дата модели приходится городить огороды из батчей. При такой модели вообще мало чего кроме батчей будет работать.

Андрей, это не ответ на твой вопрос, но, возможно, будет интересно

Дмитрий Черник
интересно

А можешь в общих чертах рассказать про что там и что зацепило?
(а то блин читать много, еще и на английском )

Dmitry Shnyrev
Вот мне нравятся такие собеседователи!
Вы для чего кандидатов выбираете?
Чтобы их тупыми вопросами на собеседовании задушить и тем самым самоутвердиться?

С сегодняшней доступностью информации в интернете и скоростью изменения технологий намного важнее как кандидат справляется с поиском ответов и преобразованием информации в решения. А вы еще про триггеры спрашиваете. Звиздец. Может лучше спросите про то как в Lightning открыть модальное окно на редактирование записи? Или как правильно в Lightning запустить рефреш страницы из кода. Кто из местных гуру кто собеседует кандидатов честно скажет что знает ответ прям с ходу по памяти?

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

У меня вот например валяется одно такое задание. Только большенство с многолетним опытом его хер сделают :D, а те кто сделают точно без работы не останутся.


У тебя запросы как облегчить жизнь соискателю
у нас контора на 3к+ человек я не могу взять и поменять стиль набора.
мне дают телефонное интервью для отсеивания (число кандидатов - бесконечно) и потом я могу 2-3 человека (желательно не более, чтобы не тратить время) пригласить на онсайт и одного из них скорее всего надо брать потому что на другой раунд всей этой канители обычно нет времени

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

Андрей
У тебя запросы как облегчить жизнь соискателю
у нас контора на 3к+ человек я не могу взять и поменять стиль набора.
мне дают телефонное интервью для отсеивания (число кандидатов - бесконечно) и потом я могу 2-3 человека (желательно не более, чтобы не тратить время) пригласить на онсайт и одного из них скорее всего надо брать потому что на другой раунд всей этой канители обычно нет времени

Прочитал и вспомнил комментарий про гугл :D

Андрей
мне дают телефонное интервью для отсеивания

Блин, ну так с этого надо было и начинать
Вопрос надо было поставить по другому.
"Как можно завалить кандидата чтобы он потом не подал в суд на компанию за ущемление прав (или предвзятое отношение (что там у вас сейчас модно))"
Вот я и говорю с позиции периодического кандидата - нахер связываться с этими компаниями !!!

Dmitry Shnyrev
У меня вот например валяется одно такое задание. Только большенство с многолетним опытом его хер сделают :D, а те кто сделают точно без работы не останутся.

А можно поподробнее?

Dmitry Shnyrev
Блин, ну так с этого надо было и начинать
Вопрос надо было поставить по другому.
"Как можно завалить кандидата чтобы он потом не подал в суд на компанию за ущемление прав (или предвзятое отношение (что там у вас сейчас модно))"
Вот я и говорю с позиции периодического кандидата - нахер связываться с этими компаниями !!!

Дим, я понимаю твое отношение к этому, но попробуй посмотреть на этот процесс со стороны работодателя. Мы открываем позицию на Senior Salesforce Developer, на нее подается 30 человек. Что с ними делать, ну не звать же всех на интервью (это же сколько времени придется потратить). Поэтому устраивается короткое телефонное интервью, чтобы отсеять неадекватов или явно слабо подготовленных. Это не попытка избавится от них, это попытка упростить себе жизнь.

Дальше, тут предлагается испытательный период. Для кого? Для тех 5 человек, на которых мы остановились. Вы это себе как представляете? Мы говорим 5м людям: "Поработайте на нас 3 месяца, и мы выберем лучшего с кем и будем работать дальше (остальные пойдут лесом)." Адекватный человек не согласится 100% (многие не согласятся даже на оплачиваемое домашнее задание). Предлагать по 3 месяца испытательного срока им всем? Тоже не пойдет, долго и сложно.

Андрей
у нас контора на 3к+ человек я не могу взять и поменять стиль набора.

Это еще ничего мне прям с поля боя рассказывали вот пришло к тебе 150 человек на тренинг по Java и у тебя два часа что бы из них оставить необходимых 16 человек для треннинга. :)

Dmitry Shnyrev
С сегодняшней доступностью информации в интернете и скоростью изменения технологий намного важнее как кандидат справляется с поиском ответов и преобразованием информации в решения.

Этот скилл называется solve of Problems он тоже проверяется отдельной проверкой

Mike V
Дим, я понимаю твое отношение к этому, но попробуй посмотреть на этот процесс со стороны работодателя.

Ну я поэтому и поправил себя чуть выше :). Сужу со своей колокольни которая стоит в нашей деревне. Я работал в конторах где максимум набиралось 5 человек разработчиков (брестскую контору где я работал не считайте, она разрослась при мне только в последний год, а так 75% времени вы все умещались в один офис на 30 кв м). Так что к нам не выстраивались толпы жаждующих поработать студентов. Это нам все время приходилось народ искать и всеми силами упрашивать идти к нам. Тех кого знали брали сразу, кого не знали - давали тестовое задание с технологиями которые нам нужны. Поэтому так и сужу. Возможно действительно в развитых странах там с желающими и могущими работать дела обстоят по другому. Здесь реальных пацанов мало и их точно не будут запускать на собеседование к HR.

Mike V
А можно поподробнее?

Подробнее могу сказать что тестовое задание покрывает большую часть тем которые необходимы моим работодателям (вернее были необходимы, я сейчас немного в другой теме). И оно включает не только сам SF, но и Javascript.
Если интересно само задание, то могу его дать, но с условием неразглашение и результаты (положительные/отрицательные) с твоим CV нужно перенаправить работодателю. Тестовое задание все-таки должно отработать свое предназначение тем более не я один его составлял. А, да, и за его выполнение никто не заплатит
(если что пиши в личку)

Dmitry Shnyrev
Андрей
мне дают телефонное интервью для отсеивания

Блин, ну так с этого надо было и начинать
Вопрос надо было поставить по другому.
"Как можно завалить кандидата чтобы он потом не подал в суд на компанию за ущемление прав (или предвзятое отношение (что там у вас сейчас модно))"
Вот я и говорю с позиции периодического кандидата - нахер связываться с этими компаниями !!!

так я не хочу всех отсеять, я хочу кого-то взять!
есть условная фирма с контракторами и у них бесконечный ресурс контракторов - граждан одной прекрасной солнечной страны, намекну так - 2й по количеству населения. Моя задача за полчаса на каждого по телефону выбрать тех, на кого мы будем тратить моё и моего менеджера время оффлайн.
Причем если я задаю одни и теже вопросы в рамках одной фирмы - они таки адаптируются и приходят более подготовленными именно к тем вопросам что я спрашивал. То есть вопросы надо регулярно обновлять.
Не раз такое было собеседуешь по телефону - вроде нормальный, приходит на интервью - полный ноль. Собственно раньше на контракт у проверенных поставщиков брали после телефонного интевью, но в соседнем отделе случился казус что работать пришел не тот человек который проходил интервью по телефону, оказался вообще далек от темы, его выгнали пинком под зад а с поставщиком перестали работать.

То есть моя задача из бесконечного ресурса отобрать тех, на кого стоит потратить время on site. Большинство тех кто собеседуются - ооочень слабы. Вот и спрашиваю у кого есть интересные вопросы которые можно было бы по телефону задавать.

Реально простой вопрос: Где используется и отличия user context/system context. Как проверить доступ к полю если мы в system context? Отсеивает 1/3 кандидатов.
Сложно понять как такое можно не знать если у тебя в резюме 5-6 лет Salesforce.

Сам понимаю что система не идеальна, можно когото умного или потенциального пропустить, а как по другому если на кандидата полчаса по телефону? Больше времени нет все эти собеседования проводить.

Вот и гугл из тех же соображений меня прямо по резюме отсеял даже на телефонное интервью не захотели тратить время :)

Mike V
Dmitry Shnyrev
Блин, ну так с этого надо было и начинать
Вопрос надо было поставить по другому.
"Как можно завалить кандидата чтобы он потом не подал в суд на компанию за ущемление прав (или предвзятое отношение (что там у вас сейчас модно))"
Вот я и говорю с позиции периодического кандидата - нахер связываться с этими компаниями !!!

Дим, я понимаю твое отношение к этому, но попробуй посмотреть на этот процесс со стороны работодателя. Мы открываем позицию на Senior Salesforce Developer, на нее подается 30 человек. Что с ними делать, ну не звать же всех на интервью (это же сколько времени придется потратить). Поэтому устраивается короткое телефонное интервью, чтобы отсеять неадекватов или явно слабо подготовленных. Это не попытка избавится от них, это попытка упростить себе жизнь.

Дальше, тут предлагается испытательный период. Для кого? Для тех 5 человек, на которых мы остановились. Вы это себе как представляете? Мы говорим 5м людям: "Поработайте на нас 3 месяца, и мы выберем лучшего с кем и будем работать дальше (остальные пойдут лесом)." Адекватный человек не согласится 100% (многие не согласятся даже на оплачиваемое домашнее задание). Предлагать по 3 месяца испытательного срока им всем? Тоже не пойдет, долго и сложно.


кто сталкивался тот понимает
телефонное интервью экономит годы времени разработчиков, иначе потраченного на пустые собеседования
у меня вообще менеджер решил что надо брать временно контрактора. Поставщики контракторов имеют списки по 100+ человек навыбор ) собеседуй сколько угодно

Гнать, гнать и еще раз гнать метлой контракторов из бодишопов. А у граждан этой страны только бодишопы и есть.
Андрей, а что за нужда такая в контракторе именно? Уж сразу бы брали на full time.

Так же и с тестовым заданием. Вот у вендора есть 30 человек. Если им выдать 1 задание они один вариант и сдадут. Да и вендор может возмутиться, если для конкретного кандидата 2-3 часа не проблема, то для 20 человек, если каждый будет делать, это 60-90 часов рабочего времени за которое никто не заплатит. Если они сделали - потом комуто надо рассмотреть 30 практически одинаковых работ и решить кого одного приглашать на собеседование. Пригласишь, а тот кого ты выбрал окажется полным идиотом за которого сделали таск и которого вендор пытается куда-нибудь впарить чтобы брать комиссию. Если подумать - представим что у вендора есть свободных 30 человек ему выгоднее всего впарить самого тупого, пока есть запасные умные которые могут и на телефонном интервью подсказывать и задачи помогать делать. (да-да встречается сплошь и рядом, потому контракторов никто не любит)

Mike V
Гнать, гнать и еще раз гнать метлой контракторов из бодишопов. А у граждан этой страны только бодишопы и есть.
Андрей, а что за нужда такая в контракторе именно? Уж сразу бы брали на full time.

а тут засада. найти толкового человека на фулл тайм не можем.
Я думаю что неправльно составляют заявку, толковые люди не откликаются на вакансию "Developer/Admin"

Андрей
Developer/Admin

Если акцентируют внимание на 2х специализациях, то значит можешь заниматься либо чисто одной работой, либо другой, а не всем чистое админство нравится - бывает после всех этих кликов как девелопер деградируешь.
п.с. Написав просто Salesforce Developer, уже имеется в виду, что могут быть админские таски, но они не будут занимать большую часть работы.

Андрей
найти толкового человека на фулл тайм не можем.

Таких быстро редко найдёшь. Чаще всего только по рекомендации. А так поиск может растянуться на несколько месяцев.

Андрей
а тут засада. найти толкового человека на фулл тайм не можем.

А можно вакансию посмотреть? У вас удаленно или в офисе?

DevNull
А можно вакансию посмотреть? У вас удаленно или в офисе?

Судя по комментариям - в офисе. Иначе бы уже предложил на форуме людям :)

.

Андрей
Где используется и отличия user context/system context. Как проверить доступ к полю если мы в system context?

Ипать, я бы отсеелся сразу. Что это вообще за понятия user context/system context. Никогда в практике не сталкивался. Неужели все здесь ответ знают с ходу?

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

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

Массовость это уже больше статистическому анализу. А он не всегда работает. А взломы интервью это тема известная. Так уже давно делают и не только индусы, но и наши - отправляют на собеседование 2-3 своих друзей. Собирают все вопросы и приходят в шоколаде. А потом выясняется что разработчик как dev полный ноль!

Даже уже не знаю что и посоветовать.

Но усложнять вопросы имхо это не выход. Это только хуже.

Dmitry Shnyrev
Андрей
Где используется и отличия user context/system context. Как проверить доступ к полю если мы в system context?

Ипать, я бы отсеелся сразу. Что это вообще за понятия user context/system context. Никогда в практике не сталкивался. Неужели все здесь ответ знают с ходу?

Еще две недели назад не знал пока не начал готовить пакет к секьюрити ревью, догодаться на самом деле можно не факт что на собеседовании быстро ответить.

Dmitry Shnyrev
Ипать, я бы отсеелся сразу. Что это вообще за понятия user context/system context. Никогда в практике не сталкивался. Неужели все здесь ответ знают с ходу?

Это говорит о том что твой скилл Solve of problems, перекрывает другие скилы, это самое большая проблема при отборе кандидатов.

Так из опыта пример, у человека X лет опыта я знаю что он хороший разработчик, уходит собеседовать другой разработчик кандидата, возращается говорит он просит з/п 3xxx, а у самого знаний на среднего Junior. Вопрос кто дурак тот кто собеседовал или тот кто отвечал ?

Sergey Prishchepa
Так из опыта пример, у человека X лет опыта я знаю что он хороший разработчик, уходит собеседовать другой разработчик кандидата, возращается говорит он просит з/п 3xxx, а у самого знаний на среднего Junior. Вопрос кто дурак тот кто собеседовал или тот кто отвечал ?

Это называется - они занимались разной работой. Кто-то теорию учил для собеседований, общался с коллегами с определённым жаргоном, а кто-то работал сам, ни с кем не общался(определённых тем не знает, как тут было выше про контексты), но код пишет быстро и качественно и может даже сам завалить собеседующего по код ревью, если тот свой код покажет.

Sergey Prishchepa
Вопрос кто дурак тот кто собеседовал или тот кто отвечал ?

Так а зачем отправлять специалиста проводить собеседование если ты не доверяешь его оценке?

Sergey Prishchepa
Так из опыта пример, у человека X лет опыта я знаю что он хороший разработчик, уходит собеседовать другой разработчик кандидата, возращается говорит он просит з/п 3xxx, а у самого знаний на среднего Junior. Вопрос кто дурак тот кто собеседовал или тот кто отвечал ?

Ха-ха-ха = )) Кто здесь? = ))

Dmitry Shnyrev
Sergey Prishchepa
Вопрос кто дурак тот кто собеседовал или тот кто отвечал ?

Так а зачем отправлять специалиста проводить собеседование если ты не доверяешь его оценке?

Ситуация простая. Есть Лид и есть Разраб. Кандидат отправляет резюме. Разраб грит:"Чувак шарит.". Кандидат отсобеседовался. Лид грит:"Чувак не шарит на $3xxx.". А чувак зарабатывает $4xxx удаленно. Чувак просто, хотел поработать в команде и был готов ради этого пойти на дэмпинг $ и работать в офисе, а не удаленно. Видно не судьба. Больше чувак не будет собеседоваться в компании :-) Проще свою замутить.

Чувак просто не знает что в местных конторах больше 1,5К не платят. Больше только самым приблеженным к директорам и незаменимым людям типа офис менеджеры, специалистам по набору персонала, уборщицам. Разрабы они только умеют пердеть и кафе с печеньками жрать !

Developer
Sergey Prishchepa
Так из опыта пример, у человека X лет опыта я знаю что он хороший разработчик, уходит собеседовать другой разработчик кандидата, возращается говорит он просит з/п 3xxx, а у самого знаний на среднего Junior. Вопрос кто дурак тот кто собеседовал или тот кто отвечал ?

Это называется - они занимались разной работой. Кто-то теорию учил для собеседований, общался с коллегами с определённым жаргоном, а кто-то работал сам, ни с кем не общался(определённых тем не знает, как тут было выше про контексты), но код пишет быстро и качественно и может даже сам завалить собеседующего по код ревью, если тот свой код покажет.


Качественно под свои задачи.
Вот я работаю в основном, с одной компанией, до этого с другой. Система у них одинакова. Роли используются чисто как лэйбл пользователя, типа тот Маркетингом занимается, а другой Сэйлз. Все пользователи в орге все видят. Нет никаких тайн. По-этому я правами доступа никогда не заморачиваюсь. И не заморачиваюсь я ими уже лет так 5. Для сертификатов, конечно, заморочусь. Но не для работы и зарабатывания $.

Dmitry Shnyrev
Чувак просто не знает что в местных конторах больше 1,5К не платят. Больше только самым приблеженным к директорам и незаменимым людям типа офис менеджеры, специалистам по набору персонала, уборщицам. Разрабы они только умеют пердеть и кафе с печеньками жрать !
Ну, чувак хотя бы статистику $ поднимит. Может хоть кто-то добавит пожелания по зп этого чувака в свои списки, и когда кто-то другой попросит $3xxx, a не $4xxx как этот чувак, то может подумают:"О! Этот не $4xxx просит, как тот неадекват. Надо подумать.". Вдруг повезет кому-то :-)
Кстати, чувак выставляет $5,500 в месяц. На этом общение с рекрутерами из постСовка заканчивается :-)

Dmitry Shnyrev
Чувак просто не знает что в местных конторах больше 1,5К не платят. Больше только самым приблеженным к директорам и незаменимым людям типа офис менеджеры, специалистам по набору персонала, уборщицам. Разрабы они только умеют пердеть и кафе с печеньками жрать !

А если серьезно. Просто тут на местах уже есть устоявшийся уровень ЗП для разработчиков. Он примерно одинаковый для всех фирм. Даже вроде есть сервисы которые собирают анонимную статистику по ЗП для ИТ. Работая удаленно ты явно выпадаешь из этого круга, потому что тебе платят уже по другим тарифам. Это просто сейчас такая обстановка выгодная в РБ сформировалась - что можно жить здесь, а получать как там.

НИКОГДА ПРОСТОМУ РАБОТНИКУ НЕ БУДУТ ПЛАТИТЬ МНОГО!!! Это основы бизнеса. Работникам надо платить так чтобы хватало от ЗП до ЗП. Иначе он зажрется и перестанет работать.
Хочешь больше надо самому становиться бизнесом и начинать работать на себя и самому нанимать работников по 1,5К.

Andrii Muzychuk
Лид грит:"Чувак не шарит на $3xxx.". А чувак зарабатывает $4xxx удаленно.

А ты кстати учти, что лид сам может получает 3к до которых он рос 6 лет и он просто ох...л от такой наглости.

Dmitry Shnyrev
Sergey Prishchepa
Вопрос кто дурак тот кто собеседовал или тот кто отвечал ?

Так а зачем отправлять специалиста проводить собеседование если ты не доверяешь его оценке?

я не отправлял это менеджер решил :)

Dmitry Shnyrev
Andrii Muzychuk
Лид грит:"Чувак не шарит на $3xxx.". А чувак зарабатывает $4xxx удаленно.

А ты кстати учти, что лид сам может получает 3к до которых он рос 6 лет и он просто ох...л от такой наглости.
Ну, лид может и ЛинкедИн посмотреть и понять, что это нормальное требование этого чувака. Но да, он же не может изучать каждого кандидата - у него их тучи, а надо еще работать.

Был я на собеседовании в одной беларусской "известной" конторке. Мне предложили пойти джуном, ибо я нефига им не ответил. Так как не помнил чем отличается маркетинг клауд от sales клауд. И т.д. по мелочам. В другой конторе мне сходу предложили 1,5к, так как я на них больше сам наехал(вверх наглости было, я сказал что мне в падлу ехать к ним на собеседование и давайте говорить по скайпу). Я не жадный до денег сильно, за эти деньги может и готов был бы поработать удаленно, но явно не в офисе. Да тратить по 1,5 часа на дорогу в одну сторону мне точно в падлу.

Andrii Muzychuk
Качественно под свои задачи.

Код либо качественный, либо нет. 3-го не дано.
Просто кому-то плевать, кому-то (почему-то) крайне тяжело, а кто-то просто не знает, что его код говно, потому что некому было оценить и рассказать.

Dmitry Shnyrev
Это просто сейчас такая обстановка выгодная в РБ сформировалась - что можно жить здесь, а получать как там.

И чувствовать себя намного лучше, чем если бы поехал туда, т.к. у нас экономика построена на 500$+, а у них на 5000$+.

Developer
Andrii Muzychuk
Качественно под свои задачи.

Код либо качественный, либо нет. 3-го не дано.
Просто кому-то плевать, кому-то (почему-то) крайне тяжело, а кто-то просто не знает, что его код говно, потому что некому было оценить и рассказать.


Код либо выполняет свою работу, либо нет. 3го не дано ;-)

По теме.
1) Считаю очень полезным вопросом Triggers and Order of Execution. Сам периодически захожу на эту страничку и освежаю в памяти.
2) Upsert Statement

upsert sObjectList Account.Fields.MyExternalId__c;

1) Считаю очень полезным вопросом Triggers and Order of Execution. Сам периодически захожу на эту страничку и освежаю в памяти.

Как может быть полезным вопрос, если по вашему профилю вы занимаетесь SF 7 лет и периодически заходите на эту страницу, то есть сами не можете запомнить? Если только спрашивать знает ли человек что есть порядок выполнения, а найти он его сможет на той же страничке, когда понадобится.
Я проходил собеседования в 2 очень крупные компании в мск, ни в одной не заставляли писать код. Задавали общие вопросы, что и как делал в предыдущей компании. Да иногда углублялись в какие-то мелкие детали, скорее чтобы понять был ли реальный опыт. Думаю оценивали общую адекватность и примерный уровень прошлых проектов. В одной правда попросили прислать какой нибудь пример моего кода, но не думаю что он повлиял на решение. Да, оффер был от обоих.

akr0bat
Как может быть полезным вопрос, если по вашему профилю вы занимаетесь SF 7 лет и периодически заходите на эту страницу, то есть сами не можете запомнить?

Полезным может быть только обсуждение выполненного тестового задания(чтобы понять как девелопер решает конкретные задачи), но, как тут уже выше отметили, не у всех есть время на такой режим оценки. Всё остальное может и отсеять талантливого кодера и заапрувить балбеса, который был в теме вопросов.

akr0bat
Как может быть полезным вопрос
Очень просто. Он показывает знание определенной области СФ.
akr0bat
сами не можете запомнить?
Могу. К чему этот вопрос тут?

Dmitry Shnyrev
Андрей
Где используется и отличия user context/system context. Как проверить доступ к полю если мы в system context?

Ипать, я бы отсеелся сразу. Что это вообще за понятия user context/system context. Никогда в практике не сталкивался. Неужели все здесь ответ знают с ходу?

загугли/почитай, полезное знание
ответ на вопрос как проверить : Schema.sObjectType.Contact.fields.FieldName.isAccessible()
то есть кандидату надо сказать "надо использовать схема методы, isaccessible, isdeletable,iscreatable etc"

распространенный ответ - "ну мы можем заселектить профайл пользователя и из него выяснить доступ"

DevNull
Так как не помнил чем отличается маркетинг клауд от sales клауд. И т.д. по мелочам.

а вот такие вопросы я категорически не приветствую, мало того я их сам не знаю и такое я не задаю, это капец такое у разработчика спрашивать. Как и всякие "какие паттерны проектирования вы знаете?"

меня во многих конторах в долине заворачивали рекрутеры с формулировками типа "нам надо маркетинг клауд, у вас в резюме конкретно маркетинг клауд опыта нет, без маркетинг клауда не возьмем"
что читается как "мы гавнокантора и оцениваем разработчика так же как и бизнес-пользователя"

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

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

Андрей
Как и всякие "какие паттерны проектирования вы знаете?"

1) Не все паттерны тут работают или приносят какую-то пользу.
2) Паттерны реализуют для решения каких-то вопросов проверенным и эффективным способом, а не ради того, чтобы они просто были. Т.е. если сложность реализации и обслуживания превышает полезность, то паттерн не нужен.

Андрей
меня во многих конторах в долине заворачивали рекрутеры с формулировками типа "нам надо маркетинг клауд, у вас в резюме конкретно маркетинг клауд опыта нет, без маркетинг клауда не возьмем"
что читается как "мы гавнокантора и оцениваем разработчика так же как и бизнес-пользователя"

Они просто сами не знали, что им нужно. Видимо поддались чьим-то вредным советам в интернете или в самой конторе.

Андрей
это капец такое у разработчика спрашивать. Как и всякие "какие паттерны проектирования вы знаете?"
На счет паттернов не согласен. Мне кажется Apex Design Patterns должен, хотя бы, прочитать, а лучше знать, каждый уважающий себя разработчик (хотя, я сам их не читал :-( ). Я вот пришел к той точке у клиента, когда надо вводить какой-то менеджер триггеров. Если б я работал в компании, то меня старшой обязал бы использовать какой-то подход, который позволяет более прозрачно и легко контролировать выполнение триггеров и добавлять новую логику в них. Вот я пришел к той точке, когда уже надо. Но лучше бы я пришел к этому лет 5 назад. Мне б было легче и проще. А теперь переписывать кучу.

akr0bat
Я проходил собеседования в 2 очень крупные компании в мск, ни в одной не заставляли писать код. Задавали общие вопросы, что и как делал в предыдущей компании. Да иногда углублялись в какие-то мелкие детали, скорее чтобы понять был ли реальный опыт. Думаю оценивали общую адекватность и примерный уровень прошлых проектов. В одной правда попросили прислать какой нибудь пример моего кода, но не думаю что он повлиял на решение. Да, оффер был от обоих.

Я бы подписался под таким способом найма, если бы самолично не видел людей с 5-7 годами заявленного опыта, которые прекрасно рассказывают что они делали и как в деталях, а когда их просишь написать реальный код - они пишут такое ...
Прислать примеры предыдущих проектов - это хорошая идея. Но есть нюанс, у нас как бы NDA код с текущего проекта я прислать бы не смог. Хобби проектов у меня нет. Наконец, как правильно заметил Андрей выше, некоторые товарищи делают проекты сообща а потом выдают за свой (на сертификаты сдают так же).
Ну и последнее, что программист делает на работе - в основном пишет код. Как бы логично попросить сделать то же самое и на интервью, правда?

Andrii Muzychuk
На счет паттернов не согласен. Мне кажется Apex Design Patterns должен, хотя бы, прочитать, а лучше знать, каждый уважающий себя разработчик (хотя, я сам их не читал :-( ).

Хлам там, а не паттерны. Глянь оригинальные и потом посмотри, какой мусор там назвали паттернами и с какой стороны они похожи на оригинал. Даже не читай.

Andrii Muzychuk
Я вот пришел к той точке у клиента, когда надо вводить какой-то менеджер триггеров. Если б я работал в компании, то меня старшой обязал бы использовать какой-то подход, который позволяет более прозрачно и легко контролировать выполнение триггеров и добавлять новую логику в них. Вот я пришел к той точке, когда уже надо. Но лучше бы я пришел к этому лет 5 назад. Мне б было легче и проще. А теперь переписывать кучу.

Ещё достаточно времени пройдёт прежде чем ты его доведёшь до нормального состояния. Всё время будут модернизации, то из-за какого-то появившегося бага, то из-за роста скила, когда прочитав код, понимаешь, что здесь можно многое исправить.

Developer
Хлам там, а не паттерны. Глянь оригинальные и потом посмотри, какой мусор там назвали паттернами и с какой стороны они похожи на оригинал. Даже не читай.

Согласен, но ведь и Apex сильно проще. Выполняется только одна транзакция, потом все умирает. Зачем городить огород.

Andrii Muzychuk
Андрей
это капец такое у разработчика спрашивать. Как и всякие "какие паттерны проектирования вы знаете?"
На счет паттернов не согласен. Мне кажется Apex Design Patterns должен, хотя бы, прочитать, а лучше знать, каждый уважающий себя разработчик (хотя, я сам их не читал :-( ). Я вот пришел к той точке у клиента, когда надо вводить какой-то менеджер триггеров. Если б я работал в компании, то меня старшой обязал бы использовать какой-то подход, который позволяет более прозрачно и легко контролировать выполнение триггеров и добавлять новую логику в них. Вот я пришел к той точке, когда уже надо. Но лучше бы я пришел к этому лет 5 назад. Мне б было легче и проще. А теперь переписывать кучу.

это неправильно потому что человек может пользоваться паттернами именно из этой статьи но не знать названий и даже не подозревать что он пользуется какимто там "паттернами". Hа onsite собеседовании я попрошу написать код : мне нужны данные с обьекта в before и after update, как сделать чтобы данные были доступны за 1 SOQL?
если человек не скажет "синглтон" но сможет изобразить нужный статик метод я не считаю это ошибкой
а знать именно названия "decorator" "facade" и т.д. можно только заучиванием

статью читал много раз. названия так и не заучил. вопрос "какие паттерны знаете?" задавали, не ответил.

Mike V
Согласен, но ведь и Apex сильно проще. Выполняется только одна транзакция, потом все умирает. Зачем городить огород.

Поэтому многие паттерны либо не выполняют свои задачи, либо нереализуемы. К примеру, синглтон - если использовать в контроллерах страниц без view state, то он просто не выполняет свои задачи, т.к. статик жив только на время контекста, т.е. проще говоря запроса. При этом его многие продолжают городить зачем-то везде где могут.

Developer
При этом его многие продолжают городить зачем-то везде где могут.

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

Андрей
человек может пользоваться паттернами именно из этой статьи но не знать названий
Я именно такой человек :-) Проработав пару лет, я менял место работы. Товарищи подсказали поучить паттерны перед прохождением собеседований. И каково было мое удивление :-) Меня, как оказалось, приучали к высокому искусству старшие, только не говорили, что это паттерны и как он называются.
Но знать их прийдется, если хочешь устроиться в большую компанию.

Андрей
"ну мы можем заселектить профайл пользователя и из него выяснить доступ"

помоему немного зашкварно так делать)) такое наверное делают те кто совсем недавно в СФ.

Считаю очень полезным вопросом Triggers and Order of Execution. Сам периодически захожу на эту страничку и освежаю в памяти.

Это больше на вопрос похож, который задают в некоторых конторах, когда ты попросил поднять зп.

Андрей
а знать именно названия "decorator" "facade" и т.д. можно только заучиванием

статью читал много раз. названия так и не заучил. вопрос "какие паттерны знаете?" задавали, не ответил.


Это кстати помню знакомый говорил - что паттерны мол гавно, а сам во всю их пользовал, но не знал, что это паттерн))). И это не делало из него плохого специалиста!

А еще ты можешь быть ахеренейшим спецом, который может решать любые задачи, но не умеющим выразить свои мысли на словах. И на одной конторе, в которой тебе все доверяют и платят норм бабки, тебя будут считать гуру. А на собесе в другой конторе будут думать что ты зеленый, тупой дегенерат

Maxim Elets
А еще ты можешь быть ахеренейшим спецом, который может решать любые задачи, но не умеющим выразить свои мысли на словах. И на одной конторе, в которой тебе все доверяют и платят норм бабки, тебя будут считать гуру. А на собесе в другой конторе будут думать что ты зеленый, тупой дегенерат

Это очень верно, потому что не все могут быть учителями или ораторами.

Maxim Elets
помоему немного зашкварно так делать)) такое наверное делают те кто совсем недавно в СФ.

Теперь подумай как это можно сделать в тесте ?

Sergey Prishchepa
Maxim Elets
помоему немного зашкварно так делать)) такое наверное делают те кто совсем недавно в СФ.

Теперь подумай как это можно сделать в тесте ?

В смысле в тесте? В тесте ты подготавливаешь данные, создаешь юзера без доступа к примеру, и смотришь что твой чудо-класс возвращает. В тесте Schema.sObjectType.Contact.fields.FieldName.isAccessible() работает точно так же как и не в тесте

Или у тебя какойто другой вопрос который я не понял?

Developer
Поэтому многие паттерны либо не выполняют свои задачи, либо нереализуемы. К примеру, синглтон - если использовать в контроллерах страниц без view state, то он просто не выполняет свои задачи, т.к. статик жив только на время контекста, т.е. проще говоря запроса. При этом его многие продолжают городить зачем-то везде где могут.

Для логгера не вариант ?

Sergey Prishchepa
Для логгера не вариант ?

Откуда мне знать, как он реализован?

Maxim Elets
В смысле в тесте? В тесте ты подготавливаешь данные, создаешь юзера без доступа к примеру, и смотришь что твой чудо-класс возвращает. В тесте Schema.sObjectType.Contact.fields.FieldName.isAccessible() работает точно так же как и не в тесте

Как ты создаешь юзера без доступа ?

Developer
Sergey Prishchepa
Для логгера не вариант ?

Откуда мне знать, как он реализован? :)


Тоже верно:) там предпологается что по умолчанию один контекст на всё. я такие реализации видел не задумывался какой там смысл.

Sergey Prishchepa
Maxim Elets
В смысле в тесте? В тесте ты подготавливаешь данные, создаешь юзера без доступа к примеру, и смотришь что твой чудо-класс возвращает. В тесте Schema.sObjectType.Contact.fields.FieldName.isAccessible() работает точно так же как и не в тесте

Как ты создаешь юзера без доступа ?

видимо как то так?

Кстати, как часто вам дают время на такие тесты, где не только проверяется функционал по позитивным и негативным сценариям, но ещё и на разные уровни доступа?
п.с. мне - не чаще раза в год. Зато часто вижу i++ :D

Developer
Кстати, как часто вам дают время на такие тесты, где не только проверяется функционал по позитивным и негативным сценариям, но ещё и на разные уровни доступа?
п.с. мне - не чаще раза в год. Зато часто вижу i++ :D

i++ я не видел уже наверное несколько лет у нас на проекте тесты выглядят прям очень круто, можно посмотреть на тесты и понять как тот или иной кусок кода работает, очень помогает на всяких кастомизациях. и тесты дают гарантию примерно на 99%, что если ты чтото поправил и в них ничего не упало, значит твоя правка нормальная. то есть выполняют свою основную функцию, а не только чтобы >75% покрытие было.

Но это в нашем проекте. Иногда, на другом проекте, встречаются просто вызовы методов, чтобы 75% покрылось и можно было CS залить на прод

Maxim Elets
видимо как то так?

//create a user with the profile found that doesn't have access to the Account object
usr = new User(
firstName = 'testUsrF',
LastName = 'testUsrL',
Alias = 'tstUsr',
Email = 'testy.test@test.com',
UserName='test'+ Math.random().format()+'user99@test.com',
EmailEncodingKey = 'ISO-8859-1',
LanguageLocaleKey = 'en_US',
TimeZoneSidKey = 'America/Los_Angeles',
LocaleSidKey = 'en_US',
ProfileId = ps.Profile.Id,
IsActive=true
);
insert usr;
}

это от туда....

Maxim Elets
i++ я не видел уже наверное несколько лет у нас на проекте тесты выглядят прям очень круто, можно посмотреть на тесты и понять как тот или иной кусок кода работает, очень помогает на всяких кастомизациях. и тесты дают гарантию примерно на 99%, что если ты чтото поправил и в них ничего не упало, значит твоя правка нормальная. то есть выполняют свою основную функцию, а не только чтобы >75% покрытие было.

Это какая-то из местных контор или удалёнка?

Developer
Maxim Elets
i++ я не видел уже наверное несколько лет у нас на проекте тесты выглядят прям очень круто, можно посмотреть на тесты и понять как тот или иной кусок кода работает, очень помогает на всяких кастомизациях. и тесты дают гарантию примерно на 99%, что если ты чтото поправил и в них ничего не упало, значит твоя правка нормальная. то есть выполняют свою основную функцию, а не только чтобы >75% покрытие было.

Это какая-то из местных контор или удалёнка?


удалёнка :)

Maxim Elets
удалёнка :)

Местный бардак не закрался :)

Developer
Maxim Elets
удалёнка :)

Местный бардак не закрался :)


все девелоперы и qa продукта - местные ребята из РБ.
БА - ребята из-за бугра

Maxim Elets
все девелоперы и qa продукта - местные ребята из РБ.
БА - ребята из-за бугра

Но это видимо не джуниоры с университета и "лиды" с короной со скилом не выше мидла и то только в общих вещах, а не хорошем кодинге.
Проблема в экономии местных фирм, чтобы больше заработать и это приводит к тому, что собирается такой контингент, которому либо надо с чего-то начинать(студенты), либо уже те(типа "лиды"), кому в другом месте лучше не будет чем здесь или вообще забракуют.

Maxim Elets
Андрей
"ну мы можем заселектить профайл пользователя и из него выяснить доступ"
помоему немного зашкварно так делать)) такое наверное делают те кто совсем недавно в СФ.

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

Developer
Местный бардак не закрался :)

Да все зависит от проектов.
Максим вроде работает с большим серьезным проектом, как и многие ребята из РБ. Там все настолько серьезно поставлено в плане организации работа, автоматизации и контролю что никто и не думает про i++
Но вокруг полно проектов где
- хуяк хуяк и после обеда в прод.
- Ой, про тесты никто не подумал
- хер с ним - a++
Сам буквально недавно этим грешил

Interesting information? Help us, post link to social media..