I am a top-notch .NET developer freelancing worldwide. I have been coding for more than 15 years. I mostly deal with ASP.NET Core (C#, .NET Core) software development stack these days. I would consider only 100% remote opportunities. I apply SDLC, -ilities, OOAD, SOLID and other engineering kung fu... But always try to use KISS principle. Top 1% on Stack Overflow. Top 3% of Freelance Developers. Microsoft MVP Awardee (7 times). Master Degree in Computer Science. Open source author and community moderator.

Top 1% on Stack Overflow.
Top 3% of Freelance Developers.
Microsoft MVP Awardee (7 times).
Master Degree in Computer Science.

I work as a remote contractor and can make contracts worldwide, as well as process international bank payments. I have all needed work permissions and don't need any visa because I am acting as a one-person company.

Email: me@dmitry-pavlov.com
Skype: pavlovdmitry
Контакты

Достижения

Все достижения (18)

Наибольший вклад в теги

Все теги (103)

Лучшие ответы пользователя

Все ответы (292)
  • Как вы освоили шаблоны проектирования?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    Когда начался бум и восторг вокруг концепции паттернов проектирования, выкрики "GoF рулит!" и так далее, я озадачился тем, чтобы понять, что за шум?

    По своей сути - паттерны - это обычные шаблоны проектирования. Заимствовано у обычных архитекторов (те, которые зданиями занимаются). Суть проста. В работе архитектора есть задачи, которые удобно решать одним или несколькими проверенными способами.

    По аналогии в проектировании софта имееются свои архитектурные вопросы вроде разбиения приложения на компоненты/модули, организации зависимостей между ними, распределение функциональных обязанностей и т.п. Как ловко подметили авторы книжки из этой банды четырех (The "Gang of Four") в нашей индустрии можно также выделить некоторе количество типовых шаблонов, проверенных на практике, чтобы тем самым не наступать на уже обойденные другими грабли.

    Суть постижения паттернов заключается в том, чтобы осознать в каких ситуациях правильно использовать тот или иной шаблон проектирования и правильно его применить. Важно понимать при этом, что формула "чем больше паттернов я придумал засунуть с свое приложение - тем лучше" - неверная. Использовать их следует с умом и только там, где они действительно нужны. Кроме того, патерны устаревают, превращаются в анти-паттерны по мере развития технологий (которые в нашей области делают это более чем стремительно). Ну и, конечно, есть шаблоны общепринятые и есть те, которые успешно используются в узких кругах.
    Тут тоже надо понимать, что это не догма какая-то - типа 10 священных паттернов проектирования :)

    Чтобы понять, где они нужны - нужен опыт. То есть (я лично убежден), что учиться на ошибках других может только крайне ограниченное число людей. Все остальные обязаны набить шишки самостоятельно :)

    К изучению паттернов я дам такие советы:

    1) Прочтите пару книжек, чтобы понять, что это за зверь и с чем его едят. Можно взять одну из вариаций книжки GoF или какие-то производные для вашего стека разработки - познакомиться с основными популярными шаблонами. Сразу после этого я посоветовал бы прочесть книжку "Горький вкус Java" (Брюс Тейт) - она про анти-паттерны. Это чтобы понять обратную сторону их использования. Мне понравилась и уберегла думаю от многих проблем. То что на примере Java - неважно. Речь идет о шаблонах, так что представителям других стеков (к которым отношусь и я) будет просто понять все равно.

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

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

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

    Я даже пожалуй посоветовал бы подойти к освоению айтишной архитектурной мудрости с другой стороны - со стороны нефункциональных требований или так называемых "-ilities" - их много. Тут вот описаны 7 штук. А вообще их десятки.

    Среди прочих - такие как maintainability (простая поддержка кода), scalability (масштабируемость), extensibility (расширяемость), availability (устойчивость ) и тп. Если, проектируя свое приложение, вы задумываетесь об этих "илитях" и стараетесь их обеспечить в необходимом проекту объеме, то, как правило, ваше приложение будет иметь отличную архитектуру. При этом шаблоны проектирования в ней появятся лаконично сами собой.

    Поскольку идея использовать шаблоны - это попытка опытных программных инженеров дать десяток готовых рецептов менее опытным, чтобы пока они не научились варить "вкусную кашу", они не варили уж что-то совсем несъедобное. :) Учитесь "готовить", разбирайтесь в -ilites :) и все будет хорошо
    Ответ написан
  • Где можно найти работу для повышения навыков?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    Удаленно редко кто хочет нанять человека, который учится. Устраивайтесь (по вечерам, на полдня, как попало) в офис аутсорс компании (человек на 50+) на пол/четверь ставки или "за спасибо" джуниором/интерном/практикантом/кем-попало. За полгода/год - подровняете скиллы и технические и проектные (не менее, а то и более важные в нашей индустрии). Это хорошая и быстрая школа.

    P.S. Относительно мотивации. Это обычная лень и отсутствие навыка не начинать ерундовых дел и доводить неерундовые до конца. Читайте книги и статьи. Со временем количество даже не слишком понятной информации перейдет в качественно новое понимание концепций программной инженерии. Законы диалектики никто не отменял :) количество перейдет в качество :) Главное не лениться и уделять своему развитию каждый день не менее 15 минут (больше - лучше) только без пропусков. Еще два правила полезных тут и вообще в целом:
    1) принцип Парето (чтобы эффективно тратить свои ресурсы)
    2) закон Старджона (чтобы не быть слишком серьезным и не перегреваться) :)

    Найти и разобраться что это за такое - домашнее задание :)

    UPDATE: наткнулся вот на статью ain.ua/2016/06/22/656143 - Практическое руководство для тех, кто хочет стать профессиональным веб-разработчиком
    Ответ написан
  • Какие есть хорошие книги по архитектуре приложений?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    По архитектуре приложений ничего дельного нет. Все что мне доводилось видеть - это описание того или иного подхода, рассморение его достоинств. Общего обзора по этой теме нет (я не встерчал). Чтобы разбраться в вопросе архитектуры ПО, начинайте читать отсюда и дальше по ссылкам из блока see also. Это, пожалуй, будет самый быстрый способ. Если что-то непонятно по тому или иному вопросу - подчитывайте статейки по этой теме (их много даже на русском на всяких хабрах и подобных ресурсах).

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

    Я сам так сделал когда-то. Весьма неплохо разобрался :)
    Ответ написан
  • Как правильно работать на oDesk?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    На фрилансе с иностранными клиентами важно:
    • Знание английского. Про уровень писал недавно 'Freelance FAQ: какой уровень английского нужен?'
    • В целом - умение вести официальную (формальную) переписку / переговоры с заказчиком (включая тех, кто далек от технологий и может поставить только бизнес задачу)
    • Умение конвертировать бизнес задачи в технические (составить план проекта, описать техническую часть работы, оценить объем работы)
    • Умение вести отчетность (daly status reports, time tracking, etc..) и управлять рисками (своевременно предупреждать о вероятности их появления, предлагать способы устранения)
    • Умение выдавать вовремя результат (не ждать что кто-то вас будет пасти и подгонять когда надо) и гарантировать его качество (то есть помимо разработки, уметь проверять и перепроверять результат своей работы)
    • Еще раз - знание английского. Умение эффективно вести коммуникацию на понятном клиенту языке - это 80% успеха. Оставшиеся 20% - это уже дело техники. Так что практикуйте этот навык постоянно. Читайте, пишите, слушайте, смотрите все, что нравится на английском. Если есть возможность общаться - не упускайте шанс. Пусть даже письменно. Пусть не с носителями.
    • Ну и следите за спросом - какие технологии в тренде и наиболее востребованы. Старайтесь добавлять в свой патронташ те из них, которые вам максимально близки, постепенно расширяя список или даже - полностью меняя свой стек разработки
    Ответ написан
  • Как ИП оказывать услуги без бюрократии?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    Договор всегда можно подписать по почте, обменяться сканами для того чтобы начать работать и потом в бекграунде - переслать бумагу туда сюда обычной почтой.

    Для ИП на УСН6% налоговая не просит макулатуру предоставлять. Можете оставить себе только сканы, если бумага сильно раздражает.

    Бухгалтерию вести можно онлайн достаточно удобно в онлайн сервисе MoeDelo я пользуюсь, все устраивает. Есть похожие.

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

    Ликбез по ИП - советую сайт ipipip.ru. Выглядит он устаревшим, но информация актуальная. Мне в свое время очень помогла сориентироваться.
    Ответ написан