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

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

1 494 поста 11 369 подписчиков

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

Какие могут быть проблемы с обучением, если всё есть в сети, на русском и в открытом доступе

Затронута важная тема!

Оригинальный пост:

Озарение! Зачем мне нужен LoC-контейнер

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

@entity8844

Многие программисты, которые сильно погружены в тему, просто не способны рассказать что-то полезное не потому, что не понимают материал, а потому, что не понимаю проблем начинающих. У кого-то были отличные учителя и они не заметили трудностей на этапе обучения. Кто-то просто очень давно учился и уже не понимает проблем начинающих. Кому-то сразу и всё было понятно (большинство, конечно, выберет это вариант! :).

Какой бы ни была причина, суть не меняется. Большое количество контента в сети не даёт понимания материала.

Штука, про которую ты хотел написать, судя по контексту, называется "контейнер инъекции зависимости" (Dependency Injection Container). Хорошо бы подучить матчасть, чтобы понимать зачем оно надо и какие проблемы решает.

IoC - это "принцип инверсии управления (Inversion of Control). Опять таки хорошо бы почитать что это и зачем оно надо.

Вот пояснение о инверсии зависимости с сайта всё тех же «мелко-мягких»:

Зависимость в приложении должна быть направлена в сторону абстракции, а не на детали реализации. При написании большинства приложений направление зависимостей времени компиляции задается в сторону времени выполнения.

Я понимаю о чём речь, но до сих пор читаю такие тексты с усилием. Когда начинал разбираться в теме – это был просто шум. Есть люди, которые сразу и легко такое понимают, но я, к сожалению, не из таких. Поэтому нужны хорошие примеры с плавным погружением в проблему и предоставлением инструментов для решения. А таких в сети хрен целых и ноль десятых.

Вообще подобные рекомендации очень похожи на классическое «учи матчасть». Отправлять учить матчасть – святое дело для каждого, кто разобрался в теме :). Но это так не работает. Я читал Троелсена по рекомендациям, смотрел и читал множество материалов в сети на разных языках, покупал в складчину переводы по разным темам. К сожалению, подавляющее их большинство являются копией содержания популярных книг с полным сохранением сложности формулировок. Мой наставник верно подметил, что с таким же успехом можно учить французский язык по словарику. Владеющему языком словарик сильно помогает, а начинающим такой словарик будет почти бесполезен.

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

Много раз такое слышал – но это совет, который не решает вопроса. Не понял тему – читай предыдущую. Так вопросов по предыдущей теме и не было (!!!). Снова попадаем в рекомендацию «учи матчасть».

Сейчас же материалов по программированию в интернете полно - бери да учись. И видео, и блоги, и официальная документация. Всё бесплатно. Да вот взять хотя бы документацию от мелко-мягких https://learn.microsoft.com/ru-ru/dotnet/core/extensions/dep... Всё по русски, с объяснением зачем оно надо и примерами.

Чтобы найти нужную статью – надо знать, что искать и уметь вычленять важное из ещё мало понятной темы (вот так задачка!).

Я преподаю компьютерную графику студентам (визуализация интерьеров в 3ds max). Они тоже задают странные (по моему мнению, конечно) вопросы.

Например, если у меня студент спрашивает, как двигать объект, то я не понимаю, почему он не написал это в гугле. Так и пиши - «как двигать объект 3ds max». Будет много видео на первой же странице. Но есть и более сложные примеры - «как сделать здание с плавно меняющимся размером окон». Такой запрос на параметрическое моделирование не выведет и ответов не даст. Хотя с моей стороны очевидно, что информация по параметрическому моделированию в сети уже есть. Её много, она на русском и бесплатна.

Программирование существенно сложнее из-за большого количества мнений. Здесь не всё так однозначно, как в теме 3d моделирования. Даже если известно, что искать. Запрос может привести тебя к тонне материала, в котором большАя часть будет копипастой из словарика, не меньшая будет не по уровню сложной (привет интерфейсы и полиморфизм, я снова иду к вам!), ещё часть будет в стиле «учи матчасть» и совсем малая будет действительно актуальной и полезной. Изучить последнее после процеживания всего остального - та ещё задачка.

Реально понимание приходит, когда ученик сталкивается с нерешаемой ранее задачей, для решения которой вводят новый инструментарий. Тогда и становится понятно на кой оно надо. Для этого важно выделить проблему и без избытка информации подвести к её решению. Но чаще предлагают найти и понять проблему самому (уже задачка). А потом с полным осознанием ситуации (с чего бы?) подобрать нужный инструментарий и решить проблему (а чего не понятно – всё же есть в сети и бесплатно). Абсурд.

Недавно смотрел, как жена игра играет в PS4. Она почти никогда не играла в видеоигры. Сидит и вообще тормозит! А всё дело в том, что для неё задачка – это найти нужную кнопку на геймпаде. Когда думаешь о таком, места на размышления о тактике или оценке поведения врага не остается. Она не видела ничего, что происходит на экране из того, что видел я.

Помните, голова учащегося плотно занята множеством других вопросов, которые кажутся специалисту элементарными, не достойными внимания или даже вовсе незаметными. Но именно из-за них очевидное и простое решение или знание просто ускользает от ученика. Даже если оно написано прямо на экране и на русском языке.

Я верю, что те люди, которые откликаются на помощь с обучением, хотят помочь. Но описанные рекомендации и советы просто не работают. Поэтому, когда тема IoC-контейнеров стала хотя бы более-менее ясна, я написал этот пост радости наполненный

...ошибками и корявым объяснением...

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

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

Озарение! Зачем мне нужен LoC-контейнер

Наконец-то я понял, зачем оно надо!

(или опять туплю и ничего так и не понял?)

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

Если в коде конкретно писать, что и где создаётся (пишу - тут будет квадрат), то при изменениях, которые часто происходят по ходу, придется искать эти части кода и менять на новые. Это неудобно.

А можно сделать по-другому. Оставить в коде своего рода ссылки, по которым можно будет найти нужный объект (пишу код по новому - возьми фигуру вот тут).

Тогда в случае изменений не придётся искать все места, где использовался старый код и менять его. Достаточно поменять набор объектов в месте, на которое указывают ссылки (тот самый контейнер).

Старый код остается неизменным! Данные для работы выносятся в отдельное место, которое при необходимости и редактируется.

Как же это было трудно... А оказалось элементарно и просто.

А какие примеры помогли вам быстро и легко понять что-то в программировании, когда вы только начинали учиться?

Не выключайте ваш компьютер

Не выключайте ваш компьютер Юмор, Картинка с текстом, Ошибка, Игра слов, Грустный юмор, Компьютер
Показать полностью 1

Угадайте звездного капитана юмористической команды «Сборная Красноярска» по описанию одного из участников

Ну что, потренировались? А теперь пора браться за дело всерьез.

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

Как искусственный интеллект переписывает код разработчиков: прогресс или угроза?

В последние годы искусственный интеллект (ИИ) становится неотъемлемой частью индустрии программирования. От автоматической отладки до написания кода — ИИ обещает революцию. Но стоит ли нам радоваться этим изменениям или опасаться их последствий?

В последние годы искусственный интеллект (ИИ) стал неотъемлемой частью мира программирования. Системы, которые способны анализировать код, предлагать улучшения и даже автоматически его генерировать, обещают революционизировать индустрию. Но так ли безоблачно будущее, которое они обещают, или же мы стоим на пороге серьёзных проблем?

Инструменты на базе ИИ, такие как GitHub Copilot, уже сейчас предлагают программистам помощь в написании кода. Они способны анализировать огромные массивы данных и предлагать оптимальные решения задач, значительно ускоряя процесс разработки и повышая его эффективность. Это особенно ценно при работе с новыми технологиями или сложными проектами, где каждая минута на счету.

Однако, не всё так радужно. Увеличение зависимости от ИИ может привести к снижению спроса на начинающих программистов, чьи задачи будет выполнять машина. Есть и более серьёзные опасения: что если ИИ начнет самостоятельно писать код, содержащий ошибки или уязвимости? Это может привести к созданию программного обеспечения, которое будет легко атаковать или эксплуатировать злоумышленниками.

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

Итак, ИИ в программировании — это прогресс или угроза? Ответ на этот вопрос зависит от множества факторов, включая развитие технологий, политику регулирования и готовность общества адаптироваться к новым реалиям. Одно можно сказать наверняка: дискуссии по этому поводу ещё долго не утихнут.

Как вы думаете, ИИ станет помощником разработчиков или заменит их? Делитесь мнениями в комментариях!

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

Играем в крестики-нолики c RPN калькулятором

Автор текста: dlinyj


Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Когда я разбирался с программируемыми калькуляторами, то думал, как бы элегантнее протестировать функциональность устройства. Один из известных способов проверки – это реализация какой-либо игры.

Игр для калькуляторов, как на просторах бывшего СССР, так и за рубежом громадное количество, остаётся только выбрать. Наиболее популярная — это «Посадка на Луну». Однако, для меня она показалась скучной и неинтересной, а сам код сложным и запутанным. Поэтому мой выбор пал на крестики-нолики, так как все мы играли в них в школе, и мне стало интересно сыграть в неё с калькулятором.

Реализовать игру решил на модели HP-32S, поскольку он мне очень полюбился за красоту архитектурной реализации и удобство программирования.

❯ Основа программы


В предыдущей своей статье "Калькуляторы с обратной польской нотацией" я делал обзор литературы для программируемых калькуляторов. Среди которой была замечательная книга А.Г. Гайшут "Калькулятор твой помощник и соперник в играх".

В этой книге приводится огромное количество примеров игр на калькуляторе и, в частности, пример игры в крестики-нолики:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Мне не удалось найти описания логики работы этих игр, а автор книги, к сожалению, умер в 2015 году. Попытка искать ответ в публикациях автора, любезно предоставленных на его личном сайте, не увенчалась успехом.

Поэтому придётся разбираться с этой программой самостоятельно. Приведу текст и описание программы из книги под спойлером:

Описание программы Крестики-нолики из книги:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост
Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Главная задача – это перенос этого кода с МК-61 на калькулятор HP-32S. Для начала, разберёмся как эта программа работает.

❯ Проверка программы на МК-61


Первое, что я сделал – это перенабрал код из книги в формате, который понимает онлайн-эмулятор МК-61.

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Кстати, если интересно, то можно попробовать поиграть в эмуляторе, чтобы понять принцип работы. Для этого копируем код, вставляем в область «Код программы:» и нажимаем кнопку «Ввести в память». Картинка из книжки выше подсказывает нам, что калькулятор даёт координаты, куда ставить "X", а мы ему в ответ передаём координаты, куда ставить "O".

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Координаты для игры

Чтобы начать играть на клавиатуре калькулятора, нужно нажать кнопку [С/П]. В ответ будет выведено число, первое число всегда «9» (центр поля). В ответ необходимо ввести свою координату, например, «2» и нажать [С/П]. И так далее, пока вы не проиграете (калькулятор выведет «77», либо будет ничья (калькулятор выведет «0»).

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Калькулятор победил

Чтобы посмотреть последний ход калькулятора, надо обменять регистры X и Y местами, для этого нужно нажать на клавишу [⟷].

Проверка показала, что всё прекрасно работает как в эмуляторе, так и на живом калькуляторе, и ошибок в программе нет.

❯ Анализ кода программы для калькулятора МК-61


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

Особенность программирования МК-61 в том, что он пропускает команду перехода, если условие истинно, и исполняет — если ложно! Поэтому все условия для python пришлось инвертировать. Плюс, я для удобства ввёл дополнительные функции, которые также перенёс впоследствии в HP-32S: функция вывода координат крестиков и ввода ноликов, функция ничья и победа калькулятора:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Первое – инициализирую регистры калькулятора:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

После всех подпрограмм идёт головная программа:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Можно увидеть, что в любом случае в самом начале крестик будет стоять на координате 9. Вся основная логика сокрыта в подпрограмме.

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Из всего кода я понял, что второй ход калькулятора будет на единицу меньше оппонента, а если ход был в координату «1», то равен восьми. Но вот что делает остальная логика программы, особенно зачем там тригонометрическая функция, для меня осталось загадкой. Буду рад читателям, если кто-то сможет прояснить, как же работает эта программа.

Исходный код доступен в репозитории проекта.

И, да, код вполне себе работоспособен, в чём несложно убедиться:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

❯ Перенос кода на HP-32S

Напомню, что калькулятор HP-32S, который есть у меня, принадлежит семейству калькуляторов HP10B/14B/17B/17BII/19BII/20S/21S/22S/27S/28S/32S/32SII/42S, таким образом, всё, что приводится ниже, с небольшими адаптациями можно будет перенести и на другие модели этой серии.

Трудозатраты в предыдущей главе, по переносу кода на python, были проделаны с двумя целями:

  1. Понять, как же работает этот код (увы, не выполнено).

  2. Более удобно переносить на другую модель калькулятора.

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

Вооружившисьдокументацией на калькулятор HP-32S, я переписал программу крестиков-ноликов с питона для него. Для удобства я делал это в таблицах Exel. Как я уже говорил, особенность калькулятора в том, что он маркирует каждую строку буквой и цифрой, а любая метка – это смена буквы. Таблицы идеально подходят для этого.

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

Код программы для калькулятора HP-32S:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост
Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

В силу того, что на калькуляторе HP-32S можно сделать вывод на экран конкретного регистра (с указанием имени регистра), а также запрос ввода другого конкретного регистра, то ввод-вывод становится чуть более интерактивным и интересным.

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

❯ Выводы


Изначально задача казалась мне такой простой, но заняла у меня достаточно приличное время. Её ценность состояла в том, что мне удалось разобраться — как же программировать для калькулятора HP-32S. В результате оказалось, что из модельного ряда калькуляторов, с которыми я занимался — эта версия оказалась самая дружелюбная и удобная.

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

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

❯ Полезные ссылки:

  1. Гитхаб этого проекта

  2. Первая часть «Калькуляторы с обратной польской нотацией»

  3. Сайта автора «Гайштут и его друзья»

  4. Онлайн-эмулятор МК-61

  5. Документация на калькулятор HP-32S


Если вам интересна металлообработка, старое железо, всякие DIY штуки, погроммирование и linux, то вы можете следить за мной ещё в телеграмме.


  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

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

Хочу войти в it

Здравствуйте, мне 30 лет. Хочу войти в эту сферу. Тут читал, что айтишники получают по 300-800к. Это правда? Расскажите, какие реальные зарплаты в it? Каков план действий должен быть? Время на учебу у меня есть. Буду благодарен любым советам.

Курс Python-программист 08. Основы прав (permissions) в Linux

Привет, устал в любой непонятной ситуации писать SUDO, а что это "drwxr-xr-x" такое вообще не знаешь?

Тогда рекомендую моё новое видео! А так-же мой ТГ с фотками чехлов на паспорт которые я учась делать, не ну а чо

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

Хорошо разбираетесь в звездах и юморе?

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

Переходите по ссылке и проверьте свою юмористическую интуицию!

Хорошо разбираетесь в звездах и юморе? Юмор, Звезды

Cohesion и Coupling: отличия

https://habr.com/ru/articles/568216/

Сегодня посоветую короткую статью, чтобы наконец-то разобраться что есть что.

🛑 Основные моменты

- Нужно стремиться к достижению low coupling (низкой связанности) и high cohesion (высокого сцепления)
- Cohesion — степень, в которой часть кодовой базы образует логически единую атомарную единицу — блок.
- Coupling — степень взаимосвязи между этими блоками.
- Блок здесь необязательно является классом. Это может быть метод, класс, группа классов или даже модуль: понятия cohesion и coupling применимы на разных уровнях.
- Высокий cohesion означает хранение связанных друг с другом частей кода в одном месте.
- Например, мы храним код работы с пользователями в одном месте, и это может быть как стандартный MVC контроллер, так и отдельный микросервис.
- В то же время низкий coupling заключается в максимально возможном разделении несвязанных частей кодовой базы.
- Например, react и react-dom хранятся в разных пакетах, благодаря чему мы можем использовать react-native вместо react-dom и писать нативные приложения.
- В отличие от такого показателя, как цикломатическая сложность, степень cohesion  и coupling не может быть измерена напрямую.


ℹ️ Понятие cohesion похоже на Принцип единственной ответственности, который утверждает, что у класса должна быть одна ответственность, что аналогично тому, что делает код с высоким cohesion. Разница здесь в том, что высокий cohesion необязательно означает, что код должен иметь только одну ответственность. Можно сказать, что Принцип единственной ответственности в этом смысле более строгий.

#essential #fridayreading

https://t.me/cherkashindev/196

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