Сообщество - Я смог - сможешь и ты!

Я смог - сможешь и ты!

2 196 постов 6 681 подписчик

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

514

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

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

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

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

Ответ на пост «Я написал свою книгу по программированию» Программирование, IT, Айтишники, Программист, Csharp, Текст, Ответ на пост, Длиннопост

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

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 составляющие, получение возраста и его валидация, но далее нам требуется открытие\отказ в открытие двери, что в коде автора реализовано через сообщение "Дверь не для тебя!" с очередным нарушением уровня абстракции.

Ответ на пост «Я написал свою книгу по программированию» Программирование, IT, Айтишники, Программист, Csharp, Текст, Ответ на пост, Длиннопост

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

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

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

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

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

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

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

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

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

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

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

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

Ответ aelynnie в «Когда взял домой кошку, которая 11 лет жила на улице…»4

У нас похожая история. Взяли подростка с улицы. Поскольку у нас еще двое, он свое быстро съедал и начинал лезть в миску соседа. Первые недели приходилось сидеть рядом с трапезничающими котиками и новичку ладошкой по лбу тык делать как мама-кошка делает.

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

Ответ aelynnie в «Когда взял домой кошку, которая 11 лет жила на улице…» Кот, Домашние животные, Кошатники, Ответ на пост, Текст
Показать полностью 1
22695

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

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

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

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

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

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

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

4951

Ответ на пост «Когда взял домой кошку, которая 11 лет жила на улице…»4

Я свою текущую кошку забрала с улицы уже взрослой. В первые дни она не просто жрала - она ЖРАЛА. Поев на ужин пиццу и накормив кошку до отвала, мы с мужем легли спать, поленившись сходить выбросить мусор. И пустую коробку от пиццы убрали на антресоль. Среди ночи проснулись от дикого грохота. Выходим на кухню, а на посреди погрома лежит коробка из-под пиццы, в которой кошка уже успела прогрызть дыру - и сидела рядом дожёвывала картон с ароматом пепперони.

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

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

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

Ответ на пост «Когда взял домой кошку, которая 11 лет жила на улице…» Кот, Домашние животные, Кошатники, Ответ на пост, Текст

Любимое занятие - спать на моих футболках и на носках мужа ❤️

UPD:

А такой она была, пока месяц жила в инфекционном стационаре. В таком ужасе, что пускала слюни и сидела, вжавшись в стену и не сопротивлялась даже когда её регулярно мыли (из-за лишая):

https://youtube.com/shorts/b8PC-Q8ZVE8?si=MlKyv_xgVg0B4ds7

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

А нужна ли свадьба?

Первый раз замуж выходила в 18 лет. Из родительского гнезда плавно перелетела под крыло мужа. Опыт самостоятельной жизни отсутствовал.
Свадьбы с женихом не хотели. Мечтали отметить своим кругом. Но вмешались мои родители. Как же дочь отдать и без свадьбы-то!?
Я брыкалась как могла. Из того, что я смогла хоть как-то "отвоевать":
- отсутствие свадебного традиционного платья. Вместо него я выбрала очень короткое мини. Правда белого цвета.
- Отсутствие фаты.
- отсутствие тамады и "выкупа невесты".
На список гостей повлиять не смогла за исключением своей тётки, которую видеть на этом мероприятии я не желала.
Тк свадьбу оплачивали родители, то в целом этот праздник был больше для них чем для меня. Молодой муж принял всё как данность.
Пост скриптум. Развелись.
Часть 2.
Когда мы решили пожениться с моим нынешним супругом, то всё решили делать за свой счёт, на свое усмотрение. Муж сказал, что обязательно хочет видеть меня в красивом свадебном платье и с фатой. Мы накопили денег, заказали ресторан на 40 человек, купили в салоне костюм, рубашку, платье, фату и всё полагающееся.
Нашли тамаду, обговорили что мы хотим, всё сделали для нас по нашему желанию, без дурацких ненужных обрядов, с интеллигентным подходом к гостям, приличными шутками.
Пили и ели то что любим именно мы, слушали музыку ту которая нравится именно нам, смотрели и слушали поздравления тех людей которых нам приятно было видеть, вели и чувствовали себя комфортно.
Никто нам ничего не указывал: какой ресторан, кого звать, что надевать, как выглядеть, под чью дудку плясать, чьи деньги и сколько на что тратить.
А через несколько лет мы обвенчались. Муж не особо религиозный, а для меня венчание важный момент. Поэтому когда разговор об этом зашёл, муж сказал что готов для меня пойти к алтарю.
В нынешней нашей семье главный капитан - это муж, а я - штурман. И мы сами решаем что для нашей семьи правильно.
Да, и мои и его родители пытались совать нос в наши дела. С трудом удалось поставить их на место. Это конечно отдельная тема для разговора.
Всем желаю мира, добра и согласия в семье.

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

Как починить яму на дороге

Точнее, заставить ответственную за данный участок организацию таки поднять задницу и что-то сделать.

Как починить яму на дороге Яма, ЖКХ

[тут должна быть шутка про бывшую]

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

В СПб - портал "Наш Санкт-Петербург" или Госуслуги "Решаем вместе" (по всей РФ) . Если планируется не разовая акция - есть и одноименные приложения, в них удобнее.

Нюанс кроется в деталях, точнее, формулировках просительной части.

Можно написать: "Там-то яма, прошу заделать" и получить ответ: "Данная проблема не требует безотлагательного принятия мер, не попадает в перечень проблем, по которым необходимо проведение срочных работ."

То есть "когда-нибудь сделаем, вы там ждите".

А можно пару минут провести в гугле, и состряпать нечто вроде:

"Там-то и там-то на дороге глубокие ямы. С коляской через ямы пройти возможным не представляется, велосипедистам и автомобилистам приходится объезжать их. Согласно п.4.1 ГОСТ Р 50597-2017 данная дорога имеет категорию "Е" - улицы в жилой застройке второстепенные, проезды основные, велосипедные дорожки.

Согласно п.5.2.4 и таблице 5.3, срок устранения данных повреждений на дорогах данной категории - до 20 суток.

Прошу Вас устранить повреждения дорожного покрытия. Спасибо."

С такой формулировкой ответственной организации значительно сложнее съехать с быстрого решения - указаны сноски на нормативные документы. В случае обращения через портал - модераторы кривую козу про "не требует безотлагательного решения" уже не пропустят. Результат вас наверняка обрадует.

И опять же, если это будет не разовая акция - есть шанс, что обслуживающая организация захочет с вами подружиться, возможно даже обменяться контактами. И может попросить писать им о проблемах лично, не через порталы. Зачастую мелкие проблемы ЖКХ таким образом решать значительно быстрее.

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

Ответ на пост «40 лет, денег нет»6

У меня есть такой же знакомый, раньше в школе учились с ним - ему 35 лет правда и он вообще ни разу не работал, у него даже трудовой книги нет, ну и образование 9 классов и всё.

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

Целыми днями сидит дома и играет в комп, причём комп у него свежий всегда, пол года назад PlayStation 5 взял себе ещё - он у мамы пенсию большую её часть забирает, а ещё у него дед и бабушка до сих пор живы, они раньше какими то героями были, не в смысле типа Человек Паук, а в социальном плане на местном уровне, ну и должности хорошие в свое время имели.

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

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

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

Отличная работа, все прочитано!