Мы программируем не потому что за это платят, а потому что такова наша суть
Местоположение
Россия, Москва и Московская обл., Москва

Достижения

Все достижения (22)

Наибольший вклад в теги

Все теги (115)

Лучшие ответы пользователя

Все ответы (176)
  • Зачем нужна инкапсуляция в ООП?

    DollyPapper
    @DollyPapper
    Инкапсуляция вообще является (ИМХО) главным принципом из 4. Инкапсуляция + абстракция. Вы не поняли её основную идею. Инкапсуляция это объдинение в одной сущности данных (не обязательно в общем-то) и действий которая эта сущность может предоставить. Инкапсуляция + абстракция представляю собой в общем более общий принцип - сокрытие информации/сложности, и один без другого не сильно то полезен. Не путать с модификаторами доступа (public, private и тд). Этот принцип идет скрозь всю историю развития языков программирования и собственно является главной движущей силой их развития. Вот пример из реальной жизни: есть у вас микроволновка. Она имеет +- 2 нопки: выставить время, выставить мощность. Это интерфейс микроволновки, который доступен конечному пользователю. Всё что вам нужно знать, чтобы приготовить себе похавать - 1)на какой мощности это хавать, нужно готовить 2) сколько это нужно делать по времени. При этом очевидно внутри микроволновки происходит та самая сложность, микросхемы гоняют электрический ток, магнетрон изучает электромагнитные волны, всякая разная физика происходит и вот это вот всё. Итого: вся эти физика и электротехника инкапсулирована в объект микроволновки (инкапсулирована так, что мы не можем добраться до её внутреннего устройства, это важно. Т.е. мы не можем сами соединить проводки, поменять электрическую цель, чтобы себе похавать сделать, разработчик этой электропечки не дал нам даже потенциальную возможность это сделать легально. Можно конечно разобрать устройство и проделать все эти манипуляции, но это уже это на совести того самоделкина, кто это делает). Итого: мы имеем интерфейс из двух кнопок и получаем от обьекта микроволновки услугу - приготовить пожрать. Как там внутри это реализовано, нам не важно. Это и есть инкапсуляция + абстракция = сокрытие информации/сложности.
    Более программистский пример: есть такая структура данных - Стек. Хотя по факту это не структура данных, а абстрактный тип данных. Советую этот термин загуглить, это важная составляющая в понимании ООП.
    Представим, что стек это такой обьект который предоставляет услуги, по типу как мы представляли себе обьект микроволновки. Что нам нужно знать про стек, чтобы им пользоваться? Публичный интерфейс. Т.е. есть класс Stack с публичными методами push(), pop(), viewTopStack() (посмотреть первый элемент стека, без его удаление из самого стека). Всё, можно пользоваться. Как он внутри эти элементы хранит, простой ли это массив, или связный список, на сколько эффективно он там внутри работает - нам не важно. Это важно тому, кто предоставил нам в пользование данный класс. Мы знаем, что вызвав viewTopStack мы посмотрим первый элемент стека, вызвав push - положим что-то в стек, вызвав pop получим первый элемент, удалив его из стека (по аналогии: мы знаем что чтобы притоговить пожрать, нужно выставить в микроволновке время и мощность, на выходе получив наше адово хрючево). Если подытожить - инкапсуляци + абстракция, (еще раз настою на том, что порознь их нельзя рассматривать, это две тесно связанные концепции которые имеют практический смысл только в синергии) это механизм борьбы со сложностью, не только в программировании, вообще везде, в любой человеческой деятельности. В этом их смысл. Если ваши абстракции плохие -> ваш код сложный -> ваш код плохой (говнокодом его еще называют в сообществе программистов).
    Почитать на эту тему можно следующее: Р.Мартин - Чистая архитектура (начать с глав про SOLID прицнипы), С.Макконел - Совершенный код (главу про классы обязательно, остальное желательно (очень желательно)), там в общем-то вам расскажут то что я вам сейчас рассказал, только более подробно, по больше примеров и дадут обоснование сложности, назвав борьбу с ней - Главным техническим императивом. Шлифануть это книгой банды четырех. Сами паттерны не обязательно начинать учить (да и рано вам еще), но вот введение и часть про программирование на основе интерфейса, а не реализации - самое оно, это дополнит картину.

    UPD: тот факт, что мы в классе стек собрали его функционал (функции pop,push,...) обьединенные одной общей темой и есть факт инкапсуляции.
    Ответ написан
    Комментировать
  • Что конкретно нужно знать про Django для начинающего разработчика?

    DollyPapper
    @DollyPapper
    На самом деле - всё что угодно. "Ты никогда не будешь готов к работе", нужно постоянно учиться.
    Но это не ответ на вопрос, точка входа должна быть у всего. И везде она разная. То есть никогда, не знаешь где тебе что может пригодится. Если более менее усреднить, могу выкатить такой список навыков с которыми можно идти на работу.

    Общие:
    • Знать как работает DNS в общих чертах, знать что такое файл hosts и зачем он нужен.
    • HTTP протокол. Знать его формат, знать статус коды
    • Быть уверенным пользователем Linux терминала. Знать как устроена файловая система линукса, зачем нужны все эти директории. Уметь пользоваться основными командами (cd, grep, ssh, lsof)<- это прям самый минимум, лучше больше. Значить что такое перенаправление ввода вывода (<,>,|)
    • Не плохо бы минимально уметь настроить Nginx. Вероятно вам не придется это делать будучи джуном, но знать как проиходит полный процесс обработки запроса как мне кажется очень полезно.
    • Мочь настроить SSL на nginx. Опять же скорее всего как джун вы этого делать не будете, но кто знает, разок попробовать чтобы просто понять.
    • Docker. Очень часто используется, советую выучить.

    Backend
    • Собственно сам питон и джанго на высоком уровне, это ваш самый основной рабочий инструмент
    • Django ORM и чистый SQL. Опять же на высоком уровне, с БД придется работать постоянно.
    • Если есть время - почитать про проектирование БД. Нормализация БД и вот это вот всё.
    • Понимать что такое авторизация и аутентификация

    FrontEnd
    Возможно вам не придется писать фронт, у вас будет для этого отдельные люди, но вероятность того что придется, она не нулевая. Зная какой нибудь JQuery ну или чистый JS вы повысите свой шанс найти работу. Ну про CSS + HTML я молчу, это даже не обсуждается, знать нужно.

    Отдельно хотел бы упомянуть по само написание кода. Хорошо бы понимать SOLID, DRY, KISS. Ну и конечно ООП, это я даже в списки не включал, это само собой разумеющиеся вещи.

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

    Как это учить?

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

Лучшие вопросы пользователя

Все вопросы (80)