Как стать автором
Обновить
7
0

Пользователь

Отправить сообщение

Почему чемпионы по стратегическим играм становятся плохими руководителями?

Время на прочтение2 мин
Количество просмотров2.1K
imageВероятно, многие замечали, что, как только хорошего программиста назначают руководить другими программистами, он сразу становится плохим руководителем, а иногда ещё и плохим программистом. Плохим программистом он становится обычно, потому что ему не дают сосредоточиться на программировании, а постоянно дергают по менеджерским вопросам, потому многие тим-лиды предпочитают програмить либо рано утром, либо поздно ночью, когда никто не отвлекает.

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

Почему же нам программистам сложно научится управлять людьми, мы же за свою жизнь сыграли в столько стратегических игр как компьютерных, так и настольных. Казалось бы, знаем практически все про стратегию и тактику. Многие даже с блеском выигрывали не только военные, но и экономические стратегии. В чём же причина?

Читать дальше →
Всего голосов 156: ↑117 и ↓39+78
Комментарии142

Помогите, нас захватывают

Время на прочтение12 мин
Количество просмотров169K
Доброго дня, друзья!

Мы понимаем, что хабр это не площадка для выяснения отношений и уж тем более не наша личная армия, но ситуация, описывыемая в этом посте, чрезвычайно важна для всей IT-индустрии в нашей стране. Мы, сотрудники компании Dream Industries (сервисы Zvooq, Bookmate, Теории и практики и Третье место), хотим заявить о продолжающемся в данный момент рейдерском захвате нашей компании.



Читать дальше →
Всего голосов 441: ↑371 и ↓70+301
Комментарии405

IPO for dummies. Часть VI: сложности выбора — два Lamborghini Gallardo или один Aventador?

Время на прочтение6 мин
Количество просмотров2.5K
Начало и оглавление см. в первой части.

Итак, моя компания вышла на IPO. Теперь я, как основатель, могу наконец-то сбросить свои акции и купить Lamborghini Gallardo! Да, я помню, что их придётся продавать «ниже рынка», но уж очень хочется прокатить Тамарку с пятого этажа на красивой спортивной машинке…

Ты весь бизнес затеял ради наживы, что ли?

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

«Трава не расти», говоришь? Я правильно понимаю, что ты, основатель, хочешь выйти из бизнеса и забросить его?

У меня для тебя неприятная новость.
Читать дальше →
Всего голосов 159: ↑151 и ↓8+143
Комментарии30

Пишем одностраничный клиент на javascript

Время на прочтение5 мин
Количество просмотров48K
Данная статья является вольным переводом. Оригинал тут.

Введение


Думаю, ни для кого не секрет, что клиентские приложения в современных веб-сервисах становится все сложнее и количество JS кода в них растет. До недавнего времени архитектура клиентской части, как правило, разрабатывалась с нуля и была специфична для каждого проекта. Не удивительно что приходилось снова и снова сталкиваться с типичными задачами.
К MVC-фреймворкам на серверной стороне все уже привыкли, но JS код на клиенте часто бывает плохо структурирован.

Предлагаю ознакомиться с решением на базе backbone.js, underscore.js и jQuery, которое поможет решить эту проблему.

Постановка задачи


Каким бы мы хотели видеть наше приложение? Вот основные моменты, которые мне кажутся важными:
  1. Должен быть удобный способ описать модели нашей предметной области.
  2. Любые изменения в модели должны немедленно отражаться в пользовательском интерфейсе, если модель в нем представлена каким-либо образом.
  3. Понятная и легко-поддерживаемая структуризация кода в стиле MVC.


Попробуем решить эти задачи на примере простого приложения «Каталог фильмов».
Поехали!
Всего голосов 70: ↑64 и ↓6+58
Комментарии51

Итераторы и генераторы на основе функций

Время на прочтение6 мин
Количество просмотров5.1K
Поддержка итераторов и генераторов в качестве языковых конструкций появилась в javascript только в версии 1.7, и об использовании этих чудесных вещей в браузерах еще долго можно будет только мечтать. Однако использовать итераторы и генераторы в виде паттернов проектирования в javascript можно уже сейчас, и более того, делать это достаточно легко, а иногда даже приятно :)
Добро пожаловать под кат
Всего голосов 38: ↑36 и ↓2+34
Комментарии9

Iterators & Generators

Время на прочтение12 мин
Количество просмотров19K
Обработка элементов коллекции/массива обычная и частая операция. В JavaScript есть несколько способов обхода коллекции начиная с простого for(;;) и for a in b

var divs = document.querySelectorAll('div');
for (var i = 0, c = divs.length; i < c; i++) {
    console.log(divs[i].innerHTML);
}

var obj = {a: 1, b: 2, c: 3};
for (var i in obj) {
    console.log(i, obj[i]);
}

У объекта Array есть методы обхода всех элементов map(), filter()
var numbers = [1, 2, 3, 4, 5];
var doubled = numbers.map(function (item) {
    return item * 2;
});
console.log(doubled);

В Firefox есть "заполнитель массива" (Array comprehensions)
var numbers = [1, 2, 3, 4];
var doubled = [i * 2 for each (i in numbers)];
console.log(doubled); // [2, 4, 6, 8]

Итераторы и Генераторы появились в JavaScript 1.7 (по версии Mozilla) они есть пока в Firefox 2+ (в статье будет упомянут способ как их можно «эмулировать» почти во всех браузерах с костылем) Итераторы и Генераторы вносят механизм, позволяющий управлять поведением for in и инкапсулировать процесс получения следующего элемента в списке объектов.

Часто для обхода и обработки элементов массива мы пишем большие конструкции, часто копипастим их части. Задача Генераторов и Итераторов усовершенствовать этот процесс, добавив синтаксический сахар.
Читать дальше →
Всего голосов 89: ↑86 и ↓3+83
Комментарии16

Обходим чужие тормоза

Время на прочтение8 мин
Количество просмотров6.9K
Бэкапил историю сообщений из Skype самописной утилиткой, год назад она работала отлично, а теперь стала люто тормозить. Это неприемлемо, тк. в том числе ради скорости экспорта она и была написана, поэтому полез в профайлер. По итогам узнал всякое и получил множественные просветления. Оказывается, breakpoint на функцию в подгруженной системной DLL ставить приходится с подвывертом, а не просто по имени, но таки можно и нетяжело. Оказывается, Skype API написан местами зверски криво, отчего и тормозища. Оказывается, чужие бинарники иногда можно очень легко подхачить и подоптимизить (слава MS Research!). Оказывается, профайлер может сильно врать, а не просто слегка подбрехивать. Ключевые слова для нетерпеливых: C++, VS, CodeAnalyst, Skype COM API, MS Research, Detours, SQLite; а для всех остальных подробности под катом.
Читать дальше →
Всего голосов 180: ↑176 и ↓4+172
Комментарии59

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность