Дайджест по программированию №1: полезные статьи
Нетология собрала и законспектировала интересные и полезные статьи по программированию. Как для новичков, так и для более продвинутых разработчиков.
Программист Альфред Ландик рассказал, какие ошибки допустил на должности ведущего разработчика и как делать правильно.
Что должен уметь ведущий разработчик:
- думать обо всем процессе, а не только о своих задачах;
- знать языки программирования и фреймворки, разбираться в архитектуре и иметь богатый опыт работы;
- аргументировать свое мнение и договариваться с другими;
- подбирать команду и направлять ее на достижение результата.
Какие ошибки допустил на позиции ведущего разработчика:
- Оверменеджмент — подробно рассказывал сотруднику о процессе, но тратил личное время и отучил сотрудника работать самостоятельно.
- Уступки руководителю в техническом решении — согласился внедрить технологию, хотя знал, что она провальная.
- Недостаток эмпатии и токсичность — жестко критиковал работу сотрудников, что сказывалось на их мотивации.
- Игнорирование заинтересованных сторон — не учитывал, кто заинтересован в проекте, какой уровень влияния у них и какие цели стоят перед заинтересованной стороной.
- Переоценка своих возможностей — бывает так, что задача кажется легкой и ее можно сделать за несколько часов, но в итоге она отнимает много времени.
Встроенные функции Python: какие нужно знать и на какие не стоит тратить время, Tproger
В Tproger перевели статью разработчика Трея Ханнера о стандартных встроенных функциях Python.
В Python множество встроенных функций, классов и различных инструментов, которые входят в библиотеку. Кроме того, есть тысячи сторонних библиотек на PyPl.
Все функции Python разделили на группы, чтобы разобраться, какие нужны начинающему специалисту и принесут много пользы, а на какие не стоит обращать внимание.
Первые две группы встроенных функций — основные. Они нужны всем начинающим программистам на Python. Следующие две категории — специализированные. Пригодятся в зависимости от специализации.
Общеизвестные. Эти функции использует каждый новичок. К ним относят: print, len, str, int, float, list, tuple, dict, set, range.
Неочевидные для новичков. Эти функции нужно знать, но иногда новички в Python их пропускают. Это функции: bool, enumerate, zip, reversed, sum, min и max, sorted, any и all.
Функции, которые понадобятся позже. В самом начале изучения Python они могут не пригодиться, но понадобятся с усложнением проектов: open, input, repr, super, property, issubclass и isinstance, hasattr, getattr, setattr и delattr, classmethod и staticmethod, next.
Функции, которые когда-нибудь можно выучить. Они могут быть полезны в некоторых ситуациях: iter, callable, filter and map, Round, divmod, object.
Прочие специфические функции. Скорее всего, они будут не нужны, но если занимаетесь чем-то специализированным, то нужно обратить внимание: ord и chr, exec и eval, compile, bytes, bytearray и memoryview, frozenset, format, complex.
редакция нетологии
курс
Веб-разработчик с нуля
Узнать больше
- Научим программировать на JavaScript и PHP
- 11 готовых проектов в портфолио по итогам обучения
- Станьте junior-разработчиком, даже если никогда не программировали
Производительность фронтенда: разбираем важные метрики, habr
В блоге Mail.ru Group на Хабре рассказали, какие метрики нужно использовать для оценки производительности фронтенда.
Производительность — количество операций за определенный интервал времени. Но это не подходит к фронтенду, так как у каждого пользователя свой «фронтенд».
Чтобы понять, что происходит с проектом на каждой стадии работы можно использовать такие метрики.
Скорость загрузки страницы. Полный цикл от начала загрузки страницы до полной загрузки можно узнать из performance.timing.
Время первой отрисовки и интерактивности. Это момент, когда пользователь увидел результат, а интерфейс перешел в интерактивный режим. Понадобится Performance Paint Timing и PerformanceObserver.
Скорость реакции на действия пользователя. Две базовые метрики, которые подойдут любому проекту: first-event — время первого события, с помощью которой можно контролировать, как меняется время реакции пользователя от ваших действий; latency — задержка при обработке некоторых событий.
FPS при прокрутке и анимациях. Это метрику обычно измеряют через requestAnimationFrame. Если нужно постоянно измерять FPS — подойдет FPSMeter. Но если нужно измерить плавность прокрутки страницы, то создаём прозрачный div (1x1px), добавляем transition: left 300ms linear, запускаем из одного угла в другой. Пока он анимируется, через requestAnimationFrame проверяем его реальный left.
Инициализация приложения. Главное правило — детализируйте, чтобы понять, что съело время от инициализации приложения до финального запуска.
Потребление памяти и трафика. Для памяти есть только нестандартизированный (Chrome only) performance.memory, который выдает низкие числа. Для трафика понадобится Timing-Allow-Origin и Resource Timing API — поможет не просто посчитать трафик, но и детализировать его.
Умный парсер числа, записанного прописью, habr
На Хабре рассказали, как распарсить число, записанное прописью на русском языке.
Дано число «сто двадцать три», состоящее из трех слов (токенов). Каждому из слов соответствуют числа, которые суммируются:
«сто двадцать три» = сто + двадцать + три = 100 + 20 + 3 = 123
Если рассмотреть число «двести двенадцать тысяч сто пять», то все станет сложнее:
«двести двенадцать тысяч сто пять» = (двести + двенадцать) × тысяч + (сто + пять) = 212 * 1.000 + 105 = 212.105.
Когда в числе присутствуют тысячи и миллионы — оно делится на части, которые состоят из локального маленького числа. Фрагментов может быть много, но все они будут идти по убыванию множителя.
Источник
Инструкция для тех, кто хочет стать программистом с нуля
Кризис заставляет многих сменить место работы или даже полностью поменять специальность. Приходится осваивать новые навыки и профессии. Прекрасным выбором в этом случае может стать профессия программиста. Это интересно, комфортно и прибыльно. В этой статье мы постараемся ответить на вопрос, как построить карьеру программиста с нуля.
Начать свой путь к карьере программиста стоит с ответа на вопрос, нужно ли вам программирование вообще? Этот вопрос не относится к тем, кто учится или учился по специальности, близкой к программированию. Если вам в школе математика давалась лучше, чем гуманитарные науки, если вам нравится проводить много времени за компьютером, если вам хочется изучать что-то новое, тогда программирование вам подойдёт.
С чего начать
Есть несколько вариантов развития событий, в результате которых человек становится программистом. Первый — родители-программисты, которые всему научили своих детей. Таким детям даже не нужно идти в университет. Второй вариант — модная профессия программиста. После школы нужно было выбрать, куда пойти учиться, и выбрали модное направление IT, вроде бы понравилось. И последний вариант — хобби, которое переросло в работу.
Если с вами ничего из вышеперечисленного не произошло, значит, у вас есть выбор из четырёх вариантов:
- Самообразование. Этот вариант можно использовать как самостоятельно, так и в паре с другими методами. В интернете полно сайтов, книг и приложений, которые помогают изучать различные языки программирования и технологии. Но это самый тяжёлый путь для начинающих.
- Университет. Если вы оканчиваете школу и хотите быть программистом, тогда идите в университет. Если не за знаниями, тогда за корочкой. Она может послужить бонусом при устройстве на работу. Хотя и какие-то знания вы тоже получите. Но не забывайте заниматься и самообучением. К выбору вуза стоит подойти очень ответственно. Внимательно изучите программы обучения и выбирайте лучшие технические вузы.
- Ментор. Будет очень неплохо, если вы найдёте человека, который согласится помочь вам и направит вас в правильную сторону. Он подскажет подходящие книги и ресурсы, проверит ваш код, даст полезные советы. Кстати, мы уже писали о полезном ресурсе, где вы сможете найти ментора. Наставника можно искать среди знакомых программистов, на IT-тусовках и конференциях, на онлайн-форумах и так далее.
- Специализированные практические курсы. Попробуйте поискать в своём городе курсы, где вас обучат какому-нибудь языку программирования или технологии. Я был приятно удивлён количеством таких курсов в Киеве, в том числе бесплатных и с последующим трудоустройством.
Какой язык, технологию и направление выбрать
Когда вы станете программистом, через годик-другой будете вольны выбирать любой язык, который вам нравится. Но при выборе первого языка программирования новичок должен учитывать следующие критерии:
- Наличие на рынке вакансий. Конечная цель этого пути — найти работу программистом. А это будет трудно сделать, если на рынке вакансий никто не будет искать разработчиков на вашем языке программирования. Проверьте сайты с вакансиями, посмотрите, кого больше ищут, выпишите десяток языков. И переходите к следующему критерию.
- Низкий уровень вхождения. Если вам придётся потратить длительное время на изучение языка, это может отбить у вас охоту к программированию вообще. Почитайте о тех языках, которые вы выбрали выше. Просмотрите литературу, которую нужно будет прочитать, чтобы изучить эти языки. И выберите те, о которых пишут, что они лёгкие, или которые вам показались лёгкими. Такими языками могут оказаться PHP, Ruby, Python.
- Кайф от процесса. Если вам не нравится писать код на выбранном языке, вы не будете получать удовольствия от этого процесса, от работы и от жизни. А оно вам надо? Делайте правильный выбор.
Также вам придётся определиться с направлением программирования. Мобильное, десктопное, игры, веб, низкоуровневое программирование и так далее. Самые популярные и относительно лёгкие отрасли — разработка под веб, мобильные и десктопные клиенты. Под каждое направление может подходить один язык и совсем не подходить другой. То есть при выборе языка программирования также стоит отталкиваться и от этого фактора.
В любом случае изучите веб-технологии. Это язык разметки HTML, стили CSS и JavaScript, который позволит сделать вашу страницу динамической. На следующем этапе изучите серверный язык (Python, PHP, Ruby и другие) и подходящие для него веб-фреймворки. Изучите базы данных: практически в каждой вакансии программиста это упоминается.
Как получить начальный опыт
Без опыта вы не получите работу. Без работы вы не получите опыт. Замкнутый круг реальной жизни. Но ничего страшного, мы из него выберемся.
Во-первых, не стоит ждать, пока вы прочитаете все книги по выбранному языку программирования. Начинайте писать свои первые строки кода уже после второй главы книги. Выполняйте все задания из книг, перепечатывайте примеры, разбирайтесь в них. Усложняйте примеры и задания из книг своими идеями. Создавайте свои задачи к пройденному материалу. Решайте эти задачи.
Во-вторых, вам нужно найти свои первые проекты. Это, наверное, самый сложный вариант, но рабочий. Вам придётся самому искать заказы, выполнять их, заморачиваться с оплатой. Для новичка это архисложно, но зато затем все остальные варианты покажутся плёвым делом. Выполненные проекты можно будет записать в опыт и показать вашему будущему работодателю. Реальные проекты являются большим плюсом в вашем резюме.
Если вы знаете английский язык, регистрируйтесь лучше на англоязычных биржах. Рынок там больше. Если не знаете английского, учите его. А пока что вам доступны русскоязычные биржи фриланса. Ищите небольшие проекты, которые соответствуют вашему уровню знаний или чуть выше него. Подайте заявку на пару десятков таких заданий. И приготовьтесь получить море отказов. Но если одна-две заявки выстрелят, у вас будет шанс получить реальный опыт.
Ещё одним неплохим вариантом для получения реального опыта является open source. Таким проектам всегда нужны новые люди, пусть даже и новички. Вы можете поискать в проекте баги или посмотреть в баг-трекере и предложить методы их решения. Найти такие проекты легко на GitHub или других сервисах для хостинга кода. Не стесняйтесь задавать там вопросы.
Четвёртый вариант получения опыта — помощь знакомым программистам. Попросите их передать вам маленькие и несложные задания. Если что-то не будет получаться, у вас всегда будет к кому обратиться. И при этом вы будете участвовать в реальном проекте.
Последний способ — собственные проекты, различные хакатоны или работа в коворкинге. Свои проекты сложно начинать самому, лучше поискать знакомых или друзей.
Почему стоит выбрать Python
Давайте немного подробнее поговорим о выборе первого языка программирования. Первый язык должен быть простым и популярным на рынке. Таким языком является Python. Я очень советую выбрать именно его в качестве первого языка программирования.
Код программы на Python читабелен. Вам даже не нужно быть программистом, чтобы в общих чертах понять, что происходит в программе. Из-за несложного синтаксиса Python вам понадобится меньше времени для написания программы, чем, например, на Java. Огромная база библиотек, которая сэкономит вам кучу сил, нервов и времени. Python является высокоуровневым языком. А значит, вам не нужно особо думать о ячейках памяти и о том, что там разместить. Python — язык широкого назначения. И он такой простой, что даже дети могут его выучить.
Справедливости ради стоит упомянуть и о других языках программирования. Java может стать неплохим выбором для новичка. Этот язык популярнее, чем Python, но и немного сложнее. Зато инструменты для разработки гораздо лучше проработаны. Стоит только сравнить Eclipse и IDLE. После Java вам будет проще перейти к работе с низкоуровневыми языками программирования.
PHP — ещё один очень популярный язык. И, мне кажется, он даже проще, чем Python. Очень легко найти себе ментора или решение какой-нибудь проблемы на форуме. Всё потому, что в мире существует огромное количество PHP-программистов разного уровня. В PHP нет нормального импорта, есть множество вариантов решения одной и той же задачи. А это усложняет обучение. И PHP заточен исключительно под веб.
Языки C и C# очень сложны для новичка. Ruby — хороший выбор в качестве второго языка, но не первого. JavaScript — очень простой язык, но ничему хорошему он вас не научит. А задача первого языка программирования всё-таки научить вас чему-то правильному, задать какую-то логику.
Важен ли английский язык
Важен! Не знаете? Учите. Знаете? Совершенствуйте. Учитесь читать, писать, слушать и говорить на английском. Делайте упор на техническую литературу. Слушайте англоязычные подкасты. Читайте англоязычные учебники по программированию.
Что нужно знать, кроме языка программирования
Конечно же, кроме языка программирования и английского, нужно знать что-то ещё. А вот что — зависит от направления, которое вы выберете. Веб-программист обязан знать HTML, CSS, JavaScript. Десктоп-программист учит API операционной системы и различные фреймворки. Разработчик мобильных приложений учит фреймворки Android, iOS или Windows Phone.
Всем нужно выучить алгоритмы. Попробуйте пройти курс на Coursera или найти подходящую для себя книгу по алгоритмам. Кроме этого, нужно знать одну из баз данных, паттерны программирования, структуры данных. Стоит также познакомиться с репозиториями кода. Хотя бы с одним. Обязательно знание систем версионного контроля. Выбирайте Git, он самый популярный. Вам нужно знать инструменты, с которыми вы работаете, операционную систему и среду разработки. И главный навык программиста — уметь гуглить. Без этого вы не проживёте.
Последние шаги
Вам нужно подготовить резюме. Не просто резюме, а хорошее резюме. Не стоит писать там лишней информации, но и умалчивать о своих умениях тоже не нужно. После того как вас пригласят на интервью, вы должны к нему подготовиться. Пройдитесь по материалу, который указан в вашем резюме. Вы должны быть уверены в своих знаниях. Просмотрите проекты, над которыми вы работали, вспомните технологии, которые вы применяли. И вперёд — к светлому будущему с новой профессией программиста.
Источник
Программирование для начинающих и не только
Обучение программированию — очевидный тренд. Даже при высоких зарплатах спрос на хороший разработчиков превышает предложение. Все это, в купе с возможностью в IT работать удаленно подталкивает все больше людей научиться программировать.
Давайте разберемся какие навыки точно нужно развивать, чтобы повысить свои шансы быть успешным разработчиком. Затронем так называемые Hard и Soft скилы, зачем они нужны и что дают программисту.
Про программистов
Кроме очевидных плюсов, как то зарплата, «независимость» и т.д. есть ряд минусов, про которые надо помнить перед тем как решить идти в программирование.
- Вы 5-8+ часов в день будете общаться исключительно с компьютером. Это накладывает свой отпечаток.
- Иногда поиск и правка одного бага может занять весь день. Потраченное время может показаться несоизмеримо сделанной работе и немного удручать.
- IT стремительно развивается. Следовательно вам нужно будет учиться. Всегда.
- Большинство ресурсов, примеров и ответов на вопросы будут на английском. Это значит его надо знать.
Обучение программированию
Итак, вы окончательно решили освоить профессию программиста. Встает резонный вопрос — с чего начать. Абсолютно независимо от выбранной сферы на первых порах наставник, более опытный товарищ, да кто угодно, кого можно будет немного помучать вопросами — must have. Это сэкономит массу времени и задаст правильный вектор развития.
Языки программирования
Сам смысл «программирование» не привязан к языку. Задача разработчика — объяснить машине что он от нее хочет. Язык программирования — всего лишь инструмент как это сделать.
Тут как и у людей, на каком языке говорить зависит от того, кому вы это говорите. Вряд ли вы будете Итальянцу что-то объяснять по-русски, верно? Но идея того, что вы хотите донести — не привязана ни к русскому, ни к итальянскому.
Вы выбираете язык программирования в зависимости от того, какие перед вами стоят задачи. Если это разработка под Android — то Kotlin или Java. iOS = Swift. Обработка текстов и изображений? Скорее всего это будет Python.
Основы программирования
Чтобы понять программу, нужно мыслить как программа
Программа — набор последовательных действий. Конкретных действий. Не получиться отделаться «ну тут примерно вот так должно работать». Аналогично ваши мысли и действия — они должны быть максимально конкретными, понятными и последовательными.
Нужна определенная аккуратность, если не сказать педантичность. При обучении программированию не достаточно взять кусок кода, вставить, убедиться что он работает и радоваться. Тут необходимо понимание, что как и почему работает, зачем применен конкретный алгоритм и можно ли использовать другой тип данных.
Все, что выделяется как «основы программирования», лаконично вытекают из аккуратного и последовательного представления алгоритма. Давайте на простом примере рассмотрим как эти основы формируются.
Представим, что есть совершенно реальная задача.
«Есть таблица результатов с очередного соревнования. Надо составить отсортированную таблицу участников».
Пройдемся по «основам» и посмотрим на каждый пункт. У нас будет 2 действующих лица, (О)бычный человек и (П)рограммист.
Типы данных. Переменные.
О: «Ну да, есть результаты, погнали…»
П: «Постойте, а что имеется в виду под результатами? Это целое число или дробное? А может быть на входе у нас список оценок по разным этапам соревнования?»
Отсюда и вытекает понятие разных типов данных. Это могут быть целые числа — Integer. Дробные с точкой — Float или Double.
Каждый тип данных имеет свои границы и может занимать разный размер в памяти.
Оператор цикла
О: «Ну мы просто возьмем и все расположим по возрастанию»
П: «Для начала нужно перебрать всех участников один за одним…»
Такой перебор — и есть цикл. Существуют разные вариации, с разными граничными условиями и обходящие структуру данных по разному. Их все объединяет то, что смысл цикла — просто повторять действия пока нам это нужно.
Условный оператор
О: «Ну еще в прошлом абзаце было все понятно — мы возьмем и расположим всё по возрастанию»
П: «… на каждом витке цикла мы будем сравнивать 2 результата. Если результат одного участника лучше чем следующего за ним, то поменяем их местами.»
Условные оператора могут быть простыми
Или делающие выбор из множества вариантов
Смысл опять прост — выбрать следующий шаг нашей программы.
Массивы
О: «У нас результаты просто в виде последовательности чисел…»
П: «Так… А как хранить наши результаты в памяти? Наверное это будет массив»
Массив — способ хранения списка ваших объектов. Т.е. просто соотношение, что на первом месте — объект1, на втором — объект2 и т.д.
В Java чаще оперируют коллекциями. Они могут быть реализованы поверх тех же массивов. Также, один из вариантов — хранить ссылку на следующий элемент — это будет уже список. Реализации таких структур отличаются по производительности относительно разных операций — поиск объекта, вставка в конце или начало и т.д.
Функции
О: «Мы там их просто сортируем, все очевидно».
П: «Сейчас мы сортируем по возрастанию. А что если потом надо будет по убыванию? Или вообще входные данные поменяются, а сортировка должна работать?».
В программировании часть кода можно выделить в обособленную функцию. По сути это просто выделенные шаги программы, которые можно переиспользовать. Зачастую такой функции можно дать имя, чтобы было проще понять что она делает и использовать в дальнейшем.
Все выше сказанные я бы и определил как «основы программирования». Это понимание как, зачем и почему программа работает.
Git естественно не входит в привычное понятия «Основ программирования». Просто на сегодня это то, чем разработчик сегодня просто не может не уметь пользоваться!
Что такое Git? Простыми словами — это программа-сервис, где вы храните вашу работу. Если чуть сложнее — это распределенная система контроля версий. Загружая очередную порцию изменений в коде вашего проекта, git сохраняет их в истории.
Отдельно прочитать про основы работы с Git можно в нашей отдельной статье. Поверьте, сегодня git — точно то, что стоит отнести к основам работы программиста. Потратьте время на его изучение.
Алгоритмы и структуры данных
Часто можно слышать, «алгоритмы» и «структуры данных» как одно целостное словосочетание. Это происходит потому, что зачастую определенный алгоритм работает поверх какой-то определенной структуры. Например:
Алгоритм | Структура данных |
---|---|
Сортировка | Массива |
Обход | Графа |
Поиск | В бинарном дереве |
Разворот | Односвязного списка |
На олимпиадах по программированию участники должны наизусть знать разных хитрые алгоритмы поисков путей в графе, обходов дерева и т.д. В реальной жизни общего представления о том какие задачи можно решить, используя определенную модель данных — достаточно. Например, понимать, что построение индекса по строке может быть эффективна в бинарном префиксном дереве…
Главный вопрос — «зачем мне нужно это знать?». Понимание алгоритмов как таковых формирует то самое аналитическое, последовательное мышление, о котором мы говорили в «основах программирования».
Курсы программирования
Когда обсуждали обучение программированию в целом, то говорили о необходимости ментора, того человека, который может подсказать куда копать. Ускорить и упростить процесс получения знаний можно с помощью курсов — как онлайн так и очных. Список платных и бесплатных ресурсов, которые можно использовать при обучении программированию:
- — молодой, но удобный агрегатор онлайн-курсов. Там собраны все курсы онлайн-школ по программированию и другим направлениям. — один из ведущих российских «онлайн-университетов». Дорого, но качественно. — образовательный портал с платными и бесплатными курсами от Mail.ru. Хороший выбор. — университет онлайн профессий. — есть далеко не все направления, но стоит заглянуть, особенно если хотите попытаться устроиться на стажировку в Яндекс. — англоязычные курсы. Есть интересные варианты, например совместно с Google запущенный курс по Advanced Kotlin для Android. — зачастую недорогие онлайн курсы. — это, конечно, не образовательная платформа как таковая, но ответы на многие вопросы можно найти там. Правда чем выше ваш уровень, тем меньше ответов можно будет получить, но на старте — самое то! — удобная онлайн платформа с видео курсами. Есть система «сертификации» по разным вертикалям, которые в том числе можно разместить нативно на StackOverflow
Работа программистом
Когда получены начальные знания, необходимые для программирования, встает вопрос — где их применять. Работу в IT я бы поделил на 2 большие части — работа в офисе и удаленная работа. На эту тему есть старая, но не теряющая актуальности статья про плюсы и минусы разных вариантов.
Работа в офисе
Нормально делай, нормально будет
«Делать правильно» — критически важно на начальных этапах погружения в профессию, т.к. переучиваться намного тяжелее чем учиться. Именно по-этому работа в сильной команде в офисе — лучший выбор для начала карьеры.
Сам по себе офис, если вы единственный разработчик на проекте много не даст. Важно присутствие более опытных коллег. Code review, неформальное общение за чашкой кофе — все это экспоненциально усиливает скорость получения знаний. Тут важна не «слепая вера» в безошибочность старшего товарища, а в общей атмосфере разных точек зрения в комнате. Критическое мышление — ваш помощник, чтобы формировать свое видение решения проблем.
Прежде чем перейти к удаленной работе я прошел путь
- Небольшая Web студия, которая разрабатывала приложения на заказ.
- Infotecs — работа в команде над криптопровайдером.
- Яндекс — работа в команде над браузером.
Удаленная работа
Стоит начать с того, что она подходит не всем. Не из-за уровня знаний в программировании, а потому что она требует большей самоорганизации, самоконтроля и ответственности. Я знаю крутых разработчиков, которым, на мой взгляд, было бы не комфортно работать удаленно.
Коммуникация — вторая большая проблема в удаленной работе. Необходимо поддерживать живое нерабочее общение, которое происходит само собой в офисе. Также — эффективное взаимодействие с вашей командной требует работы от всех. В офисе это на порядок проще. К тому же в офисе изначально все настроено для продуктивной деятельности, а о рабочем месте при удаленке надо думать самостоятельно.
И главное, что важно помнить — при выходе на рынок удаленной работы вы начинаете соревноваться с разработчиками со всех регионов. А при выходе на международную арену — со всем миром. Требования и к уровню программирования и к уровню Soft скиллов выходят на новый уровень.
Кстати и сама удаленная работа делится на 2 класса: фриланс от проекта к проекту и длительный контракт, по сути найм, но при нахождении вне офиса.
Фриланс
К фрилансу я отношу небольшие проекты, которые оплачиваются по факту или же на почасовой ставке. Зачастую ставка на фрилансе в пересчете на час работы может быть выше, чем работа по ТК в офисе или удаленно. Это происходит, потому что поиск проекта, вся работа с документами по сделке и т.д. не учитываются в этом времени. Грубо говоря — получение и согласование заказа на 20 часов заняло у вас еще 5 часов. При ставке 1 000 рублей в час (164т.р. при пересчете в рабочие часы в офисе) реальная ставка 20 * 1000 / 25 = 800 рублей. Ведь вы 5 часов потратили условно бесплатно.
Работа по ТК подразумевает отпуска, праздники и т.д. Фриланс прост как валенок. Работаешь — получаешь деньги, не работаешь — нет. Зато вы сами регулируете свою загрузку. Правда не сразу. Стартовать на фрилансе при сильной конкуренции — сложно. Для наработки портфолио придется тратить больше времени на поиск проекта чем на его реализацию.
На фрилансе проекты ищут либо уже по наработанной базе клиентов, либо на площадках:
- — русскоязычный ресурс поиска работы на фрилансе. — наверное крупнейший русскоязычный сайт, посвященный поиску проектов. — зарубежный сайт поиска работы на фрилансе. — один из самых известных сайтов по фрилансу на мировой арене. при почасовой работе — площадка, на которую сложно попасть, но она стоит того.
Постоянная удаленная работа
Разница между фрилансом и удаленной работы для меня в том, что она не подразумевает частую смену проектов. Длительная работа над проектом это большее погружение в разрабатываемый сервис, соучастие и вовлеченность.
Честно говоря, фрилансом, как описал выше я практически не занимался. Первую удаленную работу я нашел через платформу Toptal будучи еще в Яндексе. Это был проект на
10 месяцев с зарубежным заказчиком на полный удаленный рабочий день.
С момента начала своей удаленной работы я сменил порядка 5 проектов на Toptal. В перерывах между ними мониторил прямые вакансии от зарубежных компаний. Почему зарубежных? В связи с курсом, с 2014 работать с валютой стало намного выгоднее.
В итоге длительный проект нашел на StackOverflow.
Сравнение работы в офисе, фриланса и удаленной работы
Возможное сравнение всех вариантов приведено в таблице. Естественно некоторые опции могут отличаться от случая к случаю.
Работа в офисе | Фриланс | Удаленная работа |
---|---|---|
Время поиска несоизмеримо короче чем период работы. | Можно долго искать короткий проект. | Время поиска несоизмеримо короче чем период работы. |
Все плюшки оформления по ТК. Страховка, больничные, отпуска и т.д. | Никаких социальных льгот и гарантий. | Можно договориться на оплачиваемый отпуск. Командировки в офис к клиенту. |
Работа 8 часов в день, 5 дней в неделю. | Ненормированная загрузка, контролируемая разработчиком. | Работа 40 часов в неделю. Главное — результат. Не столь важно сколько времени тратишь в день. |
Фиксированная ЗП в месяц соразмерная с регионом проживания. | Сам контролируешь уровень дохода. Больше работы — больше заработок. | Фиксированная ЗП в месяц. Запросто может быть выше средней в регионе проживания. |
Всю бухгалтерию и налоги ведет работодатель. | Вся бухгалтерия на вас. При частой смене проектов — много бумажной работы. | Вся бухгалтерия на вас. При длительном контракте все идет по шаблону. |
Работа привязана к локации офиса работодателя. | Работа не привязана к месту. | Работа не привязана к месту. Могут быть «командировки» в офис клиента. |
Можно найти стажировку для Junior программиста. | Конкуренция как минимум на уровне Middle разработчика. | Клиент ищет удаленного разработчика, т.к. не может найти подходящего у себя в регионе. Требуется высокий уровень подготовки. |
Зарплата программиста
Самая интересная часть, не так ли? Но тут не будет однозначного ответа вида «100500 рублей». Также я не вижу смысл говорить о том, сколько стоил мой час или месяц в тот или иной момент времени.
Вместо этого, так как данный сайт посвящен Android программированию, давайте разберемся в возможной вилке зарплат именно для мобильного разработчика.
Для оценки уровня ЗП в офисе, на фрилансе и при удаленной работе используем данные из:
- — сайта для поиска работы. Чтобы сравнить вилку ЗП в России. — посмотреть распределение ставок в час в мире. от 2018 года на тему ставок фрилансеров, пользующихся их системой. — сервис по мониторингу уровня ЗП в мире. — там они пишут, сколько будет стоить работа топ 3% удаленных программистов для клиента.
Источник | Категория | Минимальная ЗП | Средняя ЗП | Максимальная ЗП |
---|---|---|---|---|
PayScale, Москва, 5 лет опыта | Работа в офисе | 83 333,33 руб. | 166 666,67 руб. | 250 000,00 руб. |
hh.ru, Android, Москва | Работа в офисе | 80 000,00 руб. | 136 779,22 руб. | 335 000,00 руб. |
hh.ru, Android, Все регионы | Работа в офисе | 55 000,00 руб. | 92 231,77 руб. | 270 000,00 руб. |
Payoneer отчет | Фриланс | 52 480,00 руб. | 230 912,00 руб. | 1 049 600,00 руб. |
Toptal официальный FAQ, почасовая оплата, ставка для клиента | Фриланс | 629 760,00 руб. | 813 440,00 руб. | 997 120,00 руб. |
Toptal официальный FAQ, fulltime, ставка для клиента | Удаленная работа | 512 000,00 руб. | 665 600,00 руб. | 819 200,00 руб. |
Upwork | Фриланс | 104 960,00 руб. | 247 544,56 руб. | 1 049 600,00 руб. |
Исходную таблицу можно найти по ссылке на Google docs.
Личностное развитие
Каким бы вы крутым разработчиком не были, важно помнить, что так или иначе вам придется работать с людьми. И тут вдруг становится важно то, как вы умеете ладить и общаться с коллективом. На сколько грамотно можете выражать свои мысли и подбирать доводы за предложенные идеи.
«Коммуникабельность, проактивность, работа в команде» — должны быть не пустыми словами в резюме. Это может стать вашим личным кредо. Вы должны решать проблемы вашего клиента, а не создавать ему новые.
Разговаривайте на языке клиента, будьте готовы, что вас могут не понять — и это нормально. Учитесь отстаивать свою точку зрения, но в то же время слышать и уметь принять чужое мнение.
Вместо заключения
Теперь, когда понятно «что такое программист» пришло время выбрать для себя язык программирования.
Никогда не переставайте учиться и не бойтесь делиться знаниями и опытом. Никто и никогда не бывает прав во всем на 100%, а порой правильно поставленный вопрос, пусть и самый «очевидный» приводит к интересным обсуждениям и появлению новых знаний. Специально для вас я собрал ряд примеров кода и даже собрал готовое приложение. Обо всем это читайте на отдельной странице.
Источник
Учитесь программированию с этими замечательными сайтами
Решили изучить программирование, но не знаете, с чего начать? Сегодня мы поделимся с вами подборкой полезных сайтов, которые помогут освоить эту нелегкую науку. Но прежде, чем мы начнем, озвучим несколько непреложных истин, незнание которых сделает процесс учебы неэффективным.
Во-первых, конечная цель . Без ее постановки успеха не добиться. Если вы решили стать крутым программистом просто так или ради большой зарплаты, то это путь в никуда. Цели должны быть реальными. Например, выучиться ради трудоустройства, чтобы стать Junior-ом (младший программист). Золотых гор с такой квалификацией вам не видать, но несколько лет упорного труда и вы Middle с вполне достойной оплатой труда.
Но надо понимать, что это нелегкий путь. И что деньги — это хороший мотиватор только до тех пор, пока их не хватает. Если вы обеспечены (и не жадны патологически), то большая зарплата погоды не сделает и не заставит вас изучать программирование еще глубже.
Либо ваша цель создать игру, сайт или приложение для себя. Если у вас горят глаза и вам нравится программировать, то учеба будет легкой. Как показывает статистика, а также рассказы бывалых программистов, большинство (2/3 из них) — самоучки.
Во-вторых, определитесь с языком программирования (ЯП). Лучше всего начинать с относительно простых ЯП, например, PHP или Python. Изучать ООП (объектно-ориентированные ЯП) с нуля не стоит. Это сложно и непонятно. Ориентируйтесь на свою цель (что именно вы хотите создать и какой язык для этого подойдет лучше всего) и возможности (сколько времени сможете уделять учебе и прочие нюансы).
В-третьих, параллельно изучайте английский язык. Это поможет как с пониманием программирования (львиная доля документации ЯП на английском языке), так и с поиском работы. Программисты, знающие английский, куда более востребованы на рынке труда. Теперь непосредственно к инструментам обучения.
Русскоязычные сайты
Skillbox
Образовательная платформа, где обучают не только программированию, но и маркетингу, дизайну, управлению и т.д. Для будущих программистов доступно 28 различных курсов, охватывающих WEB-программирование, мобильную разработку, тестирование, создание игр и другие сферы. Плюс Skillbox — гарантированное трудоустройство после завершения обучения. По крайней мере, так утверждают создатели платформы.
ITVDN
Крупный образовательный проект, делающий упор на обучение посредством видеоуроков и видеолекций. Имеется обучение языкам программирования, разработка под iOS и Android. Здесь есть бесплатные вебинары, но все основные курсы — платные. Наличие интерактивного тренажера, а также программы обучения сотрудников выделяют ITVDN среди конкурентов. ITVDN занимает лидирующее место среди наших соотечественников, судя по отзывам.
Яндекс.Практикум
Яндекс предлагает освоить свыше 10 курсов, большая часть которых направлена на фронтенд-разработку. Здесь также есть курсы по аналитике данных, Data Science, алгоритмам, дизайну интерфейсов и другие. Вводные занятия Яндекс.Практикум бесплатные, а за оставшийся курс нужно будет заплатить.
Нетология
Платформа предложит вам 16 курсов, охватывающих различные сферы программирования: фронтэнд, бэкенд, мобильная разработка и т. д. Есть здесь и бесплатные уроки, но они больше для ознакомления, чем для серьезной учебы. Все курсы Нетологии по сложности разбиты на две части: для новичков и для профи.
GeekBrains
Огромное количество курсов как по программированию, так и по смежным профессиям. В список входит веб-разработка, Python-разработка, проджект-менеджмент, продакт-менеджмент, интернет-маркетинг и SMM, дизайн, а также разработка под Android. Плюсом онлайн-университета является то, что каждый курс подробно расписан. План обучения, преподаватели, знания, которые вы получите после обучения — все разжёвано и разложено по полочкам. Гарантированное трудоустройство тоже обещают.
Stepik
Очень разносторонний образовательный ресурс : здесь есть и платные, и бесплатные курсы. Причем как по популярным ЯП (Python, Java, C++), так и по машинному обучению, нейронным сетям, Data Science. А для тех, кто далек от программирования, есть курсы по гуманитарным наукам (даже по подготовке к ЕГЭ).
SkillFactory
13 курсов для программистов разного профиля , включая Data Science и аналитику. Помощь наставников и сертификат о прохождении обучения. В общем, все то же самое, что и у конкурентов, разве что образовательных программ поменьше.
HTML Academy
Ресурс , который специализируется на обучении веб-разработке, в частности HTML и CSS. Ознакомительный курс бесплатный, а за продвинутое обучение придется раскошелиться. Обучение происходит в игровой форме непосредственно в вашем браузере, что очень удобно.
Hexlet
115 курсов по верстке и программированию, обучение с наставником. Плюсы Хекслета – возможность пройти 21 бесплатный курс (PHP, Python, JS, Bash), практика в браузере, а также доступ к сообществу, где можно задать вопросы и обсудить встречающиеся в процессе обучения проблемы. Цены на услуги платформы демократичны.
JavaRush
Лучший русскоязычный проект для обучения ЯП Java . Обучение проходит в игровой форме с забавными диалогами и персонажами (слизанными под копирку с «Футурамы»). Упор сделан на практику. Полный курс включает в себя 1200 заданий, после выполнения которых вы станете крепким Junior Java Developer.
Javascript.ru
Еще один специализированный ресурс , который поможет освоить ЯП, фреймворки и другие технологии для WEB-программирования. Внушительная теоретическая база (бесплатно) и платные курсы длительностью от 5 до 6 недель — этого будет достаточно, чтобы овладеть необходимыми основами.
Англоязычные сайты
Codecademy
Одна из самых популярных образовательных зарубежных платформ . Здесь обучают всем самым востребованным ЯП. Базовые курсы бесплатные, для получения уровня «Профи» необходимо оплатить ежемесячную/ежегодную подписку.
freeCodeCamp
Проект в минималистичном стиле , который обучит вас Full Stack программированию на javascript. Обучение бесплатное и самостоятельное.
Pluralsight
Проект включает в себя как курсы по популярным ЯП, так и обучение по следующим направлениям: IT Ops, Data Professional, Architecture and Construction, Manufacturing and Design, Business Professional, Information and Cyber Security. Очень популярен за рубежом, если верить отзывам.
Udemy
Образовательная платформа позиционирует себя как «Самый большой выбор курсов в мире». Здесь можно как учиться, так и стать платным преподавателем. Помимо курсов, охватывающих практически все стороны программирования, на Udemy можно обучиться дизайну, маркетингу, музыке, фотографии и многим другим вещам.
Codewars
Ресурс предлагает изучить множество ЯП (включая редкие), но для того чтобы зарегистрироваться нужно доказать свои знания (достаточно знать основы выбранного языка). Для совсем чайников Codewars не подойдет. В подборку сайт попал только по причине своей популярности среди пользователей.
Coursera
Онлайн-платформа сотрудничает с ведущими университетами мира. 700 различных образовательных программ, сертификаты по завершению обучения, возможность прохождения бесплатного обучения делают Coursera серьезным конкурентов среди подобных проектов.
Каких рекомендаций следует придерживаться, чтобы обучение продвигалось эффективнее
- Непрерывное систематическое обучение. Программирование — сложная наука и какого-либо двухнедельного интенсива не хватит, чтобы стать программистом. Вы должны будете учиться долго и непрерывно. Помните, что лучше заниматься учебой полчаса, но каждый день, чем 4 часа раз в неделю.
- Отдых как часть учебы. Чтобы не потерять мотивацию и не запутаться в океане информации (а в программировании ее много), нужно вовремя отдыхать и не перегружать себя.
- Практика — соль программирования. Можно вызубрить кучу учебников по программированию, но так и не суметь написать рабочий код. Нужно решать задачки, выискивать баги в чужом коде и вообще писать много кода, чтобы овладеть нужными навыками.
- Последовательное изучение ЯП. Не следует прыгать от одного к другому, лучше отточить знание и умение выбранного ЯП, освоить смежные технологии (фреймворки, библиотеки) и лишь потом браться за изучение чего-то нового.
- Не зацикливаться на выбранном курсе. Во время обучения информацию необходимо брать из разных источников. Это позволит охватить тему более широко. Если изучаете программирование на курсах, не поленитесь — почитайте учебники по вашему ЯП, посмотрите самые популярные видео на Ютубе, пообщайтесь с другими начинающими или (что еще лучше) опытными программистами.
- Алгоритмы. Понимание, как работают алгоритмы — это необходимый навык для любого программиста независимо от того, на каком языке он пишет. Для начала прочтите хотя бы одну книгу по данной теме, чтобы иметь о ней представление.
- Pet-проект. Создайте свой собственный домашний проект, на котором вы будете оттачивать полученные знания.
- Не сдавайтесь. В процессе обучения у вас будут опускаться руки. Новые, казалось бы, нерешаемые проблемы будут давить на вас. Это нормально. Все программисты через это проходили. Просто продолжайте учиться и не опускайте руки.
Заключение
Сайтов, обучающих программированию в сети, очень много. Мы выбрали лучшие. Изучайте написание кода, развивайтесь и пусть вашей мечтой станет переезд на работу в Силиконовую долину!
Источник
Программирование
Телеграм-бот криптовалютного кошелька на основе php-telegram-bot
В интернет-коммерции сейчас активно развивается автоматизация мессенджеров. Полезные боты растут, как грибы после дождя. Тут вам и магазины, и онлайн-помощники, инструменты для аналитики, и прочие важные и полезные решения. Современный бот в телеграмме может полноценно заменить целый сайт и вывести бизнес на новый уровень. Даже криптовалютный кошелек можно создать с помощью бота. Этим и займемся.
Список полезных IT-ресурсов для программистов
В этой статье собран список сайтов для изучения программирования, поиска интересной и полезной информации, знакомства с новыми технологиями.
Шпаргалка программиста — парадигмы, проектирование, тестирование
В данной статье собрана краткая информация о том, что должен знать IT-специалист: парадигмы программирования, шаблоны проектирования, тестирование, технологии разработки и многое другое.
Пять побед в четырех номинациях. e-Legion — призер Tagline Awards
23 апреля в Москве состоялась церемония награждения призеров премии Tagline Awards 2020–2021 — крупнейшей премии Восточной Европы в сфере digital. Призовые места в четырех различных номинациях получили пять мобильных приложений, созданных компанией e-Legion, входящей в группу компаний DZ Systems
Дмитрий Завалишин. В начале был «Гуру»
В последние месяцы 2020 года свой пятнадцатый день рождения отметила группа компаний DZ Systems, — один из заметных игроков на рынке ИТ, — известная масштабными проектами, реализованными для Сбербанка и Альфабанка, Теле-2 и Ulmart. Однако в биографии генерального директора компании Дмитрия Завалишина есть крупный проект, реализованный еще до основания DZ-Systems, но известный всем пользователям рунета – «Яндекс.Маркет». По словам Дмитрия Завалишина, единый проектный офис, объединяющий входящие в холдинг компании, создан на основании опыта, полученного в ходе работы с этим проектом.
Искусственный интеллект по правилам этики
Азимовская идея «трех законов робототехники» все ближе к реализации. На днях правление «Сбера» утвердило принципы этики разработки и применения технологий искусственного интеллекта: контролируемость и управляемость его систем, их стабильность и надежность, прозрачность и предсказуемость и использование технологий только для улучшения клиентского опыта. Конечно, внутренние правила и регламенты одной, пусть даже и крупной компании, не имеют юридической, да и вообще никакой силы для ИТ-отрасли в целом. Однако идея внедрения подобных стандартов заинтересовала экспертов.
Золотые приложения e-Legion
Три мобильных приложения, разработанных входящей в холдинг DZ Systems компанией e-Legion получили призовые места на конкурсе «Золотое приложение». Церемония награждения лауреатов состоялась 12 февраля.
Обзор JavaScript Query от Webix
Webix JavaScript Query — это современный инструмент для фильтрации больших объемов данных. Минималистический дизайн в совокупности с дружественным интерфейсом виджета, делают его эффективным помощником при работе с таблицами. Это решение успешно применяется в собственных проектах Webix.
Как выбрать компанию по разработке веб приложений?
Сейчас интернет стремительно развивается и появляются новые сайты с онлайн сервисами, которые становятся важными в жизни людей и помогают решать разные задачи.
Заказная разработка программного обеспечения
В любой компании и на предприятии каждый день происходит работа с большим количеством информации. Различная финансовая отчетность, бухгалтерия, приказы и договора, методички и многое другое — все это требует надежного хранения и эффективного управления.
Факты о внештатном программировании
Если вам нравится идея выбирать проекты, которые вас интересуют, работать из дома по собственному графику и хорошо зарабатывать, не покидая домашнего уюта, то карьера программиста-фрилансера, выполняющего работу из дома, может быть просто возможностью что ты ищешь.
В чем разница между параметрами функции и аргументами?
Рассматриваем, в чем разница между параметрами функции и аргументами. Разбираем на примерах.
Кратко об Agile
Сегодня Agile становится самой популярной и широко используемой средой разработки программного обеспечения в мире.
Google Chrome или Яндекс Браузер выдают черный экран
Избавление от черного экрана в браузерах Google Chrome или Яндекс Браузер.
Подключение и настройка SSH
Краткая инструкция по настройке и подключению через SSH к удаленному серверу с помощью PuTTY и консоли.
Фреймворк Yii3
В данной публикации пойдет речь о новой версии фреймворка Yii. Что нового в Yii3, как сильно он изменится, что добавлено нового и убрано старого, когда именно выйдет.
Как правильно задать вопрос по программированию
В этой статье обсудим, как программисту правильно задать вопрос на форуме по программированию и получить ответ.
Особенности enterprise разработки
Рассматриваем основные особенности и сложности разработки enterprise приложений.
Установка Sphinx для документирования кода
Объясняю, как установить Sphinx на ваш компьютер для документирования программ, написанных на разных языках.
Разделение проблем в программировании
В данной статье обсуждаем такое понятие, как разделение проблем в программировании.
Антипаттерн и паттерны проектирования
Рассматриваем антипаттерн проектирования при разработке программного обеспечения. Находим с его помощью правильное решение проблем.
Глобальные объекты и переменные в ReactJS — антипаттерн
Обсуждаем многократное использование глобальных объектов и переменных в библиотеке ReactJS
Как сделать автоматическое выравнивание кода в Atom?
Объясняю, как в редакторе Atom привести в порядок программный код с помощью функции автоматического выравнивания.
Нумерация версий программного обеспечения
Правильно нумеруем новые версии вашей десктопной программы или веб-приложения используя разные варианты номерования.
Как могут взломать базу данных MySQL?
Несколько простых советов которым следует придерживаться для обеспечения безопасности вашей базы данных.
Корпоративный блог
Хотите создать блог компании, но не знаете о чем писать или нет времени? Получите готовое решение!
Источник