Что должен знать middle c
Перейти к содержимому

Что должен знать middle c

  • автор:

Что должен знать Middle-разработчик

Что должен знать Middle-разработчик? Этот вопрос актуален как для тех, кто претендует на вакансию мидла, так и для тех, кто посматривает в сторону продвижения. Сайт tproger.ru задал этот вопрос самим разработчикам.

Константин Першин, Frontend JavaScript разработчик компании RentaTeam:

«Стоит отметить, что несмотря на то что в IT выработана шкала для оценки программистов (trainee, junior, middle, senior, lead), с которой более или менее все согласны, с точным определением каждого уровня общего мнения среди компаний пока нет. Поэтому каждая компания устанавливает внутренние требования к навыкам каждого уровня».

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

Нина Бурминская, инженер-программист 1 категории компании ICL Services:

«Позиция Middle-разработчика предполагает не только уверенное знание языка программирования, но и широчайшие познания в смежных технологиях. Позиция Middle накладывает на специалиста ответственность не только программировать «всё что угодно», но и обучать, оптимизировать код, разбирать и поддерживать чужой код, как будто родной. Фактически сейчас для вакансий Middle-разработчика предъявляются требования, как несколько лет назад для Senior».

Мы выяснили, что должен знать Middle-программист в 2020 году, и собрали общие вопросы с собеседований, по ответам на которые работодатели определяют, «дорос» кандидат до мидла или нет.

Hard skills

Каков ваш уровень владения языком программирования и сопутствующими инструментами?

Олег Власенко, заместитель генерального директора SimbirSoft:

«От программиста-джуна ожидается знание всех конструкций языка, знание большей части стандартной библиотеки. Знакомство с фреймворками (хотя бы с одним), инструментами коллективной разработки (систем контроля версий, таск- и баг-трекеров, естественно, IDE и др.). Требования к мидлам существенно выше. Как правило, ожидается доскональное знание базы (в том числе синтаксиса используемых языков), опыт работы и уверенные теоретические знания стандартных библиотек, необходимых фреймворков и инструментов».

В каких проектах вы участвовали? Сколько из них вели сами?

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

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

Каков ваш навык работы с базами данных?

Работаете с бэкендом? В таком случае вы должны свободно обращаться к базам данных, иметь навыки работы с одной или несколькими СУБД.

Евгений Рудаков, программист PHP, чаптер-лид хостинг-провайдера REG.RU:

«Знать и уметь строить оптимальную архитектуру БД. БД зачастую является самым узким местом производительности проекта. Менять архитектуру БД на живом проекте очень проблематично и дорого».

Это основное из того, что должен знать Middle-разработчик. Не стоит забывать и о нормализации, денормализации и характеристиках каждой нормальной формы.

Расскажите о своём уровне владения выбранной IDE

Нужно уметь без проблем подключать к проекту библиотеки, знать главные преимущества и недостатки среды, свободно настраивать и использовать горячие клавиши. Это то, что должен знать Middle-разработчик на уровне IDE.

Другие технические навыки

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

Константин Першин, frontend JavaScript разработчик компании RentaTeam:

«Что касается технических навыков Middle-разработчика по frontend JavaScript, то специалист такого уровня должен:

  • знать один из популярных JS фреймворков (React и Vue);
  • знать SASS/SCSS/Less/PostCSS;
  • уметь самостоятельно настроить систему сборки проекта Grunt/Gulp/Webpack, работать с голым JS (ES5, ES6, ES7);
  • знать и понимать RESTful интерфейсы;
  • уметь пользоваться средствами совместного использования кода (Git + GitFlow).

Также есть дополнительные навыки, которые дают преимущества. Большим плюсом в работе будут:

  • опыт разработки серверного кода под Node.js, TypeScript;
  • понимание SOLID, Dependency Injection, знание Linux (Debian-like);
  • опыт работы с TDD/BDD, тест-фреймворки (Mocha, Should, Chai, Jest);
  • знание Docker (большим плюсом будет Kubernetes/Docker Swarm);
  • опыт в PostgreSQL/MySQL etc».

Денис Арчаков, разработчик Holyweb:

«Самое важное для мидла, это знать, как изнутри работает используемая тобой технология, твой фреймворк. Не то, как он производит рендер (с помощью VDOM и т. п.), а как код написан, как происходит магия. Открой GitHub, посмотри исходники React, как, например, this.setState заставляет компонент делать рендер».

Какие методологии разработки вы знаете? По каким из них работали?

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

Что ещё должен знать Middle-разработчик

Евгений Рудаков, программист PHP, чаптер-лид хостинг-провайдера REG.RU:

  • «Знать и уметь писать оптимальные запросы по выборке данных (DML-запросы).
  • Немного знать про ACID, понимать, что это такое и зачем нужно.
  • Знать три столпа ООП (наследование, полиморфизм и инкапсуляция).
  • Знать, что такое шаблоны проектирования и зачем они нужны. Понимать различия между ними.
  • Понимать, что такое SOLID и когда он уместен.
  • Знать и понимать, что такое тестирование кода и как оно реализуется.
  • Желателен опыт в написании тестов. Это заставляет мозг разработчика генерировать совершенно другой код. Я специально поставил этот пункт ниже SOLID и шаблонов проектирования: сначала SOLID и шаблоны, а только потом тесты. Тогда будет получаться код, который будет легче покрываться тестами».

Soft skills

Насколько вы коммуникабельны?

Если в случае с Junior-программистом коммуникативные навыки просто важны, то для Middle-разработчика они обязательны.

Константин Першин, Frontend JavaScript разработчик компании RentaTeam:

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

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

Ваши навыки работы в команде

Николай Фетюхин, генеральный директор MST:

«С точки зрения soft скиллов Middle-разработчику, конечно, нужно осваивать компетенции: ведение переговоров, общение с командой, иметь представление об управлении командой. Эти навыки пригодятся в дальнейшем карьерном росте».

Умеете ли вы разрешать конфликты?

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

Лев Кочаков, ведущий PHP-разработчик ГородРабот.ру:

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

Каков ваш уровень английского языка?

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

Способны ли вы доступно доносить свои идеи, убеждать в их правильности?

Олег Власенко, заместитель генерального директора SimbirSoft:

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

Можно ли вас охарактеризовать, как внимательного человека?

Савелий Бондаренко, руководитель практики Frontend компании «Рексофт»:

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

Если возникла проблема, как вы будете её решать?

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

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

Можете ли вы оценить время выполнения задачи?

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

Евгений Рудаков, программист PHP, чаптер-лид хостинг-провайдера REG.RU:

«Мидл уже имеет достаточный опыт работы, что позволяет ему декомпозировать задачи более-менее правильно. Мидл умеет декомпозировать, а значит он может точнее оценивать задачи. Он должен уметь соблюдать сроки. Это умение нельзя переоценить».

Планируете ли вы развиваться до сеньора или тимлида?

Евгений Рудаков, программист PHP, чаптер-лид хостинг-провайдера REG.RU:

«Плох тот солдат, что не мечтает стать генералом. Перефразируем: плох тот мидл, что не мечтает стать сеньором/архитектором/тимлидом. Мидл должен всегда хотеть развиваться. Жажда саморазвития будет вытаскивать мидла из его рутины (а у него будет рутина) и отправлять развиваться дальше».

Выводы

Так завышены ли сегодня требования к мидлам? На этот счёт мнения расходятся, но почти все специалисты сходятся во мнении, что каждая компания диктует свои правила, и то, что должен знать Middle-разработчик, будет напрямую зависеть в том числе от должности, на которую он претендует.

Олег Власенко, заместитель генерального директора SimbirSoft:

«Не завышены ли требования к мидлам? Возможно, кто-то из IT-специалистов сталкивался с тем, что, уже несколько лет будучи мидлом, на собеседовании в какой-либо компании его оценивают как джуниора. Связано это, как правило, с двумя факторами: первое — разные требования в разных компаниях. Второе — часто в уровень квалификации, кроме перечисленных выше hard и soft skills, ещё включают погружённость сотрудника в предметную область, знание специфики бизнеса. Эти знания делают сотрудника ценным для текущей организации, но могут значить меньше в новой для него организации».

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

[customscript]techrocks_custom_after_post_html[/customscript] [customscript]techrocks_custom_script[/customscript]

150+ вопросов по .NET для Junior, Middle и Senior

150+ вопросов по .NET для Junior, Middle и Senior

11.11.2020

147463

Рейтинг: 5 . Проголосовало: 23
Вы проголосовали:
Для голосования нужно авторизироваться

advertisement advertisement

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 10 ноября 2020 года. Оригинальная версия на украинском языке доступна по ссылке.

На DOU размещено более 450 вакансий для .NET-разработчиков, что свидетельствует о популярности этой технологии. Редакция DOU собрала вопросы, которые .NET-разработчики задают своим коллегам на технических собеседованиях. Готовьтесь на здоровье 🙂

Вопросы для Junior

Общее

1. Назовите основные принципы ООП.

2. Что такое наследование, инкапсуляция, абстракция, полиморфизм: приведите примеры (желательно из собственного опыта). От какого класса неявно наследуются все классы в .NET? Разрешено ли множественное наследование в C#?

3. Что такое рекурсия?

4. Что такое лямбда-выражение?

5. Что такое параллельное программирование (многопоточность) и его назначение? Какие классы используются?

6. Что такое JSON?

7. Как вы понимаете REST?

8. Расскажите о SPA concept.

9. Какие GoF-паттерны использовали?

10. Какая разница между GET и POST HTTP методами?

11. Какую проблему решает Docker? Каковы его плюсы и минусы?

12. Чем принципиально отличаются unit-тесты от интеграционных тестов?

Обработка исключений

13. Что такое Exception?

14. Для чего служат try, catch, finally? В каком случае может не выполниться блок finally?

15. Что такое call stack? Какие ключевые слова вы знаете?

Платформа .NET

16. Что такое ASP.NET?

17. Какие существуют типы Action filters?

18. Что такое Web Service?

19. Что такое CLR?

20. Что такое сборщик мусора (Garbage Collector) на базовом уровне?

21. Что такое делегат?

22. Отличается ли Delegate от Action?

advertisement advertisement

23. Что такое LINQ и для чего используется? Приведите несколько примеров применения LINQ.

24. Что такое пространство имен (namespace) и зачем это нужно?

Типы данных, коллекции и структуры данных

25. Какие типы данных вы знаете?

26. Какие примитивные типы знаете?

27. Что такое Nullable-тип?

28. Что такое тип значения, а что такое тип ссылки? Что из этого class, а что struct? В каком участке памяти они хранятся?

29. Чем отличаются value от reference type? String — это reference или value?

30.В чем отличие между string builder и string?

31. Что такое дженерики? Какие проблемы они решают?

32. Что такое boxing / unboxing?

33. Что такое Array, List, HashSet, Dictionary? Приведите примеры использования этих структур данных. Какая сложность операций с ними (поиск, вставка, удаление)?

34. Какие знаете коллекции?

35. Что делает оператор yield?

Классы, структуры и интерфейсы

36. Что такое класс?

37. Чем отличается класс от абстрактного класса?

38. Чем отличается абстрактный класс от интерфейса? Для чего нужны интерфейсы и какие задачи они выполняют?

39. Какие вы знаете модификаторы доступа?

40. В чем разница между обычным классом и статическим?

41. В чем разница переопределения метода между ключевыми словами new и override?

42. Какое различие между const и read only?

43. Разница между структурой и классом. Приведите примеры структур.

44. Может ли экземпляр структуры храниться в куче (heap)? Как это сделать?

Асинхронность

45. Что такое асинхронность и чем она отличается от многопоточности?

46. Какие есть ключевые слова для использования асинхронности в коде?

47. Что означают ключевые слова async / await?

Базы данных

48. Разница между реляционными и нереляционными базами, плюсы и минусы использования обоих вариантов.

49. Что такое индексы в RDBMS?

50. Какие типы JOIN существуют в SQL?

Тестирование

51. Для чего нужны unit-тесты?

52. Какие преимущества и недостатки использования unit-тестов?

53. Из каких трех логических блоков состоит unit-тест?

Вопросы для Middle

Общее

54. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время на HTTP-уровне?

55. Как работает HTTPS?

56. Как вы понимаете SOLID?

57. Какие протоколы сериализации вы знаете и где они применяются?

58. Что такое в вашем понимании чистая функция? Какие у нее преимущества?

Тема связана со специальностями:

59. Что такое dependency injection и зачем оно нужно?

60. Что такое cohesion и coupling (связанность и связность)?

61. Что такое IaaS, PaaS, SaaS и каковы различия между ними?

62. Какие способы отладки программы вы используете?

63. Какие знаете паттерны? Объясните суть перечисленных.

64. В чем суть паттерна Singleton? Почему его еще называют антипаттерном?

65. Для чего нужен паттерн Strategy?

66. Какие ключевые различия между распределенными системами и монолитными?

67. Какие паттерны проектирования распределенных систем вы знаете?

68. Какие есть принципы работы Message bus? Почему могут возникать дубликаты в очередях?

69. Какие принципы построения идемпотентных сервисов знаете?

70. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?

Платформа .NET

71. Какие исключения нельзя остановить в блоке catch?

72. Какая разница между .NET Standard Class Library и .NET Core Class Library?

73. Объясните разницу между отложенным и немедленным исполнением в LINQ. Приведите примеры.

74. Для чего нужен метод ConfigureServices в Startup.cs?

75. Какая разница между services.AddTransient и services.AddScope в ASP.NET Core?

76. Что такое Kestrel?

77. Опишите ASP.NET MVC request pipeline.

78. Как в ASP.NET WebAPI настроить кэширование ответов на HTTP-запросы?

Управление памятью

79. Что такое куча и стек? Различия, принцип работы.

80. Как работает сборщик мусора?

81. Зачем нам зарезервированное слово using в C#, если в .NET есть автоматическое управление памятью? Как с этим связан disposable-паттерн и зачем такой сложный паттерн для managed и unmanaged ресурсов?

82. Какие особенности работы с Large Object Heap?

Типы данных, коллекции и структуры данных

83. Когда генерируется дженерик-класс конкретного типа — при выполнении программы или во время компиляции?

84. Что такое рефлексия?

85. Расскажите о коллекции LinkedList . Чем она отличается от других коллекций?

86. Что такое индексатор?

87. Что такое immutable object? Какие преимущества дает использование immutable object? Предложите способ реализации его в .NET.

88. Когда использовать StringBuilder, а когда string? Как работает StringBuilder?

89. Что такое балансирование деревьев?

90. Что такое Key-value структуры?

100. Что такое хэш-функция и зачем нужны хэш-таблицы?

101. Какими свойствами должна обладать идеальная хеш-функция?

102. Что такое коллизии и как с ними бороться?

103. В чем заключается сложность CRUD-операций в Dictionary в .NET?

104. Где хранятся массивы? Массивы примитивных типов?

105. В чем отличие между массивом (T [ ]) и списком (List )?

106. В чем разница между IList и IEnumerable ?

107. Зачем нужны Enumerable, Observable, AsyncEnumerable и какие модели получения данных они реализуют?

108. В чем разница между IEnumerable и IQueryable?

109. Что такое enum flags?

Базы данных

110. Расскажите о нормальных формах в СУБД.

111. Что такое индекс в БД?

112. Когда следует использовать индексы? Преимущества и недостатки.

113. Какие типы индексов существуют? Чем они отличаются?

114. Что такое ACID?

115. Какие вы знаете уровни изоляции транзакций?

116. Что такое план выполнения запроса (execution plan) в MS SQL?

117. Проблема: запрос долго выполняется. Какие есть методы ее диагностики и решения?

118. Как ORM (Entity Framework или Entity Framework Core) транслируют C# код в язык запросов базы данных? Что для этого используется?

Параллелизм

119. Для чего использовать Task.ConfigureAwait?

120. Например, есть веб-сервер, который по HTTP-запросу делает выборку из базы данных. Всего на сервере 16 тредов (threads). Каждый HTTP-request выполняет запрос в базу и ожидает результатов, в этом случае тред блокируется. Можно ли оптимизировать эту работу средствами .NET?

121. Зачем нужен ThreadPool? Опишите механику работы: как поток выделяется и возвращается обратно в ThreadPool.

Вопросы для Senior

Общее

122. Какие ещё практики, кроме ООП, использовали (AOP, FP и т. д.)?

123. Назовите три самые сложные проблемы, которые вам приходилось решать. Как вы это сделали, как пришли к этому решению?

124. Что такое слабосвязанный код? Чем он лучше сильносвязанного кода? Как бы вы достигали более слабой связности кода?

125. Использование статических классов повышает или понижает связность кода?

126. Как можно измерить performance кода? Влияет ли факт замеров на производительность?

127. Для чего используются и как работают multi-stage билды в Docker?

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

129. Как бы вы реализовали cross-cutting concern (например, логирование, валидация, транзакции)?

130. Расскажите о Rest Maturity Model.

Видео курсы по схожей тематике:

Docker

C# Starter (ES)

C# базовый (ООП)

131. Что такое CPU и IO-bound задачи?

132. Что такое маршалинг?

133. Как работает async / await (подробно)? Почему нельзя использовать async void методы?

Платформа .NET

134. Как работает lock? Можно ли использовать структуры внутри выражения lock?

135. Что такое Expression Tree?

136. Как работает сборщик мусора (подробно)? Почему в GC три поколения, а не, скажем, пять, десять или два?

137. Как бы вы организовали трассировки Web API сервисов?

138. Как в .NET Core можно настроить хранение секретов на компьютерах разработчиков и на рабочих средах?

139. Как бы вы организовали процесс CI/CD .NET Core сервисов для их деплоймента в облачную инфраструктуру?

140. Как включить CORS в AspNetCore?

Типы данных, коллекции и структуры данных

141. Как реализованы дженерики?

142. Как создать собственный immutable-тип?

143. Как работает IEnumerable (подробно)?

144. Какой алгоритм использует коллекция STACK?

145. Какие структуры данных вы реализовывали сами для платформы .NET? Расскажите, чем они отличались от стандартных реализаций.

146. Чем отличается интерфейс от абстрактного класса? В каких случаях вы использовали бы и то, и другое?

147. Почему в структуре нет конструктора по умолчанию?

Базы данных

148. Как БД сохраняет данные?

149. Какие типы БД вы знаете?

150. Как и когда БД лучше использовать?

151. Что такое денормализации?

152. Когда и какие уровни изоляции транзакций можно использовать?

153. Как в популярных СУБД реализованы принципы ACID (SQL Server, PostgreSQL и т. д.)?

154. Приходилось ли вам оптимизировать запрос в БД? Если да, то как?

155. Опишите, какие вы знаете потенциальные проблемы, связанные с параллельными запросами к БД.

156. Какую базу данных вы бы использовали для реализации distributed lock механизма? Расскажите детали реализации.

Микросервисы

157. Какую проблему решают микросервисы?

158. Какие есть способы коммуникации микросервисов?

159. Расскажите варианты реализации распределенных транзакций в микросервисах.

160. Что такое circuit breaker?

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

162. Что такое брокеры сообщений? Что такое at-least-once, at-most-once семантика? Есть ли какие-то брокеры, которые гарантируют exactly-once семантику?

163. Как должен работать код клиента брокера в зависимости от выбранной семантики?

164. Какие инструменты для работы с очередями вам известны (как в .NET, так и отдельные продукты), какой инструмент/продукт вы бы выбрали и почему?

MS Azure

165. Какие виды сервисов бывают в Service Fabric?

166. Какие особенности и ограничения Azure Table Storage?

167. Как бороться с проблемой холодного старта в Azure Functions?

168. В чем отличие очередей и топиков в Azure Service Bus?

Практические задания

Junior only

  1. Опишите, как бы вы реализовали калькулятор. Если понадобится добавить поддержку для римской системы счисления, что будете делать?
  2. Напишите программу, чтобы проверить, является ли число простым или нет.
  3. Найдите наименьший элемент в массиве.
  4. Упорядочите структуры папок в файловой системе.
  5. Напишите программу, которая симулирует fizz-buzz.
  6. Расскажите, что делает этот код, и предложите, как его улучшить.

public bool IsArrayEmpty(string[] array)
if (array.Length > 0)
return false;
else
return true;
>

protected string GetClass(object url)
string result = string.Empty;
if (SiteMap.CurrentNode != null && SiteMap.CurrentNode.Url == url.ToString())
result = «class=\»active\»»;
return result;
>

Middle

  1. Напишите программу для тиражирования последовательности Фибоначчи для заданного числа.
  2. Спроектируйте базу данных врачей и пациентов в SQL. Создайте stored procedure или запрос в SQL, который вернет врачей, имеющих больше, чем N пациентов.
  3. Проверьте коллекцию на наличие дубликатов.
  4. Спроектируйте thread-safe класс Singleton в C#.
  5. Надо записать некую сущность в базу данных и отправить событие в брокер сообщений. Как это сделать с минимальным риском потери данных?
  6. Имеются три сервиса. Выполняется HTTP-запрос на первый. Первый должен записать данные во второй, а второй — в третий. Как гарантировать, что данные при такой сложной коммуникации не потеряются? Как предотвратить записи дубликатов данных?
  7. Будет ли работать этот код и почему?

SomeClass myClass = null;
myClass.SomeMethod();

var table = GetTable();
table.Draw();

private SomeClass GetTable()
using(var table = new SomeClass())
table.ID = «www»;
table.Width = «95%»;
table.Controls.Add(tr);
return table;
>
>

  1. Расскажите, что делает этот код, и предложите, как его улучшить:

Shape shape = GetNextShape();
if(shape is Circle)
Console.WriteLine(((Circle)shape).Radius);

public int Quantity
get
try
return int.Parse(TxtQuantity.Text);
>
catch (Exception)
return 0;
>
>
>

  1. Что не так с кодом?

try
SomeMethod();
>
catch(Exception e)
Log(e.Message);
throw e;
>

Senior

  1. Как бы вы спроектировали FTP-сервер? Web-сервер? Хостинг картинок с разделением прав доступа? Систему, состоящую из front- и back-офисов? Создайте клон любой популярной социальной сети (Instagram, Facebook и т.д.)
  2. Допустим, есть сущность сделки (Bid). И в сделке есть список партнеров, с которыми эта сделка заключается. Сами сделки хранятся в сервисе сделок (bidding service), а партнеры — в своем сервисе (partners service). И когда показывается список сделок, на начальном скрине нужно отразить количество партнеров. Как бы вы спроектировали хранение и изображение этого счетчика?
  3. Задача на знание LINQ: с исходной коллекции данных необходимо получить новую коллекцию по определенным требованиям (например, отсортированную, без дубликатов и т. д.).
  4. Напишите программу, которая проверяет, является ли поле судоку 9×9 правильно заполненным.
  5. Реализуйте свой Select, Where, SelectMany со всеми характеристиками LINQ (отложенное исполнение, одномоментная (eager) проверка входных данных).
  6. С помощью LINQ напишите метод, который вернет такие элементы коллекции, которые делятся на N без остатка, отсортированные от наибольшего значения к наименьшему. Сигнатура метода: List Filter (IEnumerable collection, int n) ;.
  7. Напишите функцию, которая вернет сумму всех четных элементов массива, который передается в функцию (JavaScript).

Бесплатные вебинары по схожей тематике:

F# и функциональное программирование для C# разработчиков.

F# и функциональное программирование для C# разработчиков.

Алгоритмы и структуры данных в .NET.

Алгоритмы и структуры данных в .NET.

Инструменты для отладки .NET приложений.

Инструменты для отладки .NET приложений.

Выражаем благодарность за подготовку статьи Алексею Краевому, Максиму Шнуренку, Андрею Ткаченку, Владу Медведовскому, Сергею Селецкому, Андрею Губскому, Сергею Мащуренку, Александру Скриннику, Андрею Соболю, Богдану Нановскому, Святославу Аксёнчикову, Ивану Корнелюку, Михаилу Пивоварову, Алексею Дерке, Евгению Гуреву, Михаилу Меркулову, Юрию Воронину.

Что должен уметь бэкенд-разработчик

Пока кто-то не может найти работу, на hh.ru открыто 1270 вакансий по специальности бэкенд-разработчик, на Indееd.com — 440. Работодателям нужны подготовленные специалисты, и они готовы платить. В среднем в Москве Junior получает 60 000 рублей, в регионах — 30 000 рублей.

Рассказываем, кто такие бэкенд-разработчики, какие навыки и умения им нужны и как стартовать новичку.

Что должен уметь бэкенд-разработчик

максим смирнов

Teamlead, PHP & Rails developer в Нетологии

Место бэкенд в веб-разработке

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

Веб-разработчики работают в трёх направлениях:

Что должен уметь бэкенд-разработчик

Кто такой бэкенд-разработчик

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

Просто. Бэкенда можно сравнить со строителем, который:

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

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

Что должен уметь бэкенд-разработчик

Профессия

Веб-разработчик с нуля

Узнать больше

  • Научитесь программировать на JavaScript и PHP — сможете создавать сайты и веб-приложения
  • Выполните 9 проектов для портфолио
  • Лучших выпускников ждёт стажировка или трудоустройство в Affinage

Какие навыки нужны

Hard skills — основные рабочие навыки, которые нужны для выполнения задач. Бекэнд-разработчику нужно знать:

  • языки серверного программирования PHP, Ruby, Python или другие;
  • MySQL, основы работы с базой данных;
  • паттерны программирования и фреймворки Ruby on Rails, Yii, Django или другие;
  • алгоритмы.

Чтобы освоить профессию, нужно понимать работу языка и его окружения, функционирование сетей — стека протоколов TCP/IP, HTTP. Бэкенду нужно разбираться в работе системы версионирования Git и сервера, например, по схеме ubuntu server + nginx + mysql + фреймворк.

Начинающему бэкенду нужно знать английский хотя бы на уровне чтения документов.

Soft skills — неспециализированные навыки, которые не связаны с должностными обязанностями прямо, но помогают устроиться на работу, стать частью команды и развивать карьеру:

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

Как развивать карьеру

Junior

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

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

Что должен уметь бэкенд-разработчик

Middle

Знает язык программирования на продвинутом уровне, ознакомлен с code style проекта, умеет использовать фреймворки. Самостоятельно выполняет несложные задачи на проекте, может проектировать решения для небольших задач. За счёт опыта может оценить задачи и ставить сроки выполнения.

Что должен уметь бэкенд-разработчик

Senior

Опытный разработчик, хорошо знает специфику своего стека и особенности его работы в разных окружениях. Может проектировать масштабные задачи и проекты, понимает необходимость использования или отказа от определённых паттернов или решений. Благодаря большому опыту может консультировать других разработчиков. Обладает развитыми soft skills:

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

Что должен уметь бэкенд-разработчик

Полезные материалы для начинающих

Что должен уметь бэкенд-разработчик

«Совершенный код»,
С. Макконнелл

Практическое руководство по программированию с учётом современных технологий и тенденций.

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

Что должен уметь бэкенд-разработчик

«Рефакторинг. Улучшение существующего кода»,
Мартин Фаулер

Автор перечисляет простые шаги рефакторинга — перемещение поля в другой класс, вынесение фрагмента кода из метода, превращение его в самостоятельный метод и другие. Материал для тех, кто хочет предотвратить распад плохо спроектированной программы и улучшить проект.

Что должен уметь бэкенд-разработчик

«Создание микросервисов»,
Сэм Ньюмен

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

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

Что должен уметь бэкенд-разработчик

«Working Effectively with Legacy Code», Майкл Физерс

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

Книга для тех, кто работает с унаследованным кодом и совершенствует устаревшие программы.

Читать также

Что должен уметь бэкенд-разработчик

Карьера в веб-разработке: лайфхаки и истории успеха разработчиков

Что должен уметь бэкенд-разработчик

5 причин, почему разработчику стоит выучить английский язык

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

Что должен уметь бэкенд-разработчик

максим смирнов

Teamlead, PHP & Rails developer в Нетологии

Новости и события

Ранги разработчиков в IT: в чем разница

Уровни разработчиков junior, middle и senior появились в среде программистов по одной простой, логически объяснимой причине. Любой программный продукт является плодом усилий большой команды, внутри которой обычно существует определенная иерархия. Если вынести за скобки позицию продакт-менеджера (product manager) и стоящих над ним управленцев, то мы получим коллектив программистов, занятых самым главным делом – разработкой фронтенда и бэкенда.

Внутри этого коллектива существует разделение на лидеров, координирующих общие усилия и компоновку отдельных частей продукта в единое целое, средний персонал, занятый написанием кода для конкретных модулей и их сборкой в более крупные блоки и рабочих лошадок, выполняющих всю черновую работу по созданию кода и работающих под присмотром более опытных сотрудников. Это и есть три уровня разработчиков – главный (senior), средний (middle) и начальный (junior). Соблюдение данной иерархии совсем необязательно. В стартапе вся команда может состоять из одних middle разработчиков, а роль senior достается основателю проекта.

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

ранги в IT

Ранги разработчиков в IT

Требования к junior – разработчику. Что должен знать junior разработчик? Опыт работы – от 0 до 1,5 лет. Наличие базовых знаний одного или нескольких языков программирования с популярными фреймворками. Хорошо, если в портфолио будет маленький готовый проект, учебный тоже подойдет. Основная задача junior – как можно быстрее пройти путь от новичка, сосредоточенного на робких попытках безошибочного написания кода до специалиста более высокого класса, сумевшего понять, что к чему и набравшегося реального опыта. В хорошей компании вам будут помогать более опытные коллеги. Если таковых не окажется, справитесь сами. Главное, выкладываться по полной и все рабочее и нерабочее время посвящать решению практических задач программиста.

Как понять что ты middle разработчик? Что должен знать middle разработчик? Почувствовать себя достигшим уровня middle легко. Рабочий стаж приближается к двум годам. Ты можешь самостоятельно решать повседневные задачи и полноценно отвечать за свой участок разработки. Тебе не нужно ничего объяснять дополнительно, потому что ты полностью в теме. Ты стремишься расширить сферу своей компетенции и получить дополнительные знания, чтобы видеть картину разработки продукта целиком и понимать его архитектуру. Начинаешь проявлять инициативу и предлагать свежие решения. Так ты приближаешься к уровню senior.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *