As a programmer, you are wondering what it takes to grow your career in a fast-changing environment. This talk is about a path for your career growth.
As a manager you are wondering how you can optimize your software development teams. This talk is about a model to use for a rough evaluation and improvement of your teams.
As a business owner, CEO or CTO, your primary request for development teams is to quickly add features. This talk is about a model for optimizing implementation time.
The pyramid of programming skillsets is a model based on the usefulness of programming skills when changing code fast is the most important business objective. Let’s explore five skillset levels I identified when working with teams of programmers around Europe. We will discuss each level and how to move from one level to another.
1. Pyramid
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
5. Bad code => changeable code
4. My code is easy to change
3. My code always works
2. My code sometimes works
1. My code doesn't work
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 Variable 'b' re-declared after the end of the string
“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
14. Aka...
● Sr. programmer (why not just programmer?)
15. Code Sample
public ResultsdotNet CalculateThreadpool(ResultsdotNet total){
ManualResetEvent[] events = new ManualResetEvent[Environment.ProcessorCount];
List<ResultsdotNet> results = new List<ResultsdotNet>();
for (int i = 1; i <= Environment.ProcessorCount; i++){
Parallelised Monte Carlo
Algorithm
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;
}
Long method
Unclear intent
What is parallelised?
But it works!
http://www.codeproject.com/Articles/767997/Parallelised-Monte-Carlo-Algorithms-sharp
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
17. Level 4
I write code and...
It's easy to change
27. I'm guilty for this talk!
Alexandru Bolboacă
Trainer, coach, polyglot
programmer with international
experience
alex.bolboaca@mozaicworks.com
@alexboly