Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: Обучение c
Прості події

Автор: Костянтин Чорний

Введение При разработке компьютерных систем и программ, в том числе таких, в которых функционирует множество оригинальных сущностей и их дублей – экземпляров, возникает проблема отслеживания связей взаимодействия между этими объектами. И чем больше появляется этих объектов , тем сложнее вписать их в структуру приложения. Да, можно сказать что здесь явные проблемы с архитектурой и так не должно быть, но все равно мы наталкиваемся на проблему создания крупной многообъектной системы с гибкими динамическими связями и адаптивным поведением. Лучшее решение – событийно-ориентированное программирование! Итак, событие – это внезапное происшествие, появление которого нельзя предугадать, а можно только к нему готовиться. В подобном русле работает и человеческих мозг. Он ожидает появления события и, когда оно происходит, как-то на него реагирует. Давайте рассмотрим небольшой мысленный эксперимент. Представьте дорогу, пешеходный переход и светофор, который регулирует переход в данном месте. Светофор – это объект, который порождает событие. Он по воле своего внутреннего устройства будет включать или отключать зеленый свет, который будет разрешать пешеходам переход через улицу. В это время на тротуаре начинают собираться люди. Каждый человек – это объект, содержащий специфическое поведение, которое называется обработчиком события. В данном случае этот обработчик будет отвечать за пересечение улицы и будет вызываться во время возникновения события. У каждого человека обработчик разный, ведь все люди переходят через улицу по-разному. Один будет идти быстро, другой медленно, третий - смотреть на машины, которые стоят на перекрестке, а четвертый - следить за таймером, который будет отсчитывать секунды. Но каждый из них не предполагает, когда конкретно произойдет это событие, потому все они ждут на тротуаре. Когда человек подходит к переходу, он подписывает свой обработчик события перехода дороги на конкретное событие этого светофора. Если человек передумает переходить или, например, отойдет поговорить по телефону, то он не будет выполнять свой обработчик, если событие возникнет. И, наконец, когда светофор включается на зеленый, все люди начинают переходить дорогу. Возникло событие – выполнился обработчик. Что-же нам позволяет сделать событийную модель? Она разрешает динамически изменять связи между объектами и не только расторгать или устанавливать их, но и менять характер самого действия. Давайте рассмотрим пример создания события на языке C#. namespace TrafficLight {     // Светофор     public class Light     {         // Событие появления зеленого света         public event EventHandler Green;         // Метод который вызывает событие         public void SwichToGreen()         {             Green.Invoke(this, new EventArgs());         }     }     // Человек     public class Human     {         public string Name { get; private set; }         public Human(string name)         {             Name = name;         }         // Метод обработчик события перехода через дорогу         public void CrossingTheRoad(object sender, EventArgs e)         {             Console.WriteLine(this.Name + " crossing!");         }     }     class Program     {         static void Main(string[] args)         {             // Создание светофора             Light light = new Light();             // Создание людей             Human human1 = new Human("Alex");             Human human2 = new Human("Bob");             Human human3 = new Human("Alice");             // Подписка на событие             light.Green += human1.CrossingTheRoad;             light.Green += human2.CrossingTheRoad;             light.Green += human3.CrossingTheRoad;             // Вызов события             light.SwichToGreen();             Console.ReadKey();         }     } } Таким образом, язык C# позволяет быстро и легко создавать приложения, которые используют событийную модель. Более подробно узнать о событиях Вы можете в двенадцатом уроке курса C# Базовый. Для практики можете создать небольшую игру с игровыми объектами, взаимодействующими посредством событий.
Заміщення методу С#

Автор: Редакция ITVDN

Введение В данной статье Вы узнаете, для чего и как использовать замещение метода в C#. Для того, чтобы на примере показать замещение метода в С#, создадим класс «Student» с двумя полями: FirstName и LastNamе. В примере используется также метод печати, который выводит FirstName и LastName в консоль. class Student {        public string FirstName;        public string LastName;        public virtual void Print() {              Console.WriteLine(FirstName + " " + LastName);        } } Класс Student выступает как базовый/родительский класс для классов DiplomaStudent и GraduateStudent. class DiplomaStudent : Student { } class GraduateStudent : Student { } ПРИМЕЧАНИЕ: Если производный класс наследует базовый класс, то все учасники, кроме частных членов, доступны в производном классе. То есть, оба поля и метод печати можно вызвать/инициировать в производном классе. Если нужно распечатать детали студентов на экране консоли, можно создать пример двух производных классов от «Student», используя основной метод. class Program {        static void Main(string[] args) {              DiplomaStudent ds = new DiplomaStudent();              ds.FirstName = "Max";              ds.LastName = "Payne";              ds.Print();              GraduateStudent gs = new GraduateStudent();              gs.FirstName = "Lara";              gs.LastName = "Croft";              gs.Print();        } } Запустите программу.  На данном этапе невозможно определить, к какому типу из категорий студентов принадлежит каждый студент. Например, добавим (-studentType) и прикрепим его после имени студента, чтобы сделать его более удобным для чтения. Для этого можно создать метод печати для обоих производных классов. class DiplomaStudent : Student {        public void Print() {              Console.WriteLine(FirstName + " " + LastName + " - diploma student");        } } class GraduateStudent : Student {        public void Print() {              Console.WriteLine(FirstName + " " + LastName + " - graduate student");        } } Но если Вы хотите не скрыть реализацию базового метода, а заместить ее, то можно использовать виртуальное ключевое слово.  class Student {        public string FirstName;        public string LastName;        public virtual void Print() {              Console.WriteLine(FirstName + " " + LastName);        } } Теперь базовый метод печати стал виртуальным. То есть, его можно заменить в производном классе и добавить его реализацию. Но сначала надо удалить метод печати с обоих производных классов, как показано ниже: class DiplomaStudent : Student { } class GraduateStudent : Student { } Напишите override, потом поставьте пробел. Вы увидите метод печати в Intellisense. Выберите и нажмите Enter. Он унаследует метод сигнатур. class DiplomaStudent : Student {        public override void Print() {              base.Print();        } } class GraduateStudent : Student {        public override void Print() {              base.Print();        } } Удалите его и добавьте свою собственную реализацию, как показано ниже:  class DiplomaStudent : Student {        public override void Print() {              Console.WriteLine(FirstName + " " + LastName + " - diploma student");        } } class GraduateStudent : Student {        public override void Print() {              Console.WriteLine(FirstName + " " + LastName + " -graduate student");        } } Запустите программу.  Предположим, что по какой-то причине Вам необходимо отменить реализацию вызова и печати базового класса. Это можно сделать при помощи такой комбинации: основное ключевое слово, затем точка (.), потом метод. class DiplomaStudent : Student {        public override void Print() {              base.Print();        } }   Источник: http://www.c-sharpcorner.com/UploadFile/219d4d/method-overriding-in-C-Sharp/
Почему тебе отказали: главные причины на каждом этапе отбора в IT

Автор: Виктория Чабан

Поиск работы в IT — это процесс, который часто кажется марафоном без финиша. Ты рассылаешь десятки резюме, проходишь собеседования, выполняешь тестовые — и вдруг получаешь сухое сообщение: «К сожалению, вы нам не подходите». Почему именно? Ведь ты учился, был мотивирован, выполнил задание. Ответ прост: на каждом этапе рекрутингового процесса работодатель ищет не просто знания, а сигналы — о твоем мышлении, готовности к работе, поведении и даже об энергии, которую ты передаешь. Разберем подробно каждый этап и то, как избежать типичных ошибок. 🔹 Этап 1. Отказ после отправки резюме Это самый распространенный и болезненный момент: ты отправляешь десятки откликов и получаешь тишину. Что происходит на самом деле Рекрутер тратит на одно резюме от 7 до 15 секунд. За это время он решает, стоит ли читать дальше. Если твой документ выглядит неструктурированно, без конкретики, без GitHub или портфолио — он просто теряется среди сотен других. ⚠️ Типичные ошибки Заголовок “Junior Developer” без уточнения направления. Нужно конкретнее: “Junior Python Developer”, “QA Manual”. Описание в стиле “изучал HTML/CSS/JS, имею базовые знания SQL”. Это выглядит как список из шпаргалки. Отсутствие результатов. Даже на этапе обучения стоит показать, что ты уже сделал: pet-проекты, сертификаты, дипломные задания. Неадаптированное резюме. Если ты рассылаешь одно и то же всем — видно, что ты не читал описание вакансии. ✅ Как сделать лучше Начни резюме с короткого профиля: кто ты, что умеешь и чем можешь быть полезен. Добавь результаты обучения: проекты, технологии, которые использовал, ссылки. Вместо фразы “Хочу развиваться в IT” напиши: “Хочу присоединиться к команде, где смогу работать над продуктом, совершенствуя свой код и процессы тестирования.” 💡 Резюме — это не твоя биография, а первая презентация твоей профессиональной ценности. Этап 2. Отказ после разговора с рекрутером Если тебя пригласили на первую беседу — резюме заинтересовало. Но теперь важно закрепить впечатление. Как думает рекрутер HR оценивает не твои знания кода, а твою мотивацию, эмоциональный интеллект, коммуникативность и соответствие культуре компании. Кандидаты часто забывают: это не формальность, а тест на зрелость. ⚠️ Типичные причины отказа Ты не можешь четко объяснить, почему именно IT и почему это направление. Ты не рассказываешь, что уже делал, а только подчеркиваешь, чего не знаешь. Ты выглядишь пассивным или неуверенным, не задаешь вопросов и не проявляешь интерес к компании. Ты обесцениваешь прошлый опыт: “это не важно, я теперь в IT”. ✅ Как действовать Подготовь четкую историю перехода: кто ты был, почему решил сменить сферу, что сделал для этого и каких результатов достиг. Говори о своем прошлом как о силе, а не как о балласте. “Раньше я работал в финансах, поэтому внимательность к деталям помогает мне как тестировщику.” Задавай вопросы: “Как проходит адаптация новичков в вашей компании?”, “Какие возможности роста предусмотрены?” 💬 Рекрутер ищет людей, которые хотят не просто работу, а развитие. Этап 3. Отказ после тестового задания Этот этап показывает, как ты думаешь и как относишься к работе. Как думает тимлид Тестовое — это не про «идеальный код». Это про ответственность, логику и отношение к задаче.  Даже если решение не идеально, но аккуратное, понятное и объясненное — это плюс. ⚠️ Типичные причины отказа Просрочка выполнения без предупреждения. Отсутствие комментариев. Тимлид не понимает твоих решений. Игнорирование требований. Например, просили адаптивный интерфейс, а ты сделал только десктоп. Плагиат или шаблонные решения. Опытные разработчики замечают это мгновенно. ✅ Как действовать Если не успеваешь — предупреди заранее. Это профессионально. Добавь короткий README: какие технологии использовал, почему именно так, с какими трудностями столкнулся. Не бойся показать процесс: лучше объяснить логику, чем прислать «идеальный, но непонятный код». 💡 Тестовое задание — это твой шанс показать не идеальность, а потенциал сотрудничества. Этап 4. Отказ после технического собеседования Это этап, где “вылетают” даже самые подготовленные.  Здесь важно не просто знать, а уметь рассуждать вслух. 💥 Что оценивает тимлид Понимаешь ли ты принципы, а не просто определения. Как реагируешь на сложные или незнакомые вопросы. Как рассуждаешь под давлением. Насколько комфортно с тобой взаимодействовать как с коллегой. ⚠️ Типичные ошибки Ответы “из учебника”, без понимания контекста. Агрессивная реакция на фидбек или оправдания: “Меня так учили.” Молчание, когда не знаешь ответа. Отсутствие вопросов о команде, продукте, технологиях. ✅ Как действовать Если не знаешь — скажи: “Я не сталкивался с этим на практике, но предполагаю, что…” Не бойся рассуждать: тимлид хочет услышать ход мыслей, а не угадывание. В конце обязательно спроси: “Могли бы вы дать обратную связь, что улучшить?” — это производит впечатление зрелости. 💬 Техническое собеседование — это не проверка, а диалог. Этап 5. Отказ после финального этапа Иногда ты прошел все: тест, техническое, финальную беседу — и всё равно получаешь отказ. 💥 Возможные причины Компания выбрала кандидата с чуть большим опытом. Ты не подошел под “культурный фит”: стиль общения, темп работы, энергетика. Твоя коммуникация была слишком формальной или, наоборот, чрезмерно эмоциональной. Это не значит, что ты “плохой”. Часто это просто несовпадение среды, и оно взаимное. ✅ Как реагировать Поблагодари за возможность. Спроси, можно ли получить короткий фидбек. Не воспринимай это как поражение, а как источник информации для роста. 💡 Иногда “нет” сейчас — это “да” через несколько месяцев, когда появится подходящая позиция. Вывод Каждый отказ — это зеркало. Оно показывает не то, что ты “недостаточно хорош”, а то, где именно стоит расти. Никто не строит карьеру без отказов. Но те, кто анализирует, делает выводы и совершенствует себя после каждого этапа — в итоге получают не просто работу, а уверенность в своей профессиональности. Не бойся фразы «мы выбрали другого кандидата». Бойся одного — не сделать выводы и не использовать шанс стать лучше.
Как рассказать о себе на собеседовании. Советы для тех, кто переходит в IT из другой сферы

Автор: Виктория Чабан

Смена профессии — это всегда вызов, и если вы решили перейти в ИТ из другой сферы, вас ждёт ряд испытаний. Но самый сложный этап — это первое собеседование. Часто свитчеры (career switchers) волнуются: «Что сказать о себе, если у меня нет коммерческого опыта? Будет ли мой предыдущий бэкграунд полезен в новой сфере?». На самом деле правильная самопрезентация может стать вашим главным козырем. Почему самопрезентация критически важна Рекрутер или техлид во время знакомства оценивают не только ваши знания. Они хотят понять, как вы мыслите, видите ли свою ценность и сможете ли встроиться в команду. Если вы сами сомневаетесь в себе — это будет заметно. Но если умело подать свой прошлый опыт и обучение, вы получите плюс даже там, где ещё не хватает технических навыков. Типичные ошибки свитчеров Обесценивание прошлого опыта  ❌ «Я работал бухгалтером, но это неважно, потому что теперь хочу в ИТ».  — Так вы показываете, что не умеете интегрировать прошлые знания в новый контекст. Слишком общие ответы  ❌ «Я выучил JavaScript и хочу развиваться».  — Это звучит одинаково у десятков кандидатов, без индивидуальности. Излишний акцент на отсутствии опыта  ❌ «Я ещё не работал в ИТ, поэтому могу быть не очень компетентным».  — Такая фраза сразу снижает доверие. Успешные примеры самопрезентации 🔹 Пример 1. Переход из финансов в тестирование (QA) «Я более 5 лет работал в финансовой сфере, где отвечал за анализ больших объёмов данных и точность отчётности. Эта работа научила меня внимательности к деталям, ответственности и структурному мышлению. Во время обучения на курсах QA я увидел, что эти навыки напрямую применимы в тестировании: нахождение ошибок, проверка соответствия результатов ожиданиям, составление понятной документации.  Сейчас у меня есть несколько собственных проектов на GitHub, где я создавал тест-кейсы и проводил ручное и автоматизированное тестирование. Я стремлюсь применять эти навыки в профессиональной команде, помогая повышать качество продукта и развиваться как специалист». 👉 Почему это работает? Кандидат не отбрасывает прошлый опыт, а показывает его как сильную базу. Он доказывает, что аналитичность и точность из финансов отлично превращаются в ценность для QA. 🔹 Пример 2. Переход из образования во FrontEnd «Я 7 лет работала преподавателем английского языка. Моя работа была связана с тем, чтобы сложное делать простым: объяснять грамматику, строить понятные примеры, помогать студентам не теряться в деталях. Когда я начала изучать веб-разработку, поняла, что эти навыки напрямую помогают создавать удобный интерфейс — когда пользователь быстро понимает, как работает сайт или приложение.  За последние полгода я освоила HTML, CSS и JavaScript, создала несколько pet-проектов: сайт-визитку, блог и небольшой интернет-магазин. В процессе я научилась работать с Git и базовыми инструментами командной работы. Сейчас хочу стать частью команды, где смогу расти как FrontEnd-разработчик и создавать продукты, которыми удобно пользоваться людям». 👉 Почему это работает? Кандидатка подчёркивает soft skills из прошлой профессии (умение объяснять сложное, работа с людьми), а также демонстрирует уже сделанные шаги в ИТ (технологии, проекты). Это создаёт образ человека, который учится и уже приносит пользу. 🔹 Пример 3. Переход из продаж в Python-разработку «В течение 4 лет я работал в сфере продаж, где ежедневно общался с клиентами, искал решения их проблем и договаривался о результатах. Этот опыт дал мне сильные навыки коммуникации, работы под давлением и достижения целей. Когда я начал изучать Python, понял, что такой подход помогает и в разработке: нужно анализировать задачу, находить оптимальный путь и предлагать решение.  За последний год я прошёл несколько курсов, создал чат-бота, веб-приложение и систему для сбора данных. Все проекты выложил на GitHub. Мне нравится решать задачи, которые делают жизнь людей проще, и я хочу применить свои технические навыки и коммуникационный опыт в продуктовой команде». 👉 Почему это работает? Кандидат показывает, что опыт в продажах дал ему soft skills, которые делают разработчика сильнее: умение слушать клиента, достигать результата и работать под давлением. При этом он подтверждает техническую подготовку собственными проектами. Как строить свой ответ Используйте простую формулу: Прошлое — чем вы занимались раньше и какие навыки можно перенести в ИТ. Настоящее — что вы уже сделали для перехода: курсы, проекты, сертификаты. Будущее — чего хотите достичь и почему именно эта компания вам интересна. Пример: «В прошлом я работал в продажах и развивал коммуникативные навыки. Это помогает мне сейчас в работе с командой и клиентами. В течение последнего года я изучал Python, создал несколько проектов (чат-бот, веб-приложение), выложил их на GitHub. В будущем хочу стать частью продуктовой команды, где можно расти до роли мидла и участвовать в создании сложных сервисов». Что оценивает рекрутер и техлид Рекрутер смотрит на вашу мотивацию, способность учиться, коммуникабельность. Ему важно, чтобы вы вписались в культуру компании.   Техлид больше интересуется вашими техническими знаниями и логикой мышления. Но если вы сможете показать структурность, внимательность и желание расти, это будет огромным плюсом даже на начальном уровне. Практические советы Подготовьте 2–3 примера из прошлого опыта, которые можно «перепаковать» в ИТ-контекст (аналитика, работа с людьми, управление проектами, точность).   Обязательно покажите pet-проекты: сайт, приложение, бота, тесты. Это доказательство, что вы не только учились, но и практиковались.   Отработайте самопрезентацию вслух. Запишите себя на видео — вы сразу увидите, где звучите неуверенно.   Добавьте немного личной мотивации: «Я сознательно выбрал ИТ, потому что люблю решать задачи и создавать продукты, которыми пользуются люди». Не бойтесь, что ваш путь «необычный». Именно это и делает вас интересным кандидатом. Во многих ИТ-командах ценят разнообразие бэкграунда: кто-то пришёл из педагогики, кто-то из юриспруденции или медицины — и каждый приносит в команду новую перспективу. Ваша задача — не скрывать прошлый опыт, а показать его как преимущество. Помните: ИТ — это не только про код, но и про умение мыслить, коммуницировать, работать в команде. ✨ Правильная самопрезентация — это мост между вашей предыдущей сферой и новой профессией. Если вы верите в свой путь и умеете это донести, работодатель тоже в вас поверит.
Soft skills, которые отличают хорошего разработчика от обычного

Автор: Виктория Чабан

Когда мы слышим слово «программист», представляется человек, который сидит за компьютером и пишет сотни строк кода. И кажется, что главное для него — знать синтаксис языков, владеть алгоритмами и разбираться во фреймворках. Именно технические знания воспринимаются как главный критерий успеха. Но на практике этого недостаточно. Представьте двух разработчиков с примерно одинаковым уровнем hard skills. Один закрывает задачи, но молчит на митингах и не умеет объяснить свою идею заказчику. Другой — не только пишет код, но и умеет донести сложные вещи простыми словами, сотрудничать с коллегами и находить решения в стрессовых ситуациях. Кого быстрее заметят менеджеры? Кого пригласят в сложные проекты? Кто станет тимлидом через несколько лет? Именно мягкие навыки (soft skills) определяют, кто останется «обычным исполнителем», а кто превратится в настоящего профессионала, с которым хотят работать и коллеги, и заказчики. Это то, что отличает хорошего разработчика от просто технически грамотного. 1. Умение объяснить сложное простыми словами Представьте ситуацию: джуниор-разработчик столкнулся с ошибкой и боится подойти к тимлиду, потому что «будет выглядеть глупо». Хороший разработчик поступает иначе — он формулирует вопрос так, чтобы коллега понял контекст и быстро помог. 👉 Почему это важно? Коммуникация экономит время команды. Тот, кто умеет описать проблему в двух предложениях, помогает двигать проект вперёд, вместо недель хаотичных попыток. 2. Культура обратной связи Многие программисты воспринимают code review как «критику». Но сильный специалист видит в этом способ расти. Он не защищается фразой «это ведь тоже работает», а анализирует, почему коллега советует иначе. 👉 Пример из практики: один девелопер постоянно оправдывался во время ревью, и его код часто оставался сырым. Другой — внимательно слушал комментарии, даже если не соглашался. Через полгода второй получил повышение, потому что показал способность учиться. 3. Приоритизация вместо «я сделаю всё» Новички часто хотят взять максимум задач и показать, что они быстрые. Результат — сорванные дедлайны и падающее качество кода. 👉 Что делает хороший разработчик? Он оценивает, что действительно критично, договаривается с менеджером и честно говорит: «Это я сделаю сегодня, это завтра, а здесь нужна помощь». Такой подход строит доверие. 4. Адаптивность к изменениям Фреймворк, с которым вы работали год, завтра может устареть. Компания может перейти из офиса на remote, а команда — сменить стек. 👉 Реальный пример: разработчик, который отказался освоить новый инструмент CI/CD, остался на «второстепенных задачах». Его коллега, который сказал «я не знаю, но научусь», через полгода уже настраивал пайплайны для всей команды. 5. Эмоциональная зрелость Представьте горячий дедлайн: менеджер давит, клиент нервничает, а баг не находится. Обычный разработчик может разозлиться, замкнуться или обвинить других. Хороший — выдыхает, структурирует проблему и спокойно предлагает варианты. 👉 Почему это решающе? Именно в кризисные моменты становится понятно, кто тянет команду вниз, а кто помогает держать баланс. 6. Желание обучать и делиться Настоящие профессионалы не боятся, что их «сделают лишними». Они делятся знаниями с джунами, проводят внутренние мини-лекции, пишут документацию. 👉 Результат: команда становится сильнее, а сам человек получает репутацию эксперта. Это прямой путь к роли тимлида или архитектора. Как прокачать soft skills разработчику - практический чек-лист. 🔹 Коммуникация Объясняйте свои мысли «языком человека с улицы» — если бабушка поняла, то и заказчик поймёт. Тренируйтесь формулировать проблему в формате: «Что происходит → Почему это проблема → Что нужно». Ведите заметки после митингов, чтобы избежать недопониманий. 🔹 Обратная связь Просите коллег во время code review не только о замечаниях, но и о сильных сторонах вашего кода. Привыкайте спрашивать: «Что я могу сделать лучше в следующий раз?» вместо «Почему ты критикуешь?». Попробуйте раз в неделю давать конструктивный фидбек кому-то из команды. 🔹 Тайм-менеджмент и приоритизация Каждый день начинайте с топ-3 самых важных задач. Используйте метод «Pomodoro» — 25 минут работы, 5 минут отдыха. Всегда предупреждайте менеджера о риске задержки, не дожидаясь дедлайна. 🔹 Адаптивность Раз в квартал изучайте новый инструмент или библиотеку (даже вне основного стека). Участвуйте во внутренних экспериментах: новый процесс, методология, инструмент. Тренируйте «гибкость мышления»: вместо «это не работает» говорите «как это можно сделать иначе?». 🔹 Эмоциональная зрелость Перед тем как ответить в стрессовой ситуации, сделайте паузу на 5 секунд. Используйте техники управления стрессом: дыхательные упражнения, короткие прогулки. Учитесь отделять личное от рабочего: критикуют код, а не вас. 🔹 Обучение и менторство Раз в месяц делайте мини-презентацию для коллег («фишки из проекта», «новый инструмент»). Помогайте джунам с задачами: обучение других закрепляет ваши знания. Документируйте решения — это навык, который ценит любая команда. Вывод Хорошего разработчика отличает не только то, как он пишет код, но и то, как он взаимодействует с людьми. Можно знать десятки языков программирования, строить сложные архитектуры и блестяще проходить технические тесты — но без развитых soft skills карьера часто останавливается на уровне «исполнителя». Soft skills — это про доверие, зрелость и способность делать больше, чем просто нажимать клавиши. Это то, что позволяет слышать и быть услышанным, строить здоровую атмосферу в команде, принимать вызовы и эффективно выходить из сложных ситуаций. 👨‍💻 Тот, кто развивает эти навыки, быстрее получает интересные проекты, легче проходит собеседования, становится заметным для руководства и постепенно выстраивает карьеру, в которой ценят не только «что ты умеешь», но и «каким коллегой ты являешься». Именно это и делает разницу между обычным программистом и тем, кого считают незаменимым специалистом.
Що нового в SQL Server 2017

Автор: Редакция ITVDN

SQL Server 2017 – это огромный шаг вперед на пути к платформе, универсальной для многих языков, типов данных, онпремисного софта и облачных хранилищ, доступной как для Linux и Linux Docker-контейнеров, так и для традиционной Windows. В этой статье мы расскажем о ключевых особенностях обновленной технологии и поделимся полезными ссылками на дополнительные материалы. Загрузить новинку вы можете здесь.   Обратите внимание! Помимо приведенных ниже изменений, также были выпущены кумулятивные патчи, которые привносят свои улучшения.   Обновленный движок Движок SQL Server 2017 включает множество новых возможностей, улучшений и оптимизационных алгоритмов. CLR сборки, в качестве аналога функции clr strict security, описанной в CTP 2.0, теперь могут быть спокойно добавлены в вайт-лист. Кроме того, такие Transact-SQL сборки, как sp_add_trusted_assembly, sp_drop_trusted_assembly и sys.trusted_assemblies (RC1), больше не вызывают конфликтов с безопасностью. Восстановление построения индекса возобновляет процесс построения индекса с места предыдущего сбоя (к примеру, по причине недостаточного места на диске и т.д.) или приостанавливает работу и возобновляет ее через определенное время (ALTER INDEX). IDENTITY_CACHE – отличная новинка для ALTER DATABASE SCOPED CONFIGURATION, которая позволяет избежать пропусков между значениями колонок идентификации на случай, если сервер внезапно перезагрузится или произойдет сбой в работе с вторичным сервером. Новое поколение улучшений в механизме обработки запросов, адаптирующих оптимизационные стратегии к вашему приложению прямо во время выполнения (run-time режиме). Первая версия семейства адаптивной обработки запросов содержит три значимых новшества: batch mode, adaptive joins и batch mode memory grant feedback. Кроме того, не стоит также  забывать про последовательное выполнение многооператорных табличных функций. Автоматическая калибровка базы данных позволяет предотвратить вероятные падения производительности запросов, предлагает решения и, помимо прочего, может автоматически исправить обнаруженные неполадки. Новые возможности графов для моделирования множественных связей включают обновленный синтаксис CREATE TABLE, предназначенный для генерации таблиц ячеек и граней. Также в комплекте поставляется новое ключевое слово MATCH для запросов. С целью обеспечения безопасности CLR сборок опция sp_configure под названием clr strict security теперь включена по умолчанию. Появилась возможность устанавливать максимальный размер временных файлов tempdb до 256 ГБ (262,144 МБ) на один файл. Однако если размер превысит 1 ГБ (без IFI), будет выдано соответствующее предупреждение. Колонка modified_extent_page_count в sys.dm_db_file_space_usage отслеживает изменения в каждом файле базы данных, позволяя применять возможности «умного бэк-ап’а».  «Умный бэк-ап» в свою очередь проводит частичный или полный бэк-ап страниц, исходя из процента внесенных изменений. Поддержка возможности кросс-транзакции между базами данных с Always On Availability Group – даже внутри одного и того же представления. Синтаксис T-SQL SELECT INTO теперь поддерживает загрузку страницы прямо в FileGroup при помощи специального слова – ON. Обновленный функционал Availability Groups включает в себя безкластерную поддержку, настройки Minimum Replica Commit Availability Groups и Windows-Linux кроссплатформенные миграции и тестирование. Новые возможности динамического управления: sys.dm_db_log_stats демонстрирует общие уровневые атрибуты и содержимое файлов транзакции, необходимое для мониторинга состояния транзакционного лога. sys.dm_tran_version_store_space_usage отслеживает использование места на диске отдельно для каждой базы данных, что, безусловно, помогает предугадать возможный размер временных файлов. sys.dm_db_log_info позволяет мониторить, оповещать и предотвращать потенциальные ошибки транзакции благодаря обработке VLF-информации. sys.dm_db_stats_histogram - новая опция мониторинга для анализа статистики. sys.dm_os_host_info предоставляет оперативную системную информацию Windows и Linux. Database Tuning Advisor (DTA) – или «советник по калибровке базы данных» – получил целый спектр дополнительных настроек и улучшений производительности. Оптимизация работы с памятью включает в себя поддержку вычисленных колонок в оптимизированных таблицах, полную поддержку JSON-функций и CROSS APPLY оператор. STRING_AGG функция обзавелась таким полезным опционалом, как CONCAT_WS, TRANSLATE, TRIM и WITHIN GROUP. Новые опции bulk-доступа (вроде BULK INSERT и OPENPOWSET(BULK…)) для CVS и блоб-файлов Azure. Оптимизация объектов: внедрение sp_spaceused, отказ от 8-индексных ограничений оптимизированных таблиц, sp_rename для оптимизированных таблиц и органически внедренные T-SQL модули. Помимо прочего стоит указать CASE и TOP (N) WITH TIES для упомянутых выше T-SQL модулей. Теперь хранение, бэк-ап и заливка оптимизированных таблиц на Azure не составит труда. DATABASE SCOPED CREDENTIAL - это новый класс защищенных, поддерживающих CONTROL, ALTER, REFERENCES, TAKE OWNERSHIP и VIEW DEFINITION разрешений. Работа с операциями bulk-администрирования может происходить прямо из sys.fn_builtin_permissions. Добавлен уровень совместимости 140.   Службы интеграции (SSIS) Новая особенность Scale Out может похвалиться следующими инновациями: Scale Out Master теперь стал более доступным для использования. Благодаря усовершенствованию Scale Out Workers подверглась изменению система ведения логов на случай отказа работы сервера. Параметр runincluster процедуры [catalog].[create_execution] для большей совместимости и читабельности был переименован на runinscaleout. Для поддержки выполнения SSIS-пакетов в стандартном режиме SSIS-Каталог обзавелся соответствующими глобальными свойствами. Благодаря новой особенности Scale Out для SSIS, Вы можете легко использовать Use32BitRuntime во время работы приложения. Сервисы интеграции SQL Server 2017 теперь поддерживают SQL Server и для Linux. Новый программный пакет позволит Вам работать с SSIS прямо из командной строки. Помимо прочего, Scale Out for SSIS значительно упрощает запуск SSIS-пакетов на нескольких машинах. Отдельно стоит упомянуть об OData Source и OData Connection Manager, обеспечивающих подключение к Microsoft Dynamics AX Online and Microsoft Dynamics CRM Online.   Обновление служб Master Data Значительное улучшение и повышение производительности в сравнении с предыдущими версиями. Хотите просмотреть список сборок, коллекций и иерархий веб-приложения? Что может быть проще! Новая страница Explorer легко позволит Вам это. Благодаря использованию специальных процедур хранения данных внесение записей стало значительно более оптимизированным. Улучшение производительности во время развертывания папки Entities в Manage Groups, так как страница Manage Groups перемещена в секцию Security.   Обновленные службы анализа (SSAS) Сервисы анализа (в дальнейшем – SSAS) SQL Server 2017 представляют множество новых возможностей и улучшений для табличных моделей. А именно: Табличный режим в качестве опции по умолчанию. Объектная защита метадаты табличных моделей. Взаимозависимость данных для упрощения создания зависимостей полей. Внедрение нового ресурса Get Data и поддержка М-запросов для существующего DirectQuery. DAX Editor для SSDT. Кодировка подсказок для оптимизации обновления данных таблиц в памяти. Поддержка таблицами уровня совместимости 1400. Если Вы желаете создать новые или обновить существующие таблицы к уровню совместимости 1400, загрузите и установите SQL Server Data Tools (SSDT) 17.0 RC2. Поддержка Get Data нового уровня совместимости 1400, упомянутого выше. Новое свойство Hide Members позволит Вам скрыть пустые сущности поврежденных иерархий. Новые действия – Detail Rows и Show Details – для совокупной информации. Внедрение функций SELECTCOLUMNS и DETAILROWS для создания Detail Rows – выражений. Оператор DAX IN для задания множественных значений.   Обновленные службы отчетности В новой версии SQL Server 2017 службы отчетности не поставляются по умолчанию. Загрузить их Вы можете здесь. Для повышения уровня читабельности кода и упрощения командной разработки была внедрена поддержка комментариев. Также Вы можете прикреплять к ним дополнительные файлы. Используя последнюю версию Report Builder и SQL Server Data Tools, Вы можете создавать нативные DAX-запросы – в противовес таблицам служб анализа. Все, что Вам для этого нужно – лишь переместить желаемые поля в дизайнер запросов. Благодаря поддержке интуитивного RESTful API, используя последнюю версию SQL-инструментария, Вы без труда сможете разрабатывать современные приложения и проводить их последующую кастомизацию.   Машинное обучение В новой версии приложения R-службы сменили название на Службы Машинного Обучения SQL Server (SQL Server Machine Learning Services), что подчеркивает поддержку как языка R, так и набирающего популярность Python. Благодаря этому работа с такими языками не составит труда. Впрочем, можно обойтись и без SQL Server: упомянутые Службы Машинного Обучения не требуют его наличия на ПК. С этими значительными новшествами разработчики SQL получили колоссальное преимущество в виде отменных библиотек Python ML и AI, которые, помимо прочего, могут похвастаться открытым исходным кодом. Итак, что же мы имеем? Revoscalepy – Python`овский эквивалент RevoScaleR. Включает в себя параллельные алгоритмы линейных и логистических регрессий, дерево решений, усиленные деревья и рандомные леса. Также стоит упомянуть богатый набор API, крайне полезных при обработке и манипуляции данными, удаленными вычислениями и информационными ресурсами. Microsoftml – воистину настоящее произведение искусства в сфере алгоритмов машинного обучения. Включает в себя проработанные нейронные сети, быстрые деревья решений и леса и, конечно же, оптимизированные алгоритмы линейных и логистических регрессий. В Вашем распоряжении также оказываются заготовки на базе моделей ResNet, весьма удобные, когда речь заходит об извлечении картинок или их анализа. Взаимодействие Python с T-SQL – что может быть проще? Все, что Вам нужно – это лишь задеплоить Python-код при помощи процедуры sp_execute_external_script! Ощутите настоящую скорость передачи данных между SQL и Python-процессами. Свободно используйте MPI кольцевую параллелизацию. Нативное оценивание – даже если язык R не установлен, благодаря функции Predict Transact-SQL можно легко провести оценивание в любой сущности SQL Server 2017. Все, что Вам необходимо, – это настроить модель, используя один из алгоритмов RevoScaleR или revoscalepy, сохранив модель в новом компактном бинарном формате. Управление пакетами – обновленный T-SQL обладает поддержкой команды CREATE EXTERNAL LIBRARY, что упрощает работу с R-пакетами. Контролируйте приватность пакетов, устанавливайте доступ, сохраняйте их и делитесь с другими пользователями. Улучшения производительности – благодаря оптимизации процедуры sp_execute_external_script была включена поддержка batch-режима для информации в столбцах. Автор перевода: Евгений Лукашук Источник
Початок кар'єри в ІТ

Автор: Олександр Марченко

Введение Пожалуй, все давно знают, что эра технологий уже наступила, и произошло это уже давно. На сегодняшний день невозможно создать производство чего-либо без использования информационных технологий. Насколько целесообразным является выбор именно Информационных технологий в качестве своей профессиональной сферы, решать каждому из Вас. Но Вам будет очень трудно найти что-то более динамичное и захватывающее. Также стоит помнить, что и уровень зарплат по-прежнему сохраняет статус наиболее привлекательных, практически во всех современных экономиках развитых государств. Что нужно знать о построении своей карьеры? Все решают Ваши знания и отношения с другими людьми. Причем, влияние этих двух аспектов абсолютно равноправное. Если Вы отдадите должное внимание построению нужных связей и знакомств, будете постоянно пополнять свой круг общения новыми приятными и полезными знакомствами, и, главное, не забудете поддерживать старые отношения, то всегда будете оставаться в более выгодных условиях. И наоборот, тот, кто будет разбрасываться знакомствами, ставить свои приоритеты выше других, вести себя неподобающе в современном обществе, в итоге приобретет дурную славу, которая очень быстро распространиться по локальному ИТ-сообществу и за его пределами. Первым шагом в построении карьеры, скорее всего будет трудоустройство на первую работу. И тут придется ответить на самый страшный вопрос: «Где взять 2 года опыта?» Порой этот вопрос звучит следующим образом: «Где я обзаведусь опытом работы в реальных проектах, если я только учусь/только что выпустился/работаю в другой сфере/не имел опыта с этой платформой?». И это абсолютно правильный вопрос, поскольку работодатель хочет нанять надежного профессионала, а не дилетанта. Попробуем найти ответы на этот вопрос, и вот несколько вариантов: Принимайте участие в хакатонах и OpenSource проектах Данного рода активности позволят Вам обзавестись своими личными проектами. Их Вы сможете развивать, при этом, без сомнений, улучшите свои профессиональные навыки и обзаведетесь полезными знакомствами. Ведь они могут сыграть ключевую роль в Вашем будущем. Анализируйте чужой код Доступ к которому все также легко получить на OpenSource проектах. Вы не сможете стать профессионалом и создавать свои решения до тех пор, пока не сможете полностью понимать чужие. Это все равно как учиться писать, не имея навыков чтения. Участвуйте в стажировках Большинство крупных компаний с огромным удовольствием берут на стажировки студентов, которые проявляют потенциал. Вам никто не даст участвовать в крупных и критически важных проектах, но зато Вы сможете проявить себя в реальных условиях, да еще и сделать это под чутким руководством более опытных коллег. Дополнительным бонусом стажировок является пусть и незначительная, но возможность получения приглашения на работу. Для этого нужно постараться, но никто и не говорил, что будет легко. Кроме всего прочего не забывайте о постоянной работе над собой. Если Вы хотите оставаться востребованным на рынке труда специалистом, Вам необходимо оставаться в курсе последних событий ИТ-мира и непрерывно совершенствоваться. Для Вас не должно быть открытием то, что работа - это рутина, а вот обучение зачастую приносит больше удовольствия. Так превратите свою работу в непрерывное развитие, и Вы не пожалеете!
Пріоритет операторів у JavaScript (частина 1)

Автор: Олександр Марченко

Введение В данной статье мы познакомимся со стандартными операторами и их применением в языке программирования JavaScript для работы с переменными и со значениями. Сперва познакомимся со специфической терминологией, которая используется при работе с операторами.Большинство операторов обозначаются символами пунктуации, такими как =, +, - и другими. Некоторые – специальными ключевыми словами, к примеру, delete и new. Но, как знаки пунктуации, так и ключевые слова обозначают обычные операторы, просто используют для этого разный синтаксис. Оператор присвоения Операнд – то, к чему будет применен оператор, или порой можно встретить название: «аргумент оператора». Оператор присваивания выглядит как знак равенства = :    var a = 1, b = 2; В данной строке переменной "a" было присвоено значение 1, а переменной b – значение 2.      var a = a + 2; В этой строке переменной "a" было присвоено ее значение, увеличенной на 2. Иначе говоря, сперва выполнится операция сложения текущего значения переменной a, результат которого будет пере-присвоен переменной a. Полезной особенностью данного оператора является использование его по цепочке:      var a, b, c;       a = b = c = 2 + 3; В результате работы последней строки всем трем переменным будет присвоено значение 5. Арифметические операторы Арифметические операторы используются для определения простейших математических операций над операндами, в качестве которых могут выступать как значения, так и переменные: плюс + , минус - , умножить * , поделить / , деление по модулю (определение остатка от деления) %. Большинство JavaScript-операторов работают с двумя операндами, следовательно, способны два простых выражения объединить в одно более сложное. Но JavaScript поддерживает несколько унарных операторов, которые преобразуют только одно выражение в другое, более сложное. Таким оператором является унарный минус, который изменяет знак числа на противоположный. В таком случае оператор «минус» в выражении -1 представляет собой унарный оператор и выполняет смену знака у своего единственного операнда 1. <script type="text/javascript">         var x = 1;         document.write(-x + " ");         document.write(-(-x) + " ");         document.write(-(x + 4) + " "); script> Унарный плюс, используемый в качестве арифметического оператора, не выполняет каких-либо действий: <script type="text/javascript">         document.write(+1);         document.write(" ");         document.write(+(1 - 2)); script> Более распространенным применением унарного плюса является преобразование значения в число. В случае объединения двух выражений в одно более сложное используются бинарные операторы, иначе говоря, бинарным называют оператор, который применяется к двум операндам, к примеру, если оператор плюс будет стоять между двумя числами, он будет представлен в своей бинарной форме: <script type="text/javascript">         var a = 1, b = 2;      document.write(a + b + " ");      document.write(b + a + " "); script> Кроме того, если у нас есть две переменные со строковыми значениями, бинарный плюс сложит эти строки. произведя конкатенацию, а применение унарного плюса к каждой из переменных произведет преобразование их значений к числу. var a = "2"; var b = "3"; alert(a + b); // "23", произошла конкатенация строк alert(+a + b); // "23", второй операнд - всё ещё стоковая переменная alert(+a + +b); // 5, число, поскольку оба операнда предварительно преобразованы в числа ((+a) + (+a)) В то же время, если использовать оператор «минус», мы получим другие результаты: var a = "2"; var b = "3"; alert(a - b); // -1, произошло неявное преобразование типов Таким образом, мы подошли к тому, что создавая JavaScript-выражения, важно обращать внимание на типы данных, передаваемых операторам, и, как следствие, на типы данных, которые они возвращают. Стоит отметить, что различные операторы требуют, чтобы операнды, с которыми они работают, возвращали значения только определенного типа. Так, нельзя выполнить умножение строк, поэтому выражение var a = "text1" * "text2"; не является допустимым и приведет к ошибке. В то же время, выражение var a = "2" * "3"; вполне допустимо, потому что интерпретатор JavaScript будет пытаться по мере возможностей преобразовать выражение в требуемый тип данных, в нашем случае из строкового типа в числовой. Познакомимся с работой операторов умножения и деления на простом примере. В данном случае мы используем бинарные формы операторов, поскольку они взаимодействуют с двумя операндами: <script type="text/javascript">      document.write("2" / 2 + " "); // 1, произойдет неявное преобразование строки в число      document.write(((2 + 2) * 6) / "12" + " "); // 2, произойдет неявное преобразование строки в число      document.write(12 * 7 / 2 + " "); // 42      document.write(17 % 7 + " "); // 3, возвращаем остаток от целочисленного деления      document.write(21 / 3 - 1 + " "); // 6, наблюдаем правильный порядок выполнения операций: сперва деление, затем нахождение разницы script> Если с работой операторов +, -, *, / в самом простом их применении мы были знакомы еще из младшей школы, то с оператором % стоит познакомиться детальней. Оператор деления по модулю % вычисляет остаток, получаемый при целочисленном делении первого операнда на второй, которые в курсе школьной математики именовались как делимое и делитель соответственно, а в результате самого деления мы получали частное и остаток от деления. Деление по модулю подразумевает возвращение остатка от деления. Например, выражение var a = 190 % 27; будет выполнено следующим образом: Оператор деления по модулю зачастую применяют к целочисленным операндам, но он корректно работает и с вещественными значениями. Так, в итоге выполнения выражения var a = -6.3 % 3; переменной a будет присвоено значение -0.3. Кроме этого, стоит отметить следующие особенности вычислений в JavaScript:  <script type="text/javascript">        var a = 4,        b = true;        c = undefined,        d = Infinity,        e = 0,        res = undefined;         res = a * d;         document.write(res + " "); // Infinity, умножение числа на бесконечность возвращает бесконечность         res = a + b;         document.write(res + " "); // 5, true преобразовывается в 1 и производится операция сложения         res = a / e;         document.write(res + " "); // Infinity, деление числа на ноль возвращает бесконечность         res = a * c;         document.write(res + " "); // NaN, умножение числа на неопределенный тип данных, вернет сигнализацию об ошибке в виде NaN - Not a Number script> В дальнейшем мы познакомимся с такими операторами как инкремент/декремент, операторами сравнения, равенства и идентичности, которые будут часто использоваться в написании клиентских сценариев c использованием языка JavaScript.
.NET & Blazor. Створення веб-програми на основі браузера

Автор: Daniel Roth

В рамках сегодняшней статьи я рад представить новый экспериментальный проект от команды ASP.NET под названием Blazor. Что такое Blazor? Blazor – это экспериментальный веб UI – фреймворк на базе C#, Razor и HTML, который работает непосредственно в браузере посредством WebAssembly. Цель эксперимента – в значительной мере упростить задачу построения простых и качественных одностраничных приложений, которые могут быть запущены в рамках любого браузера. Достигается это за счет написания .NET веб-приложений, которые при помощи открытых веб-стандартов могут запускаться на стороне клиента. В случае если вы уже работаете с .NET, подобный подход открывает перед вами следующие перспективы: вы сможете использовать навыки разработки браузерных приложений в дополнение к существующим сценариям серверных, облачных, нативных и игровых приложений. Однако, даже если вы непосредственно с .NET не знакомы, мы надеемся, что Blazor подтолкнет к его изучению. Зачем использовать .NET для браузерных приложений? Хотя веб-разработка за прошедшие годы значительно упростилась, создание современных веб-приложений - задача далеко не всегда тривиальная. Построение же веб-приложений на базе .NET предоставляет уникальную возможность улучшить качество написания подобного рода программ. Среди основных преимуществ стоит выделить: Стабильность и целостность: инструменты стандарта .NET на протяжении многих лет зарекомендовали себя в качестве надежных помощников при разработке приложений. Современные инновационные языки: с использованием C# и F# процесс создания программ, по сути, становится чем-то вроде развлечения, настолько широким спектром возможностей эти языки обладают. Популярная среда разработки: стек IDE Visual Studio обеспечивает максимальное удобство работы с Windows, Linux и macOS. Быстрота вычислений: .NET обладает длинной историей по улучшению производительности, надежности и защиты веб-приложений для серверов. Соответственно, при разработке full-stack .NET приложений все указанные преимущества также ощущаются. Browser + Razor = Blazor! Blazor базируется на существующих веб-технологиях, таких как HTML и CSS, но в этом случае для создания UI-элементов вы используете C# и Razor – синтаксис вместо JavaScript. Однако отметьте, что это не то же самое, что и деплой существующего проекта UWP или Xamarin в браузер. Blazor будет обладать всеми ключевыми особенностями современных веб-фреймворков, включая: Компонентную модель для построения комплексных UI Маршрутизацию Слои Формы и валидацию Внедрение зависимостей Поддержку JavaScript Перезагрузку в браузере во время разработки «вживую» Рендеринг на стороне сервера Полноценную поддержку .NET – отладки (как в браузере, так и в IDE) IntelliSense и прочие различные инструменты Возможность запускать более старые (не WebAssembly) браузеры через asm.js Публикацию и мониторинг размера приложения Изменения WebAssembly Запуск .NET – приложений в браузере стал возможен благодаря WebAssembly, новому веб-стандарту для «портативных, умеренных в размерах и быстрых» веб-приложений. Таким образом, WebAssembly вводит фундаментально новый способ построения веб-приложений, так как код, скомпилированный под WebAssembly, не уступает скорости нативных .NET-приложений. Никаких прочих сторонних зависимостей нам не нужно: вы можете запустить обычные .NET-сборки в браузере с использованием WebAssembly. В августе прошлого года наши друзья из команды Xamarin Microsoft анонсировали планы по созданию Mono .NET специально для браузеров с использованием все той же WebAssembly. По сути, Blazor частично базируется на результатах их работы. Новый эксперимент Сейчас мы восхищаемся возможностями Blazor-технологии, но не стоит забывать, что сейчас это лишь экспериментальная технология, а не официально выпущенная и готовая для полноценной работы. На этой стадии мы можем более глубоко ознакомиться с основными функциональными возможностями представленной технологии, а также выразить свои замечания и пожелания разработчикам. Я хочу попробовать! Найти технологию вы можете в Blazor repo, который сейчас доступен для использования. Это проект с полностью открытым исходным кодом: все текущие изменения и дополнения могут быть отслежены в вышеупомянутом репозитории. Пожалуйста, отметьте, что технология находится в статусе раннего доступа. Здесь еще нет никаких инсталляторов или шаблонов проектов, кроме того, многое из заявленного еще не реализовано. Даже то, что уже сделано, не оптимизировано. Если вам интересно, вы можете загрузить репозиторий, построить его и протестировать, но пытаться на его базе разработать рабочий проект – задумка явно не удачная. Что же касательно предложений и поддержки, вы можете использовать issue tracker репозитория. Через месяц мы планируем выпустить первые черновые версии заготовок веб-проектов и инструментов, сделав технологию более доступной для широкой аудитории. Автор перевода: Евгений Лукашук Источник
Нововведення в С# 8

Автор: Jonathan Allen

Хотя внимание разработчиков приковано сейчас к таким глобальным вещам, как дефолтная реализация методов интерфейсов, мы хотим поговорить с вами о нюансах новой версии популярного языка программирования С#. Новые операторы присвоения: &&= и ||= Начиная с самой первой версии, C# поддерживал комбинирования операторов присвоения с другими операторами. Существует поддержка всех бинарных операторов (а именно - +, -, & и так далее), кроме булевских && и ||. Теперь комбинации типа &&= и ||= дополнят этот список. Дословно-интерполируемые строки Дословные строки начинаются на @”. Интерполируемые строки используют $”. Но что, если нам нужно создать дословно-интерполируемую строку? Что нам писать - @$” или  $@”? Сейчас первый вариант работает, но второй выдает ошибку уровня компиляции, что может вызывать некоторые неудобства у многих разработчиков, так как обычно такие нюансы часто забывают. Суть нововведения заключается в том, что в новой версии можно использовать как первый вариант конструкции, так и второй. Впрочем, некоторые все равно находят это изменение лишним, так как оно может привести к некоторой фривольности кода и проблемам с единым стилем. Выражение using структурно соответствует IDisposable У компилятора C# интересное отношение к интерфейсам. Довольно часто вам не нужно на самом деле реализовывать абстрактный интерфейс для определенных фичей языка. Все, что вам нужно, так это просто реализовать в классе определенный публичный API, что по своей структуре повторяет абстрактный интерфейс. Классическим примером этого является foreach и IEnumerable. Если класс обладает методом GetEnumerator, возвращающим значение свойства Current и методом MoveNext, тогда вы можете использовать foreach. Сами типы возвращаемых данных не имеют значения, что позволяет таким классам, как List<T>, реализовывать более быстрые перечисления. Этот подход достаточно часто называется структурным соответствием. В рамках новой версии языка using также будет поддерживать структурное соответствие. На первый взгляд, это нововведение кажется лишенным смысла, так как мы вряд ли ожидаем увидеть класс для использования с using без реализации интерфейса IDisposable. Впрочем, мы упускаем такое нововведение как ref struct. Реализация интерфейса в данном случае невозможна, поэтому здесь нам на помощь приходит структурное соответствие. Методы расширения с foreach и using Как дополнение к предыдущему посту, теперь мы можем добавить GetEnumerator и Dispose в качестве методов расширения для работы с foreach и using соответственно. Опять же, здесь мы говорим об особенности, которая станет полезной в частном случае. К примеру, вы хотите добавить Dispose-расширение в COM-объект сторонней библиотеки (к примеру, дабы вызвать Marshal.ReleaseComObject). Впрочем, информация об этом еще неполная и мы можем упустить некоторые случаи использования данной фичи. Using неявной области видимости На данный момент выражение using может быть использовано только в рамках явной области видимости (в скобках). Если данное нововведение будет принято на вооружение, теперь вы можете писать конструкции следующего вида: Каждая из этих переменных будет автоматически очищена в конце текущей области видимости в реверсивном порядке. Функционально написанное выше эквивалентно этому, но гораздо более элегантно: Подобное может быть полезно в тех случая, когда в одно и то же время создается множество dispose-объектов. Теперь вы можете создавать подобные объекты даже внутри выражений в полной уверенности в безопасности данного типа объявлений. Возможный минус данного нововведения в том, что оно не совместимо с оператором goto. Автор перевода: Евгений Лукашук Источник
Notification success