Результати пошуку за запитом: Видеокурс c
Реалізація успадкування перерахувань за допомогою розширення для Visual Studio, що базується на Roslyn
Автор: Редакція ITVDN
Введение
В С# программировании необходима возможность расширять простое уравнение. Например, когда нужно использовать перечисления из библиотеки dll, которые невозможно изменить в коде, но и в то же время нужно использовать дополнительные значения, которых нет в библиотеке. Решить проблему можно при помощи системы Roslyn, основанной на расширении VS для создания отдельных файлов. Данный подход похож на моделирование множественного наследования в шаблоне "Implementing Adapter Pattern" и "Imitating Multiple Inheritance" в C# с использованием системы Roslyn, основанной на VS Extension Wrapper Generator.
Формулировка проблематики
Обратите внимание на схему EnumDerivationSample. Она содержит негенерированный код, большая часть которого будет сгенерирована позже. Схема содержит тип перечисления BaseEnum:
public enum BaseEnum
{
A,
B
}
Также в ней присутствует тип перечисления DerivedEnum
public enum DerivedEnum
{
A,
B,
C,
D,
E
}
В перечислении DerivedEnum перечень значений А и В такие же, как в перечислении BaseEnum.
Файл DerivedEnum.cs также содержит статический класс DeriveEnumExtensions для конвертации BaseEnum в DerivedEnum и наоборот:
public static class DeriveEnumExtensions
{
public static BaseEnum ToBaseEnum(this DerivedEnum derivedEnum)
{
int intDerivedVal = (int)derivedEnum;
string derivedEnumTypeName = typeof(DerivedEnum).Name;
string baseEnumTypeName = typeof(BaseEnum).Name;
if (intDerivedVal > 1)
{
throw new Exception
(
"Cannot convert " + derivedEnumTypeName + "." +
derivedEnum + " value to " + baseEnumTypeName +
" type, since its integer value " +
intDerivedVal + " is greater than the max value 1 of " +
baseEnumTypeName + " enumeration."
);
}
BaseEnum baseEnum = (BaseEnum)intDerivedVal;
return baseEnum;
}
public static DerivedEnum ToDerivedEnum(this BaseEnum baseEnum)
{
int intBaseVal = (int)baseEnum;
DerivedEnum derivedEnum = (DerivedEnum)intBaseVal;
return derivedEnum;
}
}
Преобразование значений BaseEnum в DerivedEnum всегда проходит успешно, в то время как преобразование в обратном направлении может быть проблематичным. Например, если значение DerivedEnum больше 1 (значение BaseEnum.B – наибольшее значение в типе перечисления BaseEnum). Функция Program .Main (...) используется для тестирования функциональных характеристик:
static void Main(string[] args)
{
DerivedEnum derivedEnumConvertedValue = BaseEnum.A.ToDerivedEnum();
Console.WriteLine("Derived converted value is " + derivedEnumConvertedValue);
BaseEnum baseEnumConvertedValue = DerivedEnum.B.ToBaseEnum();
Console.WriteLine("Derived converted value is " + baseEnumConvertedValue);
DerivedEnum.C.ToBaseEnum();
}
Будет выводиться:
Derived converted value is A
Base converted value is B
И тогда появится такое сообщение:
"Cannot convert DerivedEnum.C value to BaseEnum type, since its integer value 2 is greater than the max value 1 of BaseEnum enumeration."
Использование Visual Studio Extension для формирования наследования перечислений.
Установите расширение NP.DeriveEnum.vsix Visual Studio из папки VSIX, дважды кликнув на файл. Откройте схему EnumDerivationWithCodeGenerationTest. Тип ее перечислений такой же, как и в предыдущей схеме:
public enum BaseEnum
{
A,
B
}
Посмотрите на файл "DerivedEnum.cs":
[DeriveEnum(typeof(BaseEnum), "DerivedEnum")]
enum _DerivedEnum
{
C,
D,
E
}
Он определяет такой тип перечисления _DerivedEnum с атрибутом: [DeriveEnum (TypeOf (BaseEnum), "DerivedEnum")]. Атрибут определяет "супер-перечисления" (BaseEnum) и названия производного перечисления ("DerivedEnum»). Обратите внимание, что поскольку частичные перечисления не поддерживаются в C#, нам придется создать новый тип перечисления, объединив значение от "супер" до "суб" перечислений.
Посмотрите характеристики файла DerivedEnum.cs, его "специальные инструменты (Custom Tool)" уже содержатся в "DeriveEnumGenerator":
Теперь откройте файл DerivedEnum.cs в Visual Studio, попробуйте изменить его (скажем, добавив пробел) и сохраните его. Вы увидите, что сразу будет создан файл DerivedEnum.extension.cs:
Этот файл содержит тип перечисления DerivedEnum, который объединяет все поля перечислений BaseEnum и _DerivedEnum. Для начала убедитесь, что они имеют одинаковое имя и полное значение, а также имеют соответствующие поля в исходных перечислениях:
public enum DerivedEnum
{
A,
B,
C,
D,
E,
}
Расширение VS также формирует статический класс DerivedEnumExtensions, содержащий методы преобразования между суб и супер перечислениями:
static public class DerivedEnumExtensions
{
public static BaseEnum ToBaseEnum(this DerivedEnum fromEnum)
{
int val = ((int)(fromEnum));
string exceptionMessage = "Cannot convert DerivedEnum.{0} value to BaseEnum - there is no matching value";
if ((val > 1))
{
throw new System.Exception(string.Format(exceptionMessage, fromEnum));
}
BaseEnum result = ((BaseEnum)(val));
return result;
}
public static DerivedEnum ToDerivedEnum(this BaseEnum fromEnum)
{
int val = ((int)(fromEnum));
DerivedEnum result = ((DerivedEnum)(val));
return result;
}
}
Если использовать метод Program.Main (...), как и в предыдущем образце, получим достаточно похожий результат:
static void Main(string[] args)
{
DerivedEnum derivedEnumConvertedValue = BaseEnum.A.ToDerivedEnum();
Console.WriteLine("Derived converted value is " + derivedEnumConvertedValue);
BaseEnum baseEnumConvertedValue = DerivedEnum.B.ToBaseEnum();
Console.WriteLine("Base converted value is " + baseEnumConvertedValue);
DerivedEnum.C.ToBaseEnum();
}
Вы можете указать значение поля как в суб, так и в супер перечислениях. Генератор кода достаточно развит для того, чтобы выдавать правильный код. Например, если мы поставим значение BaseEnum.B 20:
public enum BaseEnum
{
A,
B = 20
}
И _DerivedEnum.C – 22:
enum _DerivedEnum
{
C = 22,
D,
E
}
Получим такой генерируемый код:
public enum DerivedEnum
{
A,
B = 20,
C = 22,
D,
E,
}
Метод расширения ToBaseEnum(...) также будет обновляться так, чтобы показывать исключение только тогда, когда мы пытаемся увеличить целое значение области DerivedEnum до 20:
public static BaseEnum ToBaseEnum(this DerivedEnum fromEnum)
{
int val = ((int)(fromEnum));
string exceptionMessage = "Cannot convert DerivedEnum.{0} value to BaseEnum - there is no matching value";
if ((val > 20))
{
throw new System.Exception(string.Format(exceptionMessage, fromEnum));
}
BaseEnum result = ((BaseEnum)(val));
return result;
}
Обратите внимание, что изменив значение первого поля суб-перечисления на меньшее или равное последнему полю супер-перечисления, генерация кода не осуществится, и это состояние будет отображаться, как ошибка. Например, попробуйте изменить значение _DerivedEnum.C на 20 и сохранить изменения. Файл DerivedEnum.extension.cs будет отображаться в списке ошибок.
Примечания о введении генератора объектного кода.
Код ввода кода генерирования содержится в схеме NP.DeriveEnum. Основная схема NP.DeriveEnum была создана с помощью шаблона "Visual Studio Package" (также, как это было сделано при Implementing Adapter Pattern и Imitating Multiple Inheritance в C# с использованием системы Roslyn, основанной на VS Extension Wrapper Generator).
Нам пришлось добавить пакеты Roslyn и MEF2, чтобы использовать функции Roslyn при таких командах, как "Nu Get Package Manager Console":
Install - Package Microsoft.CodeAnalysis - Pre
Install - Package Microsoft.Composition
Класс main генератора называется DeriveEnumGenerator. Он вводит интерфейс IVsSingleFileGenerator. У интерфейса есть два метода - DefaultExtension(...) и Generate(...). Метод DefaultExtension(...) позволяет разработчику указать расширение генерируемого файла:
public int DefaultExtension(out string pbstrDefaultExtension)
{
pbstrDefaultExtension = ".extension.cs";
return VSConstants.S_OK;
}
Метод Generate(...) позволяет разработчику указать код, который входит в состав созданного файла:
public int Generate
(
string wszInputFilePath,
string bstrInputFileContents,
string wszDefaultNamespace,
IntPtr[] rgbOutputFileContents,
out uint pcbOutput,
IVsGeneratorProgress pGenerateProgress
)
{
byte[] codeBytes = null;
try
{
codeBytes = GenerateCodeBytes(wszInputFilePath, bstrInputFileContents, wszDefaultNamespace);
}
catch (Exception e)
{
pGenerateProgress.GeneratorError(0, 0, e.Message, 0, 0);
pcbOutput = 0;
return VSConstants.E_FAIL;
}
int outputLength = codeBytes.Length;
rgbOutputFileContents[0] = Marshal.AllocCoTaskMem(outputLength);
Marshal.Copy(codeBytes, 0, rgbOutputFileContents[0], outputLength);
pcbOutput = (uint)outputLength;
return VSConstants.S_OK;
}
В данном случае генерация кода получена за счет метода GenerateCodeBytes (...).
protected byte[] GenerateCodeBytes(string filePath, string inputFileContent, string namespaceName)
{
string generatedCode = "";
DocumentId docId =
TheWorkspace
.CurrentSolution
.GetDocumentIdsWithFilePath(filePath).FirstOrDefault();
if (docId == null)
goto returnLabel;
Project project = TheWorkspace.CurrentSolution.GetProject(docId.ProjectId);
if (project == null)
goto returnLabel;
Compilation compilation = project.GetCompilationAsync().Result;
if (compilation == null)
goto returnLabel;
Document doc = project.GetDocument(docId);
if (doc == null)
goto returnLabel;
SyntaxTree docSyntaxTree = doc.GetSyntaxTreeAsync().Result;
if (docSyntaxTree == null)
goto returnLabel;
SemanticModel semanticModel = compilation.GetSemanticModel(docSyntaxTree);
if (semanticModel == null)
goto returnLabel;
EnumDeclarationSyntax enumNode =
docSyntaxTree.GetRoot()
.DescendantNodes()
.Where((node) = > (node.CSharpKind() == SyntaxKind.EnumDeclaration)).FirstOrDefault() as EnumDeclarationSyntax;
if (enumNode == null)
goto returnLabel;
INamedTypeSymbol enumSymbol = semanticModel.GetDeclaredSymbol(enumNode) as INamedTypeSymbol;
if (enumSymbol == null)
goto returnLabel;
generatedCode = enumSymbol.CreateEnumExtensionCode();
returnLabel:
byte[] bytes = Encoding.UTF8.GetBytes(generatedCode);
return bytes;
}
Метод Generate (...) имеет доступ к C # в качестве одного из параметров. Мы используем такой способ, чтобы получить Id документа в системе Roslyn:
DocumentId docId =
TheWorkspace
.CurrentSolution
.GetDocumentIdsWithFilePath(filePath).FirstOrDefault();
Из документа Id можно получить идентификатор схемы, используя dockId.
Из схемы Id получаем Roslyn Project от Rosly Workspace:
Project project = TheWorkspace.CurrentSolution.GetProject(docId.ProjectId);
Из Project получаем следующее:
Compilation compilation = project.GetCompilationAsync().Result;
Также получаем Roslyn Document:
Document doc = project.GetDocument(docId);
С данного документа получаем Roslyn SyntaxTree:
SyntaxTree docSyntaxTree = doc.GetSyntaxTreeAsync().Result;
С компиляции Roslyn и SyntaxTree образовывается семантическая модель:
SemanticModel semanticModel = compilation.GetSemanticModel(docSyntaxTree);
Вы также получите синтаксис перечисления в файле SyntaxTree:
EnumDeclarationSyntax enumNode =
docSyntaxTree.GetRoot()
.DescendantNodes()
.Where((node) = > (node.CSharpKind() == SyntaxKind.EnumDeclaration)).FirstOrDefault() as EnumDeclarationSyntax;
Наконец, из SemanticModel и EnumerationDeclarationSyntax Вы можете вытянуть INamedTypeSymbol, соответствующий перечислению:
INamedTypeSymbol enumSymbol = semanticModel.GetDeclaredSymbol(enumNode) as INamedTypeSymbol;
INamedTypeSymbol очень похож на System.Reflection.Type. Практически всю информацию про тип С# можно получить от объекта INamedTypeSymbol.
Метод расширения DOMCodeGenerator. CreateEnumExtensionCode() генерирует и возвращает весь код.
generatedCode = enumSymbol.CreateEnumExtensionCode();
Другая часть кода, отвечающая за код генерации, входит в состав NP.DOMGenerator. Система Roslyn используется только для анализа, для генерации кода используется CodeDOM, так как он меньше по объему и удобнее.
Есть два основных статических класса в программе NP.DOMGenerator: RoslynExtensions - для анализа Roslyn и DOMCodeGenerator - для генерирования кода, используя функции CodeDOM.
Источник: http://www.codeproject.com/Articles/879129/Implementing-Enumeration-Inheritance-using-Roslyn
Розробка ігор на Unreal engine 4
Автор: Дмитро Бобровніков
Приветствую, меня зовут Бобровников Дмитрий, я занимаюсь программированием уже более 4-х лет, из которых первые 2 года учил объектно-ориентированный язык программирования C#, а сейчас занимаюсь разработкой игр на Unreal engine 4. Когда я начинал программировать на движке Unreal engine 4, в то время не было толковой информации по программированию на этом движке, приходилось сталкиваться с определенными трудностями, точнее нехваткой информации, чтобы в дальнейшем нормально работать с этим движком. Конечно, сейчас ситуация стала меняться и уже есть русскоязычные уроки и документация, но особой пользой и информативностью они не отличаются. Также прямо сейчас я работаю над большим “Survive” проектом, пишу всю пользовательскую логику, все изображения взяты именно с этого проекта, подробно вы можете увидеть уроки и процесс создания этого проекта, с какими трудностями я сталкиваюсь и как их решаю на моем youtube канале. https://www.youtube.com/channel/UCZSMGDBh87VmNv0apC6VcCQ
И сегодня мы с тобой познакомимся с созданием игр на Unreal engine 4. Кто из нас не мечтал о создании собственной игры! Создание игр - это сложный и трудоёмкий процесс, давай поговорим об этом.
Весь процесс создания игры, после выбора движка, начинается с идеи “концепта игр”, то есть сначала полностью на бумаге придумывается игра, после этого ты расписываешь все по пунктам, что нужно будет сделать в игре (от того, что нужно создать меню игры и уровень для него, создать персонажа и т.д.) как можно более широко, для того чтобы у тебя было полное представления о том, что ты будешь писать и какая игра в итоге у тебя получится, после тебе нужно определиться, какой язык программирования ты будешь использовать. Unreal engine 4 предоставляет два языка программирования: это С++ и Blueprint (язык программирования движка, написанный специально для него).
Весь процесс мы с тобой будем рассматривать на примере моего нынешнего проекта игры. Языком для этого проекта был выбран Blueprint, так как он почти не уступает плюсам и имеет в себе более наглядное программирование, чем тот же C++, и подойдет людям, которые только начинают изучать движок и знакомиться с программированием, плюс к этому он не позволит наделать ошибок, возможных на языке C++, и он будет гораздо понятнее для новичков.
Так что после запуска движка при создании проекта мы выбираем языком программирования “Blueprint” и выбираем одну из заготовок проекта, их достаточно много, можете сами в этом убедиться, вы выберете то, что вам потребуется, я же выбрал проект от третьего лица.
Первой моей задачей стало написание игрового меню и настроек игры. Ты можешь видеть, как я это реализовал (не следует сразу бросаться и писать основную логику игры, а начать нужно последовательное выполнения поставленных тобой задач).
Само игровое меню поделено на несколько визуальных интерфейсов “Widget”, это условно (Главное меню, Обшей Widget настроек и каждый отдельный Widget настройки управления, графики и т.д.), причем такое меню не требует глубоких знаний в программировании, если ты используешь язык “Blueprint”, так как все настолько упрощено и интуитивно понятно, на этом моменте не возникает трудностей, достаточно знать основы в программировании.
Следующим шагом было реализация игрового персонажа. Благо, Unreal engine 4 предоставляет нам заготовку под персонажа, что полезно как профессионалам, так и новичкам, что позволяет не тратить время на начальную настройку персонажа, а просто добавлять в нее изменения так, что мы этим и воспользуемся, впоследствии заменив модель и анимации.
Мы идем по пунктам и следующим шагом была реализация интерфейса пользователя ”игрока” (таких как жизненный показатель, голод, здоровье и выносливость, чтобы создать некую сложность для игрока, так как ему придется следить за этими показателями и своевременно их пополнять, это уже геймплейная составляющая игры).
После этого можно уже приступать к различным логикам и системам будущей игры. Я начал с системы инвентаря, сначала сделал визуальный интерфейс, а потом написал логику для него, но такие системы довольно сложные и не стоит ставить вопрос, как написать или сделать систему инвентаря, а поставить перед собой другую задачу, например, что будет у каждого предмета (имя, картинка, количество и т.д.), таким образом дела пойдут гораздо быстрее и в итоге можно получить желаемый результат.
После проверить на наличие каких-либо ошибок, исправить, если такие имеются, и постараться максимально оптимизировать код, далее ты следуешь своему плану, который ты расписал, и, таким образом, по выполнении всех пунктов твоего плана ты получишь готовую игру.
Прості події
Автор: Костянтин Чорний
Введение
При разработке компьютерных систем и программ, в том числе таких, в которых функционирует множество оригинальных сущностей и их дублей – экземпляров, возникает проблема отслеживания связей взаимодействия между этими объектами. И чем больше появляется этих объектов , тем сложнее вписать их в структуру приложения. Да, можно сказать что здесь явные проблемы с архитектурой и так не должно быть, но все равно мы наталкиваемся на проблему создания крупной многообъектной системы с гибкими динамическими связями и адаптивным поведением. Лучшее решение – событийно-ориентированное программирование!
Итак, событие – это внезапное происшествие, появление которого нельзя предугадать, а можно только к нему готовиться. В подобном русле работает и человеческих мозг. Он ожидает появления события и, когда оно происходит, как-то на него реагирует.
Давайте рассмотрим небольшой мысленный эксперимент. Представьте дорогу, пешеходный переход и светофор, который регулирует переход в данном месте. Светофор – это объект, который порождает событие. Он по воле своего внутреннего устройства будет включать или отключать зеленый свет, который будет разрешать пешеходам переход через улицу.
В это время на тротуаре начинают собираться люди. Каждый человек – это объект, содержащий специфическое поведение, которое называется обработчиком события. В данном случае этот обработчик будет отвечать за пересечение улицы и будет вызываться во время возникновения события. У каждого человека обработчик разный, ведь все люди переходят через улицу по-разному. Один будет идти быстро, другой медленно, третий - смотреть на машины, которые стоят на перекрестке, а четвертый - следить за таймером, который будет отсчитывать секунды. Но каждый из них не предполагает, когда конкретно произойдет это событие, потому все они ждут на тротуаре.
Когда человек подходит к переходу, он подписывает свой обработчик события перехода дороги на конкретное событие этого светофора. Если человек передумает переходить или, например, отойдет поговорить по телефону, то он не будет выполнять свой обработчик, если событие возникнет.
И, наконец, когда светофор включается на зеленый, все люди начинают переходить дорогу. Возникло событие – выполнился обработчик.
Что-же нам позволяет сделать событийную модель? Она разрешает динамически изменять связи между объектами и не только расторгать или устанавливать их, но и менять характер самого действия.
Давайте рассмотрим пример создания события на языке 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#/.NET та створювати якісний код, з яким буде легко здійснювати роботу та масштабування – новий відео курс “Породжуючі патерни проєктування” вже на сайті в повному обсязі. Курс українською мовою!
Патерни проєктування – це стандартизовані і загальноприйняті способи розв’язання поширених проблем у коді.
У класичному каталозі «Патерни об'єктно-орієнтованого проєктування» так звана “банда чотирьох” виділяє породжуючі, структурні та поведінкові патерни. Абстрактна Фабрика (Abstract Factory), Фабричний Метод (Factory Method), Будівельник (Builder), Прототип (Prototype), Одинак (Singleton) – породжуючі патерни (Creational patterns), які розв’язують проблеми, пов'язані зі створенням об'єктів та екземплярів класів. Вони забезпечують гнучкість коду та ізолюють систему від способу створення, компонування та передачі об'єктів.
Даний курс познайомить вас із тим, як використання патернів позбавляє певних проблем. Ви дізнаєтесь, що застосування відповідних патернів може значно покращити дизайн програмного забезпечення, зробити його більш гнучким і підтримуваним, а також зменшити зв'язаність між компонентами системи.
Автор курсу – Владислав Рибніков, Senior .NET Developer у Innovecs, понад 6 років досвіду в розробці.
Курс складається з 8 уроків загальною тривалістю 3 години 46 хвилин.
Структура курсу:
Початок роботи з патернами.
Породжуючі патерни та Патерн Одинак.
Патерн Прототип.
Використання Singleton та Prototype.
Патерн Будівельник.
Патерн Фабричний Метод.
Патерн Абстрактна Фабрика.
Builder та Factory Method.
Що ви дізнаєтесь на даному курсі:
Як за допомогою породжуючих патернів вирішуються проблеми створення об'єктів. Як саме патерни забезпечують гнучкість та ізолюють систему від способу створення, компонування та передавання об'єктів.
Як породжуючі патерни дозволяють приховати складності створення об'єктів від клієнтського коду та як це допомагає спростити код клієнта і уникнути прямих залежностей від конкретних класів.
Як патерн Singleton і його версія Multiton гарантують, що в системі буде тільки один екземпляр певного класу або конкретна обмежена кількість екземплярів. Як це допомагає, коли необхідно забезпечити глобальний доступ до ресурсів або керувати станом програми.
Познайомитесь з альтернативними методами розв’язання проблеми контролю життя об’єктів за допомогою Dependency Injection та IoC контейнерів.
Як Фабричні методи та Абстрактні фабрики дозволяють делегувати створення об'єктів підкласам чи фабрикам, що дозволяє вибирати потрібний тип об'єкта, залежно від контексту виконання.
Познайомитесь з тим, як породжуючі патерни дозволяють створювати об'єкти таким чином, що зміни в ваших класах не впливають на клієнтський код. Дізнаєтесь, як це знижує залежність між клієнтом та вашими класами і робить систему більш гнучкою та легкою для підтримки.
Зрозумієте, як саме патерни Builder і Prototype забезпечують контроль над життєвим циклом об'єктів і як це корисно при створенні складних або змінюваних об'єктів.
Попередні вимоги
Для комфортного проходження курсу необхідні базові знання C#/.NET та розуміння принципів ООП.
Курс “Породжуючі патерни проєктування” буде корисним як тим, хто тільки починає вивчення патернів проєктування, так і тим, хто вже має певні знання, проте хотів би їх структурувати та повторити окремі теми.
Дивіться перший урок у вільному доступі. Курс вже доступний на нашому сайті в повному обсязі – до кожного уроку є практичні завдання та опорний конспект. Якщо у вас є активна підписка, ви можете дивитися його прямо зараз.
Курс входить до комплексних програм підготовки за спеціальностями:
C#/.NET Developer;
ASP.NET Core розробник;
ASP.NET MVC розробник.
Сервіс пошуку роботи в IT для Junior спеціалістів на ITVDN
Автор: Редакція ITVDN
Головна задача освітньої платформи ITVDN – дати нашим студентам ті знання та навички за обраною ІТ-спеціальністю, які будуть достатніми для успішного початку кар’єри.
Однак опанування професії – лише перша сходинка. Не меншим випробуванням є ще й пошук роботи та проходження співбесід. Ми ж не зупиняємося на навчанні і хочемо допомогти тим, хто вже його завершив і готовий зробити наступний крок.
Тому ми з радістю представляємо наш новий розділ на сайті ITVDN – “Вакансії”. Давайте ми познайомимо вас з ним детальніше!
Для чого ми створили цей розділ
Головна мета – допомогти новачкам розпочати свою кар’єру в ІТ-індустрії, а саме – спростити процес пошуку першої роботи/стажування та збільшити шанси на успішний старт.
Наразі це дуже актуально, оскільки ринок ІТ має сильну конкуренцію серед новачків. Ситуація ще більше погіршилася внаслідок коронавірусних обмежень та повномасштабної війни.
Завдяки розділу “Вакансії” ITVDN стає не лише платформою для навчання, а й надійним помічником в розбудові успішної кар’єри у високодинамічній сфері ІТ.
Для кого це корисно?
Розділ “Вакансії” – це класна можливість для пошуку першої роботи тим, хто:
Вже закінчив навчання за спеціальністю і знаходиться в активному пошуку своєї першої роботи або стажування в ІТ.
Знаходиться в процесі навчання і хоче паралельно моніторити ІТ-ринок, аби підтримувати мотивацію і бути в курсі поточних вимог до початківців.
Ми публікуємо вакансії рівнів Intern, Trainee та Junior від наших партнерів, чий стек технологій достатньо наближений до того, який ви можете опанувати у нас. Це дозволяє новачкам швидше знаходити першу айтішну гавань, а роботодавцям – набирати в команду потрібних кандидатів, з яких можна виростити кваліфікованих ІТ-спеціалістів.
Вакансії можуть охоплювати широкий спектр спеціальностей: від розробки популярними мовами JavaScript, Python, C# та Java до дизайну, тестування, створення ігор та розробки мобільних застосунків під Android та iOS.
Функціонал сторінки вакансій на ITVDN
На головній сторінці перелік доступних вакансій, але при натисканні на кнопку “Усі вакансії” ви потрапляєте на сторінку з різноманітними фільтрами. Користуючись ними, ви можете відібрати саме ті пропозиції, які вас цікавлять. Серед доступних фільтрів: спеціальність, тип роботи, вид зайнятості, рівень.
Обравши конкретну спеціальність, ви можете ознайомитися з деталями та відгукнутися на неї, вказавши необхідні дані: прізвище та ім’я, імейл, номер телефону, зручний для спілкування месенджер, та залишивши власний коментар (за бажанням). Також є можливість завантажити резюме.
Нижче на сторінці “Вакансіїї” ви знайдете перелік важливих та корисних вебінарів, які допоможуть скласти резюме, підготуватися до співбесіди, гарно проявити себе в новій компанії, успішно пройти стажування тощо.
Запрошуємо до співпраці ІТ-компанії
Запрошуємо представників ІТ-компаній до співпраці на взаємовигідних умовах! Ми готові надати допомогу у пошуку кандидатів на позиції Intern / Trainee / Junior, які відповідають вашим вимогам, розміщуючи інформацію про вашу компанію та вакансії на сайті ITVDN у розділі "Вакансії". Розміщення вакансій є безкоштовним.
Крім того, ми індивідуально інформуємо потенційних кандидатів про відкриття нових можливостей.
Найбільше у нас початківців, які пройшли навчання за такими напрямками:
FrontEnd;
Python (BackEnd);
C# / .NET (BackEnd);
Java (BackEnd);
Node.js.
Окремою популярністю користуються напрямки C++, QA, Android, iOS, PHP, Ruby, Databases, UI/UX Design.
Наша компанія також надає сервіс онлайн тестування, який допоможе перевірити рівень знань кандидатів за різними технологіями та напрямками. Це дозволить виявити найкращих претендентів, котрі відповідають вашим вимогам.
Також ми будемо раді запросити вас проводити онлайн зустрічі з нашими випускниками, щоб ви могли розповісти більше про вашу компанію та пропозиції нашим студентам. Об’єднавши наші зусилля, ми зможемо підготувати майбутніх ІТ-фахівців, які стануть цінними членами вашої компанії. Давайте розвивати українське IТ разом!
Щоб зв’язатися з нами, перейдіть на сторінку “Вакансії”, натисніть на кнопку “Напишіть нам” нижче і заповніть невелику форму. Додатково залишимо контакти нашого HR-спеціаліста, який з радістю відповість на всі ваші запитання за даною темою.
Контакти для зв’язку:
Вікторія Чабан
Email: hr@cbsystematics.com
Telegram: https://t.me/hr_cbs
Skype: Viktoriia Chaban (+380937595777)
Підсумки першого туру зимового С# Марафону
Автор: Редакція ITVDN
C 17 по 23 января 2019 года на ITVDN проходил первый тур зимнего C# Марафона!
В первом туре C# Марафона приняли участие 324 человека. Из них 83 успешно на 100% выполнили все задания.
Имена победителей первого тура и результаты:
Макеев Олег - 675 баллов/40 попыток, сертификат TP58233506
Агафонов Иван - 675 баллов/40 попыток, сертификат TP4621610
Евтеев Иван - 675 баллов/40 попыток, сертификат TP00334941
Михайло Баран - 675 баллов/40 попыток, сертификат TP95210208
Аксенов Алексей - 675 баллов/40 попыток, сертификат TP60617045
Родин Андрей - 675 баллов/40 попыток, сертификат TP99198895
Варов Алексей - 675 баллов/40 попыток, сертификат TP49067965
Нигматулин Руслан - 675 баллов/40 попыток, сертификат TP52324621
Давыдов Максим - 675 баллов/40 попыток, сертификат TP52825213
Derevyanko Andrey - 675 баллов/40 попыток, сертификат TP02961868
Подарочные сертификаты на 1 месяц подписки будут отправлены победителям первого тура 25 февраля 2019 года на емейлы, указанные в регистрационной форме.
Второй тур соревнований будет значительно сложнее, потому что заданий в 2 раза больше! Он также продлится 7 дней – с 24 по 30 января включительно. Участникам соревнования нужно будет выполнить все 90 заданий тренажера и пройти онлайн-тестирование по С# Essential. Итоги второго тура будут объявлены 31 января 2019 года. Форма регистрации результатов второго тура будет открыта до 18:00 30 января.
Награда победителям второго тура
Трое участников второго тура марафона, чьи результаты будут наилучшими, получат в подарок подписку на три месяца.
Поздравляем победителей первого тура марафона!
Список участников марафона, которые прошли во второй тур:
Kovlov Alex
Варов Алексей
Нигматулин Руслан
Давыдов Максим
Kapustin Vladimir
Derevyanko Andrey
Сидоров Андрей
Аксенов Алексей
Родин Андрей
Коцаб'юк Микола
Баданин Максим
Афанасьев Сергей
Макеев Олег
Агафонов Иван
Евтеев Иван
Баран Михайло
Suvorov Alexandr
Kulikov Kirill
Никита Корнев
Ilya Kolomeets
Пархоменко Андрей
Havryliuk Maksym
Стратила Денис
Semenova Mariya
Barinova Anastasia
Лукин Виктор
Koch Anna
Ягур Алексей
Кушнир Прохор
Деревянко Андрей
Vlasov Alexander
Гергало Александр
Стижко Максим
Демонов Алексей
Несмашный Валерий
Шипотько Артем
Веселов Дмитрий
Ахметшин Айдар
Масленников Владимир
Ivan Mariychuk
Burdin Anton
Vorobyov Alexey
Skipa Alexander
Коваленко Олександр
Яворський Олег
Барановская Елизавета
Гудков Игорь
Брага Роман
Потапов Вячеслав
Aliaksandr Babtsou
Лукина Анастасия
Пляцик Юрчик
Радышевский Максим
Оляніна Надія
Угрюмов Виктор
Пилюгин Иван
Рыбалко Ирина
Петров Антон
Ayvazyan Menua
Tba Tbaputet
Boyko Ivan
Лушкин Иван
Шалыганов Дмитрий
Швец Александр
Kivich Vlad
Vyacheslav Karpov
sdjnklasd jsuvsjkgas
Марченко Юрий
Антонов Дмитрий
Паршин Александр
Sh Timur
Kantyshev Anton
Козорезов Алексей
Панов Константин
Сергей Ларин
Пинчук Виталий
Vadym Filyushyn
Bychkov Ihor
Сивков Александр
Серкова Екатерина
Галамага Евгений
Ермолаева Диана
Djanibekov Jahongir
Black Friday. Знижки до 50% на IT-навчання
Автор: Редакція ITVDN
Друзі, зустрічаємо Чорну п'ятницю разом! Це час грандіозного падіння цін, на яке чекають всі, щоб здійснити найвигідніші покупки.
З 22 до 28 листопада на ITVDN величезні знижки на всі пакети підписки та навчання у форматі LiveOnline.
Почнемо з пакетів підписки! Що ж обрати?
Якщо ви хочете мати доступ до всіх відео курсів (а їх у нас 250+), обирайте один із універсальних пакетів:
"Стартовий" (3 міс. доступу) – 37 USD (замість 49,99)
"Базовий" (6 міс.) – 58 USD (замість 89,99)
"Преміум" (12 міс.) – 85 USD (замість 169,99) 🔥🔝
Ви отримаєте:
Доступ до всіх відео курсів
Вихідний код навчальних проєктів
Презентації, опорний конспект, д/з
Перевірка домашніх завдань
Консультації з тренером
Доступ до інтерактивних практикумів
Онлайн тестування та сертифікати
Доступ до нових курсів, які виходитимуть під час дії підписки
Знижки на пакети спеціальностей
Якщо ви хочете пройти навчання за певною спеціальністю, обирайте одну із 16 комплексних програм навчання!
Акційні ціни на пакети відео курсів зі спеціальностей:
Python розробник – 45 USD 🔥🔝
C# / .NET розробник – 60 USD 🔥🔝
ASP.NET Core розробник – 54 USD 🔥🔝
ASP.NET MVC розробник - 45 USD
Unity / Game розробник - 54 USD
Верстальник сайтів – 36 USD 🔥🔝
FrontEnd розробник – 52 USD 🔥🔝
JavaScript розробник – 31 USD
Angular розробник – 36 USD
React розробник – 36 USD 🔥🔝
Java розробник – 52 USD 🔥🔝
Android розробник – 35 USD
PHP розробник – 45 USD
Ruby розробник – 36 USD
C++ розробник – 31 USD
QA (Quality Assurance) – 60 USD
Що ви отримаєте:
покроковий план навчання з нуля до рівня спеціаліста;
усі відео курси з обраної спеціальності;
навчальні матеріали, вихідний програмний код, опорний конспект, презентації до уроків;
доступ до інтерактивних практикумів;
консультації з тренером;
онлайн тестування та сертифікати;
диплом зі спеціальності після навчання.
Подробиці всіх планів підписок за посиланням.
Вивчення програмування – завдання непросте, але дуже перспективне! Ви можете надихнути та підтримати себе, купивши підписку зі знижкою під час акції!
Навчайтеся з друзями!
Якщо у вас є друг, який хоче опанувати IT-професію або розширити свої знання у програмуванні, ви можете порадувати його – вручити подарунковий сертифікат із доступом до всіх відео курсів. Під час акції подарункові сертифікати також продаватимуться зі знижками, а активувати їх можна будь-коли протягом року.
Знижки на онлайн навчання з тренером
З 21 до 27 листопада діють знижки до 40% на онлайн навчання в групах із ментором за 6 спеціальностями.
Акційні ціни:
Python Developer – 429 USD 🔥🔝
C#/.NET Developer – 504 USD 🔥🔝
FrontEnd Developer – 492 USD 🔥🔝
Java Developer – 469 USD
FullStack Node.js Developer – 580 USD
QA. Тестування ПЗ – 313 USD
Навчання проходить 2-3 рази на тиждень у форматі живих онлайн сесій. З групою працюють тренер, помічник тренера та HR-спеціаліст. Потужна теоретична база, багато практики, курсові проєкти та допомога у працевлаштуванні – саме такий формат навчання дає найкращий результат.
У кожній групі максимум 25 місць! Дати стартів дивіться на сайті. Пропозиція дійсна до тих пір, доки є вільні місця.
Нехай ваше навчання буде легким та приємним на ITVDN!
Які шанси у програміста-початківця знайти роботу?
Автор: Редакція ITVDN
Вопросы, которые беспокоят каждого начинающего разработчика – смогу ли я найти работу после того, как пройду обучение? Какую специальность лучше выбрать, чтобы наверняка быть нужным?
Есть, много субъективных факторов, которые влияют на возможность получить ту работу, о которой вы мечтаете. Это настойчивость, готовность рискнуть, черты характера, навыки представления себя потенциальному работодателю, умение правильно выбрать компанию и вакансию, соответствующие вашему уровню, умение проходить собеседование. При равных знаниях в программировании шансы кандидатов не равны.
Однако, есть и объективные факторы, которые вы можете (и должны!) учитывать. Один из них – конкуренция среди программистов, желающих занять определенную вакансию в IT компании.
Самый простой способ взвесить свои шансы – посмотреть на количество вакансий, опубликованных в течение месяца и количество откликов на эти вакансии. Такая информация всегда в свободном доступе на сайте сообщества программистов Украины DOU.UA.
Мы сделали небольшую выборку по десяти специальностям. Это информация за май 2018 года.
Информация, представленная в этой таблице, говорит о том, сколько специалистов откликнулись на вакансии и какие специальности в нынешние время самые популярные. Из таблицы явно видно, что у начинающего C#/.NET разработчика шансы получить работу намного выше, чем у Java или FrontEnd разработчика. Смотрите, думайте. Желаем Вам стать профессионалом и работать в компании Вашей мечты!
С более подробной информацией Вы можете ознакомиться на сайте DOU.UA.
Добірка кращих вебінарів про різні напрямки в IT
Автор: Редакція ITVDN
Друзі, як вам відомо, вже майже місяць ми надаємо безкоштовний доступ до усіх відео курсів ITVDN для громадян України. Цією пропозицією наразі скористалися понад 12 тисяч українців. Здебільшого це люди, які втратили роботу через війну і зараз намагаються оволодіти новою професією.
Ми отримуємо багато запитань про те, яку мову програмування обрати, яка IT спеціальність є більш перспективною, скільки потрібно часу, щоб вивчити основи та отримати першу роботу в IT.
Відповіді на всі ці питання ви знайдете у добірці вебінарів від наших найкращих спікерів. Сподіваємось, що це допоможе вам у виборі напряму професійного розвитку.
Як вивчити FrontEnd та влаштуватися на роботу. Автор – Дмитро Охріменко. Дивитись
Roadmap React розробника. Автор – Олег Мельничук. Дивитись
Як стати C# розробником. .NET чи .NET Core. Автор – Дмитро Охріменко. Дивитись
Як стати SQL розробником або Data інженером. Автор – Михайло Пудеян. Дивитись
Як стати Java розробником. Автор – Максим Федосов. Дивитись.
Карта спеціальності Java розробник. Автор – Андрій Бондаренко. Дивитись
Тренди Android розроблення у 2022 році. Автор – Бондаренко Андрій. Дивитись
Як стати iOS розробником у 2022 році. Автор – Андрій Добиш. Дивитись
Як стати Python розробником. Автор – Артем Мураховський. Дивитись
Хто такий Data Scientist? Автор – Ілля Іорин. Дивитись
Як стати Full-Stack розробником. Автор – Віталій Ємець. Дивитись
Як стати Project менеджером. Автор – Дмитро Крохмалюк. Дивитись
На ITVDN є комплексні програми навчання з 20 спеціальностей – обирайте, що вам до вподоби.
10% доходу ми переказуємо на допомогу ЗСУ. Опановуйте нові знання, щоб відбудовувати нову сильну і гарну державу разом. Слава Україні!
Конференція .NET fwdays'21
Автор: Редакція ITVDN
Долгожданная 7-я конференция, посвященная .NET фреймворку — .NET fwdays'21 в формате OFFLINE & ONLINE 🔥
🗓 Дата: 7 августа + дополнительные дни
⏰ Время: 10:00 - 19:00 (UTC + 3)
.NET fwdays'21 — это:
доклады от топовых экспертов Microsoft, SoftServe, Eleks, DevRain и не только, которые поделятся собственным опытом;
дополнительные эфиры с практическими форматами;
Q&A сессии, где вы сможете задать все свои вопросы экспертам;
новые знакомства и много общения;
нетворкинг, розыгрыши от компаний-партнеров и не только
Вы узнаете про бест практики:
как можно использовать концентраторы событий Azure для обработки и хранения этих событий для создания собственного хранилища событий на базе Cosmos DB;
подключения к другим службам Azure и к приложениям Kafka;
как внедрить аутентификацию и авторизацию для мобильных приложений и сервисных служб с помощью платформы Microsoft Identity и не только.
Кому будет интересно?
архитекторам, разработчикам и тестировщикам, которые используют .NET framework в своей работе;
тем, кто хочет лучше разбираться в .NET, NET Core, C #, ASP.NET Core, Azure;
как Junior-ам так и уверенным Senior-ам😉
Есть 3 варианта участия: FREE ONLINE, FULL ONLINE, OFFLINE & ONLINE.
Какой выбрать - решать только вам. На конференции будут выдержаны все карантинные меры. Количество мест "OFFLINE & ONLINE" ограничено.
Регистрируйтесь FREE ONLINE или используйте промокод:
313676B98B - при покупке FULL ONLINE билета
A79B2659CF - при покупке OFFLINE & ONLINE билета
Детали по ссылке ➡️ https://bit.ly/3kFJBSp