SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
Теории и практики
функционального
программирования
Акуляков Артем
Кто я?
5+ лет dotNet interpraise/
2+ лет python freelance/
2+ I love FP
докладчик dotnetconf, dev2dev/
организатор it-сообщества dev2dev
2
К чему это все?
3
К чему это все?
●
ФП устарело
4
ФП устарело, но вот эти ребята еще
не в курсе...
5
К чему это все?
●
ФП устарело
●
ФП применимо только в узком круге задач
6
Веб-приложение
HttpRequest → HttpResponse
7
Веб-приложение
function (HttpRequest) → HttpResponse
8
К чему это все?
●
ФП устарело.
●
ФП применимо только в узком круге задач.
●
Я БОЮСЬ ФУНКЦИОНАЛЬНОГО
ПРОГРАММИРОВАНИЯ!
9
Поговорим об ООП
10
ООП против ФП
●
SOLID
●
IoC
●
GRASP
●
GangOfFour
●
MVC, MVP, MVVM
●
CQRS
●
EventSourcing
●
DDD
●
...
11
ООП против ФП
●
SOLID
●
IoC
●
GRASP
●
GangOfFour
●
MVC, MVP, MVVM
●
CQRS
●
EventSourcing
●
DDD
●
...
●
Functions
●
Type
●
Composition
12
ООП против ФП
●
SOLID
●
IoC
●
GRASP
●
GangOfFour
●
MVC, MVP, MVVM
●
CQRS
●
EventSourcing
●
DDD
●
...
●
Functions
●
Type
●
Composition
●
Monads, Monoids...
13
Основы функционального
программирования
14
Функции это тоже значения
15
Функции это тоже значения
let value = 5
let toX10 = fun x -> x * 10
16
Функции это тоже значения
let getCalc f x y =
fun z -> (f x) + y + z
let calc = getCalc toX10 1 2
let result = calc value
17
Композиция
18
Композиция : функции
let read (x : string) : int = int(x)
let mult (x : int) : int = x * x
let write (x : int) : string = string(x)
19
Композиция : функции
let readMultWrite1 x =
write (mult (read x))
// x : string -> string
let readMultWrite2 =
read >> mult >> write
// string -> string
let readMultWrite3 x =
x |> read |> mult |> write
// x : string -> string
20
Композиция
a → b » b → c
a → c
21
Композиция
a → b » b → c » ... » x → z
a → z
22
Композиция : функции
#операторыкомпозиции
let (>>) f1 f2 p = f2(f1 p)
let (<<) f1 f2 p = f1(f2 p)
23
Композиция : функции
#конвейерныеоператоры
let (|>) p f = func param
let (<|) f p = func param
24
Проблема...
Операторы композиции и конвейера определены
только для функций с одним аргументом
25
Решение!
Все функции это на самом деле
функции от одного аргумента
26
Композиция : функции
#каррирование
let add x y = x + y // int -> int -> int
let add2 = add 2 // int -> int
let res = add2 2 // val res : int = 4
27
Типы
28
Типы
#обзор
type Alias = int
type FunctionAlias = int -> int
29
Типы
#обзор
type Record =
{ field1 : int;
field2 : string }
30
Типы
#обзор
type DiscriminatedUnion =
| Variant1 of int
| Variant2 of string
type Enum = | One = 1 | Two = 2 | Three = 3
31
Типы это не классы
32
Композиция : типы
type NodeName = string
type UID = int
type HierarchyIdentifier =
| Plain of UID
| Complex of NodeName*HierarchyIdentifier
33
Композиция: типы
Complex
(NodeName * Complex
(NodeName * Complex
(Plain)
)
)
34
ООП и ФП имеют много общих
концепций
35
Interfaces & SRP
public interface IExchangeRateProvider
{
ExchangeRate GetRate(Currency currency);
}
public class ExchangeProvider : IExchangeRateProvider
{
public ExchangeRate GetRate(Currency currency)
{
// =)
}
}
36
Interfaces & SRP
#типыфункцийкакинтерфейсы
type IExchangeRateProvider = Currency -> ExchangeRate
let exchangeRateProvider(currency:Currency):ExchangeRate =
// =)
37
DI
public class BasketCostTranslator : IBasketCostTranslator
{
private readonly IExchangeRateProvider _provider;
public BasketCostTranslator(IExchangeRateProvider p)
{
// =)
}
public BasketCost TranslateCost(BasketCost cost)
{
// =)
}
}
38
DI
#кариррованиекакdi
type ICostTranslator = BasketCost -> BasketCost
let costTranslator exchangeProvider basket =
// =)
let translator = costTranslator exchangeRateProvider
39
Шаблонный метод
public class SimpleDeliveryCalculator : IDeliveryCostCalculator
{
public DeliveryOffer Calculate(
IEnumerable<PurchaseDimensions> purchases)
{
// do something
var packagesCount = CalculatePackagesCount(purchases);
// do something
}
protected virtual int CalculatePackagesCount(
IEnumerable<PurchaseDimensions> purchases)
{
// calculation
}
}
40
Шаблонный метод
public class ComplexDeliveryCalculator: SimpleDeliveryCalculator
{
protected override int CalculatePackagesCount(
IEnumerable<PurchaseDimensions> purchases)
{
// "complex" calculation
}
}
41
Шаблонный метод
#композициярулит
let deliveryCalculator packagesCalculator purchases =
// do something
let packagesCount = packagesCalculator purchases
// do something
let simpleCalculatePackages purchases =
// do something
let complexCalculatePackages purchases =
//do something
let calculator1 = deliveryCalculator simpleCalculatePackages
let calculator2 = deliveryCalculator complexCalculatePackages
42
Декоратор
public class LoggingDecorator : IExchangeRateProvider
{
private IExchangeRateProvider _service;
public LoggingDecorator(IExchangeRateProvider service)
{ ... }
public ExchangeRate GetRate(Currency currency) {
// log something
var result = _service.GetRate(currency);
// log something
return result;
}
}
43
Декоратор
#исновакомпозициярулит
let loggingDecorator provider currency =
// log something
let result = provider currency
// log something
result
let provider = loggingDecorator exchangeRateProvider
44
Декоратор
#pyдекораторыпрекрасны
def logging(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
print(func.__name__, args, kwargs)
return res
return wrapper
@logging
def adder(x, y):
return x + y
adder(1, 2)
45
Кое-что интересное из мира ФП
46
Мемоизация
47
Мемоизация
#чистыефункции
let adder x =
x + 100
adder 10 // val it : int = 110
adder 10 // val it : int = 110
adder 20 // val it : int = 120
48
Мемоизация
#ультракеширование
let memoize (f: 'a -> 'b) =
let dict = new Dictionary<'a, 'b>()
let memoized (input: 'a) =
match dict.TryGetValue(input) with
| true, x -> x
| false, _ ->
let result = f input
dict.Add(input, result)
result
memoized
let memAdder = memoize adder
49
Мемоизация
#ультракеширование
let memoize (f: 'a -> 'b) =
let dict = new Dictionary<'a, 'b>()
let memoized (input: 'a) =
match dict.TryGetValue(input) with
| true, x -> x
| false, _ ->
let result = f input
dict.Add(input, result)
result
memoized
let memAdder = memoize adder
50
Мемоизация
#ультракеширование
let memoize (f: 'a -> 'b) =
let dict = new Dictionary<'a, 'b>()
let memoized (input: 'a) =
match dict.TryGetValue(input) with
| true, x -> x
| false, _ ->
let result = f input
dict.Add(input, result)
result
memoized
let memAdder = memoize adder
51
Мемоизация
#практика
function (HttpRequest) →
HttpResponse
52
Мемоизация
#практика
function (HttpRequest, DbState) →
HttpResponse
53
Мемоизация
#практика
https://github.com/Suor/django-cacheops
54
Обработка ошибок
55
Обработка ошибок
#идеальныймир
let handleRequest =
readRequest
>> readEntityFromDB
>> modifyEntity
>> createTaskFromEntity
>> writeTaskToMQ
>> createResultMessage
>> sendMessage
56
Мир не идеален
57
Обработка ошибок
type Result<'r> =
| Success of 'r
| Error
// 'r -> Result<'r>
58
Обработка ошибок
let handleRequest s =
match readRequest s with
| Success r ->
match readEntityFromDB r with
| Success e ->
match modifyEntity e with
| Success me ->
match createTaskFromEntity me with
| Success t ->
match writeTaskToMQ t with
| Success ts ->
createResultMessage ts
| Error -> Error
| Error -> Error
| Error -> Error
| Error -> Error
| Error -> Error 59
А как же композиция?
»
60
Обработка ошибок
#неработает
'a → Result<'b>
» 'b → Result<'c>
» 'c → Result<'d>
» …
Типы не совпадают...
61
Обработка ошибок
#решение
Нужно преобразование
('a → Result<'c>) → (Result<'a> → Result<'c>)
62
Обработка ошибок
let handleRequest s =
match readRequest s with
| Success r ->
match readEntityFromDB r with
| Success e ->
match modifyEntity e with
| Success me ->
match createTaskFromEntity me with
| Success t ->
match writeTaskToMQ t with
| Success ts ->
createResultMessage ts
| Error -> Error
| Error -> Error
| Error -> Error
| Error -> Error
| Error -> Error 63
Обработка ошибок
#паттернобнаружен
let handleRequest s =
match readRequest s with
| Success r ->
match readEntityFromDB r with
| Success e ->
match modifyEntity e with
| Success me ->
match createTaskFromEntity me with
| Success t ->
match writeTaskToMQ t with
| Success ts ->
createResultMessage ts
| Error -> Error
| Error -> Error
| Error -> Error
| Error -> Error
| Error -> Error 64
Обработка ошибок
#связываем
let bind f =
fun x ->
match x with
| Success r -> f r
| Error -> x
('a → Result<'b>) → (Result<'a> → Result<'b>)
65
Обработка ошибок
#композиция
let handleRequest =
readRequest
>> (bind readEntityFromDB)
>> (bind modifyEntity)
>> (bind createTaskFromEntity)
>> (bind writeTaskToMQ)
>> (bind createResultMessage)
66
Мы только что изобрели монаду
67
Сухой итог
●
Функциональное программирование это просто
●
Можно использовать привычные приемы, но
проще
●
Можно заимствовать из функционального
программирования хитрые приемы
●
Монады совсем не страшные
68
Полезности
http://www.intuit.ru/studies/courses/471/327/info
https://github.com/fsprojects/FSharpx.Extras
https://github.com/jack-pappas/ExtCore/
http://fsharpforfunandprofit.com/
69
Вопросы?
70

Más contenido relacionado

La actualidad más candente

Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
 
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Alexey Paznikov
 
Scala Magic, Alexander Podhaliusin
Scala Magic, Alexander PodhaliusinScala Magic, Alexander Podhaliusin
Scala Magic, Alexander PodhaliusinVasil Remeniuk
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
оператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаоператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаliza2209
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияYandex
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castRoman Orlov
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.Igor Shkulipa
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 

La actualidad más candente (19)

Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
 
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
 
Scala Magic, Alexander Podhaliusin
Scala Magic, Alexander PodhaliusinScala Magic, Alexander Podhaliusin
Scala Magic, Alexander Podhaliusin
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
оператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и выводаоператор присваивания и процедуры ввода и вывода
оператор присваивания и процедуры ввода и вывода
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Python
PythonPython
Python
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
 
Lecture 5
Lecture 5Lecture 5
Lecture 5
 

Destacado

Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NET
Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NETNemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NET
Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NETDev2Dev
 
Продукт или проект - Александр Борисов Dev2Dev v1.5 23.11.2014
Продукт или проект - Александр Борисов  Dev2Dev v1.5 23.11.2014Продукт или проект - Александр Борисов  Dev2Dev v1.5 23.11.2014
Продукт или проект - Александр Борисов Dev2Dev v1.5 23.11.2014Dev2Dev
 
Всё будет в Ажуре. Завершинский Денис D2D Just.NET
Всё будет в Ажуре. Завершинский Денис D2D Just.NETВсё будет в Ажуре. Завершинский Денис D2D Just.NET
Всё будет в Ажуре. Завершинский Денис D2D Just.NETDev2Dev
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
 
Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015
Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015
Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015Dev2Dev
 
Sistema de Gestión "AgroSiga"
Sistema de Gestión "AgroSiga"Sistema de Gestión "AgroSiga"
Sistema de Gestión "AgroSiga"Ceg SI
 
convergencia informatica en los negocios internacionaes Presentacion (p p)_b...
 convergencia informatica en los negocios internacionaes Presentacion (p p)_b... convergencia informatica en los negocios internacionaes Presentacion (p p)_b...
convergencia informatica en los negocios internacionaes Presentacion (p p)_b...brenda nicol romero cabrera
 
Horror magazine research
Horror magazine researchHorror magazine research
Horror magazine researchrubyasmedia
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Dev2Dev
 
Трудности повторного использования
Трудности повторного использованияТрудности повторного использования
Трудности повторного использованияDev2Dev
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + RetrofitDev2Dev
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETDev2Dev
 
Murads Movie House.Pt.1.Mini.Series.html.doc.docx
Murads Movie House.Pt.1.Mini.Series.html.doc.docxMurads Movie House.Pt.1.Mini.Series.html.doc.docx
Murads Movie House.Pt.1.Mini.Series.html.doc.docxkhristianj
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETDev2Dev
 
Using graphs technologies for intelligence analysis.
Using graphs technologies for intelligence analysis. Using graphs technologies for intelligence analysis.
Using graphs technologies for intelligence analysis. Linkurious
 
M2 kb3 kelainan seks dan kromosom
M2 kb3 kelainan seks dan kromosomM2 kb3 kelainan seks dan kromosom
M2 kb3 kelainan seks dan kromosompjj_kemenkes
 
Academic reputation: how to create it and how to sustain it
Academic reputation: how to create it and how to sustain itAcademic reputation: how to create it and how to sustain it
Academic reputation: how to create it and how to sustain itKudos
 
презентация Project 1
презентация Project 1презентация Project 1
презентация Project 1Stan Goldfeld
 

Destacado (20)

Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NET
Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NETNemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NET
Nemerle. метапрограммирование в .NET - Зимин Aлександр D2D Just.NET
 
Продукт или проект - Александр Борисов Dev2Dev v1.5 23.11.2014
Продукт или проект - Александр Борисов  Dev2Dev v1.5 23.11.2014Продукт или проект - Александр Борисов  Dev2Dev v1.5 23.11.2014
Продукт или проект - Александр Борисов Dev2Dev v1.5 23.11.2014
 
Всё будет в Ажуре. Завершинский Денис D2D Just.NET
Всё будет в Ажуре. Завершинский Денис D2D Just.NETВсё будет в Ажуре. Завершинский Денис D2D Just.NET
Всё будет в Ажуре. Завершинский Денис D2D Just.NET
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015
Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015
Принцип YAGNI в управлении проектами - Анна Тарасенко Dev2Dev v2.0 30.05.2015
 
Sistema de Gestión "AgroSiga"
Sistema de Gestión "AgroSiga"Sistema de Gestión "AgroSiga"
Sistema de Gestión "AgroSiga"
 
convergencia informatica en los negocios internacionaes Presentacion (p p)_b...
 convergencia informatica en los negocios internacionaes Presentacion (p p)_b... convergencia informatica en los negocios internacionaes Presentacion (p p)_b...
convergencia informatica en los negocios internacionaes Presentacion (p p)_b...
 
Horror magazine research
Horror magazine researchHorror magazine research
Horror magazine research
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
 
Трудности повторного использования
Трудности повторного использованияТрудности повторного использования
Трудности повторного использования
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + Retrofit
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
 
Murads Movie House.Pt.1.Mini.Series.html.doc.docx
Murads Movie House.Pt.1.Mini.Series.html.doc.docxMurads Movie House.Pt.1.Mini.Series.html.doc.docx
Murads Movie House.Pt.1.Mini.Series.html.doc.docx
 
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NETЭволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
Эволюция корпоративных Web приложений. Молотков Андрей D2D Just.NET
 
Using graphs technologies for intelligence analysis.
Using graphs technologies for intelligence analysis. Using graphs technologies for intelligence analysis.
Using graphs technologies for intelligence analysis.
 
M2 kb3 kelainan seks dan kromosom
M2 kb3 kelainan seks dan kromosomM2 kb3 kelainan seks dan kromosom
M2 kb3 kelainan seks dan kromosom
 
Academic reputation: how to create it and how to sustain it
Academic reputation: how to create it and how to sustain itAcademic reputation: how to create it and how to sustain it
Academic reputation: how to create it and how to sustain it
 
презентация Project 1
презентация Project 1презентация Project 1
презентация Project 1
 
Group5 accounting
Group5 accountingGroup5 accounting
Group5 accounting
 

Similar a Теории и практики функционального программирования.

практические советы по улучшению качества кода
практические советы по улучшению качества кодапрактические советы по улучшению качества кода
практические советы по улучшению качества кодаYuri Afanasiev
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Построение компилятора на базе LLVM — Павел Сычев
 Построение компилятора на базе LLVM — Павел Сычев Построение компилятора на базе LLVM — Павел Сычев
Построение компилятора на базе LLVM — Павел СычевYandex
 
Лекция 8. Итераторы, генераторы и модуль itertools.
 Лекция 8. Итераторы, генераторы и модуль itertools. Лекция 8. Итераторы, генераторы и модуль itertools.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Dmitri Soshnikov
 
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василийsolit
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
 

Similar a Теории и практики функционального программирования. (20)

практические советы по улучшению качества кода
практические советы по улучшению качества кодапрактические советы по улучшению качества кода
практические советы по улучшению качества кода
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
 
Построение компилятора на базе LLVM — Павел Сычев
 Построение компилятора на базе LLVM — Павел Сычев Построение компилятора на базе LLVM — Павел Сычев
Построение компилятора на базе LLVM — Павел Сычев
 
Лекция 8. Итераторы, генераторы и модуль itertools.
 Лекция 8. Итераторы, генераторы и модуль itertools. Лекция 8. Итераторы, генераторы и модуль itertools.
Лекция 8. Итераторы, генераторы и модуль itertools.
 
Transpile it.pdf
Transpile it.pdfTranspile it.pdf
Transpile it.pdf
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 

Más de Dev2Dev

D2D Чипец 2 Николай Иванов - Data Informed Design
D2D Чипец 2 Николай Иванов - Data Informed DesignD2D Чипец 2 Николай Иванов - Data Informed Design
D2D Чипец 2 Николай Иванов - Data Informed DesignDev2Dev
 
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проект
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проектD2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проект
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проектDev2Dev
 
D2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering designD2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering designDev2Dev
 
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...Dev2Dev
 
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"Dev2Dev
 
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скуки
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скукиD2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скуки
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скукиDev2Dev
 
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...Dev2Dev
 
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"D2D Pizza JS Роман Сальников "Redux: one state to rule them all"
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"Dev2Dev
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
D2D Pizza JS Игорь Ковган "Koa поможет"
D2D Pizza JS Игорь Ковган "Koa поможет"D2D Pizza JS Игорь Ковган "Koa поможет"
D2D Pizza JS Игорь Ковган "Koa поможет"Dev2Dev
 
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"Dev2Dev
 
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"Dev2Dev
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETDev2Dev
 
Разработка приложений в Android studio
Разработка приложений в Android studioРазработка приложений в Android studio
Разработка приложений в Android studioDev2Dev
 
Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...
Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...
Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...Dev2Dev
 
Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...
Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...
Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...Dev2Dev
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Dev2Dev
 
Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015
Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015
Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015Dev2Dev
 
Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014
Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014
Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014Dev2Dev
 
IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014
IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014
IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014Dev2Dev
 

Más de Dev2Dev (20)

D2D Чипец 2 Николай Иванов - Data Informed Design
D2D Чипец 2 Николай Иванов - Data Informed DesignD2D Чипец 2 Николай Иванов - Data Informed Design
D2D Чипец 2 Николай Иванов - Data Informed Design
 
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проект
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проектD2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проект
D2D Чипец 2 Сергей Ашмаров - Как из ничего сделать крутой фестивальный проект
 
D2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering designD2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering design
 
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...
D2D Чипец 2 Николай Страх - Как студии параллельно с основной деятельностью з...
 
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"
D2D Чипец 2 Алексей Резванов - "Особенности работы на международных рынках"
 
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скуки
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скукиD2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скуки
D2D Чипец 2 Максим Кулдошин - Как работать в Красноярске и не умереть со скуки
 
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...
D2D Чипец 2 Алексей Раменский - Видение рынка дизайна и проектирования от экс...
 
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"D2D Pizza JS Роман Сальников "Redux: one state to rule them all"
D2D Pizza JS Роман Сальников "Redux: one state to rule them all"
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
D2D Pizza JS Игорь Ковган "Koa поможет"
D2D Pizza JS Игорь Ковган "Koa поможет"D2D Pizza JS Игорь Ковган "Koa поможет"
D2D Pizza JS Игорь Ковган "Koa поможет"
 
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
D2D Pizza JS Владимир Кожин "Jii - фреймворк, который Вы уже знаете"
 
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
 
Разработка приложений в Android studio
Разработка приложений в Android studioРазработка приложений в Android studio
Разработка приложений в Android studio
 
Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...
Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...
Мотивация ИТ-персонала - шаг за шагом - Марина Семехина, Илья Горбаров Dev2De...
 
Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...
Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...
Линзы - комбинаторная манипуляция данными Александр Гранин Dev2Dev v2.0 30.05...
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
 
Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015
Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015
Good enough testing - Татьяна Писчасова Dev2Dev v2.0 30.05.2015
 
Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014
Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014
Failure story - Александр Ефремов Dev2Dev v1.5 23.11.2014
 
IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014
IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014
IT-инфраструктура - Александр Соболь Dev2Dev v1.5 23.11.2014
 

Теории и практики функционального программирования.