English slides from my talk (delivered in Polish) on 1st of December 2015 at Warsaw Java User Group.
This is slightly changed and extended version of the talk I delivered at Devoxx Poland 2015
12. • Popular (unis, internet,
literature, open source, free)
• Cross-platform
• Relatively idiot proof
• Good (free) tools
• Good job market (salaries)
• Sexy???
Why Java?
13. • The language rather simple and easy to
learn, slowish in some applications
• Well, it’s quite backward and I cannot
boost my ego with fancy idioms; a lot of
crap in the language (backward
compatibility at all cost…)
• Easy to (re)write lots of code (ideally
from scratch), yeah!!!
First Java thoughts and behaviours
14. • They often need to, but are afraid to ask
• Focus on how to write something tersely, neatly, in a
geeky way
• Concentration on “I” - their own education, benefits,
perspective, feelings
15. // an awesome trick from
// http://stackoverflow.com/questions….
// which allows us to make it way! faster.
// the code follows here ...
16. Picture by Patrick Barry CC BY SA 2.0
“They are stupid.
They have fucked up
this code”
17. Focus on low level code quality
• naming convention,
• whitespaces,
• checkstyle rules
• unit test coverage,
• some low level metrics
27. • Quite verbose and explicit language actually
makes it easier to understand and maintain the
code
• Language supports the understanding that
coding is about “write once, read many times”
• Remembering when writing code that it will be
read 100x more often
• Backward compatibility is not that bad after all…
Java afterthoughts and behaviours
28. • They need to ask others more seldom, but still are
reluctant as it if would reveal their weakness
• “We and Them Language” (devs vs. customers/users
or “the business”/management)
• Concentrated on the product (my baby) and the
domain
29. // it's safe to apply a simplified formula
// and thus reduce the complexity
// from O(n) into O(log(n)), which does help
// a lot for long-haul flights.
// the code follows here ...
30. Picture by Patrick Barry CC BY SA 2.0
“This code looks
broken. Let’s see if we
can fix it.”
31. Picture by Patrick Barry CC BY SA 2.0
Use The Force,
Read The Source
UTSL
Use the Source, Luke
32. Focus on higher level code quality
• correct design
• consistency
• adherence to requirements
• functional test coverage
• security
• maintainability
33. • provide predictions more carefully
• involve others
• think about happy and unhappy paths
• try to predict unpredictable
43. • Quite verbose and explicit language actually
makes it easier for newbies to pick up modules
of non-trivial size and understand them
• Good debuggers, stack traces, thread/
heapdumps and diagnosis tools are life savers.
• Backward compatibility (maybe not 10+ years
back…) is a really good thing in the wild
(Scala, I am looking at you…)
Further afterthoughts about Java
44. • They ask questions often, do not feel vulnerable
• “It depends” guys
• “We together” language (his dev team + business/management
+ customers/users)
• Concentration on their team and the users
45. // Because JAA aviation rules allow
// a simplified check here, together with
// aircraft performance department we decided
// (look at http://wiki....)
// to use a simplified formula which allows us
// to reduce O(n) complexity into O(log(n))
// and thus make it acceptably fast
// for long-haul flights.
// the code follows here ...
46. Picture by Patrick Barry CC BY SA 2.0
“This code looks strange. Let’s
find out why they decided to
implement it in this way”
47. • Fitting into the big picture
• Response to Market
Trends
• Discovering real (often
hidden) problems
• Addressing business risks
• Usability
• User adoption
• Upgrades/migrations
• Future usage growth
• Constant Learning
50. The ability to say “no” is the
sign of true professionalism
Picture by Stephen Almond, CC BY-SA 3.0
51. • very reluctant to provide any estimations upfront
• eager to operate with ranges and probability
• narrow down the estimates along the way
Picture by FalseReflex, CC 3.0 BY-NC
65. • It’s a truly powerful platform. The language
itself hasn’t really changed, but the whole
ecosystem has changed tremendously!
• Amazing tools!
• No serious successor today for
enterprises
• Java 8 finally brought well balanced
language changes
Current afterthoughts about Java
66. Focus on true customer needs, people around them and their growth
67. Picture by Patrick Barry CC BY SA 2.0
“Wow, such an unusual code.
I didn’t think about it in this
way. Maybe I was wrong…”
68. • Noticing and predicting the changes of the trends
• Creating new trends
• ???
72. Seniority - summed up
Focus Technology Product
Solving
problem
Customer
Defining the right problem
Needs
assistance
Independent
Teaching
others
Impacting
the company
Technical
capability
Quality Code L&F
Low Level
System Design
Usability
Extensibility
Architecture
Maintainability
Technical
innovation
Passive
Local
Introduction
Team
Buy-in
Company
Community
Junior Mid Senior Principal
Knowledge
Span
Fragments
of a single stack
Most of the
stack, some element
of other stacks
Complete stack
and a lot of elements
of other stacks
Various stacks
(deeply!)
Bugs Surprised Disappointed Expecting Leveraging
73. Seniority - cont.
Watching
Questioning
& proposing
Changing
teammates
Changing
company
Process
Improvement
Change Agent
Big Picture
Doesn’t care
or learning
System/Product
understanding
Domain
understanding
Domain expert
(innovation)
Stance Arrogant “Socrates”
Open to
Criticism
Critical
Typical
Experience
1K - 5K hours 3K - 12K hours 7K-20K hours 15K+ hours
Junior Mid Senior Principal
Teaching/
mentoring
Receiver Interns & Juniors Whole team
All people
(also outside)
Estimation Eager & Naive Careful
Reluctant
Pessimistic
Iterative
Narrowing
Communication Team
Simplifies; removes need,
focuses on customers
Notices and removes comms
bottlenecks via processes
Cross-Team
74. Seniority - coding passion
Junior
Application
Code
Mid
Reusable
Libraries
Senior
Reusable
Frameworks
Principal
Buy over Build…
LoC
80. Summary
• Juniors assume other people ignorance, principals assume
their own ignorance
• Java as a platform and a language is far from dead
• Mastering only Java puts you in a rut. A rut turns silently into
a grave. Overheated job market is your secret enemy - it’s
too easy to rest on laurels.
• After 32 years of coding, I still know nothing
84. Software is eating the world
Are we - software developers - aware of this responsibility?
Aren’t we spoiled too much to feel this responsibility?
Are we mature enough to bear this responsibility?
Are we learning enough to succeed?