MASTERS OF .NET | DÉ FUNPROGGING CONTEST VAN HET JAAR

Een nieuw fenomeen binnen de .NET community. Deze uitdaging is toegankelijk voor iedere .NET ontwikkelaar, van junior tot senior. Met naast inhoudelijke uitdaging een stevige nadruk op fun!

De Masters Of .NET (MONET) is ontstaan uit de behoefte om voorafgaand aan het FutureTech evenement een uitdagende wedstrijd te organiseren voor de echte .NET programmeurs, waar het aankomt op je pure .NET skills. De winnaars van de contest worden gehuldigd op het FutureTech event en hebben dat jaar de eer zich Masters of .NET te noemen!

Om te kunnen testen wie de echte Masters of .NET zijn is het belangrijk dat we nabootsen wat je als .NET developer doet. En, laten we eerlijk zijn, dat is toch vaak het googelen van Stackoverflow voor oplossingen voor je probleem.  Een echte Master of .NET heeft dat natuurlijk niet nodig, dus internet mag je niet gebruiken tijdens de challenge. Wat je wel van ons krijgt is toegang tot de Microsoft documentatie en auto-complete. Net zoals je gewend bent.

In verschillende rondes wordt iedere keer een programmeeropdracht verstrekt, teams krijgen dezelfde opdracht die vervolgens binnen een vastgestelde tijd opgelost moet worden. Er worden punten toegekend wanneer een oplossing is ‘ge-submit’ die alle tests laat slagen! Hoe minder tijd je gebruikt, hoe meer punten je krijgt. Op het scorebord zien we de algemeen leiders en de score per opdracht.

Het team dat aan het einde van de dag de meeste punten heeft, is “Master of .Net” van dat jaar. Naast eeuwige roem zal gestreden worden voor mooie prijzen!

De spelregels beknopt:

De wedstrijd bestaat uit meerdere ronden/ opdrachten, alle teams krijgen steeds tegelijk dezelfde opdracht;
Het winnende team is dat team dat na afloop van alle opdrachten de meeste punten heeft behaald;
Voor iedere opdracht is een beperkte hoeveel tijd beschikbaar;
Een opdracht is succesvol uitgevoerd wanneer:
Alle unit tests slagen;
Enkele van die tests zijn niet zichtbaar; er zijn immers altijd hidden requirements, in deze contest zijn ze nog zeer redelijk;
Met iedere opdracht zijn punten te verdienen. Hierbij geldt:
Er worden pas punten toegekend wanneer een oplossing is ge-submit die alle tests laat slagen;
Hoe minder tijd je gebruikt, hoe meer punten je verdient;
Meer dan éénmaal op submit drukken kost iedere keer punten;
Tijdens het uitvoeren van de opdracht mag geen gebruik gemaakt worden van andere internet-bronnen dan de Masters of .Net omgeving.

EEN VOORBEELD OPDRACHT

public enum Operation
{
Add,
Subtract,
Multiply
}

public class Calculator
{
public int Calculate(int val1, int val2, Operation operation)
{
return 0;
}
}

Verder kun je unittesten zien, zoals hieronder afgebeeld.
using FluentAssertions;
using System.Collections.Generic;
using Xunit;

public class CalculatorAdd
{
[Theory]
[InlineData(1, 2, 3)]
[InlineData(-2, -3, -5)]
[InlineData(-2, 3, 1)]
[InlineData(2, -3, -1)]
public void Adding_Numbers_Should_Yield_Correct_Result(int firstNumber, int secondNumber, int total)
{
var sut = new Calculator();

sut.Calculate(firstNumber, secondNumber, Operation.Add).Should().Be(total);
}
}

De unittesten voor Multiply en Subtract kennen een soortgelijk implementatie. Na het lezen van de opdracht, de unittesten en de class zou je tot de onderstaande oplossing kunnen komen.

public enum Operation
{
Add,
Subtract,
Multiply
}

public class Calculator
{
public int Calculate(int val1, int val2, Operation operation)
{
switch (operation)
{
case Operation.Add:
return val1 + val2;

case Operation.Subtract:
return val1 - val2;

case Operation.Multiply:
return val1 * val2;

default:
return 0;
}
}
}

Maar wat blijkt? Zodra je deze opdracht inlevert falen er unittesten die je van tevoren niet kon zien! Deze unittesten controleren of de operations niet een overflow of underflow exception veroorzaken. Want, net als op je dagelijkse werk, verwachten we dat je de opdracht doorgrondt en dat goede software uit meer bestaat dan alleen de happy flow.

Meer informatie over het event vind je hier