Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Начните с маленькой подводной лодки: устанавливайте бомбы, избавляйтесь от врагов и старайтесь не попадаться на глаза своим плавучим врагам. Вас ждет еще несколько игровых вселенных, много уникальных сюжетов и интересных загадок.

Пикабомбер

Аркады, Пиксельная, 2D

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
515
Vanek239
Я смог - сможешь и ты!

Ответ на пост «Я написал свою книгу по программированию»⁠⁠3

1 год назад

Плохо, прям очень плохо. Надеюсь всё плюсы и положительные отзывы этому посту это по большей части аналог с али экспрессовским "товар получил, не открывал, ставлю 5 звёзд" и реакция на БЕСПЛАТНО. Даже просто открыв этот pdf можно увидеть на сколько автору было безразлично удобство чтения этого опуса. Микро формат страниц, который просто убивает форматирование кода, сразу бросается в глаза. Но в конце концов вёрстку можно исправить, если автору есть что добавить в довольно пропаханную тему базовых знаний по одному из достаточно старых ООП языков. Я как практикующий товарищ решил сразу посмотреть какой то более менее цельный и минимально содержательный фрагмент кода, так как разделяю мнение что хороший код является "само документируемым" и также может показать общий уровень книги. Первый такой фрагмент нашёлся на 119 странице и содержал очень плодотворную тему рефакторинга кода. Вообще, эта тема обсуждается начиная с банальных уроков программирования в школе, где вас просят хотя бы давать осмысленные имена переменным и проходит через весь опыт практического программирования, где является одним из ключевых элементов борьбы со сложностью. Самое сложное тут суметь уместить в маленьком примере какую то идею, чтобы читатель смог её увидеть, а не просто "поверить автору". И даже в сравнительно больших фрагментах программ с подробным разбором на протяжении всей книги (например "Чистый Код" Роберта Мартина) бывает сложно это реализовать и люди приходя на проект в 1 миллион строк сталкиваются с тем, что рефакторинг в рафинированных примерах и реальном проекте может значительно отличаться по сложности реализации. Это я увлёкся лирикой, перейдём к коду, у нас есть некоторый метод TryOpenDoor со следующей сигнатурой:

private static bool TryOpenDoor(); (посмотреть реализацию можно на странице 119)

и после ряда "улучшений" и вынесения методов получается следующий код:

Давай посмотрим что с ним не так? Пункты будут идти по моему субъективному убыванию критичности.

1) Это другое поведение ! Это прям вообще не нормальная вещь. И дело не в том что мы переименовали метод, это как раз допустимо. Мы изменили сигнатуру метода, ранее он возвращал булевское значение (правда\ложь) , теперь он ничего не возвращает. В случае реального рефакторинга IDE нам бы подсказала и такой проект просто не собрался бы. Почему так получилось ? Потому что по факту начальный код и конечный выполняет немного разные вещи, и оригинальный метод является частью InteractWithDoor() и он естественным образом разваливается на 2 метода, которые и хочется объединить под новым более общим методом.

2) Смешение уровней абстракции. Это может показаться не критичным на таком маленьком примере, но в реальности это огромная проблема и очень важно на начальном этапе дать правильное понимание базовых вещей в архитектуре кода. Так как когда вы перейдёте от 20 строчных примеров к проектам с 20 000 классов вы сможете намного ухудшить качество своего кода, но не улучшить его. У нас есть метод запроса\чтения возраста из консоли, если кто не знает это ReadInt, и первый вывод консоли логически относится к этому методу, тем более в нём уже есть интерактивность с пользователем. На том уровне где мы оперируем методом ReadInt aka GetAge как правильно не должно быть вывода в консоль, если он есть внутри ReadInt.

3) ReadInt() - это вызывает вопросы. Для начала сообщу что почти любая IDE выведет тип возвращаемого значения просто при наведение на метод. В старом коде на си, например, можно встретить обозначение типов в приватных переменных класса, но даже в таком случае оно дополняет название, а не заменяет его. Если бы метод хотя бы назывался GetAgeInt я бы не стал придираться, в конце концов есть принятые в командах стандарты и практики ,а также вкусовщина. Можно возразить "но этот же метод действительно просто получает Int32 из консоли", и с этим можно было бы согласиться, если бы это был какой то публичный метод для consol-и, но даже в таком случае ключевым тут было бы что это значение из консоли. То есть выглядеть должно было, либо так ConsoleEx.GetInt32(), либо GetInt32FromConsole(). Приватный метод, особенно с таким маленьким скоупом, должен иметь очень специфичное функции имя.

4) В книге автор заявляет что он добился успеха выделив "чистое правило" открытия двери в TryOpenDoor() , кстати это было названием оригинального метода. Но давайте посмотрим на этот метод, что в этой строке "age >= 18" есть о двери ??? У меня нейминг вызывает вопросы

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

Многие в комментариях гонятся за какими то "актуальными знаниями", которые толи должны быть в книге, толи не могут быть в ней т.к. она устаревает. Но в реальности я легко могу сказать тимлиду, что не знаю что то требуемое из нового реквайремента или таски и мне нужно время на изучение документации\кода. Но я плохо себе представляю как бы я смог объяснить такое качество кода, при том что в нём самый базовый функционал, который будет работать и на версиях языка десятилетней давности, такой код плох даже для intern позиции.

Как мог бы выглядеть этот код с моей точки зрения. Если мы хотим реализовать InteractWithDoor, то исходный метод, конечно, недостаточен и он разбивается на 2 составляющие, получение возраста и его валидация, но далее нам требуется открытие\отказ в открытие двери, что в коде автора реализовано через сообщение "Дверь не для тебя!" с очередным нарушением уровня абстракции.

Пара комментариев по коду.

1) Конечно, метод EnableRussianSymbolsForConsole не относится к InteractWithDoor, но когда книжный пример при копирование в IDE на некоторых системах будет выдавать тебе вопросы вместо текста это не очень хорошо. И для примера добавить такой вызов допустимо, но лично я бы предпочёл просто использовать английский во всех запросах.

2) Длинный нейминг методов допустим и даже хорош для само документирования кода, в случае если это внутренние методы с малым скоупом видимости (в данном случае все методы кроме InteractWithDoor являются приватными).

3) Может показаться что методы ShowNotAllowedMessage и OpenDoor немного избыточны т.к. у них однострочная реализация, но лично моя практика показывает что такая разбивка оправдана.

4) Код получился длиннее и это нормально, особенно когда речь идёт про рефакторинг таких маленьких фрагментов. Главный показатель качества кода не его количество, а его читаемость и простота модификации. При рефакторинге больших объёмов кода часто бывает и обратный эффект из-за устранение дублирования и избыточной логики, вызванной кривой архитектурой.

Хороший код на верхнем уровне читается почти как осмысленный текст без матана и всяких сложных условий.

Взять возраст из консоли и используя его попробовать открыть дверь

Что же такое попробовать открыть дверь?

Если открытие двери разрешено для данного возраста, то открыть дверь, иначе показать сообщение, что открытие запрещено.

не идеально, согласен, но я на многое и не претендую, а теперь попробуйте прочитать оригинальную программу автора.

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

Показать полностью 2
Программирование IT Айтишники Программист Csharp Текст Ответ на пост Длиннопост
207
22698
HolyMonkey
HolyMonkey
Я смог - сможешь и ты!

Я написал свою книгу по программированию⁠⁠3

1 год назад

Меня мало кто помнит но старички надеюсь пустят ностальгическую слезу. 8 лет назад здесь я кинул абсолютно безумный клич: "Буду обучать бесплатно любого желающего программированию". Я думал соберу человек 10 и в качестве хобби помогу людям. :))

Шут там, собралось почти 2000 человек и я провёл месяц без сна так, как проверял всем домашки и постоянно вёл лекции. И самое весёлое что это правда было просто хобби и я не взял ни рубля с людей а также не продавал никаких курсов. Странно это слышать в эру прогревов и теневых продаж, не правда ли?

Через 2 года после этих занятий я сел писать книгу по программированию на языке C# и благодаря участникам тех занятий мы собрали 85 000 рублей на написание на краудфандинге. Спустя 6 лет с того момента я закончил.

Книга научит вас языку программирования C# с самых основ через практику. Мы начнём с вами с переменных и закончим инкапсуляций техник динамического программирования в объектно-ориентированном дизайне (чтобы это не значило).

В книге получилось почти 400 страниц и вы можете забрать бесплатно PDF здесь - https://t.me/sakutin_csharp/2274

Спасибо Пикабу за всё!

Показать полностью
[моё] Программирование IT Айтишники Программист Csharp Unity Gamedev Текст
813
Vasoyar

Знающие, помогите пожалуйста⁠⁠

1 год назад

Всем добрый день! Я новичок в Unity и мне нужна помощь. Я сделал простой 2D-платформер и был готов его собрать, но не тут то было. Unity при попытке сборки проекта выдает ошибку: "Error building Player because the editor has script compilation errors". Более того, прежде чем пытаться собрать проект, игра запускалась во вкладке Game. Я попробовал перезапустить Unity, но, к сожалению, это не помогло. Досадно, что после перезапуска Unity я потерял интерфейс игры и возможность ее создания. Пожалуйста, помогите мне решить эту проблему.

Unity2d Gamedev Csharp Текст Помощь
13
Version001
Серия Трудовыебудни фрилансера

Format C:⁠⁠

1 год назад

Всем привет, Пикабу!

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

Сразу скажу, я не профессиональный программист. Все, что я знаю - черпал в разное время из книг и Youtube. Да, когда-то начинал по книге изучать Delphi, а с помощью форумов и HTML писал для себя простенькие сайты. Прошло довольно много времени, изучение было успешно отложено. Около года назад снова заинтересовало написание кода, выбор пал на распиаренный Python. В общем сейчас владею небольшим багажом знаний по Python, HTML верстке с CSS, JavaScript и немного C# (На C# имеется опыт в написании плагинов для игры Rust).

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

Ну и чтобы завершить данный поток написанных слов, расскажу о своем первом опыте на фрилансе. Как и ожидалось мной, опыт был негативным в силу моего доверия к людям. Мне удалось взять задание по редактированию шаблона сайта на Joomla. Ранее я уже сталкивался с этой CMS и базовые принципы работы имелись. Как это обычно бывает, заказчику потребовалось больше, чем было указано в описании задания. Я согласился, так как хотелось получить опыт в реальном заказе. Сейчас я не буду описывать в чем конкретно заключалась задача и ее многочисленные подзадачи в виде "мелких" правок и какова была реализация. Скажу только итог - я выполнил всю работу и не получил за свою работу ни копейки. Да, таков был первый опыт.

Я очень надеюсь, что найдутся те, кому это будет интересно. Надеюсь, что найдутся и те, кто будет тоже делиться своими знаниями. В общем, Пикабу, не кидай камни)

Показать полностью
[моё] Программирование Программист Python IT Windows HTML CSS Javascript Csharp Текст
1
4
energyplus
energyplus
Новости энергетики

В Новосибирске создают универсальное программное обеспечение для поиска нефти⁠⁠

1 год назад
В Новосибирске создают универсальное программное обеспечение для поиска нефти

Специалисты Новосибирского государственного университета, Института нефтегазовой геологии и геофизики имени Трофимука Сибирского отделения РАН и Новосибирский научно-технический центр разрабатывают платформу «Кратон» — это набор отечественного программного обеспечения (ПО) для геологоразведки. ПО предназначено для интерпретации данных, полученных при сейсморазведке, бурении и исследовании скважин.

Особенность «Кратона» — ее универсальность: собранные на платформе программы могут взаимодействовать между собой и свободно передавать данные через цифровой слой совместимости. Он реализован на трех популярных языках программирования — С++, С# (C Sharp) и Python. Это позволяет свободно дополнять программную среду «Кратона» сторонними приложениями и модулями, увеличивая ее функционал.

К разработке есть большой интерес со стороны российских нефтедобывающих компаний, поскольку работа зарубежных программных продуктов в России не гарантирована. Сейчас необходимо как можно скорее дополнить эти продукты чисто российским ПО — для этого у нас есть все необходимые наработки и компетенции.


— Владимир Лапковский. Заведующий лабораторией математического моделирования природных нефтегазовых систем Института нефтегазовой геологии и геофизики СО РАН.

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

Показать полностью
Изобретения Энергетика (производство энергии) Ученые Наука Технологии Программное обеспечение Нефть C++ Csharp Python Российское по
3
0
Psixoipat

Обучение программированию и не только Microsoft Learn. Как получить сертификат?⁠⁠

1 год назад

Добрый день. Не так давно открыл для себя сию платформу обучения и вот никак не пойму что надо сделать для получения сертификата. Учетка обычная, как ее переделать в учебную или рабочую - не понятно. FreeCodCamp - тоже просит дать ссылку но в итоге не принимает ее. Подскажите как быть?

Показать полностью 2
[моё] Microsoft Программирование Csharp Курсы программирования Длиннопост
16
6
cherkalexander
cherkalexander
Лига программистов

Тестирование — подчищаем за собой⁠⁠

1 год назад

Так исторически сложилось, что у нас на проекте нет юнит тестов, только интеграционные и e2e.

Эволюция написания тестов

Эволюция написания тестов


Иногда в тестах приходится подчищать за собой — удалять созданные во время выполнения теста объекты в базе, чтобы не влиять на результат других тестов. Это конечно, лишь ухудшает читабельность кода.

Мы прошли некоторая эволюция подходов для создания и удаления объектов:

1. Мы использовали try/finally, где все созданные объекты удаляются внутри блока finally. Выглядит сомнительно, когда нужно городить подобную конструкцию во многих тестах.
2. Перешли к использованию функций с колбэками. Утилитная функция создаёт и удаляет объект, а мы передаём лишь колбэк, в котором описываем логику теста и нужные нам проверки.
3. Внедрили IDisposable классы, которые мы называем Creator’ами. Они делают то же самое, что и функции с колбэками, но не добавляют ненужную вложенность, что улучшает читаемость кода. Они чем-то напоминают PageObjectModel в e2e тестах.

Использование паттерна с классами IDisposable также подходит для активации определенной настройки только в рамках одного теста и отключения её по завершении теста.

Такой подход не ограничивается только лишь C# — в TypeScript 5.2. уже появилась поддержка using и, возможно, скоро она появится и в JavaScript.

https://t.me/cherkashindev/160

Показать полностью
Кросспостинг Pikabu Publish Bot Csharp Javascript Typescript Текст Telegram (ссылка)
18
5
Аноним
Аноним
Лига программистов

Войти в IT⁠⁠

2 года назад

Приветствую всех. Подскажите пожалуйста. Натолкнуло меня на этот вопрос волна приложений "честная цена".

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


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

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

Либо это легкий и непринужденный инструмент, вроде Python, на котором можно сделать тоже абсолютно ВСЁ, но это всё будет несерьезным и легковесным, скорее как дополнение к чему-то.

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


Казалось бы, всё просто, так оно и работает, в одиночку никто проекты не разрабатывает и в проектах как раз и есть условные 3 человека, которые знают все эти 3 разные технологии и объединяют в единое целое. НО!

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

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

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

P. S. Я знаю, что сейчас в IT не войти, надо работать на заводе, а на 100 резюме джунов приходится всего 1 вакансия. У меня другая работа, которая устраивает. Это скорее попытка узнать, какую ошибку я совершил в молодые годы, когда выпустился из техникума со специальностью "информационные технологии", где максимум тебя научили писать "hello, world" на двух разных ЯП, а из-за обилия выбора направлений в дальнейшем я запутался, заблудился и не воспользовался шансом, когда он еще был.

Показать полностью
Опыт Профессия Программирование IT Junior Разработка Новичок Помощь Вопрос Python Csharp Gamedev Web-программирование Без рейтинга Текст
19
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии