Задать вопрос
  • Что нужно знать чтобы стать начинающим системным инженером (devops)?

    Singaporian
    @Singaporian
    Статья, которую должен прочитать каждый.

    DevOps - не профессия. Это название культуры доставки кода от разработчика (dev) через тестировщиков и до сисадмина(ops) и обратная связь по этой цепочке.

    Человека, который внедряет DevOps, обычно называют... как хотят. Чаще всего этим занимается какой-нибудь нон-конформист в команде.

    Профессии, которые отрисуются в процессе построения этой методологии следующие:
    • Build Engineer - инженер, который управляет зависимостями, сборками, конфликтами кода.
    • Release Engineer - инженер, который управляет репозиторием кода (кто куда и по каким правилам мерджится и откуда бренчуется). Пожалуй, это самая сложная задача в больших проектах. Особенно с нестрогим Agile или в Waterfall.
    • Automation Engineer - инженер, который занимается автоматизацией рутинных задач. Обычно деплоймент, автотесты, etc. Все эти buzz-слова типа Docker - его инструментарий.
    • Site Reliability Engineer - инженер, который поддерживает ops (апгрейды, расширение железа)
    • Configuration Manager - непонятная мне специальность. Жуткое порождение HR-специалистов, давящих на громкое название позиции. Можно было бы пойти дальше и назвать специальность ZooKeeper Vice President

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

    Почти всегда все эти роли совмещают один-два человека. Ну это зависит от качества кода.
    Назовем эту компанию BRAE/CM для краткости.
    Задача BRAE/CM состоит в том, чтобы программный код, который выходит из под пера программистов, оставался на контроле программистов и сисадминов одновременно. Программисты, равно как и сисадмины, благодаря DevOps-подходу, имеют возможность и даже обязаны обслуживать код на протяжении всего жизненного цикла от планирования архитектуры до мусорки.
    То есть сисадмины начинают рулить еще до того, как код попадет к ним - на ранних стадиях, а программисты продолжают рулить своими задачами уже после того, как код от них ушел к сисадминам - на поздних стадиях. И все это прозрачно друг для друга и все проблемы и решения ходят туда сюда и не спотыкаются о бюрократия в стиле "ничего не знаю, мы код уже закоммитили, у меня тут свои проблемы, у них сломалось - пусть сами и чинят".

    Так вот эта работа - завершающая стадия системного администратора и начинающая стадия разработчика. Поэтому не бывает Junior BRAE/CM.
    BRAE/CM бывает всегда только Senior в системном администрировании и всегда Junior в программировании.

    Еще один момент. В домашних условиях можно выучить инструменты на базовом уровне. Но не поварившись в одной кастрюле с реальными разработчиками, смысл всей этой кухни не понять. Так что сразу забейте. Но если хотите, могу описать пошаговый длинный путь как стать RE/CM:

    Сразу оговорюсь по языкам.
    У каждого языка свое предназначение. Java чаще используется в корпоративном секторе. Там много серверов и сложные бизнес-приложения. Поэтому Java-мир очень чувствителен к таким понятиям, как "технинческий долг" и "управление процессом разработки". И именно поэтому именно там все основные вакансии DevOps и именно там будет самый интересный опыт.
    Кроме Java, традиционно сильная DevOps-культура у Ruby. Практически все остальные языки не имеют столь развитой и популярной инфраструктуры в в данном контексте и потому вам скорее всего будут неинтересны.
    Другими словами, если в среде разработчиков выбор языка - тема для холивара и эмоций с миллионами сравнительных анализов с противоположными результатами, то для специалистов по DevOps выбор очевиден и прозрачен. Java - это одновременно самые интересные задачи, самый богатый toolset, самый большой выбор вакансий и самые высокие зарплаты.

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

    Итак, что делать:
    1) Почитать книги Head First по Java. Пройти курсы Java на EDX.
    2) Освоить SVN. Есть прекрасные тьюториалы. (GIT освоим позже)
    3) Поставить VirtualBox (не VMWare!!!)
    4) Написать простенькое приложение. Код коммитить в SVN. Собирать его при помощи maven.
    5) Поднять на отдельной виртуалке Jenkins. Он должен брать код приложения на SVN и запускать свой локальный maven для сборки.
    6) Написать модульные тесты (unit tests) своего кода. Пусть maven и их прогоняет.
    7) Поднять где-нибудь Nexus. Усложнить задачу maven, чтобы он теперь складывал все в Nexus. Если maven'у потребуются внешние библиотеки, он тоже не сам должен ходить в интернет, а через Nexus (Central repo).
    8) Настроить на своем десктопе vagrant так, чтобы он с нуля создавал виртуалки VirtualBox.
    9) Создать виртуалку DEV через vagrant. При этом ansible должен на ней что-нибудь настроить (например установить JDK)
    10) Научиться деплоить jar/war из Nexus на виртуалку DEV чем-нибудь. Чем - не посоветую, так как сам работаю с очень сложным IBM uDeploy, а это точно не для новичка. Посмотрите в сторону Rundeck или чего-то такого. Может самим Jenkins'ом задеплойте.
    11) Напишите интеграционные АВТОтесты. На чем хотите (как вариант: Selenium).

    Усложняем систему.
    12) Донастраиваем Jenkins: собирает maven-проект; выкладывает на Nexus; дергает vagrant/ansible для создания виртуалки SIT (system integration test); деплоит приложение на SIT; прогоняет автотесты на SIT; удаляет виртуалку после успешного завершения автотестов.
    13) Прикручиваем SonarQube в Jenkins для статического анализа кода. Исправляем косяки своего кода, согласно полученным от SQ рекомендациям.
    14) Прикручиваем мониторинг Sensu.
    15) Пишем нагрузочные тесты на чем-нибудь. В идеале потрогать два инструмента: jMeter и Gatling.
    16) Как и в 12-м шаге прикручиваем в Jenkins автоматизацию создания виртуалки SLT (Stress/Load test) и прогона на ней тестов. Только уже лоад-тестов(обязательно) и стресс-тестов(опционально) соответственно.
    17) Дописываем в свое приложение какой-нибудь функционал, чтобы использовалась база.
    18) Придется познакомиться с LiquiBase. Деплой SQL руками делать запрещено.
    19) Перейти на Docker (то есть теперь приложение выкладывать не напрямую в ОС, а внутрь докера)

    20) Денек на то, чтобы почитать про Agile, Scrum, Waterfall и прочие организационные порядки.

    А теперь немного уходим в управление проектом:
    21) Поставить Atlassian Jira. Разобраться, чем отличаются Epic, Story, Task, Sub-Task. Создать себе подобной этой структуре фронт работ (делать его не придется, просто нафантазируйте).
    22) Поставить Atlassian Stash и связать его с Jira.
    23) Переехать со своего SVN на GIT, предоставленный Stash'ем.
    24) Пройти Git-тьюториал какой-нибудь. Инструмент очень нетривиальный.
    25) Взять любую таску в работу. При этом в начале работы сделать новый Git branch из тикета Jira.
    26) По завершению работы запустить всю построенную ранее цепочку, но уже для своего брэнча.
    Дайте попробую угадать: вам пришлось скопировать все джобы и переписывать в них ветки?
    27) Сделать джобы нормально. Чтобы одни и те же можно было использовать для любых веток - по аналогии с принципом программирования "reuse code". У Вас будет reuse job :)
    28) Сделать pull request, самому сделать code review и самому себя же за-approve'ить. После этого сделать merge своей ветки в master.
    29) Сделать сборку брэнча автоматической по git-hook (или SCM pool)

    30) А теперь высший пилотаж: к чертям Docker, Copistrano и прочую buzz-word-hipsters-галиматью. Теперь вы с этим знакомы и сможете применить, но пришло время выгрызать этот детский сад калёным железом. Теперь вы доставляете код только как .deb-пакеты. Это значит, что вы:
    a) разбиваете control-файл на несколько пакетов, возможно с lib*,
    b) оверрайдите все ~20 dh_ в файле rules так, чтобы все это соответствовало вашим наработкам в предыдущих пунктах.
    c) раскидываете файлы по .install
    d) самое тяжелое: готовите .preinst, .postinst, .prerm, .postrm файлы СОГЛАСНО ИХ ПРИМЕРАМ .ex, сгенерированным dh_make - то есть с разбиемнием на update/configure/broken-install и что там еще есть. Это означает, что при переустановке, при апгрейде, при даунгрейде, при удалении и при пурдже, у вас будут разные сценарии, каждый из которых должен быть проработан досканально. На этом этапе вы также познакомитесь с понятием "регрессионные тесты".

    Ну как бы базовый вариант вот. Но это далеко не весь инструментарий и путь. Это так, для начала.
    Кроме этого неплохо бы познакомиться с Puppet (это не очень подходит для DevOps, скорее для рядовых админов с кучей серверов, но это очень популярный инструмент ввиду того, что никто не понимает, что такое DevOps и вас скорее всего заставят управлять сотней серверов, вместо релиз инжиниринга). А так же нужно познакомиться с операционными системами NixOS (обязательно) и CentOS/Debian (опционально, но я бы палкой бил тех, кто не знает эти OS). Кроме того, надо базово ориентирваться в PostgreSQL.

    Внимание, важный момент, который должен быть вшит на уровень подсознания у DevOps-ориентированного инженера: вы все время пробуете новые инструменты. Вы всегда будете находить что-то очень отличное. Знаете Nexus как свои пять пальцев и он решает почти все проблемы? Отлично! Теперь выкидываете Nexus и ставите Artifactory. Знаете хорошо CentOS? Круто! Теперь пробуете все это проделать на Windows или Debian. Потому что только когда вы сможете сравнивать инструменты, ваша работа будет ювелирной. А DevOps бывает либо ювелирным, либо он не DevOps. Вы должны быть языко-независимым, платформо-независимым и инструменто-независимым.

    Что будет дальше? Дальше вы начнете работать с микросервисами (сотни одинаковых контейнеров в облаке, которые должны как-то работать друг с другом без ручной конфигурации). Тогда познакомитесь со всякими Consul, ZooKepper и кучей инструментов AWS/OpenStack.
    Ответ написан
    13 комментариев
  • С каким языком программирования может найти работу и новичок?

    Splo1ter
    @Splo1ter
    .NET Developer (9 years+)
    Не слушай про PHP, учи Python или Ruby, иначе будешь испытывать батхерт при написании приложений на php
    Ответ написан
  • Как защититься от множественной отправки post запросов?

    viktorvsk
    @viktorvsk
    А как защититься от того, что человек может много-много раз нажать кнопку F5 ?
    Тут уже смотря какие цели преследуете.

    Хотите, что б он случайно не нажал и трафик не тратил свой? Поставьте javascript проверку, что б не лайкать лайкнувшие записи

    Хотите, что б не мог накрутить лайки? Ставьте проверки на стороне сервера: по логину, айпи, сессии...

    Хотите, что б не спамили ? Ну, тут уже находите золотую середину на ограничение количества запросов с одного айпи\сессии\юзера и т.д. и т.п.

    Но вообще, в том формате, что вопрос задан - это бессмысленная преждевременная оптимизация. Запрос вам всегда и кто угодно может отправить - вы же публичный сайт делаете.
    Ответ написан
    Комментировать
  • Начинающему программисту: есть примеры реальных заданий для джуниора Python?

    @kir_vesp
    Web Developer
    django- разработка на нём всевозможных веб-сервисов. Самое простое: блог, интернет-магазин.
    Честно говоря, пока не видел вакансий для работы на python вне веб-индустрии. Может их просто по Питеру нет, но мне кажется, что мало кто использует Python вне веба(в бизнесе). Примеры игр с использованием Python видел, но там он тоже для весьма узких целей служит.

    UPD: junior будет делать мелкие веб-приложения, либо допиливать функционал к существующим, расширять их. Ещё может быть обычный парсинг данных с чужих сайтов. Примерно так.
    Ответ написан
    4 комментария
  • Где найти уроки по Ruby on Rails?

    denis-titusov
    @denis-titusov
    DevOps engineer
    Неплохой интерактивный курс для изучения основ: Ruby on codecademy
    Ответ написан
    Комментировать
  • Где найти уроки по Ruby on Rails?

    tonymadbrain
    @tonymadbrain
    doam.ru
    Ответ написан
    Комментировать
  • Какие есть курсы по Ruby on Rails?

    @konstantin95
    Практический курс по Ruby on Rail для тех, кто знает основы:

    levelp.ru/courses/programmirovanie/ruby-on-rails-d...
    Ответ написан
    Комментировать
  • Где найти уроки по Ruby on Rails?

    Наверное стоит указывать свой уровень подготовки.

    Отдельно про работу c mysql и с ActiveRecord, скорее всего в этих источниках ничего нет. Просто, лично мне понравилось, из свежего:

    12 Web Apps in 12 Weeks
    by Mackenzie Child
    www.youtube.com/playlist?list=PL23ZvcdS3XPLNdRYB_Q...

    Материалы по курсу о рельсе. Хорошо написанно.
    tutorials.jumpstartlab.com
    вот например про оптимизацию запросов: tutorials.jumpstartlab.com/topics/performance/quer...
    Ответ написан
    Комментировать
  • Где найти уроки по Ruby on Rails?

    Jeiwan
    @Jeiwan
    www.rusrails.ru (или guides.rubyonrails.org) – этого начинающему хватит на долгое-долгое время. Конкретно по работе с БД — раздел "2. Модели".
    После освоения основ можно переходить к https://www.railstutorial.org/book, https://pragprog.com/book/rails4/agile-web-develop... и ко всему, что выдает гугл по запросам "ruby on rails tutorial", "ruby on rails book" и т. п.
    На сайте https://mkdev.me/ можно скачать бесплатную книгу-путеводитель по разработке на Рельсах. А ещё сайт предлагает услуги менторства, что очень полезно.
    После прохождения пары десятков туториалов и обретения навыка самостоятельной разработки небольших приложений можно записаться на отличный курс – www.thinknetica.com, а после него уже можно будет устраиваться на работу, а там уже... там уже, собственно, всё только и начнется.
    Ответ написан
    2 комментария
  • Где найти уроки по Ruby on Rails?

    @Quty
    Для работы с MySQL есть gem mysql2. Но в Rails Вам не надо работать с СУБД, Rails это делает за Вас. Конечно, можно и самому писать запросы, но в большинстве случаев этого не понадобится, благодаря гибкости моделей в RoR.
    К прочтению могу посоветовать:
    railstutorial.ru и www.rusrails.ru для начала.
    Ответ написан
    Комментировать
  • Поиск наставника, рально ли?

    suguby
    @suguby
    программист, python, django, mysql, git, hg, linux
    Могу посодействовать. Веду курсы пайтона и промышленного программирования в Мытищинской Школе Программистов, так же есть ученики "по скайпу". Сам на пайтоне программирую более 10 лет + mysql + git, джанга - 4 года. Формат в принципе такой, как ты сказал, единственно я бы посоветовал после изучения базовых вещей взять FOSS проект и его дорабатывать или конкретный свой, я буду наставником. Пиши, пообщаемся.
    Ответ написан
    2 комментария
  • Поиск наставника, рально ли?

    Inv_Hunter
    @Inv_Hunter
    Управляющий партнёр в BACG
    Алексей, это вполне реально. Приведу пример из практики.

    В момент формирования команды для нашего проекта, мы с партнером искали разработчика. Разместили на некоторых ресурсах предложения о сотрудничестве. И к нам обращались ребята, желающие работать в проекте "за просто так".
    Не имея большого опыта, в принципе, никуда толком и не возьмут, но если предложить вариант подмастерья в каком то проекте, а таких масса, то вероятность найти коуча очень велика.
    Итак:
    1. Найти проект, где Ваши начальные навыки будут полезны и практиковаться "за хлеб".
    2. Зарегистрироваться на нескольких биржах и брать мелкие, несложные заказы. Постепенно, встречая трудности и решая их, перейдетена новый уровень.
    3. Устроиться в ИТ-фирму на четверть ставки, там тоже будет масса интересных практических задач и опыт будет полезен.

    Надеюсь, мой ответ будет Вам полезен!
    Ответ написан
    Комментировать
  • Поиск наставника, рально ли?

    Пишите. Почта в профиле. Занимаюсь разработкой на Python/Django около трёх лет. Не могу обещать, что чему-то вас научу, но почему бы не пообщаться.
    Ответ написан
    Комментировать
  • Как сделать профиль на фриланс бирже максимально эффективным и привлекательным?

    opium
    @opium
    Просто люблю качественно работать
    На апворке в первую очередь ценят фидбек а потом уже все остальное
    Ответ написан
    7 комментариев
  • Почему стали популярны less, sass, ruby on rails, bower, grunt? И зачем они нужны?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Просто вы потерялись в середине нулевых, а по некоторым вещам и в начале.
    Стоит немного наверстать.

    Писать конечно можно и в блокноте. Я в середине нулевых начал пользоваться eclipse, nusphere (phped), теперь же жизнь без PHPStorm не представляю. Для простого кода обычно использую sublime.
    Ну и конечно, я так же не представляю жизнь без препроцессоров, современных наработок и т.д. Все что вам кажется дикостью. К примеру вместо PHP на серверной стороне использовать NodeJS или вообще Go.

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

    Все как и с любым другим направлением, технологии развиваются, человек привыкает к удобствам и обратно уже не хочет. Соответственно, компании ищут сотрудников, которые бы обладали набором современных знаний, т.к. для командной работы это очень спасает.
    Ответ написан
    1 комментарий
  • Как сделать профиль на фриланс бирже максимально эффективным и привлекательным?

    solomakin
    @solomakin
    Head of online marketing
    Нужно описать задачи, которые вы можете решить для клиента в вот таком стиле.
    После того, как я перешел на общение в ключе решения задач и стал предлагать экспертную оценку бесплатно, у конверсия из обращения в покупку проекта сильно изменилась (от 10% к 35%).
    Ответ написан
    Комментировать
  • Как лечится кризис начинающего программиста?

    @Dementor
    программист, архитектор, аналитик
    Не знаю насколько мой случай типичен или является экзотикой, но я целенаправленно не учился программировать и все познавал в процессе.

    Мне захотелось сделать сайт и я просто открыл исходный код похожей страницы и стал изучать как там все устроено - так я изучил HTML и CSS. Захотел сделать галерею и просто начал делать - в процессе освоил PHP (тогда это была еще третья версия). На сисадминской подработке попросили автоматизировать ежедневную рутинную операцию с заявками - освоил 1С 7.7. На следующей работе меня посадили на поддержку бухгалтерского софта для бюджетных организаций и единственным источником информации были только исходники программы - так я освоил Foxpro и SQL. И все это происходило в начале 2000-х в так сказать догугловскую и достекоферфлововский период.

    И вот как-то мне захотелось изучить Java. У меня была какая-то бумажная книга от Питера, потом электронная версия философии Экера, смотрел форумы... Но не пошло и я забросил. А где-то пару лет назад нужно было для моего проекта сделать мобильное приложение и снова все пошло как по маслу - все что в подкорке лежало по Jave всплыло, а остальное быстро выловил на стековерфлоу, джаватолке и стартандроиде.

    Так что мой совет: найдите себе дело и просто делайте его.
    Ответ написан
    Комментировать
  • Как лечится кризис начинающего программиста?

    customtema
    @customtema
    arint.ru
    Замените "программирование" на любой другой труд - ничего не изменится.

    Работать, только работать.
    Ответ написан
    Комментировать
  • Как сделать профиль на фриланс бирже максимально эффективным и привлекательным?

    Jeth
    @Jeth
    UI/UX-дизайнер и JR iOS Dev в airlab.me
    Хорошо наполненное портфолио (разумеется, хорошими работами) в подавляющем большинстве случаев является окончательным вариантом в принятии решения. ;)
    Ответ написан
    4 комментария
  • Как сделать профиль на фриланс бирже максимально эффективным и привлекательным?

    zasqer
    @zasqer
    Одного хорошего проекта в портфолио вполне достаточно. Тестов штук 5 проходил. А в чём цель, хотите чтобы на интервьюшки приглашали или принимали ставки на проект?
    Ответ написан
    4 комментария