Ответы пользователя по тегу Программирование
  • Как построить грамотную архитектуру проектов и организовать код?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно почитать Макконелла - Соверешнный код.
    Но применительно к предметной области автора (js/php) очень сложно что-то говорить про архитектуру.
    Сегмент PHP - это обычно не сильно сложные задачи. В плане lifecycle - не очень.

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

    А. это - как хорошее вино. Подается вовремя к столу. И за нужные деньги.
    Ответ написан
    Комментировать
  • Зачем нужно каррирование функций?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Насколько я понимаю, каррирование - это плод математических исследований. Математики не интересовались программированием а их больше интересовало некое механическое преобразование мат-функций с целью доказательства какого-то их свойства. Вот. Значит если есть сложная функция у которой сотня аргументов но ее с помощью преобразований удается свести к сотне функций с 1 аргументом - то это успех.

    Где это практически применяется я щас не скажу. Но вот Haskell компиллятор видит все функции как каррированные. При этом на output функция будет вести себя как обычная.

    Еще КМК каррированные функции очень удобно оптимизировать. Если мы можем часть аргументов зафиксировать (константы) - тогда остаточное туловище функции будет быстрым. Мы ведь уже выбросили
    часть аргументов и компиллятор может доказать больше инвариантов. Для обычных императивных ЯП
    кажется такое невозможно.
    Ответ написан
    Комментировать
  • Что имеется ввиду, когда говорят, что система должна обеспечивать персистентность?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Условно приложения делят на statefull и stateless. Большая часть приложений - statefull (это любые клиент-банки в базой и любые десктоп приложения имеющие конфиг или реестр конфига).

    Stateless - это ближе к AWS-lambdas, G-Cloud functions e.t.c. Вобщем ко всему что не помнит ни сессий ни предыдущих запросов.

    Persistence - это характеристика не приложений а скорее отдельных объектов. Если объект персистентен - то он сохраняет своё состояние в БД или в файловой системе. Когда сохраняет и как быстро - это тема отдельной дискуссии. Есть много технологий обеспечения персистентности. Hibernete например для Java. И просто базовый функционал сериализации. И еще вагон библиотек. Еще часто в вебе используется. Если веб-сессия персистентна - то она может путешествовать между нодами кластера и переживать падение нод. Разумеется то место куда сессия сохраняется должно быть всегда доступно. Может быть файловая система или NoSQL dbms.

    Поэтому я-бы не стал говорить о приложении что оно персистентно или нет. Просто звучит странно.
    Ответ написан
    Комментировать
  • Какая разница между фронт-энд разработчиком и разработчиком JS?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос звучит типа - какая разница между машиной и ее двигателем. Ну... как-то оочень безграмотно поставлен.
    Очевидно что фронтовик должен знать JS. Иначе он не фронтовик а какой-то заяц плюшевый.
    Ответ написан
    Комментировать
  • Как погрузиться в начала/фундамент программирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Как построенн язык программирования, например: Как понять, как устроенны ключевые слова; Препроцессорные процессы: define, include и др.; - Я правильно понимаю, нужно опустится на ещё более низкий уровень до ассемблера? - Ассемлер является той фундаментальной сущностью в программировании (не считая машинный код, который и так человек не должен понимать)?

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

    По второму пункту - я не понял что хотел автор. Хотел достичь какого-то дзена?

    Ну и вообщем, какие-то фундаментальные знания - на чём базуется/построенна програмированние и IT, тоже не помешало. Например рекомендуют SICP почитать, правильно ли я тогда пойду или это не то. Если да, можете ещё набросать ваши варианты? Буду признателен.

    Кажется один из авторов SICP сказал примерно следующее. Что современный инженер - это уже не создатель алгоритмов. Он - интегратор. Просто сама индустрия подталкивает к тому чтобы популярным стал язык Go а не Scheme. Хотя c моей кочки зрения Scheme интереснее и умнее, но увы. Прагматизм все решает. Для меня Scheme останется в разделе забавных мозговых экспериментов вроде брейн-фака. Ты решаешь задачу и получаешь от этого эндорфин. Как codewars. Вот такого эндорфина от Go нету. Хотя в резюме такое вписывать бесполезно наверное. Кому нужен Lisp-овед или Schem-щик?

    Кстати кто знает какие курсы в MIT сейчас читают? Поделитесь.
    Ответ написан
    4 комментария
  • Kotlin медленный?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Kotlin как и все JVM-основанные языки имеет сложный рантайм. Который обладает способностью прогреваться от постоянных запусков. И поэтому чтобы точно и уверенно замерять перформанс - нужно правильно подходить к проблеме. Например использовать JMH для изммерений.

    А для редких (одноразовых) запусков Python действительно может быть быстрее. Это я сам наблюдал в AWS-Lambda.
    Функция лямбда которая вызывается 1 раз в сутки должна быть написана на чем-то вроде Python/NodeJS.
    Ответ написан
    Комментировать
  • Как называют специалистов в сфере IT, которые оценивают с помощью технической составляющей идею?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Такой должности нету. Но это иногда делают архитектор, системный аналитик или просто технический лидер.
    Ответ написан
    Комментировать
  • Как должен выглядеть алгоритм цикла с таким условием?

    mayton2019
    @mayton2019
    Bigdata Engineer
    1) A OR В И В OR А;
    2) A AND ВИ В AND A;
    3) (A OR В) OR С И A OR С;
    4) (A AND В) AND С И A AND (В AND С);

    Это не надо доказывать. Это законы коммутативности и ассоциативности булевых операций AND/OR.

    Даллее по тексту там - похоже на закон дистрибутивности но надо проверить.
    Ответ написан
    Комментировать
  • Как сделать движение по кругу по нажатия кнопки?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Движение по кругу задается параметрически. Задаешь параметр fi (фи) пробегающий от 0.0 до 2*Pi радиан.
    Далее косинус фи дает тебе иксовую координату. А синус игрековую. Координаты нормированы от -1.0 до 1.0
    и их еще надо умножить на пол поперечника окна и сдвинуть на центр координат окна.

    Как это делается в WinGDI я не помню. Но тригонометрия - это хитрая штука для ассебмлера. И я тебе советую
    сделать макет на языке С и сгенерировать ассемблерный выход и посмотреть что так и как.

    А потом уже интересующие тебе функции перенести в твой исходник.
    Ответ написан
    Комментировать
  • Где хранить важные ключи в программе?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Судя по .exe - речь идет о Windows-разработке. Поэтому надо отбросить все сомнения и читать документацию от производителя. Вот что пишет производитель. Есть API:

    https://learn.microsoft.com/en-us/windows/win32/ap...

    Вот есть функция полезная CryptProtectData

    И это будет лучше решение из всего питонского и кросс-платформенного.
    Ответ написан
    5 комментариев
  • Существует ли какая- та тула, плагин или просто сервис который бы помогал улучшить код.?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я полностью поддерживаю использование УЛУЧШАТОРОВ типа SonarQube, PMD и прочие которые просто позволяют указать мне на явные ошибки типа potenrial null pointer de-referencing.

    Но вот в части - написать по другому - я-бы сказал что это открытый вопрос. Ставить ТЗ нельзя так чтобы "сделать на выходе хоть что-нибудь". При таких критериях мы получим просто рандомный шум который тем не менее компилируется. Типа "бей посуду - я плачу". Но автору такое не надо.

    Тогда давайте зададим вопрос. А что собсно надо автору? Приведу пример который я часто использую. Решения задач на codewars. Они разные. Но обычно в топе висят 2-3 штуки которые поражают своей краткостью и различностью парадигм. Например в топе висит одно решение с хвостовой рекурсией а другое с циклом. И я не могу решить которое мне больше нравится. Нравятся оба. Но скорее всего при разработке code beautifier я-бы не стал вообще копать 2 направления. Достаточно было-бы просто поставить задачу сделать код меньше. Я думаю что все согласятся что меньше строк - меньше надо будет скроллить вниз. Особенно эти дело любят Джависты. Как накидают своих бинов с геттерами-сеттерами ойойой. 80% кода - нечитаемый шлак. Ну да ладно. А насколько меньше? Есть обфускация. Это сознательне выпиливание смыслов из всех идентификаторов. Вобщем переменные можно называть $1,$2 e.t.c. и это тоже работает. Но ... согласитесь это путь в никуда.

    Поэтому. Чтобы улучшать мы должны САМИ задать вектор улучшения. Парадигмы например. Мы хотим код тяготеющий к функциям или к объектам с методами? Мы хотим код с детальным дебагом (каждый оператор в своей строчке) или нам пойдет исходник как у Джона Кармака. Весь С++ исходник в 1 длинную строку. Мы хотим код на конечных автоматах? Или на комбинаторах? Мы хотим больше перформанс но хуже читаемость (вспоминаем знаменитую Кривую Шипилёва) или наоборот?

    Вобщем думайте над вектором улучшения.
    Ответ написан
    Комментировать
  • Как научиться решать задачки на python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По математики не силен ((

    Не переживай сильно. Для 80% современных задач разработки тебе понадобиться только школьная математика.
    Сложить умножить и процент посчитать. Всё остальное - технический дискурс что делать и как делать.

    Высокая наука ушла в области datascience, AI, quantum-computing, и всякие формальные логические (тьфу) системы где теоретики занимаются онаниз.... эээ короче фигнёй страдают.

    Что тебе понадобиться на самом деле. Структуры python. Библиотеки. Основы мульипоточки. Работа с файлами и сетью. Там не бох весть какая наука. Школьники разбираются. Вот... тут каждый день кодят дискорд и телеграм ботов.

    Еще обрати внимание на операции со строками. Строки - основа современного бизнес-кода. Сравнение строк. Подстроки. Замены. Поиск по регулярке. Это должно быть выучено как молитва. Очень часто программист хорошо умеющий работать со строками выкрутится из любой ситуации. Распарсит json и так далее вручную.
    Ответ написан
    2 комментария
  • Стоит ли брать в 2022 году MacBook pro 15 2014 для программирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужен ноутбук для программирования на java, c++, c#.

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

    В остальных случаях лучше взять Dell или HP и еще лишние деньги будут. Прикупить хороших гаджетов.
    Ответ написан
    Комментировать
  • На каком ЯП стоит писать программу для управления компьютерным клубом (десктоп)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут наверное главный вопрос не язык а ОС и платформа. Подозреваю что клуб работает на Windows десктопах. И нужно искать тот инструмент который ближе (нативнее) по отношению к этой ОС. Разумеется глупо выбирать Java/Python. Надо брать технологии которые опираются на .Net. VB/C#/F#. Да много их.
    Ответ написан
    Комментировать
  • Почему для счётчиков не используют беззнаковые (unsigned) числа?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По поводу Java int.

    Java создавалась до 1996 года. Это было абсолютное царство 32х разрядных машин. Даже первые Pentium адресовали мало. И никто не думал о том что когда-то разрядная сетка адреса будет удвоена. Тем более что основная целевая архитектура для JVM была микроволновками, кофеварками пультами ДУ и банковскими карточками. Поэтому выбор индекса массива в 32 бита со знаком был норм. Представте что всю память 4G занимает массив целых чисел. И в этом случае достаточно максимального индекса элемента равного 1 073 741 823, больше нет смысла.

    По поводу беззнаковости. На битовых операциях signed int ведет себя также как и беззнаковый. Это декларировано на уровне стандарта JVM. Лишь только два логических сдвига различают знаковый бит.

    Хотя скажу честно что для меня до сих пор странно иметь компаратор который неверно работает при переполнениях. Конечно хотелось в JVM иметь семантику uint, ulong e.t.c. Есть много величин которые принципиально неотрицательные. Время. Вес. И прочие величины из физики.
    Ответ написан
    4 комментария
  • В каких отраслях прогеры могут быть заменены на ИИ/Конструкторами?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мы не можем точно дать определение термину ИИ. А без этого вопрос не имеет смысла.

    Попробуйте сузить вопрос до конкретного применения ИИ. Например ИИ в распознавании лиц это одно. А Co-Pilot это вообще другое.
    Ответ написан
  • Бывали ли случаи, что deprecated-код вновь объявляли актуальным?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Deprecated не так страшен. Для java экосистемы такой стикер может висеть по много лет. За это время вы успеете поменять проект.

    Более хуже ситуация когда разработчик завязался на недокументированное поведение а его (поведение) в новых версиях исправили. Шок трудно описать :)
    Ответ написан
    Комментировать
  • Оптимальный формат хранения изображения в текстовом виде?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Base64 и не создавался для сжатия. Он хранит примерно 4 символа на 3 байта. Вот такая формула.

    Есть другие кодировки наподобие base85 которые просто использую другую формулу укладки байтов в символы. Но все это фигня и экономия на спичках.

    Можно ли просто хранить произвольную бинарную информацию в текстовом виде? Да можно. Но при отображении на экране возникнут следующие проблемы. Есть символы которые имеют разные коды но одинаково отображаются на экране. Это искажает наше восприятие информации. Какова цена ошибки - решайте сами. Есть символы которые имеют некий магический эффект для терминала linux (это диапазон от 00 до 1F (control)). При печати их на экран курсор может начать двигаться в разных направлениях. В некоторых терминалах может быть сбой или зависание. Или терминал может издавать писк. Есть символ 00 который имеет зарезервированное значение например для C++/C - ASCIIZ строк. Он маркирует конец строки. И любая попытка передать такой файл "строкой" вызовет неожиданное поведение для вас.

    При хранении произвольных символов внутри XML или JSON строк могут работать ESC последовательности или экранировка которая увеличивает размер строки. Тоесть эффект может быть обратный в зависимости от того какие байтики будут сохранены.
    Ответ написан
    Комментировать
  • Допустимо ли "хардкодить" глобальные константы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да, можно. Вот константа Math.PI захардкожена в библиотеке математики и ни у кого не возникает с этим вопросов.

    По поводу констант в Dagger2. Я с ним 1 раз поработал на проекте Java/AWS/lambda стека. Для простых проектов где требуется инжекторный двигатель, но Spring затаскивать - лениво, Dagger - самое то.

    По поводу допустимо или нет - да допустимо. Тем более что ты пишешь что "один раз на проект". Вот к примеру имя таблицы. Ну кому в голову придет его менять? Это объем работ на самом деле в сто крат более тяжелый. И даже не в Даггере дело а в том что таблица к тому времени станет слишком родной для environment и дешевле будет поднять новую таблицу чем переименоввать старую. Уж повертье так оно бывает.

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

    Про константу PI конечно была шутка но в проекте есть два зла. Первое зло - заиграться в конфигурации и любой пустяк через них протаскивать. И второе зло - сделать проект неконфигурируемым. Я думаю что хороший проект - стоит где-то посередине.
    Ответ написан
    Комментировать
  • Использовать методы или самому писать функции?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно писать программу так чтобы она была легко читаема для человека. И чтобы другие читающие
    быстро поняли что имелось в виду. Методы против функций - это холивар. В нем нет смысла.
    Лучше приведи свой код и попроси сделать code-review.
    Ответ написан
    Комментировать