[info]agilizt


Denis Miller

Программист, Team Lead и Agile евангелист


Я гуру JavaScript или розовые очки самообучения
[info]agilizt
Второй день дал себе отдыха от интенсивного погуржения в JavaScript мир и стал наблюдать интересное состояние. Состояние интеллектуальной эйфории. Можно выделить 2 состояния: состояние интеллектуальной эйфории ("я красавец, молодец!") или состояние отдачи (пассиавное, "у ну их всех") Попытаюсь просуммировать наблюдаемое внутреннее состояние:

Триггера, потенциально вызвавшие состояние:
  • Читал много (3-4 книги одновременно по выбранной главе)
  • Нагрузка была на работе, дома, приболел
  • Внутреннее ощущение возникло, о понимании концепта в целом (модели)
  • Нету хорошей практики (в основном идеалистическое понимание фич языка)
  • Пауза в 1-2 дня
Начали возникать позывы
  • Забить на JavaScript (хотя целевой фокус никуда не уходил, и общая мотивация есть)
  • Желание заняться чем-то другим (почитать материал про другие вещи, технологии)
  • Желание позаниматься другим не может быть подменяно на почитать следующую главу (что-то всё таки координально другое хочется)
Субъективные ощущения
  • Самоуверенность по изученному/недоученному материалу
  • Пелена интеллектуальной эйфории (могу со знанием дела флеймить на тему)
  • Желание бросить, да и так всё знаю
  • Повышенная узнаваемость материала
Наблюдения
  • Первым делом остановился. Отдал отчёт, что это эмоции (то есть что-то на биохимическом уровне в мозгу закоротило)
  • Принять состояние, но отказаться реактивно действовать (перекинуться на чтение любовных романчиков)
  • Начал правильно понимать состояние, что это, почему и что оно даёт. Куда оно приведёт и как это коррелирует с осознанными целями.
  • Микро-вывод: делать паузы не нужно, нельзя останавливаться. Но! Попробовать совместить внутреннее состояние с последующим чтением материала. То есть перенести эмоциональное состояние на рабочую ситуацию. Посмотреть, как будет работать, или сдуется при нагрузке.
Действия
  • Хорошо помогло остыть "отрезвление" реальностью - просто попробовал прочелленджить состояние на предмет объективности и полезности. Хорошо отрезвляет попытка что-нить практическое поделать по изученному или неизученному материалу. Сразу граница незнания начинает очерчиваться.
  • Нужно держать в фокусе материализированный и визуализированный скоуп работы. Лучше таскбордом и бёрндауном. Чтобы меньше левых розовых очков
  • Порции приёма информации должны быть маленькие и измеряемые, должна быть практика. Торопиться нам некуда.
Вот такое интересное состояние отловил. Интересно, что это? было ли у вас? как с этим работаете? и что классическая психология об этом говорит?
  • Leave a comment
  • Add to Memories

Объекты в JavaScript
[info]agilizt
Сегодня сфокусировался на объектах в Java. Основные моменты (детали в книгах), остановлюсь на названиях основных фич объектов:
  • Объект - это ассоциированный массив - имя + значение, то есть объект - это массив свойств (properties), собственно объект и определяет сам тип
  • Так как объект и тип вещи близкие, поэтому наследование реализовано шаблоном прототип
  • Существуют get/set
  • Существует метаинформация по объекту и его свойствам
  1. Атрибуты свойств : изменяемый, перечисляемый, конфигурируемый (можно установить атрибут и свойства свойства изменятся)
  2. Атрибуты объектов : ссылка на прототип (родителя), имя класса, расширяемость
  • Варианты обращения к свойствам объекта:
object.property
object["property"]
  • Существует целый вагон методов работы с метаинформацией объектов и их свойствами, добавления, удаления и т.п.
Создаются объекты одним из способов
  • object literal - некое аннонимное объявление объекта (без типа)
  • new - объявление объекта из типа
  • Object.create - вывести объект из прототипа
Создание объектов. Примеры трёх способов создания объектов:
1) object literal - насладитесь динамизмом и гибкостью, лучше осознавать в исполняющей среде :)
var book = {                      
    "main title": "JavaScript", 
    author: {                       
        firstname: "David",            
        surname: "Flanagan"            }
};
2) так работает "new":
function Circle(radius) {
this.radius = radius;
}
var circ = new Circle(6);
3)  Object.create
var obj = Object.create({x:1, y:2});  // obj содержит два свойства x=1, y=2 теперь
Типы и объекты. Немножко аналогий (Java ---> JavaScript):
public class widget {}     --- >    function widget() {}  
public class widget {     ---->      widget.prototype.go = function() {}  
    public widget() {}
    public void go() {}
}  
public class doodad extends widget {}   ---->   doodad.prototype = new widget()   // этот эффект ещё называют prototype chain
Интересно, что разные авторы по разному раскрывают  тему объектов. Кто-то описывает все свойства и аттрибуты, кто-то делает дополнительные фукции, кто-то показывает как реализовать "инкапсуляцию".  Если отойти от заявленной темы, то выбранный подход - брать тему и читать 3-5 книг по ней, позволяет более широко воспринять материал. И то что кажется страшным, после очередного объяснения третим автором превращается в приятную банальность :o) 
Но всё таки объёмы информации пугают... Вроде начиналось так просто :o)

Просматривал:
  • JavaScript The Definitive Guide by David Flanagan
  • JavaScript Programmer's Reference by Alexei White
  • Test-Driven JavaScript Development by Christian Johansen
  • JavaScript The Good Parts by Douglas Crockford


Функции в JavaScript
[info]agilizt

Одолел понятие функции в JavaScript. Приведу сногшибательные концепты.

Functions in JavaScript are objects.
JavaScript The Good Parts

Объявление полей функции (вообще функция в Java Script назвается first class)

var myObj = {

    innerFunction : function() {

        this.val = 100;

    }

}

myObj.innerFunction();

document.write(myObj.val);    // 100  круто? Да?

В общем динамизм прёт через все щели! И это придумали в 1995 году!

Видимость переменных определяется объявлением

var value = "Global";

function foo() {

    //var value = "Local";

    return value;

};

document.writeln(foo());  // Global

Перегрузка функций

function threeArguments(a, b, c) {

    return “We expect 3 arguments: “ + a + “, “ + b + “, “ + c;

}            

function threeArguments(a,b,c,d) {

    return “Now we expect 4 arguments: “ + a + “, “ + b + “, “ + c + “, “ + d;

}            

document.write( threeArguments(1, 2, 3) ); // “We expect 4 arguments: 1, 2, 3, undefined”

            

Closure - убойный эффектво время определения функции запоминается контекст (тут нету стэка вызовов, здесь цепочка объектов).

function greetMe(name) {

  return function(greeting) {

    return greeting + “ “ + name;        <---- вот эта переменная запомнится ссылкой, залочится (closure) значением, с которым вызывали функцию

  }

}

var greetAlexei = greetMe(“Alexei”); <--- здесь сделали функцию-объект с определенной в ней переменной name = Alexei

document.write( greetAlexei(“Hello”) ); // “Hello Alexei” 

Несколько бузвордов для штудирования (дел не во всех книгах упоминаются)

  • call, apply  вызов функции по названию
  • bind - добавление к объекту новой функции
  • memorization - микропаттерн для запоминания состояния (особенно рекурсивных вызовов)
  • curry - подход определения новой функции из базовой + параметров

Ссылки (в порядке полезности):

  • David Flanagan - JavaScript The Definitive Guide 6th Edition (очень подробно описано, правда некоторые вещи лишние думаю, но для полноты составления картинки хорошо идёт)
  • JavaScript Programmer's Reference by Alexei White (кратко с тучей примеров, быстро доходит)
  • Christian Johansen - Test-Driven JavaScript Development (тесты на все концепты, покрыты все темы)
  • JavaScript The Good Parts (просмотрелась быстро, после одоления двух предыдущих)
  • M.Morrison - Head First JavaScript (очень скудно описано, переизбыток повторов и банальностей)

Орг.выводы:
  • разметка в блоге - вырви глаз
  • читать один аспект по нескольким книгам - сразу в голове устаканивается хорошо
  • прочитал главу - потом каждый пример запустить - очень помогает подумать за границы написаного

JavaScript и MVVM - профессиональный RIA-клиент или смерть WPF
[info]agilizt

.Net разработчик умудрённый опытом горестно вздохнёт посмотрев на гавно-код, который порождает JavaScript… Нету разделения по слоям, всё падаёт в кучу, нету паттернов, шматернов. Как же в этом болоте жить? А жить нужно, ведь скоро Windows 8 и вообще всё скоро будет на JavaScript. Что же делать?

Оказывается уже есть решение - http://knockoutjs.com/

  • Декларативное связывание (declarative Bindings) - связь объектов и DOM элементов
  • Автоматическое обновление (two-way binding в терминах WPF)
  • Отслеживание зависимостей - данные трекаются и комбинируются (плохо понял пока)
  • Шаблоны - язык написания шаблонов (всякие репитеры и т.п.)

Приведу кусочек кода. Идея такая - никаких ручных обновлений полей и всякого такого. Меняем объект - он сам обновляется во вьюшке.

<!-- Это HTML код, View -->

<p>First name: <strong data-bind="text: firstName"></strong></p>

<p>Last name: <strong data-bind="text: lastName"></strong></p>

<p>First name: <input data-bind="value: firstName" /></p>

<p>Last name: <input data-bind="value: lastName" /></p>

<p>Full name: <strong data-bind="text: fullName"></strong></p>

<button data-bind="click: capitalizeLastName">Go caps</button>

// Это ViewModel

function AppViewModel() {

    this.firstName ko.observable("Bert");

    this.lastName ko.observable("Bertington");

    this.fullName ko.computed(function() {

        return this.firstName() + " " this.lastName();    

    }, this);

    this.capitalizeLastName function() {

        var currentVal this.lastName();        

        this.lastName(currentVal.toUpperCase());    };    

}

// Включение биндинга

ko.applyBindings(new AppViewModel());

Комментарии

  • data-bind="text: firstName"  - так мы завязались на поле вьюмодели AppVeiwModel.fistName
  • ko.applyBindings(new AppViewModel()) - в вот так мы знаем, что нужно завязываться именно на эту вьюмодель
  • Кстати меняя <input... меняется и значение в <strong….
  • Ну и когда нажимаем "Go caps" - значение пересчитывается и складывается в fullName поле.

Пощупать пример в реали можно здесь: http://learn.knockoutjs.com/#/?tutorial=intro

  • 4
  • Leave a comment
  • Add to Memories

Погружение в JavaScript и jQuery за 6 часов
[info]agilizt

Вот и закончились выходные. За 2 дня я проделал погружение в мир web-технологий. Получил огромный обзор и расширил границы своего незнания до неприличия.  Но этот пост не о том. Последняя часть для получения базовых сведений о веб-разработке - JavaScript и библиотека jQuery. 

  • JavaScript & Jquery: The Missing Manual (примеры кода) by David Sawyer McFarland: первая книга по теме. Обзор хороший, все основные фишки показаны. Наверное лучше идти на сайт jQuery и там смотреть библиотеки.
  • JavaScript Patterns by Stoyan Stefanov Рихтер для JavaScript (Рихтер очень мощный автор, раскрывающий всю поднаготню языка C#).  Похоже эту книжку нужно внимательно перечитать попозже. И однозначно поставить в поток медленного чтения.
  • jQuery Recipes: A Problem-Solution Approach (Expert's Voice in Web Development) by B.M. Harwani (примеры кода): У этой книги очень плохой рейтинг на амазоне. Просматривая книгу я отметил, что это не есть гут. Книга разбита на масенькие рецепты, точки аттракции, как сделать то или иное. Самые важные мелкие кирпичики. Иногда читая название совета я задавал себе вопрос - а я уже могу это? Если отвечал нет - с интересом читал решение. Думаю хорошее введение в тему, сразу с практических моментов. После этой книги нунжо читать что-нить классическое и медлено.
  • JavaScript The Definitive Guide 6th Edition by David Flanagan (примеры кода) - всего понемногу. Очень плотно материал выдаётся, чтобы сами проверяли. Автор признанный авторитет в теме, но лучше кучи исполняемого кода нету лучшего учебного пособия. А чтобы его примеры кода запустить - нунжо делать танцы с бубном.
  • jQuery Pocket Reference by David Flanagan: вообще не понимаю зачем выпускать такие недо-книги.
  • Pro jQueryBy Adam Freeman (пример кода) - коллекция рецептов без много количества слов. Красивые картинки, хороший обзор различных UI библиотек.
  • JavaScript The Good Parts - коллекция паттернов и анти-паттернов. Плюс основы языка.
  • High Performance JavaScript by Nicholas C. Zakas - наверное интересное, уже сил нету листать книги. В конце обзор разных инструментов.
  • Pro Javascript RIA Techniques - Best Practices, Performance and Presentation by Dennis Odell - тяжёлый метал наконец-то пошёл. Но похоже книга уже старовата.

Обнаружены интересные сайты

По качеству кода совершенно мало книг, поэтому пошёл искать сайты:

По JavaScript и jQuery следующие шаги

  • Выучить основы языка (очень дотошно)
  • Выучить основы нотации jQuery, без библиотек

Выводы

  • Гавно-код. Все книги, что просмотрел дают очень  стилизированные примеры. Куча кода в одном месте. Конечно сообразить можно быстро. Но это закрепляет неправильное в корне понимание качества кодирования. Похоже нужно брать знаменитые открытые проекты и учиться у них.
  • Ссылки. В конце каждой книги ссылки на другие технологии! Их так же нужно просматривать в этом режиме. Делать список и ознакамливаться.
  • Примеры или метод научного тыка. Примеры, примеры и ещё раз примеры. Вместо чтения главы, я открываю примеры главы - запускаю, просматриваю код, если всё понятно - читать главу даже не нужно :o) Очень быстро получается.
  • Коллекция рецептов. В каждой книге много примеров - их нужно просто в свою копилку переносить. Например OneNote и классифицировать.
  • Ежедневный план. Ежедневный план должен включать
  1. Просмотр одной книги (это 30-60 минут в день)
  2. Разбирать 5-10 примеров по интересующей технологии
  3. Выбрать одну классическую книгу и потихоньку смаковать (30-60 мин в день)
  • Общий план. Сделать карту знания технологий, чтобы понимать свои интересы, периодически просматривать книжные полки, подписаться на рсс лидеров индустрии и пресс-релизы сообществ. Нужно организовать два потока: поток медленного чтения (для шедевров), поток быстрого (сканировать книги в поисках и ознакомления с теми или иными технологиями)

Дальнейшие направления развития: SEO, производительность и мобильные устройства. Может быть нужно понять wiki или wordpress, где разные примеры собирать. Каждый пример должен содеражать исполняемый код: чтобы сразу проверить + исходный код.

Но самое лучшее - начать писать сайт и познавать глубину исходя из реальных задач!

  • Leave a comment
  • Add to Memories

Погружение в HTML5 Canvas за 4 часа
[info]agilizt

Недавно прокачался я CSS, теперь принялся за HTML5 Canvas. Подход тот же самый: KWLS + подход мурзилки :o)

Выводы:

  1. Просмотрев кучу книг в голове осели основные фичи языков и продуктов.
  2. Отлично, что есть код к книгам и его можно выкачать и посмотреть (хотя я его не очень то и смотрел)
  3. Совершенно не освещён вопрос архитектуры и дизайна сложных приложений (похоже нунжо брать код проектов и смотреть). Где есть хорошие примеры и коллекции примеров сложных приложений?

Следующая серия книг: JavaScript и jQuery! Последняя технология для обзора.


CSS погружение в тему за 8 часов
[info]agilizt

Потихоньку решил делать свой сайт, а чтобы подкачаться знаниями прочитал сегодня несколько материалов (тут и тут и тут). Потом целый час думал с чего начать из серъёзных работ. Решил делать просто. Не заострять внимание на деталях, а главное понимать фичи (фичи языков) и основные смыслы. Мастером становится не нужно, да и стать им можно после только 10.000 часов кодирования, поэтому фокус на другом. А как можно хорошо фичи узнать? Видео-туториалы не подходят, уж слишком медлено. А вот книжки с большим количеством поясняющих картинк - это наш метод. Мурзилки для инженеров - это наше всё :o)

Где можно нахрапом обложиться книжками? Сейчас сущействует множество онлайн-библиотек (пример: http://my.safaribooksonline.com) и электронных вариантов книг  (Kindle Amazon, купил и тут же закачал). Выбор книг делал по отзывам и рейтингам с разных сайтов (amazon.com, stackoverflow и др.)

Работа с книгой в таком порядке

  • KWLS схема (1-2 минуты)
  • Пробегаю оглавление (W)
  • Просматриваю книгу в поисках ответов на нюансы из колонки (W)
  • Просматриваю полностью книгу с фокусом на фичи (код, картинки)
  • Делаю выводы и добавляю в эту статью и делаю ретро "как лучше читать следующую книгу"

Поехали...

  • HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтовID 5538877Автор: Владимир Дронов - Решил проверить популярного русского автора. Начал обзор с этой книги. Книга насыщена техничекими отрывками, легко отделить важное (в начале каждой главы), а потом идут детали. Много перепечаток со стандартов с небольшими примерами. HTML5 не охвачен полностью (под полным охватом я понимаю раскрытие тем, как минимум из wikipedia). Одну полезную ссылку увёл: https://developer.mozilla.org/en и узнал, что такое TR[ROWSPAN].
  • CSS: The Missing Manual by David Sawyer McFarland (Большая книга CSS) - Может я уже перегрузился работой русского автора, но в англоязычной версии были замечены мысли получше. Во-первых, много картинок объясняющих разные эффекты. Код отделён от текста. Поэтому пролистывая книгу, я не смотрел описания - я смотрел код и картинки. Поэтому получилось книгу просмотреть с большим удовольствием. Во-вторых, интересные обнаруженные фичи: построение галлереи, нафигации (менюшечки разные), подготовка страницы к печати, несколько best-практик. И заметил функцию @import для повторного использования стилей. Сделал вывод - что смотреть картинки (метод мурзилки) - наше всё.  Из общих рассуждений понял, текст нету смысла читать: важно смотреть код в книге, и если его не понимаю, тогда читать прилагающийся текст. И ещё настигло чувство разочарование, я ждал большего. Например: такое или такое (Microsoft Test Drive) или такое (CSS3 Transition)
  • ederholm D. - CSS3 for Web Designers - Шедевриально. Куча ссылок. Хорошие примеры. Хорошие темы: трансформация, анимация, круглые и крутые кнопки. Одолел книга за 10 мин: очень много интересного увидел! И обязательно подписался на RSS: http://www.css3.info/  и конечно же воспользовался тестом http://css3test.com
  • The Zen of CSS Design: Visual Enlightenment for the Web by Dave Shea / Философия CSS - Эстетика верстки и дизайна. Как наводить красоту и законы веб-фен-шуя. Скучно, но для специалистов думаю очень полезна.
  • Pro CSS and HTML Design Patterns by Michael Bowers - Отличная книга для старта. 1 эффект = 1 объяснение. Показаны ключевые элементы для верстки и работа с CSS. Никакой философии. Картинка, код, краткое объяснение. Наверное подходит как коллекция рецептов.
  • http://htmlbook.ru - Лучшее начало. Практика, практика и ещё раз практик
  • CSS Cookbook - Большая книга рецептов. Пролистал быстро. Все фичи уже знакомы
  • CSS. 100 и 1 совет. Рейчел Эндрю - Ещё одна книга рецептов. Поменьше размером. Уже начинает приедаться CSS. Похоже крутых прорывов больше нету...
  • Handcrafted CSS: More Bulletproof Web Design by Dan Cederholm - Очень ненапряжная книжка. Делается сайт и по частям раскрашивается. Хорошо код показан и тут же примеры отображения. Думаю, что как адвансед туторил для новичков самый то.

Загрузился я CSS, а сейчас перехожу к JavaScript и jQuery :o)


НЛП серия
[info]agilizt
Изучаю НЛП, делаю заметки и делюсь с читателями
Интересные ролики

Бесплатный видео-курс "Как стать менеджером в IT" от Саши Орлова
[info]agilizt
Постепенная неприязнь с этим менеджерским причендалам и деятельностью "коучей менеджмента" Саши Орлова и Саши Пократова переросла у меня (видать начинаю дозревать до гуру российского ИТ-менеджмента) в глубокое уважение. Почему? Количество несвязанного псевдонаучного трёпа о никому ненужном менеджменте переросло в хорошо проверенную и стабильную систему. Теперь Эти две говорящие головы действительно стоит слушать! Если три года назад это было что-то с чем-то, копипаст и доводки. Теперь они взобрались окончательно на плечи гигантов и начали просто взрывать мир своими открытями. Поэтому я с радостью хочу рекомендовать их наработки и приятного просмотра работы над собой!

О курсе

Иногда мы все-таки смотрим статистику, чтобы понимать, что интересно нашим читателям и слушателям. Так и пару недель назад мы посмотрели статистику скачиваний нашего бесплатного курса «Как стать менеджером в ИТ», который выпустили в 2009 году. Этот курс мы выпустили по результатам одноименного онлайн-тренинга, на котором тогда, в 2009, собралось 270 человек.


Содержание курса
  • Введение: о чем этот курс и как с ним работать?
  • Зачем в менеджеры: как понять зачем я работаю и стоит ли двигаться именно в менеджемент?
  • Выбор компании: какие компании мы выбираем, по каким признакам... и какие нам нужны.
  • Работа с начальником: типология начальников по перспективности для продвижения.
  • Кем будем управлять: типология подчиненных и особенности управления.
  • Начало работы менеджером: ожидания, страхи и опасения.
  • Навыки менеджера: что ждут и что хотят компании и боссы?
  • Саморазвитие: как, что и в каких областях прокачивать?

Как получить курс Все наши продукты распространяются по подписке: http://www.happy-pm.com/blog/?p=7601

Скачатьhttp://goo.gl/J1epp

  • Leave a comment
  • Add to Memories

Рефакторинг - повышаю качество кода из книги APRESS WF4
[info]agilizt
В этом примере я прилезал кусок кода - удалил неоднозначности и расправился со статическими вещами. Есть идеи - комментируйте, так же интересно как сделать вебкасты более качественными и интересными. Любые предложения приветствуются.

  • 3
  • Leave a comment
  • Add to Memories

You are viewing [info]agilizt's journal