Тесты на время

Хуже чем проверка знаний на время может быть разве что выдача тестов с неправильными ответами 🙂

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

Почему этой фигней до сих пор страдают люди, особенно в IT, мне не понятно.

Не делайте так!

P.S. Я обычно отказываюсь от прохождения такого, но настойчиво попросили… Результат — половина ответов «в молоко» 🙂

Задачки из Тестовых Заданий

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

Любимая задачка: перевернуть строку, по символьно, задом на перед.

Я понимаю зачем это надо уметь делать на С/C++ без дополнительного выделения памяти когда каждый байт на счету…
Но на собеседовании по JavaScript? Это ж интерпретируемый (иногда не однозначно) язык, где мегабайты памяти утекают по мелочи!

Ну ок, сел и на бумажке написал примерно вот такое. Выпендрился, fat arrow function заюзал 🙂

const reverseStringByHalfLoop = (value) => {
	const length = value.length; 
	const halfLength = Math.floor(length / 2);

	let result = value.split('');
	for (let i = 0; i < halfLength; i++) {
		const char = result[i];
		result[i] = result[(length - 1) - i];
		result[(length - 1) - i] = char;
	}
	return result.join('');	
}

Этот код поставил в тупик интервьювера! Он даже начал проверять что будет если длинна строки нечетная…

Отвечаю: ничего не будет, средний символ сразу стоит на своем месте 🙂

Ёбушки-воробушки© Вот мы и дожились до программистов (более того интервьюверов) которые про алгоритмы вроде и слышали, вопросы на собеседованиях задавать умеют, но вот «стандартные ответы» на эти вопросы видят в первый раз.

Оказалось от меня ожидали JavaScript style ответа. Я потом загуглил, типа вот такого:

function reverseStringByArray(value) {
	return value.split('').reverse().join('');
}

Ладно, проехали…

Вот вам еще вопрос (точнее связка) который уже 2 раза встречал:

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

В общем очередная шизиловка 🙂 Если что, это делается это как-то так:


export const sumOfAllArgs = (...args) => {
	return [...args].reduce((a, b) => a + b, 0);
}

let arr = [1,2,3,4,5];
sumOfAllArgs(...arr);

Но я так и не понял зачем 2 вопроса об одном и том же? Скорее всего этим вопросам тоже 100 лет в обед, а раньше, до ES6 синтаксиса, решалось через proptypes или еще какую-то олдскульной JavaScript Magic.

В общем технические интервью это иногдза забавно. Но качество специалистов удручает… Все знают SOLID и меряются кол-вом патернов, а вот чужой код и best practices уже никто не изучает.

P.S. Да, я на старости подрабатываю программистом. Это прикольно, не дает мозгам засохнуть, ну и 30+ баксов в час это таки деньги 🙂

Тот редкий случай когда Гавно-Код™ лучше универсального.

Опять занесло меня в PHP программирование, надо было сделать подержку настроек из глобального config.json для уже существующих сайтов на WordPress.

И вот столкнулся с тем редким случаем когда Гавно-Код™ aka Как-Индусы® лучшее решение:

$props = explode('.', $configPropertyName);
switch (count($props)) {
// TODO: Add more deep cases if the Config become too nested.
    case 3:
        $value = $config->{$props[0]}->{$props[1]}->{$props[2]};
        break;
    case 2:
        $value = $config->{$props[0]}->{$props[1]};
        break;
    default:
        $value = $config->{$props[0]};
}    

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

P.S. Не забывайте писать TODO: для таких вот «хаков», через год сами не поймете почему так написано и вместо добавить пару копи-пастов начнете рефакторить с криками: «Да кто так пишет?!»

Придумал как бороться с бессоницей

Видимо возраст уже, но стоит мне включить какой-то видео урок (Udemy, Coursera, YouTube) как через 10-15 минут начинаю засыпать!

Бывают конечено исключения… Но тогда за пол ночи изучаю что-то полезное, а не всякую фигню в голове ворочаю.

Не благодарите 🙂

Факты о Бизнесе — Начало и Конец

У любого бизнеса есть начало и конец. Понимание когда перестанут работать бизнес-модели важнее чем обороты и прибыль самого бизнеса.

Забавная математика

По статистике есть 10% людей, которые хорошо выполняют работу не зависимо от оплаты. Они просто не умеют халтурить… Есть 10% людей которые не обучаемы в принципе, то есть сколько бы ты им не платил — дело сделать они не смогут! В оставшиеся большинство составляют люди, которые работают в зависимости от уровня оплаты и другой мотивации. То есть платишь хорошо (или бьешь батогом) — работают хорошо. Платишь мало — сачкуют.

Теперь вопрос: как из 10% взрослого населения Украины (пусть будет 3 миллиона человек) не нашлось всего каких-то 450 идейных индивидуумов первой группы?

P.S. Да, это я про депутатов Верховной Рады.

P.P.S. Очень надеюсь, что они не из второй группы руко-жопых…

Глюк вспышки Canon 600EX

У Саши Палеевой заглючила вспышка Canon 600EX во время съемок. Засвет есть, а фотографии темные. Более того значение Zoom не изменяется ни от объектива, ни настройками самой вспышки!

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

В общем если у вас перестал работать зум на вспышке, особенно после съемки длиннофокусными объективами, то это оно! Лампочка зацепилась проводом в самом низком положении, и ни туды и не сюды ©

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