Как стать востребованным full-stack разработчиком в 2018 году?
https://proglib.io/p/full-stack/
#fundamental
https://proglib.io/p/full-stack/
#fundamental
Библиотека программиста
Как стать востребованным full-stack разработчиком в 2018 году?
Тема full-stack разработки давно стала новым трендом в выборе профессии. Поэтому важно разобраться, как стать настоящим full-stack разработчиком.
Поговорим о том, что такое CUDA, как эта технология связана с NVIDIA и как ускоряет обработку данных вычислительной техникой.
Сложность вычислительных заданий требует резкого увеличения ресурсов и скорости компьютеров. Наиболее перспективным направлением повышения скорости решения задач является внедрение идей параллелизма в работу вычислительных систем.
Сегодня спроектированы и испытаны сотни различных компьютеров, которые используют в своей архитектуре тот или иной вид параллельной обработки данных. Основная сложность при проектировании параллельных программ – обеспечение правильной последовательности взаимодействия между разными вычислительными процессами, а также координация ресурсов, которые разделяются между ними.
https://proglib.io/p/cuda/
#fundamental
Сложность вычислительных заданий требует резкого увеличения ресурсов и скорости компьютеров. Наиболее перспективным направлением повышения скорости решения задач является внедрение идей параллелизма в работу вычислительных систем.
Сегодня спроектированы и испытаны сотни различных компьютеров, которые используют в своей архитектуре тот или иной вид параллельной обработки данных. Основная сложность при проектировании параллельных программ – обеспечение правильной последовательности взаимодействия между разными вычислительными процессами, а также координация ресурсов, которые разделяются между ними.
https://proglib.io/p/cuda/
#fundamental
Библиотека программиста
Знакомство с программно-аппаратной архитектурой CUDA
Поговорим о том, что такое CUDA, как эта технология связана с NVIDIA и как ускоряет обработку данных вычислительной техникой.
Оптимизация сайта – это просто. Рассказываем, как оптимизировать сайт и получить максимальное количество очков в Google Optimization Ranking.
https://proglib.io/p/website-optimization/
#web #javascript #fundamental
https://proglib.io/p/website-optimization/
#web #javascript #fundamental
Библиотека программиста
Оптимизация сайта – это просто: объясняем на пальцах
Оптимизация сайта – это просто. Рассказываем, как оптимизировать сайт и получить максимальное количество очков в Google Optimization Ranking.
Подборка книг по шаблонам проектирования от специалистов разработки программного обеспечения: от C# до серверного асинхронного JavaScript.
https://proglib.io/p/5-design-patterns-books/
#books #javascript #fundamental
https://proglib.io/p/5-design-patterns-books/
#books #javascript #fundamental
Библиотека программиста
5 книг по шаблонам проектирования для разработчиков
Подборка книг по шаблонам проектирования от специалистов разработки программного обеспечения: от C# до серверного асинхронного JavaScript.
Цепь Маркова – это просто: подробно разбираем принцип
https://proglib.io/p/markov-chain/
#math #fundamental
https://proglib.io/p/markov-chain/
#math #fundamental
Библиотека программиста
Цепь Маркова – это просто: подробно разбираем принцип
Цепь Маркова – череда событий, в которой каждое последующее событие зависит от предыдущего. В статье мы подробнее разберём это понятие.
Более 200 избранных ссылок на материалы о языке Go! Сохраняйте!
https://proglib.io/p/golinks/
#fundamental #collections #go
https://proglib.io/p/golinks/
#fundamental #collections #go
Библиотека программиста
Более 200 избранных ссылок на материалы о языке Go
Подборка лучших статей о языке Go для читателей различного круга интересов и уровня подготовки, на английском и русском языках.
Курс "Алгоритмы и структуры данных"
1. О курсе
2. Базовые структуры данных
3. Очереди с приоритетом
4. Системы непересекающихся множеств
5. Хеш-таблицы
6. АВЛ-деревья
7. Дополнительные операции
8. Сплей-деревья
https://www.youtube.com/watch?v=jD_A74xER9E&list=PLwwk4BHih4fhz7NtsPUbk7B3JXh_CPt3m
#algorithms #fundamental
1. О курсе
2. Базовые структуры данных
3. Очереди с приоритетом
4. Системы непересекающихся множеств
5. Хеш-таблицы
6. АВЛ-деревья
7. Дополнительные операции
8. Сплей-деревья
https://www.youtube.com/watch?v=jD_A74xER9E&list=PLwwk4BHih4fhz7NtsPUbk7B3JXh_CPt3m
#algorithms #fundamental
Как составить качественное ИТ-резюме для работы мечты
https://proglib.io/p/how-to-resume/
#work #common #fundamental
https://proglib.io/p/how-to-resume/
#work #common #fundamental
Библиотека программиста
Как составить качественное ИТ-резюме для работы мечты
Профессиональный рекрутер и разработчик в Twitter, Zhia Hwa Chong, делится опытом по составлению ИТ-резюме, которое точно заметят.
Видеокурс. Введение в алгоритмы
1. Пример простого алгоритма
2. Знакомство с алгоритмами
3. Разделяй и влавствуй
4. Сложность алгоритмов и Big O
5. Графы
6. Структуры данных
7. Деревья и двоичные деревья
8. Машина Тьюринга
9. P и NP
Ссылка на плейлист: https://www.youtube.com/watch?v=8JlTwMg1dyw&list=PLwwk4BHih4fjIT5cT4i1s93b99aJScUGB
#fundamental
1. Пример простого алгоритма
2. Знакомство с алгоритмами
3. Разделяй и влавствуй
4. Сложность алгоритмов и Big O
5. Графы
6. Структуры данных
7. Деревья и двоичные деревья
8. Машина Тьюринга
9. P и NP
Ссылка на плейлист: https://www.youtube.com/watch?v=8JlTwMg1dyw&list=PLwwk4BHih4fjIT5cT4i1s93b99aJScUGB
#fundamental
Эффективное самообучение в IT-сфере. Что мы делаем не так?
Мы все узнаем что-то новое, особенно в IT-сфере. Но что занимательно: нас никто не учил учиться, хотя именно самостоятельное обучение – истинный фундамент.
https://proglib.io/p/self-education/
#fundamental #common
Мы все узнаем что-то новое, особенно в IT-сфере. Но что занимательно: нас никто не учил учиться, хотя именно самостоятельное обучение – истинный фундамент.
https://proglib.io/p/self-education/
#fundamental #common
Библиотека программиста
Эффективное самообучение в IT-сфере. Что мы делаем не так?
Мы все узнаем что-то новое, особенно в IT-сфере. Но что занимательно: нас никто не учил учиться, хотя именно самостоятельное обучение – истинный фундамент.
Принципы функционального программирования: почему это важно
Рассказываем о принципах функционального программирования: какие у него минусы, и какие языки относятся к функциональным.
https://proglib.io/p/fp-basics/
#fundamental
Рассказываем о принципах функционального программирования: какие у него минусы, и какие языки относятся к функциональным.
https://proglib.io/p/fp-basics/
#fundamental
Библиотека программиста
Принципы функционального программирования: почему это важно
Рассказываем о принципах функционального программирования: какие у него минусы, и какие языки относятся к функциональным.
Цепь Маркова – это просто: подробно разбираем принцип
Цепь Маркова – череда событий, в которой каждое последующее событие зависит от предыдущего. В статье мы подробнее разберём это понятие.
https://proglib.io/p/markov-chain/
#math #fundamental
Цепь Маркова – череда событий, в которой каждое последующее событие зависит от предыдущего. В статье мы подробнее разберём это понятие.
https://proglib.io/p/markov-chain/
#math #fundamental
Библиотека программиста
Цепь Маркова – это просто: подробно разбираем принцип
Цепь Маркова – череда событий, в которой каждое последующее событие зависит от предыдущего. В статье мы подробнее разберём это понятие.
Один из лучших курсов по алгоритмам и структурам данных
1. О курсе
2. Базовые структуры данных
3. Очереди с приоритетом
4. Системы непересекающихся множеств
5. Хеш-таблицы
6. АВЛ-деревья
7. Дополнительные операции
8. Сплей-деревья
Ссылка на плейлист: https://bit.ly/2w8jJn9
#algorithms #fundamental
1. О курсе
2. Базовые структуры данных
3. Очереди с приоритетом
4. Системы непересекающихся множеств
5. Хеш-таблицы
6. АВЛ-деревья
7. Дополнительные операции
8. Сплей-деревья
Ссылка на плейлист: https://bit.ly/2w8jJn9
#algorithms #fundamental
Редакция «Библиотеки программиста» совместно с командой Алексея Никитина, доцента ВМК МГУ рассмотрела в наглядных иллюстрациях один из важных разделов курса мат. анализа, дифференцируемость.
#math #fundamental
https://proglib.io/p/diff/
#math #fundamental
https://proglib.io/p/diff/
#notes #fundamental
Массивы против связных списков
Языки программирования с широким набором средств обычно включают встроенные реализации абстрактных типов данных (список, очередь, стек и другие), которые зачастую основаны на некоторой стандартной структуре данных. Более того, отдельные из них могут даже автоматически переключаться с одной структуры данных на другую во время выполнения программ, в зависимости от способа доступа к данным.
Если производительность не является проблемой, то можно опереться на эти универсальные реализации абстрактных типов данных и не задумываться по поводу структур данных. Но когда производительность должна быть оптимальной (либо вы имеете дело с низкоуровневым языком, не имеющим таких встроенных средств), вам самим необходимо решать, какие структуры данных использовать.
Просто проведите анализ операций, с помощью которых вы будете обрабатывать информацию, и выберите реализацию с наиболее подходящей структурой данных. Использовать связные списки предпочтительнее массивов, когда:
– необходимо, чтобы быстро выполнялись операции вставки и удаления;
– не требуется произвольный доступ к данным;
– приходится вставлять или удалять элементы между других элементов;
– заранее не известно количество элементов.
Массивы предпочтительнее связных списков, когда:
– необходим произвольный доступ к данным и очень быстрый доступ к элементам;
– число элементов не изменяется во время выполнения программы, благодаря чему легко выделить непрерывное пространство памяти.
Массивы против связных списков
Языки программирования с широким набором средств обычно включают встроенные реализации абстрактных типов данных (список, очередь, стек и другие), которые зачастую основаны на некоторой стандартной структуре данных. Более того, отдельные из них могут даже автоматически переключаться с одной структуры данных на другую во время выполнения программ, в зависимости от способа доступа к данным.
Если производительность не является проблемой, то можно опереться на эти универсальные реализации абстрактных типов данных и не задумываться по поводу структур данных. Но когда производительность должна быть оптимальной (либо вы имеете дело с низкоуровневым языком, не имеющим таких встроенных средств), вам самим необходимо решать, какие структуры данных использовать.
Просто проведите анализ операций, с помощью которых вы будете обрабатывать информацию, и выберите реализацию с наиболее подходящей структурой данных. Использовать связные списки предпочтительнее массивов, когда:
– необходимо, чтобы быстро выполнялись операции вставки и удаления;
– не требуется произвольный доступ к данным;
– приходится вставлять или удалять элементы между других элементов;
– заранее не известно количество элементов.
Массивы предпочтительнее связных списков, когда:
– необходим произвольный доступ к данным и очень быстрый доступ к элементам;
– число элементов не изменяется во время выполнения программы, благодаря чему легко выделить непрерывное пространство памяти.
#fundamental #patterns #cheatsheet
📌 Наблюдатель (англ. Observer) — поведенческий паттерн, создающий механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.
Можно привести аналогию из жизни: Вы оформили подписку на журнал, после чего вам больше не нужно ездить в супермаркет и проверять, не вышел ли очередной номер. Вместо этого издательство регулярно присылает новые номера по почте прямо к вам домой сразу после их выхода.
Издательство ведёт список подписчиков и знает, кому какой журнал высылать. Вы можете в любой момент отказаться от подписки, и журнал перестанет вам приходить.
Паттерн Наблюдатель применяется, когда система обладает следующими свойствами:
✔️Существует как минимум один объект, рассылающий сообщения.
✔️Имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения.
✔️Позволяет избежать сильного зацепления взаимодействующих классов.
📌 Наблюдатель (англ. Observer) — поведенческий паттерн, создающий механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.
Можно привести аналогию из жизни: Вы оформили подписку на журнал, после чего вам больше не нужно ездить в супермаркет и проверять, не вышел ли очередной номер. Вместо этого издательство регулярно присылает новые номера по почте прямо к вам домой сразу после их выхода.
Издательство ведёт список подписчиков и знает, кому какой журнал высылать. Вы можете в любой момент отказаться от подписки, и журнал перестанет вам приходить.
Паттерн Наблюдатель применяется, когда система обладает следующими свойствами:
✔️Существует как минимум один объект, рассылающий сообщения.
✔️Имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения.
✔️Позволяет избежать сильного зацепления взаимодействующих классов.
#fundamental #patterns #cheatsheet
📌 Состояние (англ. State) — поведенческий паттерн, позволяющий объектам менять поведение в зависимости от своего состояния.
Идея: программа может находиться в одном из нескольких состояний, сменяющих друг друга. Количество состояний и переходов между ними конечно. Находясь в разных состояниях, программа может по-разному реагировать на одни и те же события, которые происходят с ней.
Проблема: машину состояний чаще всего реализуют с помощью условных операторов (if/switch), проверяющих текущее состояние объекта. Набор возможных состояний бывает трудно предопределить заранее, поэтому они добавляются в процессе развития программы, что впоследствии может вызвать проблемы.
Решение: создать отдельные классы для каждого состояния, в котором может пребывать объект, а затем вынести туда поведения, соответствующие этим состояниям.
Паттерн применяется, когда:
✔️Есть объект, поведение которого кардинально меняется.
✔️Код класса содержит множество похожих условных операторов.
📌 Состояние (англ. State) — поведенческий паттерн, позволяющий объектам менять поведение в зависимости от своего состояния.
Идея: программа может находиться в одном из нескольких состояний, сменяющих друг друга. Количество состояний и переходов между ними конечно. Находясь в разных состояниях, программа может по-разному реагировать на одни и те же события, которые происходят с ней.
Проблема: машину состояний чаще всего реализуют с помощью условных операторов (if/switch), проверяющих текущее состояние объекта. Набор возможных состояний бывает трудно предопределить заранее, поэтому они добавляются в процессе развития программы, что впоследствии может вызвать проблемы.
Решение: создать отдельные классы для каждого состояния, в котором может пребывать объект, а затем вынести туда поведения, соответствующие этим состояниям.
Паттерн применяется, когда:
✔️Есть объект, поведение которого кардинально меняется.
✔️Код класса содержит множество похожих условных операторов.
#fundamental #patterns #cheatsheet
📌 Стратегия (англ. Strategy) — поведенческий паттерн, опредяющий семейство схожих алгоритмов и помещающий каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять во время исполнения программы.
Идея: использовать различные бизнес-правила или алгоритмы исходя из контекста.
Проблема: по типу клиента (или по типу обрабатываемых данных) выбрать подходящий алгоритм, который следует применить.
Решение: определить семейство схожих и часто изменяющихся/расширяющихся алгоритмов, и вынести их в собственные классы-стратегии.
Паттерн Состояние можно рассматривать как надстройку над Стратегией, но в Стратегии объекты не знают друг о друге и никак не связаны, а в Состоянии сами состояния могут переключать контекст.
Паттерн применяется, когда:
✔️Необходимо использовать разные вариации какого-то алгоритма внутри одного объекта.
✔️Есть множество похожих классов, отличающихся только некоторым поведением.
✔️Не хотитите обнажать детали алгоритмов для других классов.
📌 Стратегия (англ. Strategy) — поведенческий паттерн, опредяющий семейство схожих алгоритмов и помещающий каждый из них в собственный класс, после чего алгоритмы можно взаимозаменять во время исполнения программы.
Идея: использовать различные бизнес-правила или алгоритмы исходя из контекста.
Проблема: по типу клиента (или по типу обрабатываемых данных) выбрать подходящий алгоритм, который следует применить.
Решение: определить семейство схожих и часто изменяющихся/расширяющихся алгоритмов, и вынести их в собственные классы-стратегии.
Паттерн Состояние можно рассматривать как надстройку над Стратегией, но в Стратегии объекты не знают друг о друге и никак не связаны, а в Состоянии сами состояния могут переключать контекст.
Паттерн применяется, когда:
✔️Необходимо использовать разные вариации какого-то алгоритма внутри одного объекта.
✔️Есть множество похожих классов, отличающихся только некоторым поведением.
✔️Не хотитите обнажать детали алгоритмов для других классов.
#fundamental #patterns #cheatsheet
📌 Шаблонный метод (англ. Template Method) — поведенческий паттерн, определяющий основу алгоритма и позволяющий подклассам переопределять некоторые шаги алгоритма, не меняя его общей структуры.
Проблема: код нескольких классов содержит довольно много общего в части решения какой-то задачи, от чего необходимо избавиться. Остальной код, работающий с объектами этих классов, наполнен условиями, проверяющими тип обработчика перед началом работы. Этот код можно упростить, если слить все классы воедино либо свести их к общему интерфейсу.
Решение: разбить алгоритм на последовательность шагов, описать эти шаги в отдельных методах и вызывать их в одном шаблонном методе друг за другом, что позволит подклассам переопределять некоторые шаги алгоритма, оставляя без изменений его структуру.
Паттерн применяется, когда:
✔️Подклассы должны расширять базовый алгоритм, не меняя его структуры.
✔️Есть несколько классов, реализующих одно и то же с незначительными отличиями.
📌 Шаблонный метод (англ. Template Method) — поведенческий паттерн, определяющий основу алгоритма и позволяющий подклассам переопределять некоторые шаги алгоритма, не меняя его общей структуры.
Проблема: код нескольких классов содержит довольно много общего в части решения какой-то задачи, от чего необходимо избавиться. Остальной код, работающий с объектами этих классов, наполнен условиями, проверяющими тип обработчика перед началом работы. Этот код можно упростить, если слить все классы воедино либо свести их к общему интерфейсу.
Решение: разбить алгоритм на последовательность шагов, описать эти шаги в отдельных методах и вызывать их в одном шаблонном методе друг за другом, что позволит подклассам переопределять некоторые шаги алгоритма, оставляя без изменений его структуру.
Паттерн применяется, когда:
✔️Подклассы должны расширять базовый алгоритм, не меняя его структуры.
✔️Есть несколько классов, реализующих одно и то же с незначительными отличиями.