T/T Lead
  • Читабельність коду. Способи, кращі практики та помилки

    Не треба писати коментарі, вони не зроблять незрозумілий код краще.

    я вже бачив такє.
    коли лід гордо казав що коментарі не потрібні, а потім через деякий час волав — хлопці, а чому ми не коментуємо свій код???

    на останьому проекті добре себе показала практика додавати коментарем номер та назву таски в джирі.
    Дуже скорочує час потім шукати — а коли оцей код з’явився і до чого?

    тобто, в якомусь ідеальному світі код, тех завдання, спеки, описи тасок, і т.д повинні утворювати таку собі вікісистему.
    звісно, зараз немає такого інструментарія

    але програмний код — то такий же документ як і всі інші в проекті. а ніяка не комп’ютерна программа.
    комп’ютерна програма з’являється без участі людини: компілятор, або інтерпретатор, або ще якє середовище створює та виконує программу на основі документів. і зараз вже не тільки документів з кодом, а і документів конфігів.

    і всі документи — це інформаційний всесвіт проекту.

    про самодокументований код топить здається Мартін. і, насправді, я б в рота йому не дивився.
    і розумів так: чим менше код потребує коментування — тим він кращий.
    а не — «а давайте не писати взагалі коментарів»
    бо відсутність коментарів не робить код зрозумілішим

  • 7 ошибок одного Black Friday. Основано на реальных событиях

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

    и как уже написали, 10%-20% запросов написать в обход тяжелого ОРМа (Doctrine, Hibernate, Magentoовский, etc)

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

    первым делом тыкнёт пальцем в «table full scan»

    причем желательно делать это еще на этапе проектирования — а как в такой схеме будут выглядеть вот такие 3 типичных запроса? мы сможем их делать без full scan?

    ну и конечно — за «тру ORM» присматривать
    а то на раз SELECT N+1 сделает, и заметить не успеешь, как оно так получится.
    то есть понимать что такое «объектно-реляционное рассогласование импедансов» и о чем древняя статья «Вьетнам компьютерной науки»

  • Як Python Developer роботу на $6000 шукав

    А, ещё забыл упомянуть
    Часто говорят что стат типизация упрощает рефакторинг.
    Только вот вопрос — а зачем тогда тесты писать?
    А если такой уровень покрытия тестами для кода на дин яп — то как — ошибки типов не отловятся попутно?

    Поддержали: Alex Fogol, Denys Poltorak
  • Як Python Developer роботу на $6000 шукав

    и часто где-то вылазит, что или None проскочил, или тупл вместо элемента данных

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

    а внешние приблуды стат анализа типов есть как для Питона так и для PHP
    если надо — подключаешь, и они вполне ок работают.

    в целом — правильный ЯП должен обеспечить возможность аннотирования типов для стат анализа.
    но — не навязывать их.

    Ну и да, миллион строк во всей инфраструктуре — это одно, а несколько миллионов строк исходников Хромиума

    одной командой писать проект легче, чем — разными командами.
    для Хромиума выбран не вид ЯП, а вид — компилятора :)

    тоже самое в эмбедеде — пишут на С не потому что у него какие-то супер свойства.
    а потому что компилятор в маш код с него — лучший.
    а лучший он, потому что некоторые свойства ЯП подогнаны под удобную компиляцию

    а само ядро приложения в миллионы строк.

    ну так сама Маджента, надо погуглить сколько строк кода уже имеет :)
    там конечно используется и тайп хинтинг php и Psalm какой-нить
    и код пахнет Джавой. Но — все равно быстрее пишется даже на таком «строгом» php, чем на Джаве

    споры и путаница из-за того что путают — ЯП и свойства его транслятора и экосистемы

    p.s.
    погулил, статья от 2017 года
    В Magento 2 — 1,357,121 строк PHP кода и 2,449,066 строк всего
    SugarCRM содержит 2,149,457 строк

    и учтите, что семантическая мощность у PHP сродни С++ной.
    На Джаве было бы больше строк.

    Поддержали: Alex Fogol, Denys Poltorak
  • Ваш улюблений design pattern

    А на практике — говнокод, который требуется вызубрить, потому что иным способом вы это не запомните, потому что говнокод

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

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

    Я человек попроще, скажу «помойка».

    я бы сказал — сленг. чтобы не «возьми ту ху-ну, и ипани по той хреновине»

    но да, с этого можно сделать магический культ — возьми эту книгу с заклинаниями, и прочти с выражением номер 14, для вызова архангела Михаила! Но помни, перепутав слово, ты вызовешь Вельзевула!!
    и вот адепт, читает заклинание, написанное на коптском, которого он не знает, и трепещет — как бы это не перепутать произношение...

    p.s.
    вспомнил, рассказ одного узко известного

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

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

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

    В этот момент ты становишься гуманитарием. Освобождаешься от оков «строгости». И начинаешь, наконец, познавать мир.

    Математика — это неплохая тренировка ума. Но мир так интересен и разноообразен :). Его описывает не она. Искусство. Только оно способно кратко и точно донести всю правду о мире.
    (конец цитаты)

    с паттернами ООП — тоже самое.
    поэтому... а надо их спрашивать на собесах :)
    чтобы выяснить — зазубрено ИЛИ понято?

    Поддержал: Denys Poltorak
  • Ваш улюблений design pattern

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

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

    но цитирование Пушкина не сделает тебя поэтом :)
    Банда 4ех как литературные критики — отрефлексировали что чаще всего используется
    Пока не можешь сам ходить — бери костыли.

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

    филологи не создают языки.
    языки создают те кто на них пишет, и вворачивает новые обороты а то и слова.
    а филологи фиксируют — о, вот еще паттерн!

  • Як Python Developer роботу на $6000 шукав

    про Мадженту читали недавно на доу?
    Писана на php
    И тьма плагинов под нее — на нем же.
    думаю суммарно в экосистеме Мадженты уже точно больше миллиона строк.
    И заметьте — этот код писан не просто разными командами, а разными компаниями.
    А бизнес — доверяет этой экосистеме.

    а тормоза — в базе данных, если о быстродействии речь

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

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

    Хотя, писал я и на С и на Джаве, а сейчас на js, а перед на php — VS и NetBeans (для php) очень даже круто научились подсказывать и для ЯП с дин типизацией

    то есть стат типизация — имеет весьма отдаленное отношение к надежности, качеству кода
    иллюзию да, создает.

    но как не раз встречал, и даже у одного широчайше известного гуру программирования
    «Чем старше я становлюсь, тем больше я люблю ЯП с дин типизацией»

    дело вкуса конечно.
    и конечно
    парадокс Блаба (это условное название гипотетического языка программирования средней сложности), позволяет сделать следующий вывод:
    некто, отдающий предпочтение одному конкретному языку программирования, будет знать, что он более мощен, чем другие, но не будет знать, что он менее мощен, чем все остальные.
    Причина в следующем: чтобы создать программу на определённом языке, надо думать на этом языке. Отсюда и вытекает парадокс:
    типичные программисты «удовлетворены любым языком, которым им пришлось пользоваться, потому что тот диктует им, как они должны думать о программах»
    ru.wikipedia.org/...​стической_относительности

  • Ваш улюблений design pattern

    От вже не думав що доведеться програмістам доводити, що математика існує :)

    існує ж звісно.
    тільки її використання у программуванні — епізодичне.

    Бо жодний язик програмування був би неможливим без математики

    а так да, у нас у шлунку ціли екосистеми бактерій.
    і що, для перетравлювання їжі треба бути біологом? гастроентерологом?

    а от ви пишите українською — маєте філологічну освіту? чи лінгвіст?

    Все це досить складні речі, які важко збагнути одній людині.

    звісно що так.

    Без абстракцій і композиції все це було б просто неможливо зробити

    а хто довів що існує тільки один спосіб абстрагування і композиції, і він — математичний?

    ви можете використовувати у своїх програмах те, що зроблено іншими програмістами

    якщо більшість програмістів не знає математики, і використовує зроблене іншими програмістами, то точно треба знати наприклад подробиці як реалізовано індекс у реляційній БД?

    люблю брати за приклад «вебмайстра на Wordpress».
    він як використовує зроблене іншими програмістами?
    builtwith.com:
    WordPress Usage Statistics
    Top 1m 35.05%
    Total Live 30,462,105

    щоб вам вона здавалась «неіснуючою».

    вона й для вас «не існує» :)

    поясню
    якщо по якості типового программного кода двох прорамістів не можна встановити хто з них фанат рок музики, а хто взагалі ніяку музику не слухає, то казати про вплив музики на якість кода — можна чи ні?
    якщо ні — то «рок музики не існує»

    Які до речі знають математику, але абстрагують її для вас до такого рівня

    це ще велике питання, знають вони її чи ні :)
    з опису роботи програміста над Oracle DB що нашумів пару років тому на HN — якось те знання математики не видко :)
    звісно, він думаю дещо краще знає її аніж «вебмайстер на Wordpress».
    я теж логаріфми люблю використовувати. дуже зручно м’яко зрізати топові значення у виборках.

    Поддержали: Denys Poltorak, Olexandr
  • Ваш улюблений design pattern

    якби сам не викидав математику, то приклади б не наводив.

    у ціх прикладах як в тому анекдоті
    — ми тут не фізиків теоретиків готуємо, а інженерів. Кицька не може рухатись більш швидкості звука. тому вона повинна сидіти! (щоб прив’язана до хвоста банка з консерви не гриміла)

    математика дає — загальне рішення. а інженеру треба — конкретне, якє враховує конкретні обмеження. якщо у «формулі» є ці обмеження — то математика дасть

    як яскраво це видко з проблемами з теорією струн
    все так круто, аж дух спирає
    але кількість прогнозованих ландшафтів 10^100, а ймовірніше 10^500, не виключено, що їх взагалі нескінченне число
    а ми маємо конкретний Всесвіт, і повне мовчання теорії чому і як реалізувався цей варіант

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

    звісно що
    подумати заздалегіть про весь маршрут — корисно
    і як щось надихає у роботі — то теж корисно, наприклад гра в джаз бенд: Алан Кей починав як джазовий музикант, викладав гру на гітарі, працював композитором, а знаємо його як автора Smalltalk
    так само й теоркат, надихає — круто! але чи є він обов’язковим?

    що навіть якщо наступний шаг перекриває попередній, то це ще не гарантія наявності циклу.

    так. треба об’єднати ці відрізки, і перевіряти так само далі вже цей відрізок, поки не буде розриву, тоді ок з відрізками в цієї групі, або коли черговий перевіряємий відрізок буде вже в списку об’єднанних, тоді ось вона біда.
    і така повна перевірка все одно простіша у реалізації, чим

    поиск в глубину через рекурсию,... хранить во временной таблице волновой фронт и строить в другой временной таблице следующий фронт

    математика корисна для аналізу вже готового рішення: «круто! а давай ка ми порахуємо... ох йоб»
    ось круто виглядає рішення! а давай ка встановимо складність... ох O(n!)

    але безсила — для знаходшення цього рішення
    а навіть у самому примітивному программуванні — треба знайти рішення :)

    ...часте питання від дітей яких вчу программуванню
    — а на смарт потім мою гру можна буде залити?
    — а в тебе вже є гра?

    Поддержал: Denys Poltorak
  • Ваш улюблений design pattern

    то вона не буде загальновживаною.

    тому що
    (нещодавна поповнив свою копілку)

    Evgeny Kobzev в FB рассказывает

    Мы тут решали задачу прогнозирования сроков создания платёжек для клиентов. У нас были данные за несколько месяцев, напустили на них ML, получили точность под 60% в первом подходе. Потом я вспомнил, что в универе нам на тервере говорили, что распределение Пуассона это число людей в очереди, взяли формулы оттуда, выкинули ML, сходу получили точность под 90%.
    Забавно, что максимально тупой классификатор типа «если поставлено в первой половине дня, то будет сделано через 3 часа, а если во второй, то завтра» (немного утрирую), давал такую же точность 😂 Мы там, конечно, людей поднавалили, чтобы платёжки делались побыстрее, но в целом это учит тому, что многие вещи решаются просто.

    Помню я только закончил универ и делал проект, где нужно было отрисовать диаграмму Ганта в вебе, это год 2001 был, из доступных средств рисования — можно было картинку размером в пиксель бахнуть. Ну я сразу конечно понял, что точками можно любую линию нарисовать, для этого есть специальный алгоритм — алгоритм Брезенхема и реализовал его. На больших диаграммах это тормозило. Мой коллега, выпускник технического вуза, с мозгом не замутнённым алгоритмами, заметил, что все линии, которые надо рисовать, строго горизонтальные или вертикальные. И можно этого добиться бахнув прямоугольный пустой блок, у которого 2 нужные границы включены. Всё сразу залетало, моего Брезенхема оставили для рисования заострённого конца у стрелочки 😂

    Потом мы начали проверять, что диаграмма не содержит циклов. Хранилось всё в базе данных и мы средствами базы реализовали поиск циклов, просто поиск в глубину через рекурсию, который вызывался при каждом изменении базы в триггере. Однажды клиент сделал в диаграмме более 32 связей и ms sql написал ему: я не буду поддерживать рекурсию глубиной вложенности больше 32. Я тогда придумал как переписать это через поиск в ширину на sql, хранить во временной таблице волновой фронт и строить в другой временной таблице следующий фронт. Очень этим гордился))) А потом коллега из технического вуза опять заметил, что если предыдущий шаг в диаграмме Ганта всегда заканчивается раньше, чем начинается следующий, то циклов возникнуть не может. И нужно просто всё выкинуть и делать вот такую простую и понятную проверку дат шагов. Мы, люди, склонны усложнять, а «многознание уму не научает» 😂

    Недавно меня спрашивали какой из продвинутых алгоритмов, которые я в универе изучал, пригодился мне в реальной работе. Так вот — я Брезенхемом птичку в конце стрелочки рисовал!))

    Поддержали: Богдан, Denys Poltorak
  • Ваш улюблений design pattern

    зависокі рівні абстракції непрактичні:
    вони не гнучкі, а от когнитивне навантаження збільшують

    ну і сам природа складності буває різною

    типово ентерпрайзна
    є код який описує оту бізнес логіку, яка й не логіка, а набір тез від бізнеса та бі-аналітика, які якось-накось узагальнені.
    і з часом — з’являются ще тези, які треба всунути в вже неакутальне узальнення, та ще й так, щоб
    1. не переписувати все з нуля
    2. персистентні данні — не переконвертувати

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

    Поддержали: Artur Zagorskyi, Denys Poltorak
  • Порекомендуйте SUV

    теперь в авто без поддержки андроид авто

    Если авто ходовое, то есть вполне приличные планшеты, вместо магнитолы или штатных

    Плюнули и подписались на кредит.

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

  • +1 мова у портфель. Чому варто вивчити Ruby

    ок, нехай я залишусь йолопом та повним бовдуром :D

  • +1 мова у портфель. Чому варто вивчити Ruby

    Їх повно. Якщо ви попрацюєте головою — то самі швидко знайдете. А як не можете шукати відповіді у аналітичних дослідженнях — то вони, ці джерела вам не допоможуть.

    Ви ж в айті не перший рік, чи не так? А вимагаєте дати «вам лінк на вікіпедію» :)

  • +1 мова у портфель. Чому варто вивчити Ruby

    Навіть на доу дещо є з того, вам невідомого інтернету :)
    Відкрийте для себе той всесвіт аналітики по айті як галузь :)

  • +1 мова у портфель. Чому варто вивчити Ruby

    На купі всього. Від аналітики по вебу, до досліджень трудових ресурсів.
    Все є в інеті.
    Опитування на будь якому сайті, то вже такє собі, хоча теж можна додати до більш вагомої.

    Те що чимало колег носа не висовують з нори свого особистого досвіду, мене не дивує. Як і те що такі впевнені що по іншому і не буває «всі в норі як Я!»

    Гугліть та думайте. За вас це ніхто не зробить.

  • +1 мова у портфель. Чому варто вивчити Ruby

    Для цього треба не інсайди а статистика. І вона є, публічна. Гугл вам у поміч.

  • +1 мова у портфель. Чому варто вивчити Ruby

    звісно що є.

    а от чи дешевше... суто середній бекендер джавіст так, шидше дешевше фулстек нодера, аніж дорожчий
    а от фулстек джавіст — сумніваюсь що в середньому дешевше

    і далі — треба ж рахувати скільки за однаковий проміжок часу видасть нодщик та джавіст. та скільки треба нодщиків, а скільки джавістів щоб «вкрутити лампочку»
    це важко, бо дуже залежить як від проекту, так і від кваліфікації.

    життя россудить :)
    наприклад php хейтят усі, від народження, а він живе. і тілько нещодавна TIOBE зафіксували що здається випаде з 10ки. Пітон та Джс його вишхтовхують.

    А що «тру програмісти» кажуть про Джс? ;)

    Поддержал: Dmitriy Mozgovoy
  • +1 мова у портфель. Чому варто вивчити Ruby

    среднестатистическому CRUD многопоточность нужна как ежу футболка...

    именно так!
    поэтому пхп не страдает даже не имея и того что есть в руби и питоне.

    а когда же она нужна — то вдруг Пайк выкатывает Го, потому что — а чего-то с ней так в Джаве.

  • +1 мова у портфель. Чому варто вивчити Ruby

    я бы даже так сказал
    в качестве первого языка в колледжах на замену Паскалю нужен не Python, а Ruby

    беда же с ним случилась как уже писали — метапрограммирование
    Оно казалось отличной вещью: макросы в Лиспе, хайп в узких кругах вокруг Nemerle

    Но, практика показала, что есть у такого подхода и недостатки

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

    Та же Джава — а давайте вспомним первоначальный подход Гослинга — Object.wait() Object.notify()
    это ж любимые вопросы на собесах по Джаве — а зачем эти методы вставлены в аж самый корневой класс Object?

    www.baeldung.com/java-wait-notify
    it’s worth mentioning that all these low-level APIs, such as wait(), notify() and notifyAll(), are traditional methods that work well, but higher-level mechanisms are often simpler and better — such as Java’s native Lock and Condition interfaces (available in java.util.concurrent.locks package).

    Поддержал: Андрей Губский
← Сtrl 123456...171 Ctrl →