Friday, June 25, 2010

Ideale Organisatie

Aangezien de afgelopen 15 jaar ervaring heb ik veel bedrijven gezien en gesproken die op verschillende manier in ICT bezig zijn. Meest van deze bedrijven hebben het heel goed gedaan als het komt op het cijfers van winst en het verkoop van hun services. Echter ga ik vanuit dat de bedrijf waarmee ik in zee ga ook goede groei in de echonomie heeft maar de volgende punten zijn van grote belang voor mij als medewerker.

  1. Flexibel voor Groeiende Technologie
    Het is al lang bekend dat technologische veranderingen in ons sector een onvergelijkbare groei heeft. Daar maakt niet ieder bedrijf nodige stappen, stappen die zorgen om snel de voordelen van technologie kunnen in ons producten meenemen. Vaak maakt men veronderstelling dat we gebruik maken van een techniek met zeer grote enthosiasme zonder rekening te houden dat dit vroeg gaat veroudered worden. De strateeg in een bedrijf heeft als rol om dit dudelijk te maken voor de architecten. De ideale bedrijf is bewust van dit feit en maakt de projectimplementatie losgekoppeld van de techniek en bereid zich alvorens voor de nodige stappen om daarvan af te wijken. Bij ieder integratie zijn er dus documenten nodig die de ontkoppelingproces gaat beschrijven. Hierbij denk ik aan het gebruik van Flash, SilverLight, GeoComponenten, WebServers, enz.

  2. Qualiteit van Producten
    Het is voor ieder bedrijfleider van groot belang om aan de klanten produkten kunnen leveren die een redelijke "qualiteit" behalen. Deze qualiteit is vaak eerder een illusie geworden dan een concreet meetbaar aspect van de producten, niet dat de qualiteit van aard zo is, maar eerder omdat men heeft geen stappen genomen om dit vast te leggen. Er zijn er genoeg methoden en tools om een qualiteit van software en ook van service kunnen meten maar dit is een bewuste keuze die men moet maken. Een goede organisatie weet waar hij staat, ook al niet de gewenste qualiteit behaalt, weet men ten minste dat dit niet te weten is aan de werknemers maar eerder een gekozen strategie. Hierbij kan ik denken aan release management, software governance, WebService performance, enz.

  3. Documentatie
    De tijd om hup-hup-programmeren is al een tijd voorbij. Men besseft dat een programmatuur met 5 to 10 jaar leeftijd behoorlijke documentatie nodig heeft, documenten die zorgen om aanpassingen te doen en features in te bouwen. Documenten die nodig zijn om nieuwe mensen daarbij in te zetten om verder de verantwoordelijkheid kunnen dragen. Meeste IT-ers weten dit al en beginnen vanzelf documenteren. Zelfs meeste projectleiders weiden genoeg tijd hiervoor wat vroeger helemaal niet acceptabel was. Maar weinig organisaties hebben hiervoor een structurele plan. Een plan die geimplementeerd is tot de template level van ieder functie. Een geode documentatie verhoogt de productiviteit en qualiteit. Hierbij kan ik denken aan documenten in diverse fase van ontwikkeling van een product.

  4. Communicatie
    In een klein bedrijf is dit weinig van belang, maar daar ga ik echt niet mee beginnen.
    In een grote bedrijf de leiders in de verschillende hierargie hebben vaak verschillende ideen. Dit komt vaak aan de laagste hierargie, ontwikkelingsteam, in een verwarrende manier. Men krijgt gemengde gevoelens en weet niet goed welk kant zal of moet gaan. Ook tussen de afdelingen en tussen de teams kunnen miscommunicaties vormen die tot belemmering in productiviteit en qualiteit zich kunnen manifesteren. Wanneer de communicatie niet is gestroomlijnd kunnen zelfs in een team bewust miscommunicaties ontstaan wat heel vervelend is voor de teamleider. Daarom is communicatie waarschijnlijk de belangrijkste basis om de bovengenoemde belangen kunnen garanderen. Hierbij denk ik aan standup meatings, maandelijks en quartaal vergaderingen, personlijke assesments, innovatie avonds, technical meetings enz.

  5. Educatie van Medewerkers
    Geen werkgever zoekt medewerkers zonder interesse. Ook geen werkzoekende zoekt een werkgever zonder kennis. In IT gaat alles over informatie en de manier dat dit kan geleverd worden. Een medewerker wil dus zien hoe slim de projectleider zijn werk doet, en de projectleider wilt zien hoe slim de medewerker problemen aanpakt. aangezien de eisen van de klant groeit exponentieel en gelukkig groeit de technologie ook mee moeten we dus allemaal bijscholen. Dit moet dus van drie kanten gebeuren: interesse, beschikking, awards.

  6. Social Contact
    Dit is de deel dat ik waarschijnlijk beter moet verbergen van mijn vrouw of krijg ik geen kus meer als ik thuis kom :-)
    Het feit is dat ik ieder dag meer mijn werk collega's zie dan mijn vrouw thuis. Dat moet leuk blijven. Hoewell sommige mensen zijn van aard minder sociall dan de rest maar ik heb ondertussen veel geleerd en ik probeer het leven - of zal ik beter noemen het werk- leuker maken voor mijn collega's. Maar dit is een onbereikbaar task, of je moet héél geluk bij hebben om naast juiste mensen gaan zitten. Ik zie het liever vanuit de personeels afdeling mensen die bereid zijn en in geloven dat ze hiervoor iets kunnen betekenen. De tijd voor speukjes als "IT werken is saaai" is al lang voorbij. We bouwen leukste wat men tegenwoordig heeft en dat moet leuk blijven. Ik kies voor leuke mensen om vrijdagavond even praten en borrelen.

Friday, June 11, 2010

Using brackets after any if statement

In my new assignment, where we use .NET 3.5 I got the chance to use the ReSharper extensively. One of the new features I was surprised with is the usage of brackets after every if and else even when they contain simply one statement.
It occurred to me that the debugger stops on the brackets as a step in the processing cycle. So I decided to see what is the difference in the compiled IL code. Therefore I wrote the following code:

public class SeeTheDifference
{
public void Test1()
{
for (int i = 0; i < 10; i++)
{
TestMethod();
}
}
public void Test2()
{
for (int i = 0; i < 10; i++)
TestMethod();
}
private void TestMethod()
{
Debug.WriteLine("test");
}
}

And compiled in both Debug and in Release configuration. The result is the following snapshot in the Reflector:

.method public hidebysig instance void Test1() cil managed
{
.maxstack 2
.locals init (
[0] int32 i,
[1] bool CS$4$0000)
L_0000: nop
L_0001: ldc.i4.0
L_0002: stloc.0
L_0003: br.s L_0012
L_0005: nop
L_0006: ldarg.0
L_0007: call instance void Knowledgebase.SeeTheDifference::TestMethod()
L_000c: nop
L_000d: nop
L_000e: ldloc.0
L_000f: ldc.i4.1
L_0010: add
L_0011: stloc.0
L_0012: ldloc.0
L_0013: ldc.i4.s 10
L_0015: clt
L_0017: stloc.1
L_0018: ldloc.1
L_0019: brtrue.s L_0005
L_001b: ret
}
.method public hidebysig instance void Test2() cil managed
{
.maxstack 2
.locals init (
[0] int32 i,
[1] bool CS$4$0000)
L_0000: nop
L_0001: ldc.i4.0
L_0002: stloc.0
L_0003: br.s L_0010
L_0005: ldarg.0
L_0006: call instance void Knowledgebase.SeeTheDifference::TestMethod()
L_000b: nop
L_000c: ldloc.0
L_000d: ldc.i4.1
L_000e: add
L_000f: stloc.0
L_0010: ldloc.0
L_0011: ldc.i4.s 10
L_0013: clt
L_0015: stloc.1
L_0016: ldloc.1
L_0017: brtrue.s L_0005
L_0019: ret
}


As it is visible in this IL code, there are two nop commands as results of the bracket pair. According to Reflector “nop (0x0000): fills space if bytecodes are patched. No meaningful operation is performed although a processing cycle can be consumed.”

Tuesday, June 1, 2010

Collapse & Expand Code

When I use Visual Studio IDE to edit an XML file, I often come accross a big tree that is not easily to find my way out. So I start to collapse the expanded nodes. Unfortunately it might be very hard to do this.
So I was looking for a macro to do it and found the following macro which I attached a toolbar icon to it:


'' Toggle the current row and go down one line
Sub ToggleOne()
Dim cmd As String = "Edit.ToggleOutliningExpansion"
Dim ts As TextSelection = DTE.ActiveDocument.Selection

DTE.ExecuteCommand(cmd)
ts.LineDown()

End Sub