Выступление на конференции Глушков Fest в Киевском Национальном Университете имени Тараса Шевченко на Факультете Кибернетики. 29 ноября 2019
Видео: https://youtu.be/nvIJE6xMpiI
Структура та архітектура програмних систем
Комітет АПУ з питань телекомунікацій, інформаційних технологій та Інтернету запрошує вас взяти участь у другомузаході третього сезону проекту «HowdoesITwork?», присвяченого структурі та архітектурі програмних систем.
Про що будемо говорити?
- Що таке мова програмування, компілятор, транслятор, класифікація мов програмування, які є мови програмування та сфери їх використання.
- Які є програмні компоненти: що таке фрейморк, бібліотека, модуль, клас, репозиторій, та як вони застосовуються в процесі розробки.
- Що таке середовище розробки, IDE, лінтер, CI/CD, та інші засоби та інфраструктурні компоненти розробки.
- Архітектура програмних рішень, клієнт-серверні, багатошарові, монолітні сервери, бекенд та фронтенд, сервісний підхід, мікросервіси, контейнери, хмарні технології.
- Особливості використання Open source коду при створенні програмних систем за різними ліцензіями та безпека використання відкритого коду.
- Організація процесу розробки, надійність, якість, ревью кода, рефакторінг, системи контролю версій, володіння кодом та bus-factor
Спікер:
Тимур Шемседінов, архітектор технологічного стеку та лідер спільноти Метархія, викладач КПІ, 2й у Github рейтингу розробників України, керівник R&D по створенню високонавантажених хмарних технологій.
Структура та архітектура програмних систем
Комітет АПУ з питань телекомунікацій, інформаційних технологій та Інтернету запрошує вас взяти участь у другомузаході третього сезону проекту «HowdoesITwork?», присвяченого структурі та архітектурі програмних систем.
Про що будемо говорити?
- Що таке мова програмування, компілятор, транслятор, класифікація мов програмування, які є мови програмування та сфери їх використання.
- Які є програмні компоненти: що таке фрейморк, бібліотека, модуль, клас, репозиторій, та як вони застосовуються в процесі розробки.
- Що таке середовище розробки, IDE, лінтер, CI/CD, та інші засоби та інфраструктурні компоненти розробки.
- Архітектура програмних рішень, клієнт-серверні, багатошарові, монолітні сервери, бекенд та фронтенд, сервісний підхід, мікросервіси, контейнери, хмарні технології.
- Особливості використання Open source коду при створенні програмних систем за різними ліцензіями та безпека використання відкритого коду.
- Організація процесу розробки, надійність, якість, ревью кода, рефакторінг, системи контролю версій, володіння кодом та bus-factor
Спікер:
Тимур Шемседінов, архітектор технологічного стеку та лідер спільноти Метархія, викладач КПІ, 2й у Github рейтингу розробників України, керівник R&D по створенню високонавантажених хмарних технологій.
Rust: абстракции и безопасность, совершенно бесплатноOpen-IT
Владимир Матвеев: "Rust: абстракции и безопасность, совершенно бесплатно" (Обзор языка Rust: для чего он предназначен, его ключевые особенности, инфраструктура)
Funny JS - Это серия встреч для фронтэнд-разработчиков и не только. Я не буду читать лекцию или проводить тренинг. Мы будем общаться в живом формате и разбирать интересные и необычные задачи из мира JS, которые помогут лучше разобраться в теме и повысить скиллы. На первом митапе обсудим, что круче: функциональное программирование или объектно-ориентированный подход, прототипное или классическое наследование, ES6 или ES5
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
Докладчик:
Владимир Донец (kwimba.ru)
Описание: Слышали про магию в Python? Одно из магических заклинаний называется дескрипторы. Мощная фича языка, которая позволяет определять свое поведение атрибута объекта при доступе к этому атрибуту.
Сложно звучит? А вы знали, что дескрипторами уже наверняка пользовались, если хотя бы раз писали на Python. Я расскажу о том, что такое дескрипторы и как их осознанно можно применять в собственном коде.
Рассказывается о кроссплатформенном движке Cocos2d, его возможностях и основных принципах работы с движком.
Презентация к внутреннему докладу ООО Инним https://youtu.be/OKE6XdreE2g
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
Одной из проблем C++ является большое количество конструкций, поведение которых не определено или просто неожиданно для программиста. С такими ошибками мы часто сталкиваемся при разработке статического анализатора кода. Но, как известно, лучше всего находить ошибки ещё на этапе компиляции. На этом докладе мы поговорим о том, какие техники из современного C++ позволяют писать не только более простой и выразительный, но и безопасный код. Вы увидите ошибки в коде различных Open Source проектов и узнаете, как можно их избежать, используя новые стандарты
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Rust: абстракции и безопасность, совершенно бесплатноOpen-IT
Владимир Матвеев: "Rust: абстракции и безопасность, совершенно бесплатно" (Обзор языка Rust: для чего он предназначен, его ключевые особенности, инфраструктура)
Funny JS - Это серия встреч для фронтэнд-разработчиков и не только. Я не буду читать лекцию или проводить тренинг. Мы будем общаться в живом формате и разбирать интересные и необычные задачи из мира JS, которые помогут лучше разобраться в теме и повысить скиллы. На первом митапе обсудим, что круче: функциональное программирование или объектно-ориентированный подход, прототипное или классическое наследование, ES6 или ES5
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
Докладчик:
Владимир Донец (kwimba.ru)
Описание: Слышали про магию в Python? Одно из магических заклинаний называется дескрипторы. Мощная фича языка, которая позволяет определять свое поведение атрибута объекта при доступе к этому атрибуту.
Сложно звучит? А вы знали, что дескрипторами уже наверняка пользовались, если хотя бы раз писали на Python. Я расскажу о том, что такое дескрипторы и как их осознанно можно применять в собственном коде.
Рассказывается о кроссплатформенном движке Cocos2d, его возможностях и основных принципах работы с движком.
Презентация к внутреннему докладу ООО Инним https://youtu.be/OKE6XdreE2g
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
Одной из проблем C++ является большое количество конструкций, поведение которых не определено или просто неожиданно для программиста. С такими ошибками мы часто сталкиваемся при разработке статического анализатора кода. Но, как известно, лучше всего находить ошибки ещё на этапе компиляции. На этом докладе мы поговорим о том, какие техники из современного C++ позволяют писать не только более простой и выразительный, но и безопасный код. Вы увидите ошибки в коде различных Open Source проектов и узнаете, как можно их избежать, используя новые стандарты
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Андрей Карпов
Вы узнаете, что такое статический анализ кода и историю его развития. Узнаете, как эффективно применять инструменты статического анализа в своей работе, увидите практические примеры использования этой методологии. Доклад ориентирован на программистов, использующих языки Си/Си++, но будет полезен всем
В докладе раскрыты слабые места Python, проблемы с GC, функциональным стилем, реализацией стандартных структур данных и интерпретатора CPython.
Автор: Кирилл Лашкевич
Надежный обмен данными в гетерогенной среде, между разными платформами и технологиями является одним из ключевых моментов разработки сложных систем. Во время обмена данные преобразуются в некоторый промежуточный формат совместимый между платформами. Преобразование в подобный формат и из него — крайне рутинная и подверженная ошибкам работа.
Метаописание данных неким декларативным языком с последующей автогенерацией типизированных структур облегчает жизнь разработчику. Снимает с него необходимость задумываться о промежуточном формате, о правильном порядке полей, а типизированность гарантирует выявление ошибок еще на этапе компиляции кода.
В докладе будет рассмотрено несколько подобных решений, их плюсы и минусы. Также будет рассмотрен с практической стороны наш собственный формат метаданных, используемый нами на протяжении более 5 лет.
Целевая аудитория:
Ограничений нет, но в большей степени разработчики, имеющие уже определенный опыт разработки разнородных систем или приступающие к подобной задаче.
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
Similar to Почему хорошее ИТ-образование невостребовано рыночком (20)
Conference: JS is Back! fwdays
In addition to blocking CPU-bound tasks, we can use worker_threads to run asynchronous non-blocking domain logic if our main event loop is already overloaded. Now we have perf_hooks API which can be used to create load balancer to spread load in worker pool to provide the most dense event loop utilization. Mentioned machinery can be encapsulated in a simple abstraction with async/await contract to have a solution competing with goroutines in Go for both convenience and efficiency.
Node.js Меньше сложности, больше надежности Holy.js 2021Timur Shemsedinov
If Node.js is your everyday tool, it's almost certain that you use it in the wrong way, Timur will prove that in a very short review, uncover anti-patterns in your daily standard solutions, and show you the way to much better practices. The only thing that creates obstacles in your way to knowledge is your laziness.
Low-code sells great, but in practice, it does not provide the benefits that vendors have claimed. What are the reasons and how can we get an advantage using the Low-code principle? Experience of radical rethinking and use-cases in enterprise applications together with multi-paradigm programming and metaprogramming.
https://fwdays.com/en/event/architecture-fwdays-2021/review/rethinking-low-code
Video: https://youtu.be/RS8x73z4csI
What is middleware?
Mixins, Reference pollution and shared state, Race condition and Abstraction leaks, Fat controller and layers mix, High coupling and Error ignoring
Мы закончим обзор новых возможностей Node.js и сложив все это вместе в Node.js Starter Kit (шаблона проекта) от сообщества Metarhia для построения надежных и масштабируемых облачных и кластерных приложений и быстрой разработки API для высоконагруженных и интерактивных систем. Будет опубликован манифест Metaserverless. Мы разберем код, обсудим использование новейших возможностей платформы Node.js и фундаментальных знаний CS для построения грамотной структуры и архитектуры проекта.
Видео: https://youtu.be/r1u-dGocm1c
План 2-го вебинара: Обзор распространенных проблем: утечки памяти и ресурсов, игнорирование ошибок и потенциальных мест их появления, нарушение принципов GRASP и SOLID в Node.js, понятия связанности и зацепления программных компонентов, применение GoF паттернов и других шаблонов проектирования, обзор антипаттернов в Node.js и как это должно влиять на написание ежедневного кода.
Fwdays вединар: Node.js in 2020: Выйди и зайди нормально - Часть 1
Видео: https://youtu.be/GJY2dyE6328?t=480
За последние 5 лет Node.js очень изменился, но знания о платформе у сообщества остались на уровне 2013-2015 годов, все те же подходы, все те же проблемы. Сообщество плохо следит за новыми возможности, а если и узнает про них, то это не влияет на написание ежедневного кода. В Node.js, да и в JavaScript, слабо проникают фундаментальные знания по программной инженерии и архитектуре, параллельному программированию, GRASP, SOLID, GoF, а если и проникают, то не подвергаются адаптации и переосмыслению. Поэтому, среди других языков программирования JavaScript воспринимается, как несерьезный, а Node.js, как платформа для малограмотных людей. Как преодолеть эту тенденцию и как изменить подход к разработке на Node.js в 2020 году, с использованием всех современных возможностей и знаний, а так же, что нужно изменить в ежедневных практиках написания кода, эти и другие вопросы будут освещены в докладе «Node.js в 2020: Выйди и зайди нормально».
14. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
15. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики на еду
16. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании
Аутсорсинговые компании сырьевая э.
Компьютерщики на еду
17. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании большие прибыли
Аутсорсинговые компании сырьевая э.
Компьютерщики на еду
18. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какой бывает ИТ-бизнес
Технологические компании контроль и власть
Продуктовые компании большие прибыли
Аутсорсинговые компании сырьевая э.
Компьютерщики на еду
19. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какие нужны специалисты в ИТ
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
20. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
21. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании программисты
Аутсорсинговые компании
Компьютерщики
22. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании программисты
Аутсорсинговые компании м-ы, кодеры
Компьютерщики
23. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании программисты
Аутсорсинговые компании м-ы, кодеры
Компьютерщики малограмотные
24. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Кто что делает в ИТ
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
25. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
26. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании Коробка, сервис
Аутсорсинговые компании
Компьютерщики
27. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании Коробка, сервис
Аутсорсинговые компании Человекочасы
Компьютерщики
28. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании Коробка, сервис
Аутсорсинговые компании Человекочасы
Компьютерщики Заплатки
31. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
32. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики ни какого
33. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании
Аутсорсинговые компании ПТУ, вайти курсы
Компьютерщики ни какого
34. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании Университеты, ПТУ
Аутсорсинговые компании ПТУ, вайти курсы
Компьютерщики ни какого
35. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Какое нужно ИТ-образование
Технологические компании R&D, Университеты
Продуктовые компании Университеты, ПТУ
Аутсорсинговые компании ПТУ, вайти курсы
Компьютерщики ни какого
36. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Проблемы отрасли
В современном мире делать хорошо невыгодно
- писать хорошо - сложно, долго и дорого
- все уже можно найти и склеить
- все вроде есть, пока чего не хватишься...
- программируем на мусорку
37. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Проблемы отрасли
Программная инженерия оторвалась от науки
- не отвечает на вопрос почему так, а не иначе
- программируем на фреймворках
- нет научного осмысления паттернов и приемов
- маркетологи уничтожат цивилизацию...
38. const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
Проблемы отрасли
Сложность интеграции
- по частям есть, но не вместе
- связать сложнее, чем разработать часть
- стыки должны совпадать
- как устроено внутри