Что должен уметь junior C++?
Собственно, вопрос вынесен в заголовок, хочется получить указания от более опытных людей. Понятно, что надо знать синтаксис и базовые конструкции языка (циклы, операторы, функции и т.д.), уметь в ООП, крайне желательно быть знакомым с STL. А что ещё? Нужны ли boost, Qt? SQL? Иногда указывают что-то типа «базовых алгоритмов», это что и в каком объёме? Обязателен ли какой-то стоящий завершённый проект, который новичку не стыдно запостить на github?
О себе: бакалавр по направлению «физика», МГУ, реальные навыки описаны во втором предложении, в принципе во время учёбы пользовался Matlab и могу работать с ним, но почему-то сомневаюсь в его необходимости за пределами университета. Кстати, могут ли возникнуть в будущем затруднения, если остановиться на бакалавре и не получать магистра, или реальный опыт и навыки всегда ценятся выше формальных (надеюсь на это)?
P.S. Если ошибся с форумом и это не для Job, прошу перенести.
P.P.S. Подскажите адекватные среднерыночные деньги, на которые должен рассчитывать в Москве человек, устраивающийся джуном? На HeadHunter в большинстве стартовых вакансий почему-то зарплата не указывается. Я правильно понимаю что адекватно будет 30-40 тысяч?

Базовые алгоритмы—это понимать как работает поиск, сортировка и т.д., возможно в нескольких вариантах. Туда же понимание стандартных контейнеров, как минимум чем отличаются и какова цена операций вставки, удаления, поиска, в идеале—как устроены.
Библиотеки, я думаю, не обязательны.
По деньгам можно раза в два больше, если метить в топовые конторы вроде Google, Facebook, Intel, JetBrains, etc. Проблема только в том, что топовые международные конторы во-первых выводят R&D из России, во-вторых не во всех нужны плюсисты.

Подскажите адекватные среднерыночные деньги, на которые должен рассчитывать в Москве человек, устраивающийся джуном?

тебе щас местные насоветуют. ходи на собеседования и смотри что предлагают.

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



ЛОл! Таки решили свои тормозные поделки с Java на C++ переписать, чтобы работали быстро?

Нам нужен сильный С++ специалист для работы над ядром продуктов dotTrace/dotCover/dotMemory.

Таки решили свои тормозные поделки с Java на C++ переписать, чтобы работали быстро?
Гы, как будто подделки типа qt creator, kdevelop, etc работают лучше (притом функционала там сильно меньше)


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

Там про стажера, а не джуна, но ты понял.
Насколько я знаю, нативного кода у JetBrains если и есть, то очень немного, в отличие от C++/CLI (требуещееся владение C# намекает, что это как раз тот случай).
Тут, очевидно, дело не в языке, а в архитектуре — учитывая, сколько работы та же IDEA выполняет в фоне, понятно, что она на любом языке бы ела довольно много вычислительных ресурсов и тормозила в случае их нехватки.

Насколько я знаю, нативного кода у JetBrains если и есть, то очень немного,
Нативного у них как минимум интеграция с дебаггерами, они недавно искали человека пилить lldb/gdb-интерфейс в их clion.
Засунь себе свой копрофантазии куда-нибудь подальше.

Э-э-э. кое-как уметь нечто и уметь учить машину этому нечто?

Сорри, это не твои копрофантазии, это суровая реальность 0_o
Мы программируем на С++/СLI, который компилируется в .NET-сборки.

Ну, так многие поделия на java жрут просто как жабы. Особенно раму. Вот пример: YouTrack. Какая-то простая система учёта проектов еле ворочается на 1 гиге оперативе. Jira: валится на гиге только в путь. Их (атласиан) git webserver тоже жрёт на старте под 2 гига, а даёт всё то же, что и https://gogs.io/ При этом gogs отвечает молниеносно и жрёт что-то около 10 Мб оперативки. Вот тебе и java.
На рубях такая же хрень — вся обвязка gitlab’а жрёт под 2 гига, а толку столько же, что и от gogs с 10 мегабайтами.
Так что будущее за go и swift.
Будущее за теми, кто умеет читать документацию про Xmx, как вообще работают различные аллокаторы и зачем JVM выделяет себе столько памяти.
И еще. Go и swift совершенно разные языки. Первый имеет GC, второй нет. Про это тоже почитай.
Иногда указывают что-то типа «базовых алгоритмов», это что и в каком объёме?
Умение писать fizzbuzz, insertion sort, mergesort, quicksort. Различные деревья с балансировкой и без. Алгоритмы на графах. Строковые алгоритмы. Динамическое программирование. Если ты никогда с этим не сталкивался, то можешь пройти курс Седжвика на курсере, а потом курс основанный на Кормане. Порешай задачки на leetcode, hackerrank, timus, project euler, etc.
Кстати, могут ли возникнуть в будущем затруднения, если остановиться на бакалавре и не получать магистра, или реальный опыт и навыки всегда ценятся выше формальных (надеюсь на это)?
Физика вряд ли тебе пригодится. Можешь пойти в ШАД, если тебе интересен ML.
Я правильно понимаю что адекватно будет 30-40 тысяч?
На данном этапе зарплата не имеет значения. Твоя задача попасть в как можно более крупную компанию. В аутсорсинговой компании скорее всего тебе дадут ачивку «Senior» просто за то, что ты там 5 лет будешь писать говнокод, но реальных навыков ты можешь и не получить. В большой компании вокруг тебя скорее всего будет довольно много крутых разработчиков и ты сможешь узнать много нового просто за обедом.

Ага, я тоже могу тебя отослать читать про то, что не язык имеет GC, а его реализация. Ты нашёл разность — теперь найди общее.

Жаль только гуев там буквально нет, сообщество не тянет, а создатели не хотят
поэтому нетормозящей идеи на го мы никогда не увидим
Ну, так многие поделия на java жрут просто как жабы. Особенно раму. Вот пример: YouTrack. Какая-то простая система учёта проектов еле ворочается на 1 гиге оперативе. Jira: валится на гиге только в путь. Их (атласиан) git webserver тоже жрёт на старте под 2 гига, а даёт всё то же, что
Бизнес и ничего личного: [сервер 128GB ram](http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR12. ) стоит 40к рублей, или 312 рублей за GB, или 44 минуты рабочего времени разработчика с окладом 90к в месяц.

На самом деле нет такого формализованного понятия Junior в С++ и соответственно нету и строгих требований. Каждая контора набирающая юных программистов имеет какой то свой профиль работы и соответственно свои неповторимые требования к кандидатам. Кто то пишет гуёвые проги на Qt, кто то прошивки для всяких встраиваемых устройств. У всех контор требования абсолютно разные. А тебе при этом надо изучать вещи универсальные для С++, основы языка, STL и пр. То что пригодиться в большинстве случаев. Чем лучше ты это изучишь, тем больше шансов попасть в Junior-ы. Пока свободен учись. Можешь поучиться подольше, написать какие то свои небольшие проекты тогда признают и опытным разрабом. Бакалавр ты или магистр значения не имеет, абсолютно никакого. Реальные навыки и только это.
Согласен, (с предыдущим оратором) лучше будет начинать в больших конторах. Но не факт что большие конторы захотят с тобой начинать. Как повезёт.
Matlab и твоя физика могут пригодиться когда станешь опытным программером. Иногда бывают вакансии на написание софта в этих предметных областях. Пока важно найти хоть какую то работу и получить начальный опыт.
Тут на форуме постоянно набирает начинающих сишников NatSys-Lab. Думаю будет очень хорошая позиция для тебя. Они занимаются системным софтом для Linux. Это конечно не C++, а просто C, но очень перспективное направление.

никому не нужное дерьмо
insertion sort, mergesort, quicksort. Различные деревья с балансировкой и без. Алгоритмы на графах. Строковые алгоритмы. Динамическое программирование. Если ты никогда с этим не сталкивался, то можешь пройти курс Седжвика на курсере, а потом курс основанный на Кормане. Порешай задачки на leetcode, hackerrank, timus, project euler, etc.
всё это дерьмо не нужно на практике ( если ты не практикующий олимпиадник )
по сабжу. джуну C++ необходимо на три с плюсом знать язык ( т.е. как минимум осилить Страуструпа ) и знать азы апи операционки ( т.е. основы работы с памятью, файлами, тредами, процессами ) под которую он решил писать код, т.е. для онтопика это позикс.
всё это дерьмо не нужно на практике ( если ты не практикующий олимпиадник )
Ты либо принимаешь правила и проходишь собеседование в топовую компанию, либо продолжаешь всем доказывать что алгоритмы не нужны и идешь работать в EPAM, Luxoft или в любую другую аутсорсинговую контору. Без знания алгоритмов ты никогда не попадешь в команду разработки очередной крутой распределенной системы для Google/Facebook/etc.
по сабжу. джуну C++ необходимо на три с плюсом знать язык ( т.е. как минимум осилить Страуструпа ) и знать азы апи операционки ( т.е. основы работы с памятью, файлами, тредами, процессами ) под которую он решил писать код, т.е. для онтопика это позикс.
Ахаха, ну да, ну да. А потом у таких спрашивают на собеседовании про виртуальные конструкторы и они начинают нести чушь. Треды и процессы это отдельная огромная часть CS. Lock free, сами блокировки, модель памяти итд итп.


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

В этом обзоре систематизируем требования работодателей к Junior-программистам, а также обобщаем условия, которые предлагают компании младшим разработчикам. Для этого анализируем реальные вакансии, опубликованные на hh.ru.
Кого ищут работодатели: критерии анализа
Чтобы проанализировать требования работодателей к младшим программистам, я выбрал вакансии на сайте hh.ru по Москве, Санкт-Петербургу и Казани. Смотрел вакансии для JavaScript-программистов (фронт- и бэкенд), PHP-, Python- и Java-программистов. Проанализировал как минимум 10 вакансий по каждому стеку.
В вакансиях анализировал следующие параметры:
- требования к опыту работы;
- требования к возрасту;
- требования к образованию;
- требования к софт-скилам;
- требования к хард-скилам;
- предложенные условия труда.
Параметры анализировал без разделения по стекам. Исключение — требования к хард-скилам. Этот параметр проанализировал для каждого стека отдельно.
Какой опыт работы нужен Junior-программисту
В идеальном мире на позицию джуниора могут претендовать соискатели без опыта работы. В реальном мире всё не так просто.
В подавляющем большинстве вакансий для Junior-программистов опыт работы не требуется. Но иногда работодатели хотят видеть стажёра или джуна с опытом работы. Например, «Яндекс» ищет стажёра-разработчика с опытом работы от 1 года.

«Яндекс» ищет стажёра с опытом работы
Какое образование нужно джуниору
Нужно ли высшее образование программисту? На этот вопрос сложно ответить только с помощью анализа вакансий. HR-менеджеры могут не указывать требования к образованию в вакансиях. Но они наверняка обращают внимание на этот пункт в резюме, когда рассматривают заявку соискателя. Тем не менее даю слово реальному рынку труда.
В большинстве вакансий для Junior-разработчиков нет требований к образованию. Но часть работодателей хочет видеть соискателей с высшим техническим образованием или студентов старших курсов.
Важный момент: требования к образованию я встретил только в вакансиях для Java- и Python-программистов.

От Java- и Python-программистов чаще требуют высшее техническое образование
Промежуточный итог: в большинстве вакансий работодатели не указывают требования к образованию. Но иногда в объявлениях встречаются пожелания: компании хотят видеть у новичка диплом технического вуза или в крайнем случае студенческий билет. Такие требования я встретил только в вакансиях для Java- и Python-программистов.
Требования к возрасту джуниров
Этот вопрос чаще всего волнует специалистов, которые меняют сферу деятельности в возрасте 30+. Давайте посмотрим, есть ли ограничения по возрасту в опубликованных вакансиях.
Я просмотрел около 50 вакансий в разных стеках, но ни в одной не нашёл явных требований к возрасту. Иногда работодатели указывают, что набирают студентов последних курсов. Такие условия есть в объявлениях о стажировке, а не в вакансиях для джуниор-программистов.

На стажировку приглашают студентов
Это не значит, что работодатели не обращают внимание на возраст кандидатов. Эйчары видят резюме и могут уточнить год рождения соискателя, если эта информация не указана. А о среднем возрасте junior-программистов рассказывает HR-менеджер Вероника Ильина в комментарии ниже.
Промежуточный итог: работодатели обычно не указывают формальные требования к возрасту, но учитывают возраст соискателей при отборе.
Какие софт-скилы нужны джуниору
Софт-скилы или гибкие навыки — неспециализированные навыки, которые влияют на профессиональную деятельность специалиста. Примеры софт-скилов: дисциплинированность, проактивность, умение общаться, стрессоусточивость, способность к обучению.
В большинстве вакансий работодатели не указывают требования к гибким навыкам. В нескольких объявлениях есть пожелания к софт-скилам, например:
- готовность общаться с разработчиками и с экспертами в предметной области;
- аналитический склад ума;
- ответственность за результат;
- стремление к профессиональному росту;
- любопытство;
- коммуникабельность;
- умение чётко формулировать мысли;
- адекватность;
- умение и желание работать в команде;
- умение планировать работу;
- умение работать со скучными задачами.
Мне показалось, что в некоторых вакансиях работодатели пишут о гибких навыках формально. Например, сложно представить, что кто-то из кандидатов скажет на собеседовании, что ему не хватает любопытства или адекватности.
В некоторых вакансиях софт-скилам уделяется повышенное внимание. Например, одна из компаний ищет Python-разработчика для работы в медицинском стартапе. Работодатель хочет, чтобы у соискателя был интерес к предметной области, то есть к медицине. Это объясняется тем, что разработчику придётся общаться с врачами, которые участвуют в разработке медицинских приложений.
В объявлениях часто встречается требование знать английский язык. В частности, указывается уровень intermediate.
Промежуточный итог: работодатели иногда указывают желаемые гибкие навыки. Любой кандидат может на собеседовании сказать, что он коммуникабельный, любопытный и адекватный. Реально оценить софт-скилы соискателя работодатель сможет во время испытательного срока.

Адекватные стрессоустойчивые соискатели интересуются вакансией
Какие хард-скилы нужны Junior-программистам
Хард-скилы или профессиональные навыки уместно рассматривать в разрезе стеков.
Требования к JavaScript-разработчикам (фронтенд)
Работодатели требуют от соискателей на позицию фронтенд-разработчиков такие знания и умения:
- знания основ JavaScript;
- базовые знания HTML и CSS;
- умение верстать (встречаются требования умение верстать по принципу pixel-perfect);
- умение использовать UI-фреймворки и библиотеки, чаще всего React и Vue.
- Знание протокола HTTP;
- умение работать с графическими редакторами (Adobe Photoshop требуют чаще всего);
- умение работать с Git и пакетными менеджерами.
В одной вакансии встретил пожелание — соискатель на позицию фронтендера должен знать PHP хотя бы на базовом уровне. Также в единичных вакансиях работодатель искал кандидатов со знанием TypeScript, умением работать с препроцессорами (SCSS или Less), знание Angular.
Требования к Node.js-разработчикам (бэкенд)
Работодатели ждут от Node.js-разработчиков таких знаний и умений:
- знание Node.js;
- опыт использования GitHub и GitLab;
- знание Vue.js;
- знание HTML и CSS, умение верстать;
- знание Websocket;
- знание SQL, умение работать с базами данных;
- понимание принципа MVC.
В вакансиях для Node.js-разработчиков часто встречаются жёсткие требования к знанию английского языка. В нескольких вакансиях увидел пожелание к знанию ещё одного серверного языка, например, PHP или Python.
Требования к PHP-программистам
От младших программистов на PHP компании ожидают таких знаний и умений:
- знание PHP;
- базовые знания HTML и CSS;
- знание бэкенд-фреймворков (чаще всего требуют Laravel и Yii2);
- знание SQL, умение работать с базами данных;
- знание CMS (встречаются разные, включая 1C-Битрикс, WordPress, Magento);
- умение работать с Git;
- понимание принципов ООП.
В нескольких вакансиях работодатели хотят, чтобы соискатель имел базовые знания JavaScript.
Требования к Python-программистам
Один из работодателей принимает стажёров, которые знают основы Python и SQL. Стажировка оплачиваемая. К младшим программистам предъявляются более серьёзные требования:
- знание Python;
- знания scikit-learn, tensorflow-pythorch, matplotlib;
- знание алгоритмов машинного обучения и теоретическое понимание работы нейросетей (для джуниор-программистов в области machine learning);
- в вакансиях для Python-программистов часто встречаются требования уметь работать с Linux;
- для веб-разработчиков на Python актуальны умение работать с базами данных и знание веб-фреймворков, например, Django.
В вакансиях для Python-программистов практически не встречаются требования знать ещё один язык программирования. Также мне не попались требования знать HTML и CSS и уметь верстать. Тем не менее это актуальные для веб-разработчиков умения.
Требования к Java-программистам
Выше сказано, что от джавистов работодатели чаще всего требуют высшее техническое образование. Также компании хотят видеть такие знания и умения:
- знание Java;
- понимание принципов ООП;
- знание SQL;
- умение работать с базами данных;
- знание HTML и CSS;
- знание сетевых технологий, включая TCP и HTTP.
В вакансиях для Java-программистов несколько раз встретил требование уметь писать юнит-тесты. В объявлениях о поиске джуниоров в других стеках такого требования не увидел.
В одной из вакансий нашёл пожелание к знанию второго языка программирования, например, Python. В вакансии для веб-разработчика на Java увидел требование понимать принцип MVC.
Промежуточный итог: от младших программистов во всех стеках работодатели ожидают базового знания выбранного языка программирования. Часто встречается пожелание знать хотя бы ещё один язык. В большинстве вакансий есть требование знать HTML и CSS.
Работодатели ожидают, что Junior-программисты умеют работать с базами данных, знают сетевые технологии, владеют популярными фреймворками и библиотеками.
Изучайте операционные системы, повысьте свой уровень У нас есть курс по операционным системам. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти по ссылке.
Что работодатели предлагают Junior-программистам
В части вакансий эйчары не указывают заработную плату, которую предлагают сотрудникам. Тем не менее объявления позволяют оценить уровень зарплат, на которые могут претендовать джуниоры. Также в вакансиях обычно есть информация о других «плюшках».
Работодатели предлагают будущим сотрудникам такие плюшки:
- добровольное медицинское страхование за счёт компании;
- абонемент в спортзал;
- напитки, йогурты, фрукты;
- изучение английского языка за счёт компании;
- корпоративные мероприятия;
- официальное оформление по трудовому кодексу;
- гибкий график работы;
- оплата обедов;
- услуги массажиста за счёт компании.
Промежуточный итог: Junior-программист может рассчитывать на заработную плату от 15 000 рублей в месяц и выше. Работодатели готовы дополнительно мотивировать джуниоров и обеспечивать им комфортабельные условия труда.
Что требуют и что дают джунам: комментарий HR-эксперта Вероники Ильиной
Я анализировал требования работодателей к джуниорам по опубликованным вакансиям. Чтобы получить полную картину, обратился к HR-эксперту Веронике Ильиной и попросил её рассказать, что требуют работодатели от Junior-программиста. Слово Веронике.

«Обычно в вакансиях джунов пишут в требованиях или пожеланиях техническое образование. На это есть несколько причин: от традиций до убеждения, что универ учит системному мышлению. Но все знают, что действительно учатся даже в топовых вузах десятки, если не единицы людей на каждом потоке. То есть настоящих сильных выпускников никогда не хватит, чтобы закрыть потребность рынка в джунах. Так что многие работодатели на самом деле закрывают глаза на образование. Особенно после того, как встречают тимлида с опытом CTO и 9 классами школы или берут в джуны бывшего бариста, потому что мехмат МГУ не смог в сортировку. А бариста смог.
Опыт обычно не требуется, то есть учебного достаточно. Но и в целом джун джуну рознь: кто-то год параллельно с учебой стажируется в известной компании, но ничего не умеет. Кто-то даже учит школьников программировать, но у самого знаний все же не хватает даже в основах. А кто-то — тот самый бывший бариста, который выучил Java дома, и нормально работает 🙂
Идеальный джун — это, конечно, вчерашний студент. Опыта нет, впитывает всё, что дают, легко подстраивается под рабочие процессы и увлечённо старается. Но студентов не напасёшься: их просто меньше, чем нужно. А тем более не хватает студентов с хорошо думающей головой. Поэтому компании медленно, но верно начинают смотреть кандидатов около 30 и старше. Да, они уже не такие «на всё согласные», но они знают, чего хотят. Конечно, негласный возрастной ценз и неверие в то, что человек в 30 может куда-то эффективно переучиться, никуда не исчезают. Но когда на рынке мало хороших студентов, кого еще рассматривать и брать?
Самое главное для джуна — уметь гуглить и не бояться спрашивать непонятное, просить помощи у живых людей. Такие джуны быстро растут. Молчуны растут намного медленнее, это логично: как расти, если ты знаешь меньше правильных решений и собственных ошибок, чем твой коллега-активист?
По хард-скилам: джун джуну рознь. «Яндекс» будет требовать от вас алгоритмов, маленькая студия — умения делать хоть что-то, маленькая и гордая студия — уметь делать простое, но очень хорошо. Нужно смотреть на конкретные требования и пробовать. Нет универсальной формулы технических навыков, с которыми вас возьмут. Но есть то, что помогает на любом уровне — кругозор в Computer Science.
Что предложат джуну: в Москве и Санкт-Петербурге джун любого направления в разработке может иметь 30-100 тысяч рублей на руки. Просто за 100 у него будет минимальный опыт работы и например невероятная алгоритмическая подготовка. А за 30 легкая стажировка или парттайм работа. Скорость роста дальше зависит от самого джуна и компании, не все умеют вовремя поднимать деньги джунам. А джуны не всегда приходят с запросом про деньги. «Плюшки» у всех примерно стандартные: пресловутые «печеньки», ДМС, фрукты какие-нибудь с фитнесом, компенсация обучения. Бывает больше и лучше, бывает меньше».
Вместо заключения: что нужно, чтобы получить должность младшего программиста
О требованиях работодателей к джунам мы узнали благодаря анализу вакансий и комментарию HR-эксперта Вероники Ильиной. Чтобы соответствовать этим требованиям, достаточно единственного фактора. Вам нужно развиваться: изучать программирование и смежные дисциплины, нарабатывать гибкие навыки. И не забывайте рассылать резюме и ходить на собеседования, без этого найти работу не получится.
Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
Необходимый минимум знаний у C# junior
На данный момент неспешно изучаю С# и немного С++. Мне интересен необходимый багаж знании у С# разработчика. Нашел подобную тему здесь, но там по Java человек спрашивает. Кто если уже работает или работал по C# распишите минимальный багаж знаний для джуниора в С#.
![]()
Дисклеймер
Вообще, требования для Junior-разработчика имеют неплохой разброс. На это влияют:
- Компания, в которую вы попадете
- Команда, в которую вы попадете
- Проект, в который вы попадете
Требования могут выдвигаться как на уровне компании (например, высшее техническое образование или язык коммуникаций) на уровне команды (возможно, некий специфический опыт), так и на проектном уровне (его технологический стек). Это всё говорит о том, что само понятие Junior весьма субъективно и общих требований здесь быть не может. С одним и тем же техническим бакграундом вы запросто можете устроиться в компанию ASoftware и провалить собеседование в BSoftware . Поэтому, дальнейшие рассуждения о требованиях к Junor-разработчику я буду вести через призму своего опыта и опыта тех команд, в которых я работал (что никак не может являться истиной в последней инстанции. Пожалуйста, понимайте это перед тем, как брать текст ниже за руководство к действию)
Отделить мух от котлет
Мне кажется несколько ошибочным концентрироваться на знаниях конкретных технологий при собеседовании младшего разработчика. Под понятием «конкретные технологии» я имею ввиду знаний конкретных UI-фреймворков, ORM или IoС-контейнеров или ещё сотню библиотек и фреймворков. Мне кажется странным вопрос на собеседовании «Расскажите, как бы вы это сделали на EFramework?»
Мне было бы важнее понять не то, сколько технологий вы знаете сейчас, а то, как быстро вы можете осваивать новые технологии вообще. Поэтому, я бы больше сконцентрировался на знаниях C# и CLR и понимании проблем , которые решают конкретные технологии. Например, если вы в резюме напишете, что знаете, Ninject, то мы с вами, скорее всего, будем разговаривать про DIP в целом и проблемы DI в частности.
- Эндрю Троелсен. «Язык программирования C# 6.0 и платформа .NET 4.6»
Для повышения знаний:
- Братья Албахари. «С# 6.0 Справочник Языка»
- Джеффри Рихтер. «CLR via C#»
- Джон Скит. «C# in Depth»
Обеспечить внешнее качество
Минимум, на который рассчитывает среднестатистическая компания (спорный момент, кстати) это возможность продать результат вашего труда и заработать деньги. С этой точки зрения, вы обязаны обеспечивать внешнее качество вашего кода (он работает и решает задачу для которой был написан) для этого вам нужно понимать концепции тестирования и уметь их применять. Вы должны понимать для чего нужны различные типы тестов (модульные/интеграционные/приёмочные) и какое влияние оказывают модульные тесты на код. Одно из требований в нашей команде — код должен быть покрыт тестами. Без выполнения этого требования код не может пройти ревью.
- Рой Ошерув. «The Art Of Unit Testing»
Для повышения знаний
- Джерард Месарош. «xUnit Test Patterns: Refactoring Test Code»
Обеспечить внутреннее качество
Мы живем в таком мире, где мы постоянно решаем две задачи: как заработать деньги сейчас и как заработать их потом. С точки зрения нашей отрасли, для того, что бы зарабатывать деньги «потом» нужно:
- Уметь передавать информацию о системе через код, для того, что бы с легкостью вносить в неё изменения в будущем.
- Код должен быть покрыт тестами для того, что бы у нас была уверенность, что эти изменения не приведут к регрессии.
Сконцентрируемся на первом пункте. Если вы поняли, то это про ООП и ООД в частности. Минимум, на который нужно рассчитывать — знание принципов ООП (инкапсуляция, наследование, полиморфизм). Особая важность в понимании полиморфизма и умении организовывать логичные и уместные иерархии наследования.
Программа минимум: что должен знать начинающий C# программист
Мош, меня только что приняли на должность Junior C#-разработчик. Что ты посоветуешь? Что мне необходимо выучить?
Итак, если вы ищете первую работу в качестве C#-разработчика или недавно её получили, эта статья расскажет вам, какие навыки являются необходимыми. Я постарался объединить их в единый «путь», который подойдёт желающим разрабатывать как декстопные, так и веб-приложения.
Прежде чем я углублюсь в детали, я проясню кое-что: вы — джуниор, вам не нужно знать всё на свете! Никто не знает всего, даже матёрые разработчики. Мир программирования огромен и постоянно растёт. Поэтому каждый разработчик силён лишь в определённых областях, в зависимости от тех проектов, над которыми он работал.
Каждый навык будет сопровождаться одной или несколькими ссылками на полезные ресурсы.
Базовые навыки

Вне зависимости от выбранной сферы разработки существует несколько моментов, которые стоит знать.
Структуры данных и алгоритмы
Если у вас нет степени в Computer Science, я очень рекомендую потратить месяц на изучение структур данных и алгоритмов. Это основы программирования. Конечно, вы можете пропустить их и заняться веб-разработкой, но поверьте, разница между изучавшим этот вопрос программистом и пропустившим его заметна.
Вы можете удивиться, но крупные компании наподобие Microsoft, Apple и Amazon уделяют на интервью много времени именно проверке знания структур данных и алгоритмов, а не ASP.NET 5 или WPF! Они просто хотят понять, можете ли вы мыслить, как программист.
Вот неплохая книга для начала изучения: Data Structures and Algorithms Made Easy
Если вы в чём-то не разобрались — не отчаивайтесь! Просто убедитесь, что вы поняли, что такое списки, стеки, очереди, деревья и хеш-таблицы, и умеете их реализовывать на чистом C#. Реализуйте несколько алгоритмов поиска и сортировки.

Базы данных
SQL Server — это наиболее часто используемая реляционная СУБД среди .NET разработчиков. Разберитесь в основах реляционных баз данных и базовых операциях в SQL Server.
T-SQL — это язык запросов, используемый в SQL Server. Освойте функции SELECT, INSERT, UPDATE, DELETE, JOIN и GROUP BY.
Вот полезные материалы:
-
;
- T-SQL Step by Step.
Когда вы работаете с РСУБД, то часто используете системы объектно-реляционного отображения для работы с объектами в базе данных. Существует много таких систем, но самой популярной является Entity Framework.
Материалы для изучения:
-
;
- Entity Framework course on Udemy.
Веб-разработка
Создание веб-приложений кардинально отличается от разработки десктопных. Веб-приложение содержит как минимум две части: клиент, запускаемый в браузере пользователя (фронтенд), и сервер, обрабатывающий все действия пользователя в клиенте (бэкенд).
Поэтому все веб-разработчики делятся на 3 группы:
- Фронтенд-разработчики;
- Бэкенд-разработчики;
- Full-stack-разработчики: те, кто занимаются и фронт-, и бэкендом.
В зависимости от ваших предпочтений стоит выбрать один из двух путей. Full-stack-разработчики обычно более востребованы.
Фронтенд

Если вы собрались заняться фронтендом, то вам нужно познакомиться с основами HTML, CSS и Javascript.
HTML — это язык разметки веб-страниц. В отличие от языков программирования (таких как C#), у него нет логики. Для декорации нашей страницы мы используем CSS. И, наконец, JavaScript — язык, отвечающий за поведение веб-страницы.
Материалы для изучения:
Бэкенд

ASP.NET MVC — это доминирующий среди C#-разработчиков фреймворк для создания серверных веб-приложений. Для работы с ASP.NET MVC вам всё равно потребуется базовое знание HTML, CSS и Javascript. Поэтому я советую вам начать изучение с фронтенда и затем перейти к бэкенду, изучив весь спектр веб-разработки.
Вот моё руководство, в котором мы создадим простое приложение с использованием ASP.NET MVC5 и Entity Framework 6: A Step-by-Step ASP.NET MVC Tutorial for Beginners

Десктоп-разработка
Если вы хотите заняться разработкой приложений под Windows, вам понадобится отличный от предыдущего набор навыков (хотя и они, как ни странно, могут пригодиться). Большинство заданий потребует от вас знания XAML, WPF или Windows Forms.