Елена Булыгина предлагает Вам запомнить сайт «Ленусик»
Вы хотите запомнить сайт «Ленусик»?
Да Нет
×
Прогноз погоды

Основная статья: Программирование

«Шесть сезонов „Игры престолов“ за две недели на работе...»

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

Эта работа мне не очень нравилась, поскольку я был занят только одну половину дня, а вторую — предоставлен самому себе. «Свободного» времени было столько, что я просмотрел шесть сезонов «Игры престолов» всего за пару недель — и не дома, а на работе.

Я не хотел терять время, и сама работа была совсем не по душе. Каждый день я буквально заставлял себя вставать и ехать в офис.

Так пришло понимание, что нужно уходить. Но у меня не было чёткой цели — я не знал, чем заниматься. Уходить в продажи не хотелось. Уволиться, чтобы снова пойти работать менеджером, — точно нет. Поэтому некоторое время размышлял, что делать дальше.

Программирование — то, что доктор прописал

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

Уговорил и меня попробовать. Правда, я решил оценить возможности Java — прошёл сначала короткое онлайн-обучение по этому языку. После этого решил проработать вопрос серьёзнее: поискал в сети курсы и нашёл GeekBrains. Помню, понравилось то, что они связаны с Mail.Ru Group, поэтому остановился на этом варианте.

Выбрал iOS-разработку. Я большой поклонник продукции Apple и думаю, что её мобильные устройства будут востребованы ещё долго. А значит, и на специалистов будет спрос. Apple — компания, которая двигает технологии вперёд. Конечно, уже не так, как при Джобсе, но всё же она находится на переднем крае hi-tech.

Этап обучения 

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

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

Ещё один нюанс: уже заканчивая карьеру менеджера, я делал приложение для работодателя. Это был калькулятор стоимости литра топлива на базе в Бишкеке с учётом всех издержек при покупке в разных местах. Например, компании предлагают купить 92-й бензин на границе Киргизии и России по 400 долларов за тонну. Мы эту сумму забиваем в калькулятор и видим результат: литр этого бензина на нашей базе будет стоить 30 сом (местная валюта). В то же время мы знаем, что прямо сейчас можем купить в Бишкеке рядом с базой такое же топливо, а его финальная стоимость будет 25 сом за литр. Так можно быстро сравнивать варианты и принимать решения.

Ещё в приложении был счётчик, прогнозирующий пролив топлива на АЗС. Можно было приехать на заправку, подсчитать количество обслуженных машин, выбрать подходящую прогнозную модель и получить примерный суточный пролив каждого вида топлива на этой станции.

Так я применил свой опыт на практике — и это пригодилось впоследствии.

Трудоустройство

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

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

Это сработало: на собеседования меня стали приглашать гораздо чаще. В итоге я устроился в «Альфа-Банк» разработчиком. Возможно, помогло и то, что на курсах мы изучали вопросы, которые обычно задают на собеседованиях, и мои ответы понравились интервьюеру.

Что касается работы, то сначала меня оценили как «начинающего middle», и эти было очень неожиданно. Со временем я дорос до старшего разработчика.

Доходы, дорога на работу и другие нюансы

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

На дорогу до офиса трачу примерно столько же времени, но зато появилось много других плюсов. Это корпоративные «плюшки» и бонусы, ДМС, фитнес. Удобный и просторный офис, а также возможность работать удалённо — этой зимой попробую из Испании. Компания оплачивает поездки на конференции. Ещё «Альфа-Банк» сейчас развивает мерч-направление, так что как сотрудник я всегда могу купить свитшот с хорошей скидкой :)

Свободного времени стало гораздо меньше — я реально занят работой, причём такой, которая приносит удовольствие мне и пользу компании. Это имеет для меня большое значение.

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

Планы на будущее

Мне хочется двигаться дальше, совершенствоваться как разработчику. Для этого планирую изучить Ruby и Go. Причём не только для себя, но и в интересах компании — есть несколько проектов, где нужны эти технологии. Учиться на работе сейчас уже нет времени, но не теряю надежды обязательно освоить всё, что запланировал.

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

Советы начинающим

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

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

Как можно раньше познакомиться с продакшен-кодом. И понять, чего недостаёт в вашем, чтобы он стал таким же качественным. Так можно найти и идеи по реализации функции в своём проекте.

Просто делать свою работу, если она нравится, и верить в успех. В большинстве случаев именно так всё и получается.

Хотите узнать больше о выпускниках факультета iOS-разработки и других факультетов программирования GeekBrains? Вот их истории:

Пройти обучение

20 дек 19, 11:46
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Приключения бравого джависта в поисках пропитания

Прежде чем найти хорошую работу, Кирилл Охапкин, Java-разработчик из Волгограда, прошёл все круги ада трудоустройства джунов. В своей истории Кирилл делится опытом десятков собеседований и объясняет, почему начинающему программисту надо как можно раньше выходить на рынок труда.

Предыстория

К тридцати годам я перестал видеть перспективы на работе. Тогда, в 2018 году, я был начальником ОТК (отдела технического контроля) в муниципальном учреждении — автобусном парке. Однажды в городе сменилась власть и нам урезали финансирование. Я перешёл в другую компанию, но понял, что мне скучно. В полугосударственных организациях есть потолок роста: интересной и хорошо оплачиваемой должности там обычно ждут лет до пятидесяти.

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

Учиться программированию предстояло с нуля, при этом надо было на что-то жить. Я устроился в транспортную компанию системным администратором и записался на курсы Java-разработки в GeekBrains. Почему Java? Потому что этот курс стартовал раньше других! Мне хотелось скорее начать программировать, а на чём — без разницы. Я даже не знал, что Java и JS — разные языки. 

Сейчас я доволен выбором, но раньше приходилось о нём жалеть из-за нехватки вакансий в моём регионе. История моего трудоустройства — это целый эпос, который я озаглавил бы так...

Чтобы прийти в Java, надо сначала отвергнуть Java

Работу я начал искать сразу по окончании второй четверти в GeekBrains: открыл HeadHunter, ввёл запрос «Java» и выбрал город Волгоград. Сайт выдал всего 16 вакансий, половина из которых… про JavaScript. «Это фиаско, братан!» — отозвался внутренний голос. Ах да, все вакансии были уровня Middle и Senior, кроме одной — «разработчик ABAP» с зарплатой 15 000 рублей. Мол, переучим с любого языка на суперперспективный, бла-бла-бла.

Я выложил резюме и стал откликаться на всё, вообще на всё — даже на вакансии тимлидов — со словами «возьмите за еду». Через месяц меня пригласили пройти собеседование на позицию «инженер автоматизированного тестирования».

Про английский и людей

На моё резюме откликнулась компания-аутсорсер, которая тестирует игры. Это крупная контора с головным офисом в Праге и филиалами в Москве и Питере. Мне предложили посмотреть вакансию QA-инженера. В требованиях был английский, и я сразу предупредил — не владею. HR ответил, что это не критично и не обязательно. Затем мне прислали тестовое задание, которое я выполнил и показал своему преподавателю Александру Фисунову. Он посоветовал, как упростить и структурировать код — получилось шикарно. В компании посмотрели, сказали: «О, класс! Приходи на интервью». Пришёл, поговорил с тимлидом QA-инженеров и ещё с двумя людьми, ответил на вопросы по Java. «Неплохо! — говорят они. — А что у вас с английским?» — «Частично понимаю, но не говорю». — «Ну ладно».

Дальше было Skype-интервью с руководителем питерского филиала: «В принципе, меня всё устраивает! А как у вас с английским?». Я повторил свой ответ. «Ладно, мы вам позвоним». Затем — ещё одно телефонное интервью с двумя руководителями и тот же финал. Так продолжалось месяц. В итоге HR сообщил, что меня не взяли. «Почему?» — «У тебя плохой английский». Я спокойный человек, но тогда высказал всё, что думал. Ведь я с самого начала предупреждал о своём английском! А в итоге потратил несколько дней жизни на пустые разговоры.

Это был единственный раз, когда иностранный язык стал камнем преткновения при трудоустройстве. Документацию я читаю спокойно: IT-лексику знаю, непонятное смотрю в словарях и Google-переводчике. Для работы в среднестатистической российской компании этого хватает. 

В разное время я перепробовал множество учебников и языковых курсов, но пока, увы, не заговорил на английском. Как будет время, возьмусь за него снова. Безусловно, очень круто, когда ты можешь общаться с коллегами из других стран, слушать международные конференции, читать объёмные книги, не дожидаясь перевода.

В регионах не выбирают

Считаю, что в регионах надо браться за любую работу: через полгода-год у тебя будет совсем другое резюме, и ты сможешь найти лучшие варианты. Конечно, если ты в Москве, Питере, Екатеринбурге, Воронеже или Краснодаре, можно привередничать. Но когда у тебя на весь город несколько вакансий — не до жиру. Зато с опытом ты сможешь устроиться в приличную компанию удалённо или переехать в Москву.

Замахнуться на два языка (нет)

Теоретических знаний после курсов мне хватало, чтобы проходить собеседования: интервьюеры сами не всегда представляли, о чём спрашивать, а тестовые задания помогли набить руку. Я понял, что за неделю активных раскопок на StackOverflow можно написать что угодно. Сложнее решать задачи на самих собеседованиях, но и к этому можно подготовиться. А вот когда речь заходит о деньгах и опыте, новичку приходится трудно.

В компаниях, где я проходил собеседования на позиции уровня Middle, мне часто отвечали: «Приходите через годик». Не все говорят так открыто — некоторые начинают срезать тебя издевательскими вопросами: «Как называется такой-то метод в Spring? А сякой-то?». Причём интервьюеры тушуются, когда отвечаешь: «Ребята, вас в гугле забанили? Дайте мне компьютер, и я скажу, как называется метод, а заодно покажу, как его использовать». Ещё могут спросить, как относишься к переработкам. Я честно говорю, что время для меня — самый дорогой ресурс, и дарить его я не собираюсь.

За полгода я прошёл с десяток интервью и получил один оффер от компании, которая предлагала всё те же 15 000 рублей в месяц с возможной прибавкой — не раньше, чем через год. Я, конечно, был готов к скромному заработку в первое время, но на такие деньги мне не прожить физически! 

Потом знакомый, который в Европе работает архитектором C#, протолкнул меня на собеседование в хорошую контору. У них собирался увольняться инженер автоматизированного тестирования, и я вышел на стажировку. Работал по часу в день. Стажировка закончилась, и-и-и… инженер не уволился :)

Затем в той же компании мне предложили заняться разработкой на C#. Для начала выдали сложное тестовое задание по SQL, и я от скуки делал его две недели, пока ждал увольнения инженера. В итоге я сам отказался от позиции: решил не браться за новый язык, пока не освою Java, ибо за обучение «уплочено». Параллельно осваивать два языка — это слишком, особенно для новичка. Сейчас-то я понимаю, что надо было не выделываться и согласиться на позицию разработчика С#. Но это лишь начало истории.

Пришёл февраль 2019 года. Директор конторы, куда меня приглашали автотестировщиком, решил мне помочь: обзвонил несколько IT-компаний и сказал, что годный парень ищет работу по Java. На следующий день я пошёл на собеседование в EAE-Consult. Там я ответил на общие вопросы и решил простенькую задачку по SQL. Мне сказали, что подхожу, но есть нюанс... У них не Java, а C# :) Засада! Однако я тогда ещё недостаточно отчаялся и отказал им. До мая собеседований не было вообще. Я продолжал откликаться на всё подряд. Переделал резюме, как советовала специалист GeekBrains по трудоустройству, и стучался в разные IT-конторы.

Тестовое с подвохом

Ещё был очень поучительный опыт с элементарным, на первый взгляд, тестовым заданием, которое оказалось с подвохом. Как-то раз я написал в LinkedIn тимлиду команды, где набирали Java-разработчиков. Он ответил, что джунов они уже набрали, остались вакансии мидлов, но я могу попробовать. Надо было на чистом Java написать консольное приложение, которое предлагало бы пользователю ввести любые числа, а на выходе показывало MIN, MAX и среднее значение. Была ещё хитрая приписка: «Неопытный программист должен понять, как работает твоё приложение, а злой программист не должен его сломать».

Я написал программку за десять минут, покрыл её подробными комментариями и обернул защитным кодом, где проверял типы входных значений и ловил исключения. Казалось, я предусмотрел абсолютно всё. В итоге тимлид «уронил» мою программу одной командой. Как? Он ввёл два максимальных для типа значения, так что произошло переполнение и расчёт выдал «–1». Это было очень поучительно! Кстати, нас на занятиях предупреждали о переполнении типа, но я тогда не придал этому значения. Что тут скажешь? Оставалось только улыбнуться, поблагодарить за опыт и пойти читать «Effective Java».

И вот однажды в выдаче hh.ru я нашёл вакансию «стажёр C#» со вкусной зарплатой и примечанием, что вместо «шарпа» кандидат может знать схожий строго типизированный язык. Я откликнулся с ленцой, даже без сопроводительного письма, и забыл об этом варианте. Но через пару недель прилетело тестовое задание со словами «Cделай, как сможешь, а не сможешь — напиши, где затык». Там было простенькое приложение: API на .NET и мобильная реализация на Xamarin.

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

«Что ж, похоже, С# — это моя судьба», — подумал я и написал эйчару вышеупомянутой EAE-Consult. Меня опять пригласили на интервью и уже почти взяли на работу, но... Вдруг раздался звонок с незнакомого номера и человек, который представился моим новым начальником, сказал, что отбил меня у «шарпистов», потому что у него появилась вакансия джависта!

Если бы не Java :) 

Вы можете сказать, что мне следовало изучить местный рынок и выбрать другой язык программирования. Но дело не совсем в этом. У нас экономически слабый регион с низким уровнем жизни, поэтому, какой язык ни учи, перспективы придётся искать в местах с крупным IT-кластером. Даже если ты освоишь повсеместно востребованный JavaScript, в Волгограде тебе предложат делать сайтики за 20 000 рублей в месяц. К тому же у всех разные склонности и интересы: у меня, например, нет дизайнерских задатков и чувства стиля, с которыми можно расти во фронтенде. Мне больше нравится заниматься серверной частью. 

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

Зато как я люблю отлаживать большой кусок готового кода! Вот есть входные и выходные данные, вроде бы всё написано правильно — но не работает. И тут начинается квест, который даёт хорошую порцию адреналина. Во время дебага бьёшься над ошибкой, постепенно идёшь к пониманию, что было не так, и испытываешь особое удовольствие, когда код начинает работать.

Первая работа и перспективы

Итак, я устроился в EAE-Consult и стал единственным Java-разработчиком компании в Волгограде — коллеги по команде общаются со мной из Москвы. Я сразу оценил хорошо оборудованный офис, приятный коллектив, неплохую для нашего города зарплату.

Рабочий хаос :)

Я начал работать над расширением функций IBM MDM и использовал технологию, которая даже на StackOverflow не представлена. Поначалу пришлось очень тяжело. Во-первых, за повседневными задачами я не видел общей картины. Во-вторых, мне не хватало обратной связи по коду. А мне важно, чтобы мой код внимательно разбирали, критиковали и отправляли на доработку с указанием, что улучшить. Во время учёбы в GeekBrains я часто советовался с преподавателем Александром Фисуновым, и он умел объяснить, что хорошо, а что плохо. Теперь же надо было развиваться без наставника. Кстати, сейчас мне в этом помогает книга «Effective Java» — чтиво очень сложное, но и интересное!

Сейчас я уже полностью адаптировался в компании. С 2020 года перехожу на новый проект с очень современным стеком (микроcервисы, GraphQL). Кстати, мы ищем .NET-разработчиков. Если чувствуете в себе силы, присылайте резюме на почту svetlana.medova@eaeconsult.ru.

Важно ли иметь портфолио?

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

Считаю, портфолио нужно самому программисту, а рекрутерам достаточно знать, что оно есть. Я слежу за статистикой своего репозитория на GitHub и вижу, что работодатели туда не заглядывают, — за исключением случаев, когда я отправлял тимлидам прямые ссылки на конкретные проекты. Если учесть, что я прошёл десятки собеседований, можно сделать вывод: при трудоустройстве на портфолио не смотрят — разве что у вас в запасе будет решение, близкое к тому, что нужно заказчику.

Итоги и советы

Не ждите окончания учёбы! Ходите на собеседования, делайте тестовые и постарайтесь устроиться стажёром — так вы наберёте базовый опыт. Скорее всего, первое время вам будут отказывать. По возвращении домой вы будете искать ответы на вопросы, с которыми не справились. Так и должно быть. Прохождение собеседований — навык, который надо развивать.

Во фронтенде, может быть, чем больше технологий ты освоил — тем ты круче. А в Java, если ты настроен на суровый Enterprise (работу в банках и крупных консалтинговых агентствах), поможет только погружение в коммерческие проекты. У меня поиск работы затянулся, но могу сказать, что всё основное на курсах я изучил в первые две четверти. Хотя дальше тоже были полезные вещи, было важно вместе с их изучением повторять старый материал.

Коммерческая разработка в любом случае отличается от учебных проектов. Пока нет «боевого» опыта, многие вещи можно понять, но не запомнить. С 1990-х годов Java оброс множеством фреймворков и библиотек, поэтому осваивать этот язык надо так: изучаешь Java Core, базовые принципы, алгоритмы, SQL — и идёшь работать.

Ещё очень важно умение читать код. Когда берёшься за новый проект, 50 % времени уходит на то, чтобы разобраться в сделанном до тебя, ещё 40 % — на документирование своего кода и всего 10 % — на программирование. Это только в фильмах про хакеров от быстрого ввода команд происходят чудеса. 

Как научиться читать код? В идеале надо взять готовый проект на тысячу классов, где после очередного обновления что-то не работает, — и вникать, как всё устроено и что пошло не так. Было бы круто, если бы этому учили на курсах, но я такого не встретил.

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

Хотите узнать больше о выпускниках Java-факультета GeekBrains? Вот их истории:

Пройти обучение

9 дек 19, 15:32
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Geek Change: все ноябрьские вебинары — в одном посте

Мир digital-профессий с каждым годом становится все сложнее. Появляются новые технологии, новые сферы знаний и специализации, которые не стоит упускать из виду. Вместе с этим никуда не исчезают вечные карьерные вопросы: как начать профессиональный путь, какие навыки ценят работодатели, как совмещать работу, учёбу и вообще настроить work-life balance.

Этим насущным вопросам мы посвятили Geek Change — серию из 24 бесплатных вебинаров с экспертами Mail.ru Group и GeekBrains. Нам поступило 16 тысяч заявок от зрителей, и в течение 11 дней — с 19 по 29 ноября — мы старались развеять все их сомнения по поводу собственной карьеры.

Вам тоже стало интересно, но вы не успели на Geek Change? Не проблема: мы подготовили и сгруппировали записи всех вебинаров для просмотра в любое удобное время.

Общие вопросы трудоустройства:

Языки программирования:

Веб- и мобильная разработка:

Аналитика в Excel и не только:

Другие, не менее интересные темы:

Среди участников Geek Change мы раздали скидки на обучение и разыграли 11 бесплатных мест на любой из наших факультетов. Некоторые счастливчики поделились своими историями.

Елена Фомина выиграла обучение на факультете тестирования ПО: «Я десять лет работаю учителем информатики. Теперь решила двигаться дальше, попробовать себя в новой профессии. Стараюсь быть проактивной, детально изучать предмет работы, охватывать чуть больше, чем требует решение задачи. Ставлю перед собой цель стать лучшей в своей области. Готова не только жадно впитывать знания, но их применять в работе. Буду рада развиваться среди профессионалов».

Паша Прокофьев выбрал факультет Python-разработки: «Меня зовут Паша, и я победил в розыгрыше бюджетного места. Выбрал факультет Python-разработки — я не раз слышал, что этот язык относительно прост для изучения. Я начал проходить разные бесплатные курсы и, выполняя несложные упражнения, втянулся. Но стоило добраться до чего-то, связанного с решением конкретных и реальных задач, как всё стало сложно и так по-настоящему. Поэтому я понял, что с безадресными курсами я далеко не уйду (это лишь мой случай, у многих может получиться). Поэтому победа в розыгрыше от Geekbrains — очень кстати.  
 
В Python меня привело, в первую очередь, любопытство — я представитель гуманитарной профессии, в котором, я уверен, когда-то умер человек с логическим складом ума и тягой к точным наукам. Вот эту нереализованную сущность я и стараюсь в себе пробудить».

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

«Я родом из Молдавии, живу сейчас в Московской области, в городе Ивантеевке. В 2018 году окончил Московский Политех (бывш. МАМИ) по специальности “Управление качеством”. Желание работать в этой сфере отбилось еще где-то на четвёртом курсе, хотя на втором и третьем было интересно. В течение полутора лет после Политеха успел поработать продавцом в салоне сотовой связи, администратором боксерского клуба, промоутером, финансовым консультантом (обучение торговли на финансовых рынках), в B2B-продажах (инфобизнес). Был даже помощником в электромонтажной бригаде на строительстве котельной, но так себя нигде и не нашел.

Месяц назад вспомнил, что люблю игры и когда-то давно пообещал себе, что моя жизнь будет с ними связана. Для воплощения этого замысла я начал размышлять над вопросом: "А как же мне попасть в команду разработки? В игровую индустрию? В IT?" И ответом было тестирование (QA-engineer). Начал узнавать про профессию, что делать новичку без опыта, какие нужны компетенции. Тут контекстная реклама мне подсунула вежливо баннер с рекламой обучения в GeekBrains.

Записался на несколько вебинаров, параллельно почитывая другие источники. Увидел отбор на бесплатное обучение, но дальше первого этапа не прошёл. Затем узнал Geek Change. Подумал, может тут повезет. Давно я ничего не выигрывал, с 2011 года. Наверное достаточно накопилось талонов на удачу. В первый день, когда разыгрывали место на обучение, занял 9-е место в викторине (из 435 участников), а во второй раз уже почетное первое (из ~250 участников).

Я всю жизнь играю в игры и горжусь этим — ведь это искусство 21 века. Начав с тестировщика, я понимаю, что могу набраться опыта, знаний, навыков, которые в дальнейшем будут важны и нужны. Вижу возможные пути развития и представляю, кем могу стать, куда меня эта дорожка приведёт. Раньше этого не было ни на одной работе! Это та мечта, которой суждено сбыться. Надеюсь, GeekBrains поможет мне сделать первые шаги.

P.S. И мама будет гордиться, что сын работает по специальности. Пусть не "на заводе", но в современной IT-сфере.»

Поздравляем победителей и надеемся когда-нибудь увидеть их истории успеха в нашем блоге!


3 дек 19, 11:57
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

«Сходил на два-три собеседования и нашёл работу»

Университет готовил Евгения Кириллова к градообразующему химзаводу Нижнекамска, но наш герой спустя год в Geek University стал iOS-разработчиком на удалёнке. Теперь он делится советами и вдохновением!

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

Вид на Нижнекамск со стороны Елабуги

На заводе я проработал немного. Мне не понравилось, и я устроился в строительную фирму. Там я, конечно, сидел за компьютером, но к программированию моя деятельность никак не относилась — я вёл документацию. Заниматься этим всю жизнь не хотел, а вот разработчиком мечтал стать, ещё когда школу заканчивал. 

Почему iOS

Незадолго до поступления на факультет iOS-разработки я поменял телефон. У меня была Nokia Lumia на Windows, а потом я купил iPhone — мне в нём всё так понравилось, что появилась симпатия к Apple. Затем на работе вместо компьютера с Windows поставили iMac, и тут опять всё оказалось очень здорово. Экосистема Apple впечатлила! Потом я открыл для себя язык программирования Swift. Так постепенно из разных предпосылок сформировалось желание стать iOS-разработчиком. И как раз GeekBrains подвернулся очень удачно. Я долго думал и всё-таки решился, когда появилась не просто профессия, а факультет.

О трудностях и мотивации

Начинать было трудно! Первая четверть была самой сложной. Я продолжал работать, поэтому иногда учиться приходилось по ночам. Бывало, и до утра засиживался, чтобы задание выполнить. 

Процесс обучения GeekBrains был для меня в новинку. В институте преподаватели дают студентам всё то, что им нужно, чтобы выполнить задание и сдать экзамен: берёшь книгу и конспекты, готовишься, и всё в порядке. Здесь же нужно было очень много информации самим искать в интернете. Это как раз то, что на работе теперь постоянно происходит. 

Конечно, один из аспектов, который меня привлекал в будущей работе — значительное увеличение зарплаты. Ну и засиживался я до утра потому, что мне интересно программирование. Оно настолько увлекало, что я не замечал, как летит время. Я даже не зевал и не пил кофе, чтобы не воткнуться головой в клавиатуру. Я просто сидел и решал поставленные задачи!

Трудоустройство и ценность GeekBrains

Уже после первой четверти нам рекомендовали начинать ходить по собеседованиям, чтобы найти хотя бы низкооплачиваемую работу или стажировку. Но я себе этого позволить не мог, так как у меня семья и дети. Начал ходить на собеседования во время третьей четверти. Написал резюме, отправил его и принялся за поиски работы. Было приятно, что один из моих любимых преподавателей Евгений Елчев, который на момент обучения был деканом факультета, позволил указать себя в резюме в разделе «Кто может вас порекомендовать». Мы, кстати, до сих пор иногда с ним общаемся.

Начал я ходить по собеседованиям. Для меня это всегда эмоциональный момент. По итогам либо воодушевление чувствуется, либо сильная подавленность. И тут важно не падать духом, искать поддержки, хладнокровно во всём разбираться. Я после неудачных собеседований писал в нашу группу в Telegram о том, какие вопросы задавали. Сообщество всегда помогало и заряжало мотивацией!

Работу нашёл быстро, сходил всего на два или три собеседования. Третья четверть у нас заканчивалась с 2018-м календарным годом, как раз тогда я договорился с работодателем. И в первый день 2019 года подписал трудовой договор.

Устроился тогда в компанию «Технократия», которая занимается аутсорсом в сфере IT. Съездил как-то раз к ним на митап в Казань. Меня, кстати, на мероприятие позвал одногруппник, который там тогда жил. А потом, когда я уже решил, что пора трудоустраиваться, то к ним и обратился. Они узнали, что я был на их митапе, это их обрадовало, и в итоге меня взяли.

Зимний отдых «технократов», тут есть и я :)

В «Технократии» я был чуть ли не единственным удалённым сотрудником, что оказалось не совсем удобно. А переезжать в Казань я не хотел. Поэтому через четыре месяца я без особых усилий перешёл в компанию Work-zilla, где все на удалёнке — сотрудники распределены и по России, и по другим странам. До сих пор работаю здесь!

Честно скажу, что обучение на факультете iOS не то что помогло в трудоустройстве, оно стало определяющим фактором. В нижнекамском институте мы изучали технологии и языки, которые уже не используются. Разве что совсем немного C++. Знания оттуда мне если и помогли, то только на время подготовительных курсов, которые длились месяц. А всё остальное — это GeekBrains и то, что я сам где-то изучал. Но GB — 90%, если не больше.

Из программы пригодилось вообще всё. Но наиболее полезным и интересным мне показалось содержание третьей четверти, в которой был курс «Профессиональное программирование». Там рассматривались вопросы, которые в первую очередь задают на собеседованиях. Если раньше нас учили просто написать программу как-нибудь, то здесь — делать это правильно, с применением лучших практик, чтобы код хорошо поддерживался. Очень часто на собеседованиях спрашивают про SOLID, и как раз там мы проходили эти принципы. Действительно всё пригодилось! Был даже курс, который сначала казался скучным, а потом в работе я возвращался к нашим методичкам и применял те знания. 

И насчёт зарплаты: GeekBrains, когда указывал её размер, не обманул! :)

Как выглядит мой рабочий день

Я работаю дома, обустроил себе кабинет. Открываю с утра компьютер, запускаю наш таймер, отслеживающий время работы для дальнейшей оплаты. Потом пишу письмо с небольшим отчётом: что делал вчера, что буду делать сегодня, какие есть проблемы. Так как мы работаем удалённо, не встречаемся, то просто пишем такие письма. Потом я беру задачу из специальной программы и начинаю её выполнять. Параллельно у меня открыт Skype, в котором мы с коллегами переписываемся. Так примерно и выглядит мой типичный день.

Мой кабинет, обустроенный на балконе

Начало и конец рабочего дня не регламентированы, есть лишь рекомендация, чтоб пересечения времени с другими сотрудниками было как можно больше. Я начинаю свой день в 8 или даже немного пораньше. Отвожу детей в садик, прихожу домой и начинаю работать. Заканчиваю в 17, так как опять нужно идти в садик :)

У меня рабочий день получается 8 часов, может, чуть-чуть больше. В офисе, насколько я представляю, люди работают меньше, чем на удалёнке. Так как можно поболтать с коллегами или опоздать на работу из-за проблем с общественным транспортом. А у меня такого нет — я просто пошёл в свою комнату и работаю. 

Чтобы мы не только работали, но и общались, друг друга знали, у нас организованы клубы. Например, есть книжный клуб: мы выбираем книгу, читаем её, а потом собираемся в Skype и обсуждаем. Время таких клубов тоже считается рабочим.

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

Пара советов абитуриентам и студентам

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

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

На GeekBrains удобно, что можно не «присутствовать» на занятии, а посмотреть запись. Но это значит у самого себя украсть время на выполнение практического задания. Лучше смотрите всё в прямом эфире, чтобы иметь возможность задать вопрос преподавателю на месте. Помню, было здорово, когда в четвёртой четверти на занятии могло присутствовать всего два-три студента и мы прямо голосом общались. 

Не ограничивайтесь учёбой в GeekBrains — пользуйтесь другими ресурсами. Но выбирайте их тщательно. Например, я раньше следил за множеством источников, но потом обнаружил, что они часто публикуют статьи людей, которые перефразируют сказанное Apple. Компания каждый год проводит конференцию для разработчиков WWDC. Там показывают и рассказывают, что есть нового в их среде разработки, технологиях. Если есть хотя бы среднее знание английского, то очень рекомендую следить. Можно смотреть и читать на их сайте. Можно в приложении для iOS или Apple TV. 

Можно почитать перевод учебника Apple. Но из-за частых обновлений я всё же рекомендую его в оригинале. Советую ещё интересный блог про язык Swift — Swift by Sundell. И, конечно, тематические разделы Хабра, Medium. Рекомендую также подкаст «Подлодка» — еженедельное аудиошоу про IT и всё, что с ним связано.

А вот несколько полезных Telegram-каналов, на которые я успел подписаться:

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

О важности непрерывного обучения и немного о планах

В нашем деле если не будешь развиваться постоянно, то очень быстро лишишься того, что есть. Правда, теперь на портал GeekBrains я захожу редко, потому что он всё-таки направлен на обучение с нуля.  

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

Если заглядывать дальше, лет на 5–10, то я не хочу ограничиваться iOS. Сейчас на острие прогресса машинное обучение, было бы здорово в эту область заглянуть — и, возможно, стать в ней специалистом. Сейчас эти профессионалы как раз самые востребованные и высокооплачиваемые, там интересные вещи происходят. И технологии машинного обучения применяются всё больше: хоть в самоуправляемых машинах, хоть в поисковой выдаче. Может, даже когда-нибудь получится сделать робота, который будет ходить по Марсу и сам всё делать, а не ждать команд с Земли.

В таком, глобальном смысле iOS-разработка немного ограничена. Да, я пишу под телефоны, это здорово: их миллионы, можно написать очень много разных программ… Но в машинном обучении потенциал гораздо шире.

Пока предпочтений в этом направлении нет — просто хочется делать то, что принесёт как можно большую пользу людям на нашей планете. Что-то масштабное — как SpaceX, например. Поэтому и подтягиваю фундаментальные знания. Читаю книгу «Совершенный код» — она очень большая, её ещё называют библией программиста. Хочу прочитать «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» от «Банды четырёх», а также «Алгоритмы. Построение и анализ», авторы — Томас Х. Кормен, Чарльз И. Лейзерсон. Пожалуй, это мой заключительный совет — на случай, если кому-нибудь тоже хочется стать универсальным солдатом в программировании.

Советуем прислушаться к совету Евгения о поступлении под Новый Год — с 1 декабре вас ждут ещё большие скидки на все наши учебные программы!

Пройти обучение

29 ноя 19, 12:45
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Быстрый старт с Java: пишем «крестики-нолики»

Перед прочтением данной статьи рекомендую ознакомиться с предыдущей, «Быстрый старт с Java: начало», поскольку ожидается, что читатель владеет материалом, изложенным в ней — знает о переменных, условиях, циклах и импорте классов. Сегодня мы углублим знания о Java, создавая игру «Крестики-нолики», которая работает в командной строке (консоли). В процессе будет рассмотрена работа с массивами, а также некоторые аспекты объектно-ориентированного программирования (нестатические методы, нестатические поля, конструктор).

Массивы

При написании игры используется массив, поэтому давайте для начала рассмотрим, что это. Массивы хранят набор однотипных переменных. Если переменная похожа на коробочку, с написанным на боку типом, именем и со значением внутри, то массив похож на блок таких коробочек. И тип, и имя у блока одно, а доступ к той или иной коробочке (значению) происходит по номеру (индексу).

В Java массивы являются объектами, их создают с помощью директивы new. При создании указываем количество элементов массива или инициализируем его набором значений. Приведенный код иллюстрирует оба варианта:

class Arrays {
    public static void main(String[] args) {
        int[] arr = new int[5];
        int[] arrInit = {1, 2, 3, 4, 5};
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i * 2 + arrInit[i];
        }
        for (int a : arr) {
            System.out.println(a);
        }
    }
}

С элементами массива можно работать как с обычными переменными, присваивая им результат выражения и читая хранимые значения. При этом в квадратных скобках указывается индекс элемента массива. Индексация в Java идёт с 0 (с нуля). Первый цикл инициализирует элементы массива arr при помощи значений из массива arrInit. Каждый массив имеет поле length, содержащее количество его элементов. Второй цикл выводит элементы массива в консоль, используя второй вариант for  без счётчика цикла.

Методы

Кроме main() класс может содержать и другие методы. Рассмотрим в качестве примера класс с методом add(), который вычисляет и возвращает сумму двух значений, переданных как параметры. Обратите внимание на тип int, который стоит перед именем метода — это тип возвращаемого значения. Две переменные в скобках — параметры. Совокупность имени и параметров называют сигнатурой метода. Вызов метода происходит по имени, в скобках указывают передаваемые значения. В методе они попадают в параметры-переменные. Команда return возвращает результат сложения этих двух переменных и обеспечивает выход из метода.

class MethodStatic {
    public static void main(String[] args) {
        int c = add(5, 6);
        System.out.println("5 + 6 = " + c);
    }
 
    static int add(int a, int b) {
        return a + b;
    }
}

Слово static означает, что метод статический. Если мы обращается к какому-либо методу из статического метода, то вызываемый тоже должен быть статическим. Вот почему add() статический — он вызывается из статического main(). Использование статических методов — скорее исключение, чем правило, поэтому давайте посмотрим как сделать add() нестатическим.

Решение одно — создать объект на основании класса. И затем вызывать метод через точку после имени объекта. В этом случае метод может быть нестатическим. Представленный ниже код это иллюстрирует.

class MethodNotStatic {
    public static void main(String[] args) {
        MethodNotStatic method = new MethodNotStatic();
        int c = method.add(5, 6);
        System.out.println("5 + 6 = " + c);
    }
 
    int add(int a, int b) {
        return a + b;
    }
}

Поля класса

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

class FieldExample {
    int a;
 
    public static void main(String[] args) {
        FieldExample field = new FieldExample();
        field.a = 12;
        System.out.println("a = " + field.a);
        System.out.println(field.getA());
        field.printA();
    }
 
    int getA() {
        return a;
    }
 
    void printA() {
        System.out.println(a);
    }
}

Приведённый выше код иллюстрирует работу с нестатическим полем int a. Описание полей принято размещать первыми в коде класса, затем идут описания методов. Возможность обращаться к полю (запись, чтение) мы получаем только после создания объекта. Также видно, что это поле доступно во всех нестатических методах объекта, а в статическом main() — через точку после имени объекта.

Крестики-нолики. Шаблон класса

Приступим к написанию кода игры. Начнём с шаблона класса и определения нужных полей. Именно это содержит приведённый ниже код. Первые две строки — импорт классов. Первыми в теле класса идут описания полей, затем методов. Метод main() используется для создания объекта (так как поля и методы нестатические) и вызова метода game() с игровой логикой.

import java.util.Random;
import java.util.Scanner;
 
class TicTacToe {
    final char SIGN_X = 'x';
    final char SIGN_O = 'o';
    final char SIGN_EMPTY = '.';
    char[][] table;
    Random random;
    Scanner scanner;
 
    public static void main(String[] args) {
        new TicTacToe().game();
    }
 
    TicTacToe() {
        // конструктор: инициализация полей
    }
 
    void game() {
        // игровая логика
    }
 
    // дополнительные методы
}

В качестве полей используем три символьные константы: SIGN_X, SIGN_O и SIGN_EMPTY. Их значения нельзя изменять, об этом говорит модификатор final. Двумерный символьный массив table будет нашим игровым полем. Потребуется также объект random для генерации ходов компьютера и scanner для ввода данных от пользователя.

Имена методов принято писать с маленькой буквы. Однако в коде мы видим метод TicTacToe() — есть ли тут нарушение? Нет, поскольку этот метод особенный и в объектно-ориентированном программировании называется конструктор. Конструктор вызывается сразу после того, как объект создан. Его имя, как видим, должно совпадать с именем класса. Мы используем конструктор для инициализации полей.

TicTacToe() {
    random = new Random();
    scanner = new Scanner(System.in);
    table = new char[3][3];
}

Игровая логика

Игровая логика располагается в методе game() и базируется на бесконечном цикле while. Ниже в фрагменте кода последовательность действий описана через комментарии:

// инициализация таблицы
while (true) {
    // ход человека
    // проверка: если победа человека или ничья:
    //    сообщить и выйти из цикла
    // ход компьютера
    // проверка: если победа компьютера или ничья:
    //    сообщить и выйти из цикла
}

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

void game() {
    initTable();
    while (true) {
        turnHuman();
        if (checkWin(SIGN_X)) {
            System.out.println("YOU WIN!");
            break;
        }
        if (isTableFull()) {
            System.out.println("Sorry, DRAW!");
            break;
        }
        turnAI();
        printTable();
        if (checkWin(SIGN_O)) {
            System.out.println("AI WIN!");
            break;
        }
        if (isTableFull()) {
            System.out.println("Sorry, DRAW!");
            break;
        }
    }
    System.out.println("GAME OVER.");
    printTable();
}

Реализация вспомогательных методов

Пришло время написать код методов, вызываемых в game(). Самый первый, initTable(), обеспечивает начальную инициализацию игровой таблицы, заполняя её ячейки «пустыми» символами. Внешний цикл, со счетчиком int row, выбирает строки, а внутренний, со счётчиком int col, перебирает ячейки в каждой строке.

 
void initTable() {
    for (int row = 0; row < 3; row++)
        for (int col = 0; col < 3; col++)
            table[row][col] = SIGN_EMPTY;
}

Также потребуется метод, отображающий текущее состояние игровой таблицы printTable().

void printTable() {
    for (int row = 0; row < 3; row++) {
        for (int col = 0; col < 3; col++)
            System.out.print(table[row][col] + " ");
        System.out.println();
    }
}

В методе turnHuman(), который позволяет пользователю сделать ход, мы используем метод nextInt() объекта scanner, чтобы прочитать два целых числа (координаты ячейки) с консоли. Обратите внимание как используется цикл do-while: запрос координат повторяется в случае, если пользователь укажет координаты невалидной ячейки (ячейка таблицы занята или не существует). Если с ячейкой всё в порядке, туда заносится символ SIGN_X — «крестик».

void turnHuman() {
    int x, y;
    do {
        System.out.println("Enter X and Y (1..3):");
        x = scanner.nextInt() - 1;
        y = scanner.nextInt() - 1;
    } while (!isCellValid(x, y));
    table[y][x] = SIGN_X;
}

Валидность ячейки определяет метод isCellValid(). Он возвращает логическое значение: true — если ячейка свободна и существует, false — если ячейка занята или указаны ошибочные координаты.

boolean isCellValid(int x, int y) {
    if (x < 0 || y < 0 || x >= 3|| y >= 3)
        return false;
    return table[y][x] == SIGN_EMPTY;
}

Метод turnAI() похож на метод turnHuman() использованием цикла do-while. Только координат ячейки не считываются с консоли, а генерируются случайно, при помощи метода nextInt(3) объекта random. Число 3, передающееся как параметр, является ограничителем. Таким образом, генерируются случайные целые числа от 0 до 2 (в рамках индексов массива игровой таблицы). И метод isCellValid() снова позволяет нам выбрать только свободные ячейки для занесения в них знака SIGN_O — «нолика».

void turnAI() {
    int x, y;
    do {
        x = random.nextInt(3);
        y = random.nextInt(3);
    } while (!isCellValid(x, y));
    table[y][x] = SIGN_O;
}

Осталось дописать два последних метода — проверка победы и проверка на ничью. Метод checkWin() проверяет игровую таблицу на «победную тройку» — три одинаковых знака подряд, по вертикали или горизонтали (в цикле), а также по двум диагоналям. Проверяемый знак указан как параметр char dot, за счёт чего метод универсален - можно проверять победу и по «крестикам» и по «ноликам». В случае победы возвращается булевское значение true, в противном случае — false.

boolean checkWin(char dot) {
    for (int i = 0; i < 3; i++)
        if ((table[i][0] == dot && table[i][1] == dot &&
                         table[i][2] == dot) ||
                (table[0][i] == dot && table[1][i] == dot &&
                                  table[2][i] == dot))
            return true;
        if ((table[0][0] == dot && table[1][1] == dot &&
                  table[2][2] == dot) ||
                    (table[2][0] == dot && table[1][1] == dot &&
                      table[0][2] == dot))
            return true;
    return false;
}

Метод isTableFull() во вложенном двойном цикле проходит по всем ячейкам игровой таблицы и, если они все заняты, возвращает true. Если хотя бы одна ячейка ещё свободна, возвращается false.

boolean isTableFull() {
    for (int row = 0; row < 3; row++)
        for (int col = 0; col < 3; col++)
            if (table[row][col] == SIGN_EMPTY)
                return false;
    return true;
}

Теперь осталось собрать все эти методы внутри TicTacToe. Последовательность их расположения в теле класса не важна. А после этого можно попробовать сыграть с компьютером в крестики-нолики.

Заключение

На всякий случай прилагаю мой telegram — @biblelamp. Если вас заинтересовала тема, рекомендую почитать «Java-программирование для начинающих» Майка МакГрата и «Изучаем Java» Кэти Сьерра и Берт Бейтс. Также напоминаю ссылку на мою предыдущую статью, где мы начали знакомство с Java.

Если язык Java вас заинтересовал — приглашаем на факультет Java-разработки. Если ещё не совсем уверены — посмотрите истории успеха наших Java-выпускников:

Пройти обучение

28 ноя 19, 11:13
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Обучение Python для школьников

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

Что такого особенного в вашем курсе?

Главная особенность курса — в цели обучения. Школьники здесь не готовятся на должность middle-разработчика, а, скорее, знакомятся с миром IT, разработки. Поэтому учебный материал не только проще подается, но иначе выстроен. Яркие презентации, лаконичные методички, облегченные практические задания — все призвано подстёгивать интерес к учебе. 

При этом в программе учтены ошибки и трудности, через которые проходит начинающий программист вне зависимости от возраста.

Что нужно знать и уметь к началу занятий?

Сразу скажем: знаний о разработке не нужно, мы учим программированию с нуля, с установки Python и среды разработки. А вот что точно понадобится:

  • Базовые навыки работы на компьютере. Надо уметь устанавливать и запускать программы, выходить в интернет, создавать и копировать файлы.
  • Математика на уровне начальной школы. Код всегда связан с логикой и вычислениями.
  • Английский язык на базовом уровне. В коде мы используем английские слова — их надо уметь запоминать. Сюда же относится умение печатать в американской раскладке.

Остальному научит Алексей Петренко — один из самых опытных наших преподавателей, декан факультета Python в GeekUniversity.

Что будут создавать на курсе?

Основным проектом учеников будет сайт-визитка. Это хорошее начало для развития в мире IT. Такой проект позволяет не только изучить Python, но и параллельно вникнуть сразу в несколько других языков и популярных инструментов — HTML, CSS, JavaScript, SQL, Bootstrap, Flask. Все это будет освоено на базовом уровне, таким образом сформируется первый стек технологий.
 
Преимущество сайта-визитки ещё и в том, что такой результат можно легко увидеть и оценить. Это как игрушка, которую делаешь сам — играть с ней вдвойне приятно и друзьям всегда показать можно.

А как с нагрузкой?

Курс разработан специально для детей и нагрузка здесь ниже, чем на взрослых занятиях в GeekBrains. Уроки-вебинары длительностью 1,5 часа проходят раз в неделю. Каждый урок разбит на две половины, между которыми предусмотрен перерыв. Мы постарались найти баланс так, чтобы ребёнок нормально ознакомился с новой технологией и при этом не успел устать или заскучать.

Домашние задания составлены так, чтобы ученик получал видимый, практический результат без долгого сидения за монитором. На первом уроке преподаватель договаривается с ребятами, что работы по курсу они готовят только после основных школьных домашних заданий и сдают до выходных. То есть на выполнение заданий дается пять дней, в течение которых ученику нужно найти примерно 1-3 часа на «домашку по питону».

При такой нагрузке, помимо курсов GeekSchool, у ребят остается время и на другие дополнительные занятия, отдых и развлечения.

По запросу «сайты, созданные с Python» Google выдает множество топовых ресурсов — включая самого себя.

Профессиональная сфера разработки быстро развивается. Насколько актуальные вещи преподаете вы?

В обучении мы используем востребованные веб-технологии, с которыми даже неопытный разработчик может получить привлекательный результат. На этом фундаменте можно легко переходить к более сложным вещам. Расскажем чуть подробнее об инструментах.

  • Flask — минималистичный по своей концепции фреймворк, который позволяет пятью строчками кода создать веб-версию «Нello, world!». Весь проект можно собирать как конструктор, из готовых компонентов. Простота в освоении и отсутствие лишнего — вот за что мы выбрали Flask.
  • Bootstrap — набор инструментов и заготовок, ускоряющих создание веб-страниц. Вместо того чтобы месяц углубляться в тонкости CSS и JavaScript, с Bootstrap мы просто берем шаблон и получаем отличное динамическое меню или стильную анимированную кнопку для сайта. Быстрые результаты мотивируют новичков.
  • Jinja2 — шаблонизатор, полезный при создании веб-приложений на Flask. По шаблону генерирует Python-код, который можно тут протестировать в «песочнице».
  • SQLite — база данных, реализованная в одном файле. Идеальна для первого знакомства с возможностями современных СУБД, не требует сложной установки и настройки.

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

А если ребенку не понравится Python? Получается, всё было зря?

Совсем нет. Знания курса в любом случае могут пригодиться ещё не раз. Основы программирования, с которыми познакомятся ученики, являются общими для большинства современных языков. Понятия переменной, ветвления, цикла полезны не только программисту, но также тестировщику, да и любому IT-специалисту в принципе.

В курсе мы затронем HTML, CSS и JavaScript. Если ребенку понравится это, он сможет заняться версткой сайтов и frontend-разработкой. Если приглянется SQL, на котором пишут запросы к базам данных, ему будет с чего начать учиться на аналитика. В подростковом возрасте есть время на изучение разных языков и технологий. Остается пробовать и выбирать.

Про сайт-визитку понятно, а что ещё будет уметь ребёнок после курса?

Давайте сведём все вместе. Выпускник нашего курса Python для школьников сможет создавать:

  • Любые простые сайты на несколько страниц. Например, сайт автосервиса дяди Пети или блог, посвященный любимому коту. 
  • Небольшие веб-приложения, в том числе многопользовательские. Вполне сможет реализовать на сервере игры типа «крестики-нолики», «морской бой» и играть с другом через интернет.
  • Кроссплатформенные проекты. То есть сайты и веб-приложения, доступные отовсюду — с компьютеров, мобильных устройств, телевизоров и игровых консолей.

А как развиваться после курса?

Главное — не останавливаться, иначе знания могут уйти в пассив и стереться из памяти. Можно перейти к взрослым курсы — у нас есть бесплатный интенсив по Python, а также программы подготовки junior- и middle-специалистов. Помимо веб-разработки c Python, можно познакомиться с близкими IT-направлениями, которые были затронуты в время курса — возможно, они вызовут больший энтузиазм.

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

Любовь к программированию, которая проявится в подростковом возрасте, спустя 5-10 лет может привести на работу мечты — с большой зарплатой, карьерными перспективами и радостью от любимого дела.

Как записаться на курс?

Достаточно просто оставить заявку на странице. Новый поток стартует 29 ноября.

Пройти обучение

20 ноя 19, 16:13
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Быстрый старт с Java: от знакомства до вашей первой игры 

Эта статья рассчитана на новичков в программировании. Её цель — объяснить азы языка Java (классы, методы, компиляция, байт-код, JVM, переменные, условия, циклы, импорт). Этот материал поможет:

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

Java Development Kit (JDK)

Для работы с Java необходимо скачать, установить и настроить Java Development Kit (JDK) — пакет программ и утилит для разработчика. Он бесплатно предоставляется компанией Oracle.
В строку поиска Google вводим запрос “jdk 8 download” и в первой же строке поисковой выдачи видим ссылку на страницу загрузки на oracle.com. Листаем вниз, щёлкаем Accept License Agreement — соглашаемся с лицензией. Выбираем пакет в колонке Download, который соответствует вашей операционной системе и её разрядности (32 или 64 бита). Для скачивания нужно будет зарегистрироваться на сайте. Скачиваем и устанавливаем JDK. При выборе пакетов и папки JDK рекомендую отказаться от Public JRE и сократить имя папки до jdk1.8.

Счастливым обладателям Windows потребуется также настройка системных переменных. Как их найти: Панель управления → Система → Дополнительные параметры системы → Вкладка «Дополнительно» → кнопка «Переменные среды», второе окошко сверху. В нем надо создать переменную JAVA_HOME и изменить (дополнить) Path (для этого используются кнопки «Создать» и «Изменить». Значение для переменной JAVA_HOME содержит путь к папке JDK. Переменную Path дополняем значением %JAVA_HOME%\bin. Обратите внимание, что список путей разделяется точкой с запятой (;). Инструкция есть также на сайте Oracle.

JDK содержит много утилит, но нам потребуется только компилятор (javac) и виртуальная машина Java — JVM (java).

Проверить правильность установки и настройки можно в командной строке (на Windows: Win + R → cmd) или в терминале (Linux, Mac), набрав следующие команды:

javac -version
java -version

В качестве альтернативы можно использовать онлайн-JDK вместе с редактором, например на сайте Repl.it.

Написание кода

Писать исходный код можно в любом текстовом редакторе. А компиляцию и запуск проводить в командной строке (терминале). Но удобнее будет работать в редакторе с подсветкой синтаксиса и плагином, автоматизирующим компиляцию и запуск.

Для Windows хорошим выбором будет Notepad++ с плагином NppExec. Подробно о его настройке можно прочитать в статье Виктора Темпалова  «Компилируем и запускаем Java-файлы из Notepad++». Для Linux и Мас есть другие текстовые редакторы, например Atom или Sublime Text.

Hello, world!

При изучении нового языка писать программу, выводящую «Hello, world!», — это традиция. Она возникла в 1978 году, с выходом в свет книги «Язык программирования С» Брайана Кернигана и Денниса Ричи.

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

Код начинается с ключевого слова class. Java-программы состоят из классов — это «кирпичики» приложения. В реальных приложениях их могут быть десятки, сотни и тысячи. Затем пишется имя класса — HelloWorld. Имена классов принято писать в стиле CamelCase (все слова слитно, каждое с заглавной буквы). Классам, как и другим сущностям — методам, полям и переменным — рекомендуется давать мнемонические, «говорящие» имена.

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

В нашем классе только один метод — main(). Он особенный, его часто называют стартовым. Когда виртуальная машина Java получает класс для исполнения, она ищет в нём метод main. Если находит — выполняет код, который содержит метод. Если нет — выдаёт сообщение об ошибке. Важно, чтобы метод main() имел строго определённую сигнатуру: был публичным (public), статическим (static), не возвращающим никакого значения (void), с параметром в виде массива строк (String[] args). В противном случае виртуальная машина его просто не найдёт.

Наш метод main() содержит лишь одну строку, которая выводит в консоль текст "Hello, world!".

Перед компиляцией сохраняем написанный код в файл. Имя файла должно соответствовать имени класса с точностью до регистра символов (Java — регистрозависимый язык). Затем открываем командную строку (или терминал) и вызываем сначала компилятор (javac), а потом виртуальную машину JVM (java).

C:\Users\User>javac HelloWorld.java
C:\Users\User>java HelloWorld
Hello, world!

После компиляции возникнет бинарный файл HelloWorld.class, содержащий байт-код. Имя этого файла (без расширения) передаётся как параметр при вызове виртуальной машины. В результате видим строку «Hello, world!» — это результат выполнения программы.

Переменные

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

  • запись значения в переменную (или присвоение значения);
  • чтение значения из переменной. 

В Java перед использованием переменную нужно обязательно объявить, указав тип и имя, поскольку Java — язык со строгой и статической типизацией. Попытка использовать переменную без объявления приведёт к ошибке компиляции. По типу переменные могут быть простыми (числа, символы, логические значения) или ссылочными (массивы, строки, любые другие объекты). В Java есть восемь простых типов (byte, int, short, long, float, double, boolean, char) и бесконечное количество ссылочных.

В примере ниже мы видим объявление двух переменных целого типа (int). Причём переменная second инициируется при объявлении. Затем переменной first присваивается результат выражения, в котором присутствует переменная second. В результате выполнения программы в консоль будут выведены значения обеих переменных: 35 и 10.

class Variables {
    public static void main(String[] args) {
        int first;
        int second = 10;
        first = second * 3 + 5;
        System.out.println(first);
        System.out.println(second);
    }
}

Имя переменной может содержать буквы и цифры, знак подчёркивания и $. Имя не должно начинаться с цифры. В профессиональной разработке в именах переменных используют только буквы. Имя должно явно указывать на назначение переменной. Например: countString — счётчик строк, errorSign — признак ошибки. Рекомендуется избегать однобуквенных имён — за исключением временных переменных (существующих в рамках цикла или небольшого кодового блока).

Проверка условий

Любой язык программирования высокого уровня позволяет изменять порядок выполнения программы в зависимости от заданного условия. В Java для этого используется конструкция if. После этого ключевого слова в скобках записывается логическое выражение, затем в фигурных скобках — группа команд. Если результат логического выражения — true (истина), то эта группа команд выполняется, если false (ложь) — нет.

class ComparisonShort {
    public static void main(String[] args) {
        int i = 10;
        if (i == 10) {
            System.out.println("i = 10");
        }
    }
}

Результат этого примера — строка “i = 10” в консоли, так как результат логического выражения (проверка на равенство) будет true.

В качестве знаков сравнения допустимы: <, <=, >, >=, ==, !=. Добавив ключевое слово else, получаем полную форму оператора сравнения.

class ComparisonFull {
    public static void main(String[] args) {
        int i = 10 + 2;
        if (i == 10) {
            System.out.println("i = 10");
        } else {
            System.out.println("i != 10");
        }
    }
}

Выполнив эту программу, мы увидим в консоли сообщение “i != 10”, так как результат сравнения значения переменной i и цифры 10 будет false. Поэтому выполнится набор команд в фигурных скобках после слова else.

Циклы

Циклы предназначены для повторения группы команд. Java позволяет использовать два вида циклов:

  • с определённым количеством итераций: for;
  • без определенного количества итераций: while и do-while.
class CycleFor {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
        }
    }
}

Запустив этот пример, мы увидим в консоли колонку чисел от 0 до 4. Это результат работы классического цикла for со счётчиком. В круглых скобках три параметра цикла, разделённые точкой с запятой: объявление и инициализация счётчика, проверка условия продолжения цикла, действие после каждой итерации. В фигурных скобках — тело цикла. В нашем случае это команда, выводящая значение счётчика i в консоль.

Когда будем писать игру, используем циклы while и do-while — там и увидим их работу на практике. Пока достаточно сказать, что их синтаксис проще for, а тело цикла повторяется до тех пор, пока логическое выражение в круглых скобках после while возвращает true.

Пример ниже иллюстрирует вторую форму цикла for — без счётчика. Такой вариант удобен при переборе элементов массива или списка.

class CycleForeach {
    public static void main(String[] args) {
        int[] arr = {5, 4, 3, 2, 1};
        for (int a : arr) {
            System.out.println(a);
        }
    }
}

Импорт и использование классов

Один из важных принципов программирования — DRY: Don’t Repeat Youself (не повторяйся). Разработчик должен уметь использовать то, уже создано, отлажено и работает.

Java поставляется с набором packages (пакетов). Они содержат скомпилированные классы, сгруппированные по тематике. На неё указывает имя пакета: java.io, java.util, java.net и так далее.

В игре нам потребуется случайное число от 0 до 9. Писать генератор случайных чисел незачем, так как в пакете java.util есть готовый класс Random. Чтобы использовать класс из пакета, его нужно импортировать. Строки с директивами импорта располагаются в самом начале файла класса.

import java.util.Random;

Создадим объект на основании класса, чтобы можно было вызвать нужный метод. Слева от знака присваивания (=) объявляем ссылочную переменную (объект) random типа Random. Справа создаём объект с помощью директивы new.

Random random = new Random();

Вызываем метод через точку после имени объекта: random.nextInt(10). Цифра 10 ограничивает диапазон генерируемых чисел (от 0 до 9). В результате получим строку из 30 случайных чисел. Запустите программу несколько раз и обратите внимание, что последовательность чисел не повторяется.

import java.util.Random;
 
class RandomInt {
    public static void main(String[] args) {
        Random random = new Random();
        for (int i = 0; i < 30; i++) {
            System.out.print(random.nextInt(10) + " ");
        }
    }
}

Игра «Угадай число»

Мы узнали достаточно, чтобы написать игру «Угадай число». В ней компьютер «загадывает» целое число от 0 до 9, а человек должен угадать его — есть три попытки.

Создадим класс GuessTheNumber с методом main(), импортируем нужные нам классы и добавим соответствующие объекты. Класс Scanner обеспечит чтение чисел с консоли (System.in — консоль).

import java.util.Scanner;
import java.util.Random;
 
class GuessTheNumber {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner sc = new Scanner(System.in);
    }
}

Объявим и инициируем три переменные: счётчик попыток count, для чтения числа с консоли — guess, для хранения загаданного числа — number.

int count = 0;
int guess = -1; 
int number = random.nextInt(10);

Опишем основной игровой цикл, используя while. В цикле запрашиваем число с консоли, сравниваем с загаданным. В случае несовпадения выводим подсказку и увеличиваем счётчик попыток на 1.

while (count < 3 && guess != number) {
    System.out.print("Guess the number (0..9): ");
    guess = sc.nextInt();
    if (number != guess) {
        System.out.println("Your number is " +
            ((guess > number)? "greater" : "less"));
        count++;
    }
}

Тело цикла while повторяется, пока логическое значение в скобках возвращает true. Таким образом наш цикл будет повторяться, пока значение счётчика попыток меньше 3 и число не отгадано. Обратите внимание на конструкцию, которая позволяет выбрать одно из двух значений согласно условию в скобках. Это тернарный оператор. Если условие в скобках true, то возвращается значение слева от двоеточия, если false — справа.

(guess > number)? "greater" : "less"

Остаётся добавить строку с выводом результата игры (победа или проигрыш) после цикла — тут снова используется тернарный оператор. Текст работающей программы выглядит так:

import java.util.Scanner;
import java.util.Random;
 
class GuessTheNumber {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner sc = new Scanner(System.in);
        int count = 0;
        int guess = -1;
        int number = random.nextInt(10);
        while (count < 3 && guess != number) {
            System.out.print("Guess the number (0..9): ");
            guess = sc.nextInt();
            if (number != guess) {
                System.out.println("Your number is " +
                    ((guess > number)? "greater" : "less"));
                count++;
            }
        }
        System.out.println("You " +
            ((guess == number)? "WIN!" : "Lose: " + number));
    }
}

Сохраняем программу в файл GuessTheNumber.java, компилируем (javac), вызываем JVM (java) — и пробуем выиграть у компьютера.

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

import java.util.Random;
import java.util.Scanner;
 
class GuessTheNumber {
    public static void main(String[] args) {
        Random random = new Random();
        Scanner sc = new Scanner(System.in);
        do {
            //
            // Вставьте фрагмент, который должен повторяться
            //
            System.out.println("Repeat game? Yes - 1, No - 0");
        } while (sc.nextInt() == 1);
    }
}

Обратите внимание, что тело цикла do-while повторяется на тех же условиях, что и тело цикла while: логическое выражение в скобках должно быть true.

Заключение

На всякий случай прилагаю мой telegram — @biblelamp. Если вас заинтересовала тема, рекомендую почитать «Java-программирование для начинающих» Майка МакГрата и «Изучаем Java» Кэти Сьерра и Берт Бейтс. В следующих статьях мы продолжим начальное изучение Java на примере создания других игр. Следите за блогом!

Если язык Java вас заинтересовал — приглашаем на факультет Java-разработки. Если ещё не совсем уверены — посмотрите истории успеха наших Java-выпускников:

Пройти обучение

15 ноя 19, 16:33
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Тренды среди языков программирования в 2019 году

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

Популярные языки программирования

Начнём с традиционно популярных языков, Как известно, любой распространенный язык имеет в запасе минимум 10 лет, чтобы специалисты в нём оставались востребованными на рынке.
Согласно рейтингам авторитетного портала PYPL, основывающихся на популярности поисковых запросах Google в разных странах, самым востребованным языком сегодня является Python. Он обошёл Java ещё летом прошлого года, и количество запросов с тех пор увеличилось на 4,5%.

По версии портала TIOBE, учитывающего не только Google, а все поисковые системы, первое место давно и уверенно удерживает как раз Java. При этом статистика этого портала подтверждает, что языки живут в противофазе: Java за год потерял 0,9%, в то время как Python набрал 1,93 пункта.

Известная софтверная компания JetBrains на своём официальном сайте опросила 7 тысяч разработчиков. Результаты следующие: JavaScript первый, на втором месте Java (оставим HTML/CSS и SQL за скобками), на третьем Python. При этом у Python вновь лучший прирост аудитории за год — 9 %.

Вот что о феномене Python говорит преподаватель факультета искусственного интеллекта GeekUniversity Сергей Ширкин:

«Python очень прост в освоении – можно быть новичком в программировании и уже писать на нём рабочие программы. В своё время это подошло Data Science, потому что большую часть контингента в этой сфере составляли математики и физики, но не профессиональные программисты. В итоге самые популярные библиотеки для работы с большими данными – на Python.

Единственное, что ограничивает язык – низкая скорость работы программ, особенно если мы сравниваем с C/C++. При этом в Python есть такие библиотеки, как numpy, которая, благодаря тому, что часть кода написана на C и Fortran, почти не уступают в производительности.

Сейчас Python проникает в область квантовых вычислений и квантового машинного обучения. Сейчас уже для этого есть библиотеки Qiskit, Cirq, PennyLane, дальше – больше. Здесь уже скорость исполнения программ на Python не важна, ведь все операции проходят на квантовом компьютере, быстродействие которого на порядки выше».

Языки программирования «второго эшелона»

При взгляде на рейтинг PYPL также бросается в глаза взлёт Kotlin: четыре позиции за год и итоговое 12 место.  Пользователи на сайте JetBrains отдали языку 9 место. Причин взлёта две.

Первая — это обновление языка в конце лета. Тогда были устранены многие проблемы и расширена функциональность, с сопутствующим введением всех новых фичей в IntelliJ IDEA – популярнейшую среду программирования. Вторая причина — в прошлом году язык Kotlin получил статус предпочтительного для разработки Android-приложений.

Вот что думает об этом декан факультета Android-разработки GeekUniversity Александр Аникин:

«Если в прошлом году Kotlin стал предпочтительным для Android, то в этом, по сути, главным. Теперь весь новый код, библиотеки, обновления и примеры будут писаться разработчиками платформы на Kotlin. Для этого есть 3 основные причины:

  • Юридический уход от Java. Не секрет, что Oracle в последние годы всё больше ограничивает бесплатное использование Java, что больше всего, пожалуй, затрагивает Android.
  • Полная взаимозаменяемость языков. Можно легко перейти с одного языка на другой не изменив ни строчки кода.
  • Kotlin = Java 2.0. Это современный язык, имеющий те же возможности, что и родитель, но улучшенный с учётом текущих тенденций.

Вообще Kotlin сегодня видится языком без сдерживающих факторов. На нём можно писать не только мобильные приложения, но и серверную часть, приложения для десктопов и многое другое. Он быстро развивается, его разработчики учитывают критику, следят за тенденциями. Поэтому ближайшие годы популярность Kotlin будет неизменно расти».

Другой заметный язык – Rust, который также выделяется в рейтинге PYPL. Год назад мы узнали о том, что это один из самых любимых языков у посетителей портала Stack Overflow. Rust очень медленными шагами идёт к замещению C/C++ в клиентских и серверных веб-приложениях. Этим он обязан популярному формату инструкций для виртуальной машины WebAssembly, поддерживающему все три вышеназванных языка.

Кроме того, он поддерживает и Go — язык к которому также стоит присмотреться. Согласно JetBrains, у Go ожидается самый большой прирост популярности в ближайшие 12 месяцев.

Менее распространенные языки программирования

У языков программирования, не входящих в топы рейтингов, очень сложно оценить потенциал. Количество поисковых запросов, как правило, плохо отражает реальность – из-за низких цифр в статистику вмешивается специфика региона и местных компаний. Из тех, на которые стоит обратить внимание гикам (а больше это, пожалуй, никому и не надо): Elixir, Dart и Ballerina.

Если о первых двух вы наверняка что-то слышали и читали, — а Dart даже многие успели похоронить — то о последнем стоит сказать чуть подробнее. Ballerina – это молодой и крайне интересный язык. Его синтаксис — комбинация из Java, Python, JavaScript и Go, со статической типизацией. Основные операции имеют привычный вид, поэтому на обучение не уйдёт много времени. Но куда интересней в Ballerina другое — направленность на интеграцию. В современном вебе, где постоянно взаимодействуют сотни серверов и сервисов, ценность языков с модулями, легко обеспечивающими это, крайне высока. Как альтернативу Ballerina можно взять на заметку Pulumi и Dark – будущее веба без языков инфраструктуры невозможно.

Однако, несмотря на все прелести и перспективы этих языков, браться за их изучение новичкам не следует – лишь представителей первого и отчасти второго разделов стоит рассматривать как фундамент современного программиста. Знание Elixir, Dart, Ballerina или Pulumi поможет понять, что у любой задачи есть множество решений.

Подробней об изучении разных языков программирования можно почитать на страницах факультетов Geekbrains — Python, Go, Java, а также веб-, iOS-, Android-разработки. Удачного выбора!

Пройти обучение

13 ноя 19, 12:36
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Факультет тестирования ПО — короткая дорога в IT

 

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

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

Теперь историй успеха станет гораздо больше — ведь факультет, в отличие от отдельных курсов:

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

Программа факультета разработана так, что студентом может стать человек совершенно без подготовки. А выпускник факультета может работать:

  • мануальным тестировщиком веб-приложений (устроиться на эту должность реально уже после I четверти);
  • инженером по автоматизации тестирования на Java;
  • мануальным тестировщиком мобильных приложений;
  • инженером по автоматизации тестирования мобильных приложений на Java.

Подробнее о факультете и его программе рассказал методист образовательных программ GeekBrains Александр Скударнов.

— Александр, чем руководствовались при составлении программы факультета? Что лежит в ее основе?

— Затрагиваемые темы и временные пропорции во многом соответствуют программе международной сертификации по тестированию — ISTQB® Certified Tester. Базовый уровень. Конечно, студенты, желающие получить этот сертификат, должны понимать, что это как знать английский и сдавать IELTS или TOEFL — перед экзаменом нужно отдельно подготовиться к его формату.

— Чем обучение на факультете отличается от того, что предлагают конкуренты?

— Не видел на рынке каких-то очень хороших продуктов. Где-то программы — фактически наш факультет, но за три месяца. Не знаю, как можно в человека впихнуть столько информации за такое время. Если у нас нагрузка примерно 10 часов в неделю, то там 30 будет? :) У нас все довольно размеренно, аккуратно, без перегибов — чтобы все усвоилось.

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

— Какая будет практика?

— Будет исследовательское тестирование работающих продуктов, когда нет никакой документации и требований, а ты просто ищешь баги «на ощупь». Также я сейчас общаюсь с несколькими компаниями, которые будут давать свои продукты на тестирование. Пока NDA подписано только с одной, но скоро их количество, вероятно, увеличится до трех. 

Будет работа в группах со студентами с других факультетов: они готовят курсовые проекты — пишут свои приложения, и там тоже нужны тестировщики. Студенты будут присоединяться к полноценным командам, где есть разработчики, дизайнеры, продакт-менеджеры. Там они прокачают soft skills и получат опыт непосредственного участия в разработке продукта с нуля. 

Еще планируем создать свою «песочницу» — «игрушечный» сайт, куда можно заводить свои баги.

— Скажешь что-то мотивирующее напоследок? :)

— Ниша тестирования огромная! Вот я зашел на HeadHunter и вбил «тестирование ПО» по Москве — он выдал 5 000 вакансий. По России — 15 000 вакансий. Просто для понимания, насколько это крутая возможность, чтобы сменить профессию и войти в сферу IT. 

Еще есть такой миф, что тестировщики — это те, кто какие-то баги ищет, лазит в HTML-верстке. Но плох тестировщик, который хочет просто «ломать систему», искать баги, а не смотреть чуть выше, чуть шире — выступать с позиции силы. 

А ведь тестировщики имеют очень большое влияние в компании. Хороший тестировщик — специалист по качеству продукта. Он должен не только найти баг, но и дать рекомендации коллегам, чтобы такие ошибки не повторялись в будущем. Хороший senior уже отстраивает бизнес-процессы — это человек, который действительно знает продукт полностью! В общем, плох тестировщик, который не хочет стать инженером по качеству продукта!

А еще факультет тестирования ПО — это бренд. Я как методист понимаю, что мы не можем облажаться, и это для меня стимул привлекать лучшие ресурсы.

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

Ручное тестирование

Раиль Закиров, Senior Software Validation / Integration Engineer в международном проекте, работал в EPAM и группе компаний FIX. Имеет два высших образования — оба в нефтегазовой сфере. Отработал несколько лет в нефтяной отрасли, разочаровался в ней и сменил профессию. 

— Раиль, чему научите студентов?

— Базовой теории тестирования — основным инструментам, которые необходимо знать, а также понимать, для чего они. Объясню, как пользоваться литературой и достоверными источниками, а не первыми строчками результата запроса к поисковику. А еще — как задавать правильные вопросы. Ведь умение их формулировать очень важно не только в этой работе, но и в жизни тоже. 

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

Подготовлю студентов к вопросам, которые задают на собеседовании. Хочу научить их спокойнее относится к результатам первых интервью и лучше готовиться. На начальных этапах им нужна поддержка. Очень важно сказать, что первые отказы или сложные собеседования — это НОРМАЛЬНО. У меня самого в начале пути были такие интервью: во время одного хотелось просто повесить трубку и выбежать из квартиры, чтобы как-то снять стресс — настолько тяжело было в первые разы. 

— Как сделаете занятия интересными?

— Студентам интересно, КАК все происходит в реальности. Скучно слушать сухие лекции. Интересны примеры из реальных проектов. Поэтому я буду давать информацию из практического опыта. Расскажу, с какими ошибками я столкнулся, когда менял профессию. Где были провалы, где успехи. Как не разочаровываться при неудачах или малых результатах. Сколько времени уходит на разные этапы в работе и на что стоит обратить внимание в начале пути. Это все интересно студентам — особенно тем, кто меняет профессию. 

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

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

— К чему стремиться студентам? Как относиться к учебе, чтобы все получилось?

— Хороший инженер по качеству ПО — это специалист, которому не все равно. Не обязательно иметь знания в огромном количестве инструментов — инструмент можно выучить за один-два дня или месяца, в зависимости от сложности. Гораздо сложнее встретить ответственного человека или же воспитать в сотруднике ответственное отношение и чувство вовлеченности в процесс. 

Мне нравится подход в европейских компаниях — там очень скрупулезно относятся к тому, насколько хорошо вольется потенциальный инженер в команду. Будет ли он ее дополнять или же вносить разлад? Технические моменты тоже важны, все-таки на серьезные проекты нужны технически подкованные специалисты, но soft skills не менее важны (на мой взгляд, даже более). 

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

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

Владлена Бонк, работает тестировщиком три года, получила опыт в геймдеве, банковской сфере, ip-телефонии. Сейчас работает с энергетикой и промышленностью. Закончила ОмГУ им. Достоевского по специальности «экскурсоведение и охрана природных и культурных объектов» — то есть училась на музейного работника.

— Владлена, чему научите студентов?

— Я преподаю курс «Тестирование. Уровень 1», где изучаются азы тестирования. Научу тому, как все устроено: как проходит организационный процесс, как выглядит типичный день тестировщика в компании, как находить баги, как их фиксировать. Будем учиться тестировать новую функциональность — там много-много видов тестирования: функциональное, нефункциональное и другие. Также определим как тестировать старый функционал - научимся регрессионному тестированию. На практику каждый раз буду давать новое приложение — чтобы студенты получили как можно более широкий опыт тестирования. На этом курсе также затрагивается тема тест-дизайна, мы тренируемся не только понимать что тестировать, но и как. Так что при ответственном подходе к учебе после курса уже можно идти на должность Manual QA Engineer.

Автоматизация тестирования на Java

Александр Фисунов, Senior Java Developer, разработчик ПО в области компьютерного зрения и видеоаналитики. Консультирует зарубежных тестировщиков. Кандидат технических наук, лауреат стипендии Президента РФ для молодых ученых и аспирантов.

— Александр, хватит ли знаний, полученных во время обучения, чтобы устроиться на работу инженером по автоматизации тестирования?

— На младшего инженера автоматизации тестирования можно спокойно идти. Для тестирования достаточно хорошего знания Java Core: циклы, массивы, методы, условия, типы данных, переменные. ООП — без него никуда. Коллекции, исключения, немного многопоточности, обобщения, работа с файлами, JDBC, Apache Maven — самые основы. Все это и инструменты, которые понадобятся в работе, мы изучим на курсе. 

Небольшая история для вдохновения. Несколько лет назад через «знакомых знакомых знакомых» со мной связался человек, который работал в Америке, он тогда занимал позицию Manual QA Engineer. У него было время, и он хотел изучить Java, Selenium, TestNG, SQL, а в процессе работы сюда еще добавились SoapUI, Zap Proxy, Jersey Client, Jbehave, Appium, Selenide и другие вещи. За три-четыре месяца еженедельных консультаций по два-четыре часа он разобрался с необходимой базой языка Java, которая как раз будет преподаваться в курсе, и устроился на позицию Middle Automation QA Engineer. 

После того как он нашел эту работу, мы продолжили с ним обучение. Чтобы не тратить время на отдельные примеры, стали разбирать рабочие задачи. Где-то после пяти месяцев такой работы он перешел на позицию Senior QA Engineer в компанию, которая занимается разработкой веб-приложений для сферы страхования. Еще через год он перешел работать на позицию ведущего автоматизатора тестирования в Disney. 

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

Мобильное тестирование

Александр Данилов, более десяти лет опыта в тестировании. Разрабатывает и проводит интерфейсное, функциональное и регрессионное тестирование веб- и мобильных приложений в компании CDC. Начинал с ручного тестирования крупного аналитического инструмента в ООО «Мегапьютер ТЕК», был старшим тестировщиком в Diasoft. Окончил два факультета Чувашского государственного университета им. И. Н. Ульянова: электротехнический и экономический. 

— Александр, чему научите студентов? Какие задачи будут под силу выпускникам?

— Научу принимать правильные решения в процессе тестирования. Чтобы занятия были интересными, будет много примеров и практики с учетом современных тенденций. Выпускники получат опыт использования современных инструментов автоматизации (UI Automator, XCUITest, Appium и Espresso), смогут внедрить их на своих проектах.

У вас вопрос по программе обучения? Напишите консультанту в чат или оставьте комментарий к статье. Либо запишитесь на факультет тестирования ПО и задайте вопросы менеджеру.

Пройти обучение

7 окт 19, 16:56
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0

Чем живут наши преподаватели

Илья Афанасьев, декан факультета разработки игр

Чем занят и увлечен

Сейчас активно готовлю новые учебные курсы для GeekBrains — к следующему году студентов ждут очень крутые обновления! 

В игровой студии, где я работаю, мы тоже не сидим без дела — ведем к релизу мобильный проект и параллельно делаем пару 2D-игр для ПК.  Собираюсь позвать на помощь своих студентов! Думаю, им будет интересно поучаствовать в создании игрового проекта, ориентированного на ПК-рынок.

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

Почему я преподаю

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

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

Чему я научился в GeekBrains

Работа в GB научила меня решать неожиданные задачи. Студенты обращались ко мне с проблемами, которых я раньше даже не мог себе вообразить. :) Зато теперь я готов справиться если не со всеми, то с большинством возможных поломок рабочей среды программиста! 

Конечно, преподавать на постоянной основе — это нелегко морально. Душа устает, но учитель — профессия, где нельзя отдавать себя только наполовину.

Александр Аникин, декан факультета Android-разработки

Чем занят и увлечен

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

но, надеюсь, это приложение вы увидите в сторе в следующем году.

Много занимаюсь саморазвитием: особое внимание уделяю архитектурным компонентам от Android.

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

Почему я преподаю

Преподавать я начал по двум причинам, которые до сих пор актуальны:

1. Думаю, что понимаю, чего студенты ждут от учебы, и знаю, как понятнее объяснить материал. Потому что я сам пришел в программирование только в 34 года безо всякого бэкграунда и базового образования.

2. Желание учиться было главной силой, которая побудила меня отправить резюме в GeekBrains три года назад. Когда учишь других, учишься сам, даже если объясняешь элементарные, с твоей точки зрения, вещи. Программирование — сфера, где в элементарное можно погружаться бесконечно. И сейчас полученный опыт я оцениваю очень позитивно.

Чего жду от профессии

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

Алексей Кадочников, преподаватель веб-разработки

Чем сейчас занят 

Недавно я закончил обновление курса «Профессиональная верстка». Теперь там подробнее разобрана адаптивность. Надо ведь постоянно следить за актуальностью материалов.

Из программистских дел меня сейчас увлекает изучение новых возможностей фреймворка Vue.js. Он помогает создавать пользовательские интерфейсы для приложений на JavaScript.

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

Почему я преподаю

Я с детства очень общительный. Для программиста это не столь важно, а вот для преподавателя — наоборот. В работе со студентами я могу использовать свои личные качества на полную катушку! Кто видел меня на офлайн-мероприятиях, знает, как я жестикулирую во время своих выступлений. :) А поскольку мне очень нравится создавать сайты, получается удачная комбинация: увлечение + общение + горящие глаза учеников = шикарный результат.

Огромное удовольствие знать, что я помогаю людям осуществить мечту. Бывает, результаты превосходят ожидания студентов. Например, человек рассчитывал после обучения получать 50 000 рублей в месяц, а в итоге нашел работу, где получает 200 000.

Радости и трудности профессии

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

Чему я научился в GB

За четыре года работы в GeekBrains мои представления о преподавании сильно изменились. Начинающие преподаватели часто сомневаются, правильно ли они подают информацию — будут ли их уроки работать. У меня было время выверить свои подходы на практике. И я счастлив, что многие ученики пишут мне о своих успехах и достижениях. 

Чего жду от работы

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

Иван Овчинников, преподаватель Java и C / C++

Чем занят и увлечен

У меня в последнее время было много работы на два фронта. Оказалось, что ракеты в космос запускать и народ программированию учить — не самые простые занятия.

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

В отпуск ездили с женой к Черному морю на машине — заодно страну посмотрели. Мы не первый раз были в Феодосии, и там ожидаемо хорошо: провинциальный городок, спокойные люди, семьи, почти нет машин и очень-очень тихо. 

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

Самара-городок... Очень мне нравится. Побывал во второй раз и снова поразился, как у них всё классно сделано! Интересные места, случайные встречи с памятниками, персонажами, выпиленными из пней скульптурами и прочей ненавязчивой красотой. Но поездка была не туристическая — приходилось работать. :)

Почему я преподаю и чего жду от профессии

Преподавание — это в первую очередь самореализация. Та, что на вершине пирамиды Маслоу, помните? И прощаться с этим я категорически не готов!

Надеюсь в какой-то момент сделать преподавание основной работой, как бы странно это ни звучало из уст разработчика в современной России. Вот до такой степени меня радует реакция людей, которым удается помочь!

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

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

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

Павел Тарасов, преподаватель веб-разработки

Чем занят и увлечен

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

Свободное время провожу с семьей — я женат, сыну скоро три года. Иногда играю в WOW Classic или LoL. Хочу путешествовать, но, опять же, пока некогда.

Чему я научился в GB

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

Я стал чаще выходить за рамки своей специализации, чтобы лучше понимать происходящее в мире программирования. Стал терпимее к вопросам с очевидным для меня ответом. Что очевидно одному — темный лес для другого.

Радости и трудности преподавания

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

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

Чего жду от профессии

От профессии ничего особо не жду — она мне ничего не должна. ;) Всего, что нужно, достигну сам.

Пройти обучение

4 окт 19, 11:55
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0
Темы с 1 по 10 | всего: 97

Последние комментарии

нет комментариев
Читать

Поиск по блогу

Люди

7 пользователям нравится сайт lena2018.mirtesen.ru