Showing posts with label LJC. Show all posts
Showing posts with label LJC. Show all posts

Thursday, 21 March 2013

LJC Event - Trisha Gee's Design Talk

Tonight I managed to attend an awesome talk by Trisha Gee entitled: What do you mean, backwards compatibility?

Overall I found the talk to be a fantastic insight into software design and has inspired me to read into a load of other topics :)

Lessons

  • Setting "Design Goals" gives you good guidance without being overly prescriptive.
    • Remember good design is supposed to help you produce good code.
    • An example is immutability, it is good design for achieving the goal of thread safe code. 
  • "Design is a Process, not an Artefact"
    • Design documentation is supposed to enable good change, i.e. UML can highlight concepts that need to be readdressed.
    • However documentation is out of date as soon as it is written, code should be self descriptive and design should stand out.
  • Great API design has "User Empathy"
    • You heard of achieving high performance though "Mechanical Sympathy", well now we have the "User Empathy" too ;) Heard it here first :P

Further Reading

  • Domain Driven Design - aren't we doing this already? I need to read more!
  • Fluent Interfaces - this is more than just method chaining, can this be used outside of building?
  • Strategy Pattern - not something I used much but potentially very useful, too many if statements!
  • Behaviour Driven Development - So this is all the TDD practices I've been learning without knowing it? Awesome! I want to learn this properly!

Feedback

  • Finally some feedback on Trisha's actual talk...
  • The talk could do with a stronger introduction and focus more on design, it isn't really focussed on the MongoDB Java Driver and I don't think that is a bad thing!
  • Really love the Monsters/Safe Houses analogy, gave really good structure to the talk and it is a beautifully simple analogy. 

Friday, 30 November 2012

Programming Goals

Recently I have been trying to improve myself as a programmer and all round software engineer. As a part of this, I joined the London Java Community and I've been attending various meet-ups.

All my recent exploits will have to wait have to wait for another post but I just wanted to list my goals for all of this. In this way, it will be clear in my head in the very least!

Really understand Java and the JVM
  • Gain a better insight to how my Java code translates to byte-code.
  • Learn more about how the JVM runs.
  • Fully understand garbage collection, along with the G1 collector.
  • Get to grips with tuning the JVM.
Become an expert in performance optimisation
  • Learn how to truly measure performance on a macro and micro level.
  • Understand the techniques necessary to produce faster code.
  • Be fully aware of all the external factors which affect performance, such as I/O and network latency.
  • Learn more algorithms and use more in anger.
Better manage and estimate time
  • Be able to provide accurate quotes for concrete deliverables.
  • Understand the techniques to estimate for intangible/vague software requirements.
  • Better plan out work to reduce risk/maximise productivity!
Become a software design guru!
  • Weave the right software design patterns into all my code.
  • Avoid anti-patterns!
  • Make all my code simple, robust and scalable (as necessary).
Be better at testing
  • Find a practical testing framework/methodology given volatile requirements and highly limited timeframes.
  • Better express user expectations as some form of user interface tests.
  • Improve general code coverage!
Adopt a proper release management methodology
  • Find or come up with a good version number standard!
  • Set up some form of "One-click" deployment
Start benefitting from Continuous Integration 
  • Properly set up CI environment to monitor and analyse code.
  • Leverage CI in other practices, such as possibly exploring Feature Branching...
So seven main areas! Obviously this isn't all going to happen overnight but I really hope to achieve all these goals in the near future... It is all just a matter of time and patience I suppose!