How can you advance your career as a software developer? How can you assess your team as a team leader / technical lead / manager?
I created a simple model to answer these questions based upon the most common need in modern software applications: the need to add features fast.
All models are wrong, but some are useful. I found this model useful and I hope you will too.
1. Pyram
id
A talk by Alexandru Bolboaca
Developer
of
@alexboly
alex.bolboaca@mozaicworks.com
Skills
2. A guesstimate
80% of you are in a context where you:
1.Work on an existing codebase
2.Sometimes encounter strange issues
3.Have difficulties changing parts of code
4.Are under pressure to add more features / fix
bugs faster
3. A model
1. My code doesn't work
2. My code sometimes works
3. My code always works
4. My code is easy to change
5. Bad code => changeable code
4. Be aware that...
1.All models are wrong, some models are useful
2.This model focuses on hard skills (but soft skills
are very important!)
6. Aka...
● Beginner
● My grandmother
● Anyone you know who's not a programmer
We all wrote this type of code...
7. Code Sample
int main(){
string teststring;
getline(cin, teststring);
cout << teststring << endl;
int b;
for (int b = teststring.length();b <= 0; b--){
cout << teststring.at(b) << endl;
}
cout << "n" << endl;
}
Expected: “code” => “edoc”
Loop starts after the end of the stringVariable 'b' re-declared
“n” and endl are the same thing
Source: https://answers.yahoo.com/question/index?qid=20140126105146AAaZDSN
Wrong condition
8. Skills required for Level 1
● Starting the computer
● Starting a text editor
● Reading
● Writing on a computer
● … you get the idea
10. Aka...
● Jr. programmer
● “It works on my computer”
● “You didn't say the server is not always named
Jane!”
● “It worked yesterday”
● “It's 90% done”
11. Code Sample
ON_NOTIFY( wNotifyCode, idControl, memberFxn )
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT *
result );
typedef struct tagNMHDR {
HWND hwndFrom; // handle of control sending message
UINT idFrom;// identifier of control sending message
UINT code; // notification code; see below
} NMHDR;
Careful with the types. I searched 6 months for
a bug because I used INT instead of UINT
Source: http://msdn.microsoft.com/en-us/library/9c4xka2b.aspx
12. Skills required for Level 2
● Writing code
● Lots of optimism
● Perseverance
● Passion for programming
15. Code Samplepublic ResultsdotNet CalculateThreadpool(ResultsdotNet total){
ManualResetEvent[] events = new ManualResetEvent[Environment.ProcessorCount];
List<ResultsdotNet> results = new List<ResultsdotNet>();
for (int i = 1; i <= Environment.ProcessorCount; i++){
ResultsdotNet batchResult = new ResultsdotNet() { Iterations = total.Iterations / Environment.ProcessorCount, ManualResetEvent = new
ManualResetEvent(false) };
results.Add(batchResult);
events[i - 1] = batchResult.ManualResetEvent;
ThreadPool.QueueUserWorkItem(new WaitCallback(CalculateCallback), batchResult);
}
WaitHandle.WaitAll(events);
foreach (ResultsdotNet batchResult in results){
total.dW += batchResult.dW;
total.dX += batchResult.dX;
total.dY += batchResult.dY;
total.dZ += batchResult.dZ;
total.W += batchResult.W;
total.X += batchResult.X;
total.Y += batchResult.Y;
total.Z += batchResult.Z;
total.Iterations += batchResult.Iterations;
}
total.dW = total.dW / results.Count;
total.dX = total.dX / results.Count;
total.dY = total.dY / results.Count;
total.dZ = total.dZ / results.Count;
total.W = total.W / results.Count;
total.X = total.X / results.Count;
total.Y = total.Y / results.Count;
total.Z = total.Z / results.Count;
return total;
}
http://www.codeproject.com/Articles/767997/Parallelised-Monte-Carlo-Algorithms-sharp
Parallelised Monte Carlo
Algorithm
Long method
What is parallelised?
Unclear intent
But it works!
16. Skills required for Level 3
● Understanding requirements
● Clarifying requirements
● Identifying local technical risks
● Testing his/her own code; writing automated tests
for own code help
● Involving team mates for a code review, pair
programming
27. I'm guilty for this talk!
Alexandru Bolboacă
Trainer, coach, polyglot
programmer with international
experience
alex.bolboaca@mozaicworks.com
@alexboly