Сообщество - Лига программистов
Добавить пост

Лига программистов

1 533 поста 11 431 подписчик

Популярные теги в сообществе:

"Основы Dart" (2-е издание) в открытом доступе

"Основы Dart" (2-е издание) в открытом доступе IT, Программирование, Dart, Книги, Программист, Длиннопост

Всем привет!

Закончил перерабатывать книгу 2021 года "Основы Dart". Этот язык программирования лежит в основе мульти-платформенного фреймворка Flutter, посредством которого можно писать приложения под Android, iOS, Desktop и даже Web.

Что изменилось?

На глобальном уровне:

  1. Второе издание представляет собой полноценный учебник;

  2. Актуальная версия Dart - 3.2;

  3. В книге 6 глав вместо 10 (521 страница vs 216);

  4. шрифт кода изменен на JetBrains Mono (спасибо Владимиру Орлову за рекомендацию!);

  5. шрифт текста с Times New Roman на PT Serif.

  6. Каждая глава завершается лабораторной работой с кучей заданий (всего на книгу ~ 280 заданий), что позволяет использовать учебник в образовательных процессах ВУЗов, СУЗов или школах, а также дет возможность в большем объеме прокачать свои навыки тем людям, кто самостоятельно обучается по нему.

На уровне глав:

Глава 1. Краткая история и встроенные типы данных.

Добавил пару новых разделов (Записи (Record), Тип данных dynamic vs Object и т.д.) и значительно расширил существующие, рассмотрев различные варианты работы со встроенными типами данных.

Глава 2. Операторы, pattern matching и управляющие конструкции

Появился раздел посвященный Pattern Matching и Destructuring. Больше внимания было уделено управлению потоком выполнения кода.

Глава 3. Функции, библиотеки, пакеты и их тестирование

Мягко сказать, третья глава была перехерачена таким образом, что включает в себя сейчас третью, четвертую и десятую главы первого издания + много разных изменений. Зачем это было сделано?) А чтобы студенты страдали хДДД Немного поменял подход и дал тестирование, начиная с функций, чтобы все лабы далее были покрыты тестами. А без разбора библиотек и пакетов, перескакивать на тесты не было смысла.

Глава 4. Объектно-ориентированное программирование

Эта глава объединила в себе переработанную по ООП и исключениям из первого издания. Добавил раздел по новой фишке, которая появится в Dart 3.2 - Private field promotion, а также по модификаторам классов, с демонстрацией способов, как можно выстрелить себе в ногу ^_^

Глава 5. Сборка приложения. Работа с файлами и директориями

Добавил разделы по тому, какие существуют флаги сборки и как с ними компилировать и запускать приложение. Также добавил раздел по конфигурации приложения через терминал в момент запуска.Что касается части работы с файлами, то она была значительно расширена. Добавились примеры по работе с директориями и раздел, посвященный реализации простенькой БД на основе односвязного списка и текстового файла. Раздел посвященный JSON также претерпел изменения и обзавелся примером разработки хранилища типа "ключ:значение".

Глава 6. Асинхронное и сетевое программирование. Isolate

Переработана и расширена часть, связанная с асинхронным программированием (Future, async/await и Stream) и раздел, посвященный работе с изолятами. Добавил с примеры, как организовать взаимодействие между изолятами в рамках одной изоляционной группы, а так же, как с этим обстоят дела, когда создается новая изоляционная группа. Рассмотрен такой механизм, как зоны (Zones) и реализация серверной и клиентской части приложения на TCP, UDP и HTTP, без использования сторонних пакетов.

Благодарности

Всем тем, кто денежно поддержал второе переиздание учебника (чьи имена и никнеймы удалось выявить при переводах и не пожелали оставаться анонимами) - Огромное Спасибо!

a.alistrat, Starletovod, PackRuble, ReinRaus, Олег О., Александр Остапенко, Павел М., Дмитрий М., Ruslan Vafin

Все новые донаты пойдут в благодарность 3-го издания. Огромная просьба, при переводе указывать в комментариях, как вас добавлять в этот раздел (ФИО, Имя Фамилия или никнейм).

Где скачать книгу?

Как и в предыдущих случаях, книга доступна в 2-х версиях: PDF EPUB

Почему год издания 2024?) Это традиция, что книга, выходящая под конец года, датируется следующим ^_^

Курс на Stepik

Дополнительно к книге, сделал курс на Stepik по Dart, в основу которого легло второе издание учебника. Вас ожидает более 100 тестов и 140 интерактивных задач, с повышающимся уровнем сложности. Это позволит учащемуся не гадать над книгой: "Правильно ли я понял, что от меня требуют реализовать или нет?", а, закатав рукава, сразу приступить к оттачиванию полученных знаний на практике. Более подробную информацию (акции и т.д.) можно найти в моей группе в ВК: https://vk.com/madteacher

Показать полностью 1

Чистый? код

Сразу - я ничего не доказываю в посте, хочу услышать разные мнения насчёт ситуации ниже:

Скинули мне библиотеку, которая практически идеально иллюстрирует "Чистый код" Р. Мартина (кто книгу читал, тот в курсе). Библиотека (цифры округлены) реализует 15 методов API, состоит из 25 файлов в которых есть 25 классов, 50 импортов классов друг между другом, в классах реализовано 70 методов, которые занимают в сумме 1300 строк кода...

С позиции книги всё сделано идеально, вопросов нет.

В чём же мой вопрос?

Решил я переписать данную либу без разделения на уровни абстракций, интерфейсы и т.д. и т.п. Реализация функционала полностью 1 в 1 заняла 50 (пятьдесят) строк кода (я просто убрал объявления классов, а действительно значимые строки кода свёл в 15 функций по 1 на метод, которые свёл в одном файле. По сути 1 строка - объявление функции, 2 - создание JSON из словаря, 3 - возврат результата запроса, 4+ строки - по необходимости (промежуточные вычисления).

У кого есть какие мнения по этому поводу?

P.S. Для тех, кто не в теме есть в т.ч. и такие мнения по поводу книги:

Книга Р. Мартина является сводом правил по написанию правильного кода, которым каждый программист должен следовать. На мой взгляд, умение писать чистый код – важный навык, помогающий специалисту не только самому понимать свой код лучше, но и работать в команде.

И если насчёт таких вещей, как правила наименований классов / функций / методов вопросов в целом нет, то вот такие постулаты, как обязательные деления на уровни абстракций, минимизация функций, выделение обработок исключений в отдельные функции и т.п. приводит к результату выше.

С одной стороны - для проектов с сотнями тысяч строк кода структура может быть (ввиду отсутствия объективных исследований утверждение не доказано и не опровергнуто) важнее лаконичности из-за высоких трудозатрат на внесение изменений, с другой стороны... А разумно ли фанатично следовать некоторым правилам вообще везде?

Строки кода, это не просто строки кода. Это ещё и время разработчика (которое становится в итоге стоимостью разработки), а в конечном итоге время и ресурсы выполнения программы... Цену чистого кода мы знаем... А товар который мы за эту цену покупаем?

Показать полностью

Что учить в IT?

Ребята айтишники, обращаюсь к вам за помощью. Подскажите, что лучше учить и что наиболее интересное и эффективное? Я пытался во фронт, учил реакт + ts, наклепал пару приложений простеньких, но вообще не зашло, возможно не там или не так учился.

Мне нравятся плюсы, но везде говорят, что они нереально сложные.. Так же в душу запал php и node.js, но знания прям поверхностные.

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

В Unity 6 появятся ИИ-инструменты для разработки игр

Разработчики игр среди прочего получат ранний доступ к инструментам на базе искусственного интеллекта Unity Muse и Unity Sentis

Unity Muse — позволяет создавать в редакторе Unity «почти все, что угодно» по текстовому описанию или по эскизу

Unity Sentis — кроссплатформенное решение, с помощью которого можно встраивать ИИ в свои проекты

Также компания оптимизировала производительность, улучшила работу с освещением и ускорила создание мультиплеерных игр

Релиз Unity 6 запланирован на 2024 год

Показать полностью

Карьера в IT. Системный аналитик, не номерная часть. Подходы к степени детализации и проработки ТЗ системным аналитиком

❕Сегодня хочу поговорить на очень спорную тему, я бы даже сказал философскую. Отчасти из-за нее, возникает очень много непонимания между коллегами, работающими в одном и том же (казалось бы) "АйТи", но почему-то имеющих очень разное представление о процессах разработки и о том, что каждая роль команды должна выполнять. Особенно это часто всплывает в моих постах на этом ресурсе, в комментариях - это такой хороший срез из разных уголков нашего отечественного IT.

И это большая тема для постов и для рассуждений. Но сегодня сосредоточимся на небольшой части этой темы, касающейся непосредственно системных аналитиков.

Давайте поговорим о том, какие есть подходы к написанию ТЗ и степени его проработки на примере описания тех же микросервисов\их методов.

❕Представим, что мы является системным аналитиком в команде и нам поставили задачу - реализовать личный кабинет пользователя.

Т.е. когда пользователь нажимает на какую-нибудь иконку профиля в приложении или там на кнопку "Профиль" - ему должна открываться экранная форма, в которой ему отрисовывается определенный набор полей и эти поля заполняются информацией. Также допустим, что у нас сам объект "Пользователь" уже есть в системе, атрибутивный состав понятен и нужно только реализовать процесс получения данных о пользователе на фронт по его идентификатору (ТЗ на фронт, на экранную форму и на интеграцию его с бэком опустим).

Какие есть варианты написания ТЗ для данной задачи?

1️⃣Самый минимальный уровень детализации. Это когда системный аналитик просто ставит задачу на разработку Джире (ну или в рамках небольшой страничке в конфлю\ворде, в зависимости от того, как принято) и в постановке этой задачи пишет что-то вроде "Требуется реализовать процесс получения данных о пользователе и передачу ее с бэка на фронт по REST-запросу. Со стороны фронта требуется создать новую экранную форму приложения - "Личный кабинет" или "Профиль пользователя". Со стороны бэка требуется реализовать новый метод, который будет использовать фронт для запроса информацию по пользователю (и, скорее всего, перечисляет набор полей, которые должны передаваться на фронт в формате "Фамилия", "Имя" и т.д.)". Усё

Я не утрирую - это один из вариантов реального "ТЗ" на эту задачу. Плюсом к этому может быть описан пользовательский сценарий в вольном формате или в формате UC (и то это будет в лучшем случае). Т.е. по сути в рамках такого процесса разработчик получает из полезной информации - только состав полей, передачу которых ему нужно реализовать по запросу с фронта, и то только их наименования.

2️⃣Вариант с немного лучшей детализацией. В этом формате системный аналитик уже пишет ТЗ в каком-либо формате, в рамках которого указывает, что: "Требуется реализовать новый метод GET /users/{id}, указывает полноценно параметры, которые данный метод должен потреблять на вход и параметры, которые он должен отдавать на выходе." Плюс может описать, также как в предыдущем пункте, верхнеуровневый сценарий взаимодействия с этим методом.

Уже чуть лучше и чуть больше полезной информации для разработчика, правда?

3️⃣Вариант с достойной реализацией. Этот вариант обычно используется на большинстве проектов ФинТеховских и я считаю его достаточным для того, чтобы написать хорошее, качественное ТЗ и разгрузить разработчика так, чтобы он не думал о деталях реализации, хотя бы алгоритмических и системных (то, к чему нужно стремиться со стороны СА, имхо).

В рамках этого варианта будет всё из предыдущих + будет полностью описана логика работы данного метода, как бизнесовая, так и техническая. Будут описаны все корнер-кейсы, правила обработки ошибок, варианты того, что может вернуться в ответе (кроме успешного ответа, еще и все варианты негативных). Логика может быть описана или на уровне псевдокода или просто словами - конкретно это уже не имеет значимой роли, главное то - что эта логика пошагово и подробно описана.

Пример подобного описания я приводил ранее в своих постах. Я топлю всегда как минимум за этот вариант описания любых задач - что бэковых, что фронтовых, любых. Избавить разработчиков от лишней работы с точки зрения проработки алгоритмов и логики, если мы вполне это можем сделать сами - у них хватает работы и так, можете поверить.

4️⃣Более полноценный вариант придумать не могу =)

Плюсом к 3 пункту дополнительно описывается еще и swagger-спецификация микросервиса в целом и конкретных эндпоинтов в частности. Кроме того, что это просто удобно, наглядно и очень детально - эту спецификацию разработчики могут использовать, чтобы сконвертировать ее напрямую в готовый код с расписанными классами и эндпоинтами, останется "только" докрутить бизнес-логику и метод готов (Тут просьба поправить меня коллегам, которые более глубоко погружены в разработку - так ли это или есть еще какие-то бенефиты для разработчиков. Могу в этом предложении быть не прав, пишу исходя из того, как мне это объясняли).

Кроме этого, такой подход хорошо использовать в парадигме swagger-first, особенно когда у вас есть насыщенный и активный процесс кросс-командной разработки. Отдать другой команде сваггер аналитику куда проще и быстрее, чем отдать полноценное ТЗ на сервис - хотя бы просто по времени. А большего им и не нужно (потому что им пофиг на то, как работает ваш сервис внутри, главное понять, как вас вызывать и что вы вернете в ответе).

А если это все еще и использовать в связке с asciidoc-документацией, выкладывании ее в git- ммм, сказка просто. Как вспоминаю об этих процессах, наворачивается скупая слеза ностальгии - как же это было здорово! Жаль, что я встретил это ровно в одном проекте, а во всех последующих так и не смог продавить внедрение чего-то похожего.

И я вполне понимаю почему (например, очень удобно когда ты почти не тратишь время и ресурсы на написание глубокого ТЗ - достаточно пары фраз, а дальше нехай разработчик разбирается. И чем дольше пишешь в таком режиме, тем больше он тебя поглощает). Но кроме этого есть и множество других, о чем поговорим в следующий раз.

А с какими процессами и подходами работаете вы?

P.S.: По традиции - буду признателен за вопросы про карьеру\профессию\чему угодно связанному со сферой IT - постараюсь ответить на всё.

P.P.S.: Также веду телеграмм-канал, в котором делюсь разным про профессию и про свой путь в ней. Есть огромное количество постов на тему софт-, хард-скиллов и про карьеру в целом - см. закрепленный дайджест.

Показать полностью

Промо курсов IT виде мыла как бы намекает...

Промо курсов IT виде мыла как бы намекает... IT, Реклама, Мыло

Чтобы сходу въехать в ОйТи вам нужен кусок простого советского хозяйственного ...

Показать полностью 1

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #4

Только такой картинкой я могу описать все что происходило с прошлого выпуска.

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #4 Опрос, IT, Программирование, Онлайн-курсы, Java

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

Каждый раз думаешь "ну что ж такое-то! Как я это не учел-то("

И на самом деле понимаю почему) потому что дел много и мест где надо что-то поменять тоже много) на всю систему тесты написать пока что не успеваю) думаю займусь ими в будущем году на январских праздниках)


Качнулся ли я за это время с прошлого выпуска?

Определенно) В этом мне помогают мои студенты, которые иногда делают домашки совсем не так как я это задумывал)

Из-за этого вскрываются новые нюансы, которые надо срочно починить чтоб не блокировать студентов)

А еще иногда ломается автоматизированное тестирование или в нем находят ошибки) и начинаешь задумываться о тестах для тестов) было у вас такое? признавайтесь.

Вообще когда делаешь такую комплексную систему, то начинаешь понимать всю прелесть современных архитектур и инструментов) в тоже докере очень много чего продуманного. docker inspect была самая мной используемая команда за это время)

Кстати, про докер. Некоторые студенты делают домашку на старых или загруженных компах и вот там кстати очевидный профит от маленьких докер образов которые я делаю для уроков (буквально по 30 метров).


Что говорят студенты?

Разное) Критика присутствует и это хорошо, это помогает развивать курс и его экосистему. Конечно до крупных учебных центров по программированию мне еще далеко, но с приходом живых студентов и выполнения ими домашек + обработка и реагирование на критику помогли сделать курс значительно лучше. Есть довольные и не очень) ничего, главное что работа идет)


Когда будет техничка?

В следующем выпуске) там заодно про кубер расскажу)

И вот холиварный опрос решил создать) интересное)

Табы или пробелы?
Всего голосов:
Показать полностью 1

Поиграем в бизнесменов?

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

СДЕЛАТЬ ВЫБОР

Именование юнит тестов

Мне всегда нравятся “информативные” названия тестов вроде “TestLogin”.

Смотришь и из названивая в принципе не понятно, что именно мы тестируем.

В книге “Искусство автономного тестирования (The Art of Unit Testing)” предлагается следующий способ именования тестов: [UnitOfWorkName]_[ScenarioUnderTest]_[ExpectedBehavior]

- UnitOfWorkName — имя тестируемого метода либо группы методов или классов
- Scenario – условия, при которых тестируется автономная единица
- ExpectedBehavior – что должен делать метод при заданных условиях

Например, если мы тестируем вход пользователя с неверным паролем и ожидаем, что произойдёт ошибка, то названия теста может выглядеть так: TestLogin_InvalidPassword_ThrowsException.

https://t.me/cherkashindev/142

Именование юнит тестов Csharp, Тестирование
Показать полностью 1
Отличная работа, все прочитано!