Search

Freitag, 21. April 2017

Was muss man lernen um einen Senior Entwickler zu werden?

Hi all!
Es gibt wieder ein Anlass ein neues Beitrag zu schreiben.

Ich wurde von einen Festangestellten Junior Mitarbeiter gefragt was muss man lernen um einen Senior Entwickler zu werden?
Nun Ich selber kein Senior bin
, Ich bin nach meiner Erfahrungen eher ein Middle Entwickler, aber aus meinen großen Bekanntenkreis habe Ich ein Senior darüber gefragt.
Hier habe Ich folgender Antwort darauf bekommen:
Anfang von der Zitat:„Ein Senior hat nicht nur das Wissen, sondern auch die erforderliche Projekterfahrungen (mind. 5 Jahre Projekterfahrung als Entwickler) aus unterschiedlichen Domänen, er weiß genau welchen Programmierstil und Entwurfsmuster für die unterschiedliche Probleme anzuwenden.
Hier sind die 11 wichtigsten Kriterien von einem Senior Entwickler:

Kriterium 1: kennt sich sehr gut mit Themen wie z.B „Reflection“ und auch Multithreading aus, er weiss genau in welchen Fällen diese Technologien anzuwenden und auch die Fälle wo man es nicht verwenden darf.

Kriterium 2: lernt immer neuen Programmiertechniken/Sprachen/Frameworks und Interessiert sich für Domänenkomplexität und hat meistens eine Fachgerechte und Konkrete Vorstellung über den gesamten Prozess der Entwicklung. Ein Senior besitzt sehr gute Vorstellung über die Architektur der entwickelten Software.

Kriterium 3: kennt die Fallstricken von unterschiedlichsten Programmiersprachen, Datenbanken, Frameworks, Versionsverwaltungssystemen und auch Anwendungsservern.

Kriterium 4: kann bei der Produktivsystem in der Echtzeit die Anpassungen an den Quellcode durchführen und sofort es auf den entsprechenden Produktivserver  einsetzen. Wichtiges Nebeneffekt von dieser Arbeit, der  Endbenutzer muss darüber nichts mitbekommen, kein Abstürz, kein langsames nachladen der Webseite.

Kriterium 5: kann für ein veraltetes Framework eine Programmierlösung abliefern, so dass altes Framework in neuer Umgebung ohne irgendwelche Schwierigkeiten laufen kann.

Kriterium 6: dadurch , dass man mit  unterschiedlichen Softwarearchitekturen bereits gearbeitet hat,  weiss ein Senior genau wie Speicher von den Prozessor adressiert wird, bei C++ und C ist es sehr wichtig auch bei Java wenn man dort die Aufrufe von native Code hat. Generell ein Senior hat sehr gründliche Kenntnisse über die Hardware (CPU Caches, Bus, Chipsatz etc)

Kriterium 7: Weißt genau welche die Features für ein Endprodukt von Bedeutung sind, besonders in der Anfangsphase, wo noch vieles unklar ist. 

Kriterium 8: Besitzt durch seine Erfahrungen die Fähigkeiten die Komplexe Problemdomänen in kleine lösbare Design Patterns zu teilen und auch ein Spielraum lassen, so dass die Endlösung für weitere und neue Anforderungen zu implementieren ist.

Kriterium 9: Ein Senior wirkt meistens  als Katalysator, der neigt eine Mittellösung zu wählen, es kommt natürlich darauf ob die anderen Teilnehmer der Gruppe dafür überzeugt werden können, es gibt manchmal sehr starke Streitigkeiten, aber ein Senior ist immer Sachkundig und Fachkundig, so dass seine Meinung mehr der Realität entspricht, letztendlich es geht um die Verantwortung, der Senior  ist meistens sich bewusst welche Probleme entstehen können , falls die eine oder andere von den Benutzer verursachte Interaktion mit der  Anwendung zum einem schwerwiegenden Bug führen kann.

Kriterium 10: Sich selbst und andere zu bilden, dieses Kriterium sehr selten zu sehen, aber ein Senior muss sein Wissen ständig verbessern und an die anderen Teilnehmer in seinen Team weitergeben.

Kriterium 11: in den meisten Fällen hört die Geschäftsleitung und Management auf die Meinung von einem  Senior wenn es sich z.B um die Einstellung von neuen Mitarbeiter und  oder Herausgabe von den fertiggestellten Produkt sich handelt.

Diese Liste von Kriterien ist nicht komplett und nicht vollständig, sollte aber die allgemeine Vorstellung geben welche Kriterien man sich im laufe der Projektarbeit eineignen muss um sich ein Senior Titel verdienen zu können, man muss auch folgendes beachten: dass ein Senior in einer Firma bei einer anderen Firma nicht automatisch als Senior eingestuft werden kann, da demjenigen das Wissen über die in dieser Firma eingesetzten Technologie und interne Geschäftsabläufe fehlt. “Zitat Ende

Nochmals vielen Dank an meinen Bekannten für diesen Einblick in die Kriterien von Seniorität!!!

Fazit: um einen Senior zu werden man muss viel Projektarbeit leisten, dazu gehört wie angegeben viel , sehr viel Zeit in das Lernen von Neuartigen Technologien investieren zu können und auch es entsprechend in der Praxis nachweisen können!

Sonntag, 16. April 2017

Why I personally don’t like to use C++ in business projects

Why I personally don’t like to use C++ in business projects:
I decided to write two  articles, because one day i was asked by one of my clients why i refuse to work on projects where C++ mixed with Java, second reason I want to capture my thought pattern after reading book  Bjarne Stroustrup Programming principles and practice using C++ (1634 Pages book!).
Before you read further, please notice this is my personal subjective opinion, I am Oracle certified Java developer after all, so consider this as last warning. This article consist technical stuff only, read my previous blog about business side.
Now, I will give there some good points about why I prefer to work with Java rather then with C++:
First: C++ has a huge inheritance problem, so called deadly diamond problem:
So we have 3 Classes Father, Mother , Son, Daughter, Son and Daughter both inherit the constructor of Father and Mother , personally I find very nasty the way of class declaration in separate header files, C++ separates declarations (header files) and definitions (in cpp files) (not my taste!) 

Look at this “hell”:

//contents of Daughter.h
#ifndef DAUGHTER_H
#define DAUGHTER_H
#include "Mother.h"
#include "Father.h"
class Daughter : public Father, public Mother
{
    public:
        //destructor
        ~Daughter();
};
#endif

//contents of Daughter.cpp
#include <iostream>
#include <string>
#include "std_lib_facilities.h"
#include "Mother.h"
#include "Father.h"
#include "Daughter.h"

Daughter::~Daughter(){
                cout << "goddbye from daughter!!!";
}

//contents of Son.h
#ifndef SON_H
#define SON_H
#include "Mother.h"
#include "Father.h"
class Son: public Father, public Mother
{
    public:
        //destructor
                              ~Son();
};


//contents of Son.cpp
#include "std_lib_facilities.h"
#include "Mother.h"
#include "Father.h"
#include "Son.h"

Son::~Son(){
                cout << "Goodbye from son!";
}

//contents of Mother.h 
#ifndef MOTHER_H
#define MOTHER_H

class Mother
{
public:
               Mother();
               //destructor
               ~Mother();
};


//contents of Mother.cpp
#include "std_lib_facilities.h"
#include "Mother.h"
Mother::Mother() {         cout << "Hello from Mother!!!";
}
Mother::~Mother(){
               cout << "Goodbye from father!!! ";
};

//contents of Father.h
#ifndef FATHER_H
#define FATHER_H
class Father
{
    public:
                              Father();
                              //destructor
                              ~Father();
};

//contents of Father.cpp
#include "std_lib_facilities.h"
#include "Father.h"

Father::Father(){
               cout << "Hello from Father!!!";
}
Father::~Father(){
               cout << "Goodbye from father!!! ";


}

//contents of TESTOOP.cpp
#include "std_lib_facilities.h"
#include "Father.h"
#include "Mother.h"
#include "Son.h"
#include "Daughter.h"

int main()
{
               cout << "Call to Father -> ";
    Father fatherObj;
               cout << endl;
               cout << "Call to Mother -> ";
               Mother motherObj;
               cout << endl;
               cout << "Son inhert: ";
               Son sonObj;
               cout << endl;
               cout << "Daughter inhert: ";
               Daughter daughterObj;
               getchar();
               return 0;
}
Second: C++ allows to use pointers (pointer madness) see the following example:
In this example you can read what the code doing , but imagine in the real world where you have thousand or more variables and each of this you can directly access via pointer, this is pure madness to work with such code!!
#include "std_lib_facilities.h"

int main()
{
       int number1 = 220;

       int* pointerToNumber;
       int* pointerToAPointer;
       int* pointerToAPointerToAPointer;

      
       pointerToNumber = &number1; //<-- this pointer hold the address of number1
       pointerToAPointer = pointerToNumber; // <-- pointerToAPointer hold the address of pointerToNumber!!!
       pointerToAPointerToAPointer = pointerToAPointer; //// <--pointerToAPointerToAPointer hold the address of pointerToNumber!!!

       cout << "Value of a pointerToNumber "<< *pointerToNumber << " address " << pointerToNumber;
       cout << "\nValue of a pointerToAPointer "<< *pointerToAPointer << " address " << pointerToAPointer ;
       cout << "\nValue of a pointerToAPointerToAPointer " << *pointerToAPointerToAPointer << " address " << pointerToAPointerToAPointer;
      
       getchar();
      
       return 0;
}


Third: C++ provides direct access to memory (random memory corruption!!!) here is example:
Access a memory which has nothing to do with your application, this is just unsafe in modern world where your application must be fast and safe and work in different environments!!!
#include "std_lib_facilities.h"
#include<stdio.h>

int main()
{
       int *p=(int *)0x00402000;  // acces to memory!!!!!
    printf("%d",*p);

    printf("%p", p);  // what have we here


       getchar();
      
       return 0;
}
  
Forth: C++ has problem with type checking == weakly typed system here is example
int main()
{
    int a = 125;
    bool problemState;
    problemState = (bool)a;

       cout << "Result "<< problemState;

       getchar();
      
       return 0;
}

In my opinion this very , very bad, because you lose value integrity.

Five: C++ allows memory leaks, this is especially nasty, I saw some projects, people actually did overworked in such cases! Here is simple example:
#include "std_lib_facilities.h"


int main()
{
     // This works!
    int * pointerToInt = new int;
    delete pointerToInt;

    // Memory leak
    int * q = new int;
    // no delete

       getchar();
      
       return 0;
}

Six: C++ have some standardization issues , even  the author of C++ Bjarne Stroustrup have spoken about it!


C++ by nature is very platform dependent (Except if you can do all your work in ANSI C++!!!), so don’t tell me that C++ can be easily ported to any platform, it’s not true (especially if you use libraries from Microsoft Environment but your requirements tell you to port application to Linux )!!!

Where and how to use C++?
I think C++ it’s like a weapon with high damage and precision rate, if you need to take one aim exactly as you imagine then go for it, but if you need general purpose language consider Java a quick and fast way to achieve the goal with safe net of unit tests. Java already provides large number of useful frameworks.
Summary: as you can see C++ is not easy to understand and to master, there are pitfalls which just wait for you to fall in, if you decide to use this language in your business,  then expect big and bumpy ride to your initial goal, but don’t take me wrong, I think C++ is great language but it has very special usage domain and can be very good for solving some special problems. My last advise would be at any time aware what you doing and write lots of unit test, don’t give up to the pressure which some management “give you”, you are responsible for your code and as professional you should care what you writing as final product!


Dienstag, 11. April 2017

Using C++ in your project is risky for your business success!!

I decided to write two articles, because one day i was asked by one of my clients why i refuse to work on projects where C++ mixed with Java, second reason I want to capture my thought pattern after reading book  Bjarne Stroustrup Programming principles and practice using C++ (1634 pages book!).
Before you read further, please notice this is my personal subjective opinion, I am Oracle certified Java developer after all, so consider this as last warning. This article consist two parts one is technical only and another business only.

How exactly C++ can affect your business operations?
Through all of my carrier I saw many project some good and some bad, I consider IT professionals 100 % responsible for business decisions, so if we techies make bad decisions we can actually can harm the company revenue and make it bankrupt!
Let me put a business hat on, okay assume you are a hardware manufacturer who develops equipment for communication companies, the software for this equipment written in C++. For the next years your revenue numbers are great and the codebase of your product is huge. One day one of the customers tell you, that your competitor sells better equipment and has cheap prices. So what will you do? Typical management decision will be to go the R&D department and ask the folks to make even better product and research what new features the customer is willing to pay. You schedule new plan (hopefully agile!) and all should go well, right?
Remember you have a legacy product and devs heavily at “working” and typical C++ thing happens, you starting to get notice the development slowdown, seniors and teamleads starting to report about strange and very difficult bugs to fix (hire new devs?), estimates must be adjusted and future release at danger ? Did you ask yourself why development based on legacy code slow down?
This is even worse in C++ projects, so I decide to give you some hints:
Basically C++ programming language gives to a programmer ultimate access to the memory of a device , there no restriction at all! Typical pattern of C++ Programmer will be to write an algorithm which does some complicated logic and then release memory back to the operating system.  Let’s imagine that some bad day happens and C++ Programmer forgets to free up the memory and strangely enough everything works! The QA department report that sometimes software takes too much time and freeze or slow down, the developers say it must be the testing computers are too bad and the QA should upgrade them. It can be truth sometimes, but it can be a simple lie, because of the bug which is difficult to catch which cause the memory leaking.
If you happened to be in such case, then you have only one possible solution : to make a code review  and hire external workforce which should be very good trained professional c++  developer, who can go through tons lines of codes and exactly pinpoint where the bug was created and fix it. From business point of view such development activity can only result in 100% failure in delivery of product on time and there no guarantee that new bugs wouldn’t introduce or discovered!
There I make my point, C++ can be very dangerous for your business if you  don’t check and test your code base, in general most times programmers are highly trainer, but it doesn’t mean that they can’t make a dumb mistakes for example because of short attention span of human being and other distractions(meetings, telephone calls, music, after work party).
Many senior C++ developers would 100% disagree with my opinion, but this is reality in which they live, they are used to it and personally I am ok with it. To be successful in C++ you must continuous check your codebase and make sure that no memory leak bugs appear and don’t forget C++ is a heavily dependent on hardware, as C++ programmer one should be aware about compiler optimization options. So let’s summarize:

C++ provides direct access for memory which is good and bad , bad because as developer you can make a mistake and forget about it and only when you test the application your realize it, by that time you already burn your money! Good you can make very fast and robust application but is a price high enough (slow development phases, random at runtime memory leaks) ?
I consider C/C++ as interesting and useful languages but I have a feeling that this languages after many years usage by the developers worldwide did transformed from general purpose languages to very specialized ones with domains like automobile, avionics and other very specialized industries and where hardware platforms are stable and work at least 10 year without any failure. Another point which I must underline, C++ must be used only by highly trained professionals, in my experience this is actually a very high cost-active expense, but what is better to allow memory leak bugs or to have somebody that caution at any time about such issues?
My last advise for business make sure that developer teams write unit tests, I saw to many projects which fails, because the developers assume that they don’t have enough time to test they stuff!

Blog-Archiv

Blog readers favorites