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

Основная статья: Велосипеды

Говорят, выучить Python и стать программистом легко. Правда?

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

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

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

Для чего учить Python

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

«Я обалдел, насколько там все ужасно», — говорит он, — «Полуразвалившийся советский электропривод, никакой модернизации, специалисты особо не нужны». Долго на заводе он не задержался, но продолжил работать с электрикой дальше. Вырос до ведущего инженера в Сибирьтелекоме, затем переехал из Сибири в Москву и устроился в коммерческий ЦОД, где отвечал за инфраструктуру.

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

«Может быть, я не туда совался, но развития для себя не нашел. Пять лет вуза — просто чтобы крутить провода. Это было так обидно».

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

В 36 лет Артем пошел на курсы Python-разработчика.

 

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

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

«Думаю, это хороший выбор в качестве первого языка. У него простой синтаксис. Он прощает мелкие ошибки разработчика. У Пайтона низкий порог вхождения, на нем очень легко освоить азы программирования. У него очень большая аудитория и обширная библиотека, плюс много внешних библиотек, которые делают разработчики со всего мира. За счет этого он становится языком, который подойдет для чего угодно».

 

«Хоть Python и пропагандируется как язык для всего, по факту у него только две сферы применения: всякие data science, ML и прочая математика — и веб-разработка. В этом он меня немного разочаровал», — говорит Данила Лобанов, бывший сисадмин, который недавно стал Python-разработчиком.

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

Данила тесно познакомился с компьютером относительно поздно, примерно в 18 лет. От высшего образования он отказался и почти сразу пошел работать сисадмином. Начинал с самых элементарных задач, потом приступил к изучению Linux и программирования.

«Я попытался изучать С, PHP, Java еще какие-то языки, но не заходило — начинал и бросал. Не мог писать даже простейшие скрипты. Когда я ходил на курсы по С, у меня получалось читать код, но не получалось его писать. Мне давали задачу, я смотрел на нее и не представлял, как делать. Преподаватель садился рядом, писал построчно, объяснял, и я понимал, что именно так и надо было делать. Но мне давали аналогичную задачу, и я снова был в ступоре».

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

 

«Новичку лучше первым делом разобраться в синтаксисе», — считает Алексей Петренко, — «Только потом стоит думать, куда хочется идти дальше. Чем больше ты учишься, тем больше уходишь от синтаксиса к библиотекам, паттернам проектирования, отдельным шаблонам».

Данила все-таки выбрал Python потому, что язык считался легким. «Синтаксис реально оказался простым», — говорит он, — «Как писать текст на английском языке. Сначала я изучал его самостоятельно по видеоматериалам на Ютубе, по статьям, решал задачи на pythontutor.ru. Но потом понял, что ресурсы в интернете — это только основы и азы. Они доступны всем и везде, и не помогут научиться программированию основательно. Я понял, что надо искать курсы, которые дадут все то же самое, только систематизировано, а потом поведут меня дальше».

Что надо знать перед началом обучения

Перед тем, как серьезно погружаться в изучение языка, Алексей Петренко рекомендует выяснить заранее — а нравится ли программировать вообще. «Я бы советовал попробовать написать несколько программ, пройти бесплатные уроки. Перед началом обучения лучше уже понимать, что такое переменная и как две переменные сложить.

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

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

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

Артем продолжал работать электриком днем, а вечерами начал учиться на курсах, несмотря на усталость. «Как и у всех наивных людей, у меня было ожидание магии от курсов. Я пришел не совсем нулевым. В багаже было несколько книг и даже простых сайтиков, в том числе на PHP (грешен, признаю). Я ждал, что на курсах надмозги меня выдрессируют, и я стану волшебником.  Реалии оказались другими — там такие же люди, которые просто знают чуть больше».

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

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

«Все признавали, в том числе сотрудники Geekbrains, что уровни 2 и 3 в программе по Python были одними из самых сложных курсов в университете. Очень много информации в слишком сжатые сроки, очень большие домашние задания. Многие усваивали только часть материала. Я лично два раза переводился в следующий поток. Мы просили облегчить программу, нас спрашивали как, и я предлагал разбить два курса на три. Что-то из этого приняли во внимание и сейчас реализовали».

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

«Преподавать программирование тоже очень сложно. Всем кажется, что раз человек может писать программы, значит может и научить. Это не так. Когда мышление перестроено, и знаешь много всего — уже не можешь вспомнить, каково это — не понимать».

Алексей предупреждает, что Python легкий только в начале. А после легкой базы придется приложить усилия, чтобы освоить более серьезные аспекты — библиотеки и фреймворки. «Если сравнить язык программирования с водоемом, то, например, язык С — это океан. Ты ныряешь с обрыва на огромную глубину, и либо плывешь, либо тонешь. Язык Пайтон — это пляж с чистым песком, где ты можешь далеко зайти, спокойно поплавать, и если понял, что хочешь двигаться дальше — то за красивым пляжем есть огромная впадина, по глубине сопоставимая с С и Java».

 

«Асинхронное программирование в Python — это мозгодробительная штука», вспоминает Артем. «Мы проходили это как-то поверхностно, и потом даже на собеседованиях, когда по нему спрашивали, я чувствовал, что плыл.

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

Данила же вспоминает модуль select как самое трудное: «Все три потока помнят мою боль с селектами. Есть такой модуль, и он мне прямо очень не давался в свое время. Сейчас-то он для меня простой — я теперь не понимаю, как его можно не понять».

 

«В базовой конфигурации Python лежит около 70 функций и несколько десятков зарезервированных слов, но даже крутой программист не обязательно использует их все. То есть, чтобы выучить сотню слов и понять, что они делают, можно потратить одну-три недели при желании и активной работе», говорит Алексей.

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

Чтобы в будущем работать в команде и показывать код кому-то еще, надо знать общепринятые стандарты стиля. В Python они называются «Пепы» (Peps). Я бы советовал читать Pep8 параллельно с изучением синтаксиса. Это соглашение программистов, которые пишут на Пайтоне. Оно рекомендует как правильно писать, а как неправильно.

Несколько лет назад в Python произошло разделение. Был Python 2.7, а потом вышла версия 3. Вторая версия все еще используется, но только в старых фирмах для поддержания легаси-кода. Если устроиться в такую фирму, то изучать Python 2 придется, но я бы рекомендовал учить третью версию. Все современные проекты и сторонние библиотеки пишутся под нее».

 

Как выдержать первые собеседования

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

«Проект назвался GoLiving. Это что-то вроде AirBnb, только задумка такая: в Америке есть люди, которые часто ездят работать в разные города на непродолжительный период. И они могут между собой меняться жильем с гарантированной страховкой, чтобы точно быть уверенным, что не вернешься в разгромленную квартиру. Сейчас я не знаю, насколько далеко пошел этот ресурс, кажется финансирование приостановили. Но тогда у нас даже были инвесторы».

 

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

«Под новый год я написал в компанию, которая просто находилась рядом с моим домом. Зашел к ним на сайт, увидел вакансию бэкенд-разработчика и написал им письмо. Говорю, хотел бы у вас поработать, хоть и учился, но знаю немного. Очень интересуюсь и буду развиваться. И меня позвали на собеседование».

«Мой опыт в Geekbrains показывает, что некоторые студенты находят работу, до того как они заканчивают годовой курс обучения», говорит Алексей. «Работодатель хочет видеть у серверного разработчика элементарное умение работать с синтаксисом, знание как работают сайты, как устроен бэкенд, тот же самый набирающий популярность Django. Я бы сюда ещё добавил работу в команде и знания баз данных, потому что любой бэкенд любого сайта неразрывно связан с хранением информации.


Ежемесячно на «Моём круге» открывается порядка 200 вакансий python-разработчиков, вы можете посмотреть самые свежие и подписаться на рассылку о новых вакансиях.

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

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

Данила на собеседовании больше всего удивило то, что ему не задали ни одного технического вопроса: «Не давали никаких заданий — просто общались о том, как я учился, чем интересуюсь. В итоге предложили работу, и я согласился».

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

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

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

 

«Собеседование, которое проходил я, расплавило мне мозг еще как», вспоминает Артем. «Когда я вышел, состояние было, как будто иду на автопилоте — так сильно продолжали жужжать мысли».

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

Сначала пошли житейские вопросы, все эти «как себя видишь, как себя чувствуешь». Потом за меня принялся фулстек, погонял меня по Python, по Django. Он прямо на бумаге накидывал примеры и спрашивал по ним. Не сложные, но с подковырками.

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

Честно, даже не ожидал, что мне перезвонят. Тем не менее — получил оффер. Через несколько дней будет первый рабочий день».

На какие деньги стоит рассчитывать

Люди идут в ИТ не только по зову души. Это индустрия с одними из самых быстро растущих зарплат в России. И иногда кажется, что зарплаты программистов по сравнению со среднестатистическими профессиями отличаются как зарплаты в Москве и в регионах. Тем не менее, ни Артем, ни Данила не шли в эту профессию за богатством. Больше того — они его пока так и не нашли.

«Даже в Москве на начальных позициях программистам предлагают 40-50 тысяч, может даже меньше. В регионах 20 тысяч для джуниора тоже не редкость. Это не такая уж высокооплачиваемая работа, как все утверждают. Да, когда достигаешь уровня синьора, зарплаты могут переваливать за 200-300 тысяч. Но где таких зарплат нет? Недавно одна такси-компания показала доходы таксистов, которые больше всех заработали. Там 230, 240 тысяч.


На диаграмме зарплат python-разработчиков с разбивкой по квалификациям видно, что медиана для джуна составляет почти 60 000 рублей, тогда как мидл получает уже в среднем чуть больше 100 000 рублей. Зато разница между показателями медиан для сеньора и лида совсем небольшая — 151 000 рублей и 167 000 рублей соответственно.
При построении диаграммы были использованы данные зарплатного калькулятора «Моего круга».

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

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

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

 

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

«До уровня мидла можно прокачаться в течение года обучения. Например, в Geekbrains есть обязательные курсы и дополнительное. Все их надо пройти полностью чтобы честно сказать — я прокачался до уровня мидла. То есть, получается год основной программы и ещё полгода параллельных курсов», — считает Алексей, — «А синьор — это человек, у которого есть богатый опыт. Это тот, кто разбирается в разных фреймворках, способен масштабировать задачи, понимать каких ресурсов они требуют. Человек, который не изобретает велосипеды. Кто на собственном опыте разобрался во всех аспектах и нюансах работы.

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

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

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

Шесть успешных бизнес-моделей

Перевод статьи How to do business design research — six examples Дэвида Шмидта, бизнес-дизайнера и предпринимателя. Ранее он писал о навыках, которыми должен обладать профессиональный дизайнер, и упоминал исследование бизнес-моделей. По мнению автора, чтобы заниматься дизайном и разработкой, важно понимать рынок. В этой статье Дэвид рассказывает о шести бизнес-моделях, которые помогли компаниям попасть в высшую лигу.

Что еще за бизнес-дизайн

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

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

Что делает бизнес-дизайнер:

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

Бизнес-модели, ведущие к успеху

Стартап-студия: использование инвестиций партнеров. Принципы работы стартап-студии (company builder) находятся где-то между небольшими проектами и корпорациями. У тех и других есть проблемы, из-за которых обе модели действуют неэффективно: большие компании медленнее работают и меньше настроены на инновации, а у мелких стартапов часто не хватает ресурсов. Стартап-студии выступают как трансмиссия и помогают им сотрудничать с выгодой для обеих сторон. Удивительные вещи получаются, если объединить инвестиции и опыт корпораций с технологиями, скоростью и клиентоориентированностью стартапов.

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

WeChat: развитая экосистема. Многофункциональный мессенджер WeChat разработали в Китае, и, по последним данным, только пользователей-китайцев насчитывается миллиард. Для сравнения, WhatsApp используют 1,5 миллиарда человек по всему миру. WeChat объединяет функции мессенджера, соцсети, новостной ленты и операционной системы. Один инструмент заменяет WhatsApp, Twitter, Facebook и iOS.

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

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

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

Этот телефон — пример использования стратегии blue ocean. Ее цель — перестать конкурировать с другими компаниями, создав новый продукт или услугу, спроса на которые раньше не было на рынке.

Sandeman’s: открыть новый пользовательский сегмент. Sanderman's New Europe — еще один пример стратегии blue ocean, позволяющей бизнесу освоить новую группу пользователей. Компания предлагает пешие туры, которые уже посетили 1,5 миллиона человек. Sandeman покорили нетронутый сегмент аудитории двумя вещами: пользователи могут посещать новые города и страны без дополнительной регистрации и доплат. При такой модели путешественники платят столько, сколько позволяет бюджет. Стратегия голубого океана открыла компании рынок пеших туристов и тех, кто привык путешествовать самостоятельно и с бюджетом, который вряд ли позволит нанять гида.

Гиды в Sandeman’s, кстати, не работают по найму и не платят налог с каждого участника группы. Их доход — продажа собственных туров и комиссия от компании. Контроль качества — важная составляющая такой системы: клиенты платят только за тур, который им понравился.

Warby Parker : свежий взгляд на закоренелую индустрию. Warby Parker — иллюстрация того, как новый игрок задает свои правила и меняет традиционное ценообразование. Фишка компании — продавать за 100 долларов очки, которые раньше стоили 400. Дороговизна оптики стала нормой из-за компании Luxottica, которая торговала аксессуарами от элитных брендов вроде Ray-Ban, Chanel, Prada.

На самом деле материалы для изготовления очков очень дешевые: себестоимость оправы и линз обычно менее 10 долларов. В Warby Parker воспользовались этой особенностью производства: начали выпускать свои очки и продавать напрямую. Если магазины вроде Luxottica выступают как посредник между брендом и покупателем, то Warby Parker пропускает промежуточный этап — и это делает очки еще дешевле. Кроме того, компания позволяет примерить оправу дома. Эта услуга и низкая стоимость мотивируют клиентов покупать сразу несколько очков.

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

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

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

Нейросетевые инструменты для дизайна и разработки

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

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

Шрифты

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

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

Тогда Кевин совместно с Google Creative Lab разработал Fontmap. Алгоритм машинного обучения сортирует шрифты по визуальным характеристикам и подбирает сочетающиеся. Сейчас в базе Fontmap 750 шрифтов.

Шрифты, которые нейронные сети Fontmap выбрали для использования с Roboto

René — программа, которая поиграет со шрифтами за вас. Ее создал разработчик Джон Голд из Airbnb и TheGrid. Работа René построена на машинном обучении — с каждым новым подбором программа учится понимать принципы сочетания шрифтов. René помогает дизайнерам и разработчикам экономить время и составлять подборки шрифтов для разных проектов.

Джон Голд настраивает базовые характеристики для подбора шрифтов

Разработчик поддерживает идею, что нейросети — это инструменты-помощники, и высказывается против автоматизированного подхода. По мнению разработчика, René будет полезна только для дизайнера-профессионала, который будет «рулить» программой.

Логотипы

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

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

Варианты логотипов, которые предложила нам система. Не ДжонФедор, но начинающей компании пригодится

Посмотреть логотипы можно бесплатно, но за скачивание в хорошем качестве придется заплатить 20 $. Полный пакет с логотипом в растре и векторе, водяной знак, авторские права и фирменный стиль стоят 65 $. Те, кто не уверен в предложенных вариантах, могут сделать скриншот понравившихся и показать дизайнеру, который на их основе сделает логотип.

Для российских пользователей 65 $ за логотип — не совсем бюджетный вариант. Отечественный аналог Logojoy — «Турболого» — делает то же самое, но дешевле. Логотип в низком разрешении стоит 690 рублей, одиннадцать файлов с логотипом, включая версию для печати, — 990 рублей, а за бизнес-пакет с дополнительным набором для соцсетей, фирменной документацией, водяным знаком и фавиконкой придется заплатить 2290 рублей. «Турболого» работает на той же системе машинного обучения и нейронных сетей, что и Logojoy.

Лучшие логотипы за апрель 2018 по версии разработчиков «Турболого»

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

Иллюстрации

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

Autodraw пригодится для рисования иконок, логотипов, баннеров, афиш и быстрого прототипирования.

Пример работы Autodraw от The Verge

ProjectQuick3D — инструмент для создания 3D-моделей от Adobe. Программа работает по схожему с Autodraw алгоритму: пользователь рисует быстрый скетч, а программа с помощью машинного обучения находит в библиотеке Adobe Stock нужную 3D-модель. Нейросеть обучается — чем больше пользователей рисуют, тем точнее работает алгоритм. Разработчики представили проект на конференции Adobe MAX как инструмент для начинающих дизайнеров, которые прежде не работали с 3D.

Разработчики Adobe демонстрируют работу программы на конференции Adobe MAX

Фото

Let’s Enhance — сервис, улучшающий фотографии с низким разрешением. Его основатель Александр Савсуненко давно занимается машинным обучением, и после неудачного проекта по производству ДНК-тестов Titanovo решился на новый стартап. Идею для сервиса Александру подсказал отец — он продает камины, сауны и аксессуары для них, и товар возит из разных стран, в том числе из Китая. О качестве фотографий китайских товаров известно по AliExpress: большинство снимков — низкого разрешения, размещать на сайте их стыдно.

Тогда Александр Савсуненко совместно с разработчиком Владиславом Пранскевичусом создали Let’s Enhance. Сервис убирает jpeg-артефакты с фотографий, увеличивает разрешение в 4 раза, восстанавливает детали и увеличивает четкость снимков.

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

Работает система на основе трех нейронных сетей, которые учатся улучшать фотографии. Технология Super-resolution обучается на базе из сотен тысяч фотографий низкого и высокого качества. Нейросеть обрабатывает два снимка, восстанавливает детали и сохраняет четкие линии, опираясь на знание типовых объектов и текстур. Вторая нейросеть — Boring — увеличивает четкость изображения. Третья — Magic — дорисовывает детали, которых нет на фотографии, чтобы сделать снимок более реалистичным.

Так работает нейросеть Boring, которая лучше всего восстанавливает текст, логотипы и комиксы. «Boring is not so boring» — говорит Александр Савсуненко

Сначала сервис был бесплатным, и пользователям разрешали обрабатывать любое количество фотографий. Сейчас сайт работает по подписке — без нее можно обработать только пять изображений. Для покупки доступны пакеты на 20, 50, 120 фотографий или подписка на месяц или год. Обработка двадцати изображений стоит 5 $, месячная подписка с возможностью обработать до тысячи фото — 7 $, годовая — 52 $.

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

Обучается NVIDIA схоже с Let’s Enhance — сравнивает фотографии с шумом и без. Нейросеть умеет удалять артефакты, шум, зерно. Создатели NVIDIA считают, что технологию уже можно использовать для улучшения изображений МРТ, а в будущем  — применять для визуализации в медицине.

Исследователи NVIDIA в ролике об ИИ демонстрируют работу технологии

Дизайн

uKit AI — программа для редизайна сайтов. Чтобы выяснить, насколько он актуален для старых веб-ресурсов малого бизнеса, разработчики сервиса серьезно вложились в исследование. Оно показало, что частые проблемы сайтов и их владельцев — неадаптивность, устаревший дизайн и низкая конверсия. Предприниматели не могли предсказать, что мобильный трафик превысит десктопный, и многие веб-ресурсы работают на устаревшем Flash. При этом владельцы понимают, что технологии и тренды меняются, и видят, что сайты устарели, но откладывают обновление из-за нехватки денег и времени.

Решением для быстрого редизайна стал uKit AI — это сервис на основе SaaS+AI, сочетающий конструктор сайтов и машинное обучение. Система перекомпоновывает контент с учетом современных требований к дизайну и формирует новые версии страниц. uKit AI работает так: технология распознает контент и структуру старого сайта, алгоритм перестраивает и переоформляет контент, а нейросеть оценивает результат и выкатывает новую адаптивную версию. Лучший вариант система выбирает с помощью нейросети WebScore AI, которая не только оценивает сайт визуально, но и проверяет код на соответствие современным требованиям. Пока uKit AI дорабатывается, но уже можно записаться на бета-тестирование.

На главной странице uKit AI — «шторка», которая демонстрирует редизайн сайта с помощью этой разработки

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

Перевод

Thing Translator — инструмент, который помогает учить иностранный язык с помощью фото. Технологию разработали совместно с Google Creative Lab в рамках проекта AI Experiments. Это простые эксперименты с машинным обучением, которые помогают разработчикам всего мира узнать о возможностях ИИ.

Thing Translator помогает учить новые слова на иностранном языке без учебников, словарей и карточек. Нейронная сеть построена на Cloud Vision API и переводчике Translate API. Технологии распознают форму предмета, выбирают несколько совпадений и переводят слова. Наведите камеру на предмет, сфотографируйте его — и программа выдаст его название на любом языке и даже воспроизведет слово голосом.

За 4 секунды Thing Translator узнает предмет, подбирает совпадения, выдает название на английском и переводит на другой иностранный язык. Для русскоговорящих пользователей — двойной профит

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

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

Посмотрите еще несколько программ и сервисов на основе ИИ, которые пригодятся в работе:

10 программ Adobe, которые работают на машинном обучении

Проекты AI Experiments совместно с Google


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

Логические ошибки. 7 бед начинающего программиста

Хуже багов в коде — только ошибки в логике программы и нашем мышлении. Сборка и запуск проходят гладко — до поры вы не подозреваете о проблеме. Но вдруг приложение начинает работать не так, как задумано. Обычно это происходит, если запустить код с непредвиденными входными данными. Результаты вычислений оказываются искаженными, или вы обнаруживаете дыры в безопасности. Ищете баг, но его нет — программа делает, что сказано. Остается вопрос: что вы не предусмотрели? Системная ошибка может потребовать переделать код полностью или почти с нуля. Застраховаться от таких неприятностей нельзя, но можно учиться на чужом опыте и обходить заведомо опасные ситуации.

Кунсткамера: «Почему это плохо работает?»

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

«Не туда положил», или неверный тип данных

Ошибка из разряда «Семен Семеныч!». Если вы неправильно выбрали тип переменной или он непредвиденно изменился во время работы кода, это может создать проблему. Например, программа попытается записать 64-битное значение в 32-разрядную переменную. Или число одинарной точности с плавающей запятой (float) попадает в переменную типа int (Integer).

У такой ситуации несколько вариантов развития:

  • В языках со статической типизацией (С++, Java, С#) значения переменных проверяются на этапе компиляции. Если мы явно положили значение типа long в int, получим ошибку и шанс ее исправить. Но баг всегда найдет лазейку — в С#, например, если по итогам вычислений записать 1,7 в int, это пройдет незаметно. Причем число будет округлено до 1 и результаты дальнейших вычислений с участием переменной исказятся.
  • В языках с динамической типизацией (JavaScript, Python, PHP) переменные получают значение во время работы программы. Ничто не укажет на ошибку, пока вы не столкнетесь с ней непосредственно. Неявное приведение типов в таких языках — норма жизни. Поэтому 32-битная int, если в нее поместить число с плавающей запятой, автоматически превратится во float, и никто вам об этом не скажет. Лучше еще на этапе создания алгоритма следить, чтобы у переменной не было случая самовольно обратиться «в другую веру».

Хрестоматийный пример — вещественные вычисления с целыми числами, такие как деление с остатком. Вещь настолько банальная, что в современных языках с ней просто не может что-то пойти криво… Или может.

int a = 25;
int b = 8;
float c = a/b;
Console.Write(c);
Console.Write("\n"+ c.GetType()); // Проверяем тип переменной c

Результат:

3
System.Single

На самом деле мы получили 3,125, но значение округлилось. Указание типа float для “с” не помогло сохранить точность. Компилятор сначала выполнил деление и округлил результат, а потом уже задумался о типе… и выбрал Single. Это тип, который хранит числа с плавающей запятой одиночной точности в диапазоне от -3,402823E38 до 3,402823E38. Типы float и Single — оба 32-разрядные. C# в таких случаях допускает неявное преобразование, так что компилятор не заметил подвоха.

Когда вы уверены, какой тип должен вернуться, лучше объявлять об этом явно:

float c = (float)a/b; 

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

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

Пример округления при делении int на int с остатком был актуален и для Python 2. В Python 3 это работает иначе:

a = 25
b = 8
c = a/b
print(c)
"""Проверяем тип переменной"""
print(type(c) == float)

Результат:

3.125
True

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

Вебинары GB: «Все, что вы должны знать о типах данных»  «Типы данных в PHP», «Типы данных языка C#», «Базовые типы данных, ветвление и циклы языка Java» .

Что читать: «Ликбез по типизации в языках программирования», «Статическая и динамическая типизация», «Исследование внутренних механизмов приведения типов в JavaScript», «Приведение и преобразование типов C#», «Опциональные типы данных в языке Swift».

«На волю, всех на волю!» — высвобождение ресурсов

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

Поэтому будьте внимательны. Можете принудительно освобождать ресурсы с помощью конструкций типа try-with-resources и try-finally. Так вы убедитесь, что все лишнее будет стерто при любом раскладе. Отпускать ресурсы на волю лучше «в естественную среду обитания» — в том же коде, где их захватили.

А еще привыкайте закрывать открытые файлы и сессии, как скобки в коде.

Что читать: «Правильно освобождаем ресурсы в Java», «Очистка неуправляемых ресурсов» (C#), «Как работает JS: управление памятью, четыре вида утечек памяти и борьба с ними».

Неслучайные случайности

На основе случайных чисел можно создавать уникальные ID для объектов и сессий, генерировать пароли, вносить разнообразие в геймплей или общение пользователя с программой. Главное, чтобы случайность не стала слишком предсказуемой. Увы, в языках программирования используют генераторы не случайных, а псевдослучайных чисел (ГПСЧ). Получить действительно случайное число не так просто. Для этого нужны внешние сигналы, последовательность которых для компьютера всегда неожиданна. Обычно в таких случаях используют аппаратуру, которая фиксирует хаотически меняющиеся параметры физического процесса. Основой рандомизации могут быть движущиеся частицы, белые шумы, микродвижения (смещение координат курсора мыши) или текущее число просмотров под самым популярным видео на YouTube (шутка). В 2017 году для получения истинно случайных чисел в МГУ специально собрали квантовый генератор.

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

Что читать/смотреть: «Подробно о генераторах случайных и псевдослучайных чисел» (с примерами уязвимостей ГПСЧ в Java и PHP), «Как написать генератор случайных чисел» (на JS), «Случайные числа и функция random» на Arduino.

Гонка за ресурсами

Если ваше приложение запускает несколько потоков, важно следить, чтобы они не конфликтовали. «Состояние гонки» — это когда потоки или процессы наперебой обращаются к общим ресурсам и нарушают целостность данных. Например, один поток увеличил значение переменной на 1, второй — обнулил, первый — сохранил. Вместо ожидаемой единицы на выходе получаем 0. Чтобы этого не происходило, нужно ставить блокировки (block), которые не позволят второму и последующим потокам работать с уже занятыми ресурсами. Либо использовать другие механизмы синхронизации: семафоры, события, критические секции. Если сказанное вам не совсем понятно, самое время разобраться в теме.

Вебинары GB: «Синтаксический сахар при работе с потоками на языке С#».

Что читать: о многопоточности, «Синхронизация процессов», «Процессы и потоки in-depth».

Публичность и «все общее»

Чтобы не было сквозняка, нужно закрывать двери, в которые никто не ходит. Так же и с объектами внутри программы: они должны быть открыты только тем участкам кода, которым действительно нужны. Это один из принципов инкапсуляции, и он важен для всех, кто применяет объектно-ориентированное программирование. «Сквозняк» в коде ведет к ошибкам во взаимодействии объектов и повышает риск перехвата данных извне. Для ограничения доступа во многих языках применяют модификаторы public, private и protected. Также избегайте использования глобальных переменных везде, где можно обойтись без них. Делиться чем-то — хорошо, но только не внутри программы, когда общий доступ к ресурсам становится источником проблем.

Что читать: «Все о модификаторах доступа» (с примерами на C#), «Модификаторы доступа и класса» в Java.

Особенности сериализации

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

Сериализацию часто используют в веб-приложениях и службах, но не только. Например, если вы разрабатываете игру на C# или Python, сериализация поможет реализовать систему сохранений.

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

Если по какой-то причине вы не хотите передавать объект в виде потока байт, есть удобные альтернативы: можно сохранить структуру объекта в формат XML или JSON.

Чтобы не писать все с нуля, можно использовать готовые классы-сериализаторы:

  • BinaryFormatter — обеспечивает бинарную (двоичную) сериализацию, т.е. преобразование в поток байт;
  • SoapFormatter — сериализует связанные объекты в SOAP-сообщение: особым образом структурированный XML-документ, который пересылают по протоколам HTTP, HTTPS, SMTP и другим;
  • Xstream — Java-класс для сериализации в XML и JSON-файлы. XML весит меньше SOAP и быстрее передается по сети, но не так гибок в описании типов данных. Данные формата JSON являются объектами JavaScript и удобны для использования в клиент-серверных приложениях.

Что читать: «Как не наступить на грабли, работая с сериализацией», «Сериализация (C#)», «Сериализация объектов PHP», «Обобщенное копирование связных графов объектов в C# и нюансы их сериализации».

С-библиотеки без присмотра и переполнение буфера

Есть мнение, что в языках более высокого, чем С, уровня (Java, Python, C#, Rust) проблема переполнения буфера решена. Например, Java по умолчанию контролирует размер буфера и границы массивов. Но для ускорения жадных к ресурсам участков кода многие программисты используют С-библиотеки. И вот здесь будьте осторожны. Языки С и С++ считаются сложными именно потому, что дают простор для ошибок, которые легко допустить, но трудно найти. В плане переполнения буфера код на C/С++ очень уязвим.

В чем суть проблемы? Если неправильно рассчитать или не проверить размер буфера, программа попытается записать данные за его пределами. Это не только ошибка, но и дыра в безопасности. Злоумышленники могут намеренно переполнить буфер, чтобы подменить хранимый в стеке адрес возврата, т.е. адрес функции, которую надо вызвать по завершении текущей. Подставная функция передаст дальнейшее управление мошенническому коду. Такой подход используется при создании вирусов с 1988 года. Чтобы не наступить на ржавые 30-летние грабли, узнайте больше о том, как бороться с переполнением буфера.

Что читать: «Как устроены дыры в безопасности: переполнение буфера» (или оригинал на английском).

Переменные впрок

Иногда начало кода у новичка выглядит как выставка достижений народного хозяйства. Там объявлены не только переменные и константы, необходимые сразу после запуска программы, но и те, которые потребуются намного позже или не нужны вовсе. Это говорит о пренебрежении инкапсуляцией и плохом планировании еще на этапе создания алгоритма. Разработчик не знает, где объявлять переменные в разных случаях, и складывает все «в коридоре».

Вносите в алгоритм только то, что готовы инициализировать!

Хотите на таком-то этапе присвоить вот этой переменной вот это значение? Так и пишите. Что-то переиграли? Не забудьте почистить код.

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

Что читать: «Переменные» (и где их объявляют — на примере С++), «Области видимости и замыкания в JavaScript».

Как найти остальные ошибки?

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

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

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

11 июл 18, 14:32
0 0
Статистика 1
Показы: 1 Охват: 0 Прочтений: 0
Показаны все темы: 4

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

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

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

Люди

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