7. These ideas are not mine
• They are wisdom from
experts in the industry
• So I will be showing you a
lot of Tweets from gurus
As you know…
• Copying from a single
source is plagiarism
• Copying from many
sources is research J
None Of These Ideas Are New
12. Introducing Git
10
1
2
3
4
6
5
8
9
7
10
This is possible because structurally
every node refers to one or more parents
The arrows drawn so far need to flip
When we use
branches and make
changes, the pointer
moves automatically
20. Build faster feedback loops
• Running unit tests every few minutes via TDD
• Running integration tests every few hours via CI
• QA teams completing non-functional tests weekly
• Clients commenting on demos every 2-3 weeks
• Releases measured in weeks or months
Agile = Feedback Loops
23. Celebrate the ‘but that’s stupid’ moments!
• This is what keeps us going the right way
• Limitations of the current code inspire the next test
Always watch the test fail first
• The existing codebase may already do what you need
• You may have accidently written a test that cannot fail
Don’t implement and refactor at the same time
• They are two separate activities
• Mixing them only causes confusion
• Remember tests need refactoring as well
There’s a difference between simplest and stupid
• Keep making progress towards your intended design
• Never work yourself into a corner in the name of simplicity
Key Points About the TDD Cycle
34. Social Skills Matter
Developers start out obsessing about code
• But end up as psychologists and/or linguists
Coding in industry shouldn’t be completely novel
• All the really technical problems have been solved already
People are a very different matter
• The true challenges in software all revolve around people
• Your colleagues, your management, your clients etc…
40. What is Meant by ‘Performance’?
‘Performance’ can mean many things:
• Latency – the time for an item to be processed
• Throughput – no of items completed per ‘n’
• Scalability – how throughput alters as usage increases
• Degradation – what happens when we can’t scale further
• Utilization – making full use of cores, RAM etc...
Each application will have its own priorities
• E.g. an Android or iOS client will want low latency whereas a
batch processing system will want high throughput
42. How do we Measure Performance?
We measure performance with:
• Micro-benchmarks - fictional analysis of part of the system
• Profiling - collecting runtime data from a ‘real’ system
• Benchmarking - determining the limits of the ‘real’ system
• Monitoring - collecting metrics from various environments
The best measurements are the most difficult to obtain
• The closer you come to real world usage the greater the barriers
in your way to collecting measurements
• In some environments there may be legal constraints that
prevent you ever interacting with the system in production
43.
44. Does Performance Matter?
In the early days of IT performance was everything
• Because hardware was expensive compared to developers
Over time this began to change
• Developer time became expensive compared to hardware
• Software spent more and more time being maintained
Developers understanding of performance declined rapidly
• As the underlying platform became more and more complex
Today the rule is:
• Write the shortest simplest code you possibly can
• Allow the compiler, VM and hardware to optimise it
• Don’t constrain your code with assumptions about speed
• Have performance tests to provide reliable feedback
52. Never Implement and Refactor at the Same Time!!!
We write code with ‘two hats’
• The ‘I have to get this ******** thing working’ hat
• The ‘someday someone will maintain this’ hat
The second hat is the Refactoring one
• Refactoring is a vital skill in its own right
Never implement and refactor together
• Your thinking will get derailed and you will create a mess
56. The Single Responsibility Principle
Every function / type / class you write should
• Perform a single function in the app
• Have only ever one reason to change
• Be describable without conjunctions
This is indicated by brevity
• Aim for method lengths of 10 lines or less
• Or even 6 lines or less in Ruby / Scala / Kotlin
65. Bounded Contexts and Language Games
But how many kinds of sentence are there?
Say assertion, question, and command?---
There are countless kinds: countless
different kinds of use of what we call
"symbols", "words", "sentences". And this
multiplicity is not something fixed, given
once for all; but new types of language, new
language-games, as we may say, come into
existence, and others become obsolete and
get forgotten. (We can get a rough picture of
this from the changes in mathematics.)
Here the term "language-game" is meant to
bring into prominence the fact that the
speaking of language is part of an activity, or
of a form of life.
77. Routes Into IT & Career Progression
• System Administrator
• DB Admin
• Network Admin
• Remote Support
• On-site Support
• Professional Services
• Junior à Senior Tester
• Test Team Lead
• Junior à Senior
Developer
• Technical Lead
• Architect
• Evangelist
Dev QA
Sys
Admin
CD
Management
Sales & Marketing
78. You need to keep updating your skill set
• Frameworks go out of date every 2-6 years
• Programming languages every 6-12 years
You Need to Keep Your Skills Updated
82. Here are our 10 Big Ideas once again:
• Version Control Matters
• Create Feedback Cycles
• It’s OK To Be Scared
• Social Skills Always Matter
• Performance Can Matter
• Code With Two Hats
• Apply The S In SOLID
• Naming Is Everything
• You Need OO And FP
• The Jungle Is Neutral
In Summary