kamyshev.code
1.81K subscribers
40 photos
565 links
Архитектура, код, софт-скиллы и всё остальное. Вопросы, пожелания, комментарии — @igorkamyshev

https://kamyshev.me
Download Telegram
​​Как начать

В разработке есть порочный круг: не берут на работу, потому что, нет опыта, потому что, не берут на работу. Есть два способа его разорвать:
1. Много читать, искать людей готовых помочь, делать свои проекты.
2. Купить онлайн-курс.

Сначала о втором.

Свое время и нервы можно купить за деньги. Но важно отфильтровать стремные варианты.

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

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

#как_начать #партнерский_материал
Как начать

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

Ментора можно найти на сходках локальных сообществ, в профильных чатах или в Твиттере. Этот же человек подскажет какие книжки читать и какие проекты делать.

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

Список компаний, которые хорошо относятся к стажерам и джуниорам

#как_начать
​​Я уже писал о том, что любая система должна вести себя предсказуемо. Теперь о способах этого добиться.

Абстракция

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

sendNotificationToUser — где-то на верхних слоях, а sendSms — много ниже, callSmsGateway — совсем внизу.

Правильный путь — выдерживать в одной программной единице (функции, классе, модуле) один уровень абстракции.

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

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

#проектирование #архитектура
Python

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

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

SkillFactory запустили Курс по Python для веб-разработки полного цикла, там полно живого опыта — три полноценных проекта под присмотром людей из индустрии. Хорошая возможность освоить язык быстро и без боли.

#языки #партнерский_материал
​​Простота

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

Код должен быть написан так просто как это возможно, но не проще. Соблюсти баланс бывает сложно, но на это нужно обращать внимание.

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

#проектирование
История: когда нужно пожертвовать скоростью ради простоты

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

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

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

В итоге, я просто переписал этот кусок кода, и теперь пользователь ждет пока выполнятся все дополнительные штуки. Ответ занимает 1 секунду.

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

#кейс #проектирование