Your SlideShare is downloading. ×
Pyramid of-developer-skills
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Pyramid of-developer-skills

110
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? …

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
110
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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!)
  • 5. I write code but... It doesn't work Level 1
  • 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
  • 9. I write code but... It sometimes works Level 2
  • 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
  • 13. I write code and... It always works Level 3
  • 14. Aka... ● Sr. programmer (why not just programmer?)
  • 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
  • 17. I write code and... It's easy to change Level 4
  • 18. Aka... ● Technical Lead
  • 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. 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. I can turn bad code into Changeable code Level 5
  • 22. Aka... ● Code cleaner ● Consultant
  • 23. Skills required for Level 5 ● Writing tests on existing code ● Refactoring ● Writing own refactoring scripts
  • 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. Remember 1.All models are wrong, some models are useful 2.This model focuses on hard skills (but soft skills are very important!)
  • 26. Your Questions? “The important thing is not to stop questioning”
  • 27. I'm guilty for this talk! Alexandru Bolboacă Trainer, coach, polyglot programmer with international experience alex.bolboaca@mozaicworks.com @alexboly
  • 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