Being a Professional Software Developer

Post on 26-May-2015

1.513 views 2 download

Tags:

description

Talk from Agile Saturday 3 event in Estonia. It is about being professional in general as well as following agile best practices, such as build automation and continuous integration.

Transcript of Being a Professional Software Developer

Anton Keksanton.keks@codeborne.com

Being a professional(software developer)

Agile Saturday, 13.11.2010

2

Anton KeksAnton KeksCo-founder of Co-founder of CodeborneCodeborne

Lecturer at Lecturer at Tallinn Technical UniversityTallinn Technical University

Member of the board of Member of the board of Agile EstoniaAgile Estonia●

Author of Author of Angry IP ScannerAngry IP Scanner

Strong believer inStrong believer inAgileAgile and and Open-sourceOpen-source

IterativeIterativeNOT Big-BangNOT Big-Bang

AdaptableAdaptableNOT PredictableNOT Predictable

TeamworkTeamworkNOT Lone RangerNOT Lone Ranger

TestingTestingNOT PrayingNOT Praying

SimplicitySimplicityMaximizing the amount of work not doneMaximizing the amount of work not done

Software professional?

Professionalism in medicine● Surgeon 1 does the same operation over and over in

his Beverly Hills clinic and makes a lot of money● Surgeon 2 is competent in all the standard

operations but in addition has developed an innovative procedure and, because of the time devoted to innovation, makes less money than Surgeon 1

● Surgeon 3 has developed an innovative procedure and practices it regularly, but also makes time for occasional travel to France, China, Japan, and Argentina to teach other doctors how to practice the innovation

Credit http://tinyplanet.ca/projects/professionalism.html

Professionalism in software

● Picks a worthwhile problem to attack● Has dedication to the end-user experience● Impressive competence, Expert, Master● High quality work, Very productive● High standards, Attitude, Best practices● Learns, Innovates● Teaches (by example, code-review, face-to-face)

Craftsmanship

Software Software CraftsmanshipCraftsmanship

Software Software Craftsmanship...Craftsmanship...

...the ...the CodeborneCodeborne way way

http://manifesto .softw

a recraft smansh ip.org

Thinking

Guessing

Patching

Coding

WTF

UNPROFESSIONAL

How to be a true professional?

Build & Integration ProblemsBuild & Integration Problems

● ““It works on my PC”It works on my PC”● Other developer has broken everythingOther developer has broken everything● Release Management necessityRelease Management necessity● Software build is a separate taskSoftware build is a separate task

– Delayed integrationDelayed integration● Installation to production failsInstallation to production fails

– During the night, of courseDuring the night, of course

The solution?

Automate everything!Your build must be a single step process

Once you automate, you can do a lot!

Heavyweight

Lightweight

Complex

Simple

22

Frequent integrationFrequent integration

● Common integration branch (mainline)Common integration branch (mainline)● Commit often!Commit often!

– At least At least every few hoursevery few hours– Never hNever hold your changes for longer old your changes for longer

than a daythan a day● No one works with obsolete codeNo one works with obsolete code

““Pay me now or pay me more later”Pay me now or pay me more later”

23

Continuous integrationContinuous integration● Regular automated builds of the softwareRegular automated builds of the software

– Recompile, run tests, redeploy, generateRecompile, run tests, redeploy, generatedocumentation and reportsdocumentation and reports

– Software is packaged and is ready to runSoftware is packaged and is ready to run● Discover conflicts: provides short feedback Discover conflicts: provides short feedback

to developersto developers● Offload longer running tasksOffload longer running tasks● Constantly growing working systemConstantly growing working system

Hudson(extensible continuous integration server)

Step-by-step installation

Go to: www.hudson-ci.orgDownload: hudson.war

Run: java -jar hudson.warOpen: http://localhost:8080

What Hudson does?

● Runs and monitors your builds● Cron-like or by polling the code repository

● Visualizes stats● Passed tests, test coverage, compiler warnings, etc

● Distributes builds across multiple machines● Builds software on multiple architectures● Can fully manage the whole release process

What Hudson does?

Next level checklist

✔ Accept the idea that automated test suite is not just about testing; it is about proving the code works

✔ Anything that can be automated, automate it

✔ Never accept the idea of that's the way its done here

✔ Push back any attempt to make technical decision/estimation by non-tech people

✔ Share knowledge - anyone can get hit by a truck

✔ Working software is more important than optimizing metrics for performance reviews

Technical debtTechnical debtAnd don't forget paying theAnd don't forget paying the

At

We strive to be professionalsoftware craftsmen

...and we are hiring!job@codeborne.com