Pyramid of-developer-skills

440 views

Published on

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.

Published in: Software, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
440
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Pyramid of-developer-skills

  1. 1. Pyram id A talk by Alexandru Bolboaca Developer of @alexboly alex.bolboaca@mozaicworks.com Skills
  2. 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. 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. 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!)
  5. 5. I write code but... It doesn't work Level 1
  6. 6. Aka... ● Beginner ● My grandmother ● Anyone you know who's not a programmer We all wrote this type of code...
  7. 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. 8. Skills required for Level 1 ● Starting the computer ● Starting a text editor ● Reading ● Writing on a computer ● … you get the idea
  9. 9. I write code but... It sometimes works Level 2
  10. 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. 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. 12. Skills required for Level 2 ● Writing code ● Lots of optimism ● Perseverance ● Passion for programming
  13. 13. I write code and... It always works Level 3
  14. 14. Aka... ● Sr. programmer (why not just programmer?)
  15. 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. 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. 17. I write code and... It's easy to change Level 4
  18. 18. Aka... ● Technical Lead
  19. 19. Code Sampledef upload() { def problemId = params.problemId def problem = Problem.get(problemId) def uploadedFile = request.getFile('solution') if (uploadedFile.empty) { flash.message = 'Please select a file' forward(controller: "profile", action: "index") return } createSolution(problem, uploadedFile) redirect(action: "index") } def createSolution(problem, uploadedFile) { def filename = "${userService.getUser().id}/${uploadedFile.originalFilename}" def destinationPath = new File(filename) destinationPath.mkdirs() uploadedFile.transferTo(destinationPath) new Solution(user: userService.getUser(), problem: problem, pathToSolution: filename).save() } Source: I TAKE Unconference Contest application
  20. 20. Skills required for Level 4 ● Clean code ● Changeable design principles (eg. SOLID) ● Design patterns ● Automated developer testing (includes unit, integration, end to end, acceptance testing) ● Identifying risks
  21. 21. I can turn bad code into Changeable code Level 5
  22. 22. Aka... ● Code cleaner ● Consultant
  23. 23. Skills required for Level 5 ● Writing tests on existing code ● Refactoring ● Writing own refactoring scripts
  24. 24. The 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
  25. 25. Remember 1.All models are wrong, some models are useful 2.This model focuses on hard skills (but soft skills are very important!)
  26. 26. Your Questions? “The important thing is not to stop questioning”
  27. 27. I'm guilty for this talk! Alexandru Bolboacă Trainer, coach, polyglot programmer with international experience alex.bolboaca@mozaicworks.com @alexboly
  28. 28. Photo Attribution http://i.images.cdn.fotopedia.com/flickr-3873843704- hd/Paris/Main_sights/Paris__Louvre_Pyramid.jpg http://www.quotes.jotoexplorer.com/wp- content/uploads/2012/10/Albert%20Einstein%20Quotes%205.jpg http://youthjoint.com/alpha/wp- content/uploads/2014/04/blackboard-with-chalk2.jpg

×