• Классы и ООП: зачем, а главное - когда использовать, а когда нет?

    Adamos
    @Adamos
    Простая аналогия разницы между процедурщиной и ООП.

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

    Так вот, после определенного объема и сложности работать с "книжкой" (например, найти конкретную таблицу и сверить ее данные) тяжко даже автору.
    Ответ написан
    Комментировать
  • Кто такой архитектор в IT?

    inoise
    @inoise Куратор тега Карьера в IT
    Solution Architect, AWS Certified, Serverless
    Тут надо конкретизировать вопрос по тому что есть Solution Architect, Enterprise Architect, Software Architect и System Architect (если я никого не забыл)

    По пунктам:

    1. Отличаются ли между своими стеками или это какое-то определенное направление?

    Да и очень сильно

    2. Какие задачи решают, чем отличаются от любого IT директора - руководителя?

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

    3. Как происходит "коронация", нужно ли работать 10 и более лет на одном месте работы?

    Устроиться на работу на данную должность

    4. Их процент среди общей массы?

    Ниже плинтуса. Точных цифр не скажу, но по памяти если даже в крупных аутсорсерах в штате их < 0.5%. В мире же в общем это считаные единицы на десятки, если не сотни тысяч специалистов

    5. Есть ли диапазон ЗП архитектора?

    Нет. Архитекторы получают столько на сколько договорятся и насколько себя оценивают. В любом случае на зарплаты ниже тимлида/CTO обычно смотреть попросту не интересно.
    Ответ написан
    22 комментария
  • Способствуют ли СУБД экономии ресурса жесткого диска по сравнению с хранением (небольшого количества) данных в json-файлах?

    gbg
    @gbg
    Любые ответы на любые вопросы
    мы должны перезаписать весь файл целиком
    Если смотреть с этой стороны, то да, что JSON, что XML - абсолютно дурацкие форматы, когда речь идет о хранении данных в процессе их обработки - стоит поменять одно поле, и нужно переписывать весь хвост файла, так как все записи имеют переменную длину.

    С другой стороны, СУБД хранят свои данные в так называемых страницах, размер которых, как правило, кратен размеру кластера на жестком диске. Следовательно, изменение одной записи приведет только к перезаписи группы страниц, относящейся к этой записи, но не к перезаписи всей БД.

    Однако, с практической точки зрения, важно смотреть не на износ, а на быстродействие. СУБД, например, хранит числа в двоичном представлении, в то время как JSON, XML и прочая требуют преобразования чисел в строки и наоборот при каждой записи и чтении, что естественно, создает дополнительные тормоза и обогрев атмосферы.

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

    То есть да, хранить данные в СУБД оптимальнее и быстрее. Еще там есть схема данных, которая проследит за их целостностью, а также функционал фильтрации и агрегации, которые не придется писать заново.
    Ответ написан
    Комментировать
  • Возможно ли параллельно изучать c# и c++?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    да. а в чем трудности?
    Ответ написан
    5 комментариев
  • Какие задачи решают на Rust, а какие на Golang?

    bingo347
    @bingo347
    Crazy on performance...
    Какие задачи решают на Rust
    любые. Rust - язык общего назначения, применимый к большинству возможных задач. Rust достаточно высокоуровневый для написания на нем прикладного ПО и компилируется в достаточно эффективный машинный код, для применения в ядрах ОС, драйверах или embedded разработке. Так же Rust на сегодня имеет самый маленький размер при компиляции в wasm, что критично для использования в web. Я честно не знаю такой сферы, к которой бы не подошел Rust.
    Единственной проблемой в применимости Rust я вижу недостаточную его распиаренность в РФ, что часто бывает самым важным критерием для "манагеров" и прочих людей принимающих решения о используемом стеке.
    а какие на Golang
    Golang тоже язык общего назначения, но имеющий ряд ограничений:
    - Крайне тяжелый рантайм не дает возможность использовать его в wasm, embedded или компонентах ядра.
    - Необходимость в сборке мусора опять таки ограничивает разработку для embedded или компонентов ядра.
    - Отказ от llvm в качестве бэкенда компилятора ограничивает число целевых платформ.
    Можно один заменить другим?
    Rust спокойно заменяет Golang в любой возможной на последнем задаче, наоборот же иногда имеем ряд ограничений.

    Вместо P.S.:
    Golang скорее всего окажется более быстрым для прототипирования и быстрого старта. Однако отсутствие полиморфизма в любом виде (утиная типизация не в счет) и ограниченность одной парадигмой структурного программирования делает этот язык крайне дорогим в поддержке. Так же этому (и быстрому прототипированию и дорогой поддержке кода) способствует лютая ненависть создателей языка к принципу DRY.
    Rust имеет такую редкую сегодня строгую типизацию, одним из нюансов которой являются концепции владения и заимствования (которые позволяют делать автоматическое управление памятью в compile time), что порождает с одной стороны высокий порог входа в технологию (что сглаживается человекопонятным выводом компилятора, если входящие умеют читать, что еще более редко встречается сегодня, чем строгая типизация), но так же удешевляет поддержку продукта длительное время. Так же надо понимать, что Rust не спасет от кривых рученок быдлокодеров (разве что они не смогут его освоить), так как при большом желании можно сделать и утечки памяти и дедлоки и гонки данных (хотя в Golang это все сделать на порядок проще).
    Ну и надо не забывать, что много где присутствует hype-driven-development и Golang распиарен, а Rust нет.
    Ответ написан
    3 комментария
  • Изменять SECRET_KEY в Django проекте при каждом рестарте сервера плохая идея?

    @galaxy
    Плохая. Все токены и подписи, где он используется станут невалидными. Из часто используемого - это токены на сброс пароля.
    Ответ написан
    1 комментарий
  • Как через for вывести 1 сообщение а не несколько?

    Предлагаю пойти в гугл и изучить питон
    Ответ написан
    Комментировать
  • Как сделать django queryset глобальным?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    5e1ff0ac066b9696317852.jpeg
    Ответ написан
    Комментировать
  • Super(). в Django, что это?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Стоит сначала выучить язык программирования Python прежде, чем браться за изучение фреймворков, написанных на нём.
    Ответ написан
    Комментировать
  • Доступ к базе по ссылке?

    NeiroNx
    @NeiroNx
    Программист
    >>> from urllib.parse import urlparse
    >>> u = urlparse("postgres://admin:oocooSh7@postgres.host:5432/my_db")
    >>> u.password
    'oocooSh7'
    >>> u.username
    'admin'
    >>> u.hostname
    'postgres.host'
    >>> u.port
    5432
    >>> u.path
    '/my_db'
    >>> us = urlparse("sqlite:///C:/Users/admin/site_db.sqlite3")
    >>> us.path
    '/C:/Users/admin/site_db.sqlite3'
    >>> us.scheme
    'sqlite'
    >>>

    Думаю дальше сами справитесь.
    Ответ написан
    1 комментарий
  • Факт или миф: комп не стоит изнашивать частыми включениями-выключениями? Гибернация системы на SSD?

    gbg
    @gbg Куратор тега Электроника
    Любые ответы на любые вопросы
    Сама идея появилась от того, что при циклировании питания, изнашивается HDD и в гораздо меньшей степени, конденсаторы в цепях фильтрации питания.

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

    Идея о том, что частая гибернация может испортить SSD - также устарела, современные SSD и не такое переживут и будут заменены раньше - просто потому, что станут вмещать мало данных.
    Ответ написан
    3 комментария
  • Не пойму в чем проблема на django?

    Ranwise
    @Ranwise
    никак, это не ошибка, а отслеживание файлов для перезапуска дев-сервера
    Ответ написан
    Комментировать
  • Класс FileResponse в Django что означает строка 'rb'?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Сначала нужно выучить Python, потом браться за Django.
    Ответ написан
    1 комментарий
  • Как правильно работать с двумя массивами одновременно?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ну во-первых, querySelectorAll возвращает коллекцию NodeList а не массив, это важно понимать.
    Во-вторых, у NodeList нет сеттера onclick в отличии от элементов, а следовательно Ваше присваивание туда функции просто не сработает.
    В-третьих, не стоит пользоваться сеттерами вида oneventname, так как это чревато проблемами, используйте метод addEventListener
    В-четвертых, querySelectorAll можно использовать не только на document, но и на элементах
    В-пятых, в обработчик события приходит объект события в качестве аргумента, в котором есть свойство target - элемент на котором событие произошло

    По-итогу:
    function listener(event) {
      const target = event.target.closest('.app__item');
      target.querySelectorAll('.equalizer').forEach(
        elem => elem.style.display = 'block'
      );
      // так как дальнейшие клики будут гонять бесполезный цикл, то лучше отписаться
      target.removeEventListener('click', listener);
    }
    document.querySelectorAll('.app__item').forEach(
      item => item.addEventListener('click', listener)
    );
    Ответ написан
    Комментировать
  • Social network на Wordpress хорошо или плохо?

    Как обстоят дела с оптимизацией при большом количестве юнитов?

    Рано задумываться над оптимизацией. Ваш проект скорее всего не взлетит, поэтому вордпресс тут идеально подойдет.

    Болен идеей ВП.

    Надеюсь это пройдет. Есть люди которые до сих пор пишут сайты на друпале и это у них не прошло к сожалению.
    Ответ написан
    Комментировать
  • В чем суть процедурного программирования?

    @majstar_Zubr
    C++, C#, gamedev
    alex4answ, процедурный стиль использует только понятия модель памяти, типы, инструкции, программа и подпрограмма.

    Вот и всё. Никаких составных типов. Концепция "состояние" в коде никак не выражается. Держите её если хотите в голове либо в комментариях.

    Никаких сущностей в коде. Держите из в голове или в комментариях.

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

    Но это всё уже вводится в структурном программировании.

    Процедурное программирование вводит модель памяти с понятиями стек и куча. Хотите сделать функцию в процедурной парадигме - вам придется оформить её в виде подпрограммы и вызывать её из другой. Причем понятия линковки нет, вы будете делать это используя адрес в куче, а какие-то данные, типа, аргументы, будете сами на стэк ложить, каждый раз при вызове подпрограммы "функция".
    Ах, да, захотите функцию для сложения двух чисел, придется сделать ctrl-c, ctrl-v и в теле подпрограммы написать сложение двух кусков данных взятых со стека. Для разности - копируете код, в теле меняете инструкции. И так для каждой функции.

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

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

    А максимум абстрагирования, которое вводит процедурное программирование, это символьное произвольное именование адреса в памяти. Да и вместо типов, скорее, используется смещение байтов для коллекции, которым просто даны имена.

    Дело в том, что о процедурной парадигме можно говорить только ретроспективно. В основном, процедурная парадигма это классический ассемблер.

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

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

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

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

    А вот в языке с полной поддержкой процедурной парадигмы можно делать такие подпрограммы, которые косплеят функции, но возвращают несколько "аргументов", причем пишут прямо в память. Да и в принципе, в процедурной парадигме можно делать свой ABI, нет никаких стандартов, нет правил, ничто не истинно и всё дозволено.
    Ответ написан
    Комментировать
  • Можно ли открыть в интерпретаторе python, -py фаил?

    deepblack
    @deepblack Куратор тега Python
    На выбор:

    yaml
    import yaml
    config = yaml.safe_load(open("path/to/config.yml"))


    json
    # config.json
    {
        "mysql":{
            "host":"localhost",
            "user":"root",
            "passwd":"my secret password",
            "db":"write-math"
        },
        "other":{
            "preprocessing_queue":[
                "preprocessing.scale_and_center",
                "preprocessing.dot_reduction",
                "preprocessing.connect_lines"
                ],
            "use_anonymous":true
        }
    }

    import json
    
    with open('config.json') as json_data_file:
        data = json.load(json_data_file)
    print(data)
    Ответ написан
    Комментировать
  • Можно ли сделать обратную связь моделей ForeignKey?

    @dimuska139
    Backend developer
    Да, можно

    class Man(models.Model):
         company=models.ForeignKey('Company', related_name='mans')
    ...
    Company.objects.get(id=1).mans
    Ответ написан
    1 комментарий
  • Как решать задачи?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Значит вам кажется, что вы понимаете.
    Ответ написан
    Комментировать