With year 2012 over it is perhaps time to look back and see what interesting has happend, what I have done, written, learned, what articles I have enjoyed most etc.
This has been my second year in Norway and I am still very much enjoying it, there is a very active developer community organizing great conferences such as JavaZone (followed by an amazing trip to the nature a.k.a. SurvivalZone) and Smidig (Agile) where I have also presented, Scala-focused flatMap, many meetups etc.
Events & side jobs
Thanks to my company I had the opportunity to do some real consulting work, namely helping with a technical audit of an R&D department and co-organizing a TDD and refactoring workshop for the customer, and I have learned a lot from both of these.
The most exciting event was a week long educational stay with Ken Beck that has resulted in the most popular blog post ever of my company and myself, Programming Like Kent Beck. Another exciting event was the workshop BDD – Specification by Example by Gojko Adzic, simply the best workshop/course I have ever attended, with plenty of valuable content about how to build the right software. I also very much enjoyed preparing and presenting an introductory workshop into Clojure with my friends and collegues Lars and Ivar.
I have worked the whole year with a partner company that aims at creating innovative internet solutions such as on-line entertainment and communication services. I have learned a lot about the cloud, the Amazon Web Services platform, Puppet and DevOps, Vagrant, big data scale warehousing using Hadoop and Hive, NoSQL databases such as MongoDB, REST, and running distributed services. I have wasted too much time trying to get Zabbix to monitor what I want (despite of its shortcomings and lack of friendliness towards troubleshooting, it is sadly still one of the best monitoring tools, I have been told). I have done too little pair-programming and I have spent too much time in Java, bash, and Zabbix instead of learning more about modern web UI development and using more productive languages such as Clojure, Groovy, and Scala (though I have managed to sneak two of them in).
The work is great. I miss only three things – pair programming, Clojure, and opportunities to learn from smart and skilled people. Regarding the last point, I have smart and skilled co-workers – only the opportunities to learn from them are way too limited (partly due to the first point, lack of pairing).
I have started to focus on functional programming in general and Clojure and partially Scala in particular. I believe there is a lot we can learn from this paradigm and higher-order functions and immutability have really nice benefits. I hope to continue exploring when these laguages might be a better choice then Java in 2013 with my collegues in the Iterate Functional Programming Group.
Some books I have read and appreciated:
- Adam Bien’s Real World Java EE Night Hacks
- Gojko Adzic’ Specification by Example: How successful teams deliver the right software
- Michael Feathers’ Working Effectively with Legacy Code
- Kent Beck’s Implementation Patterns
- Summary: The Lean Startup by Eric Ries and Running Lean by Ash Maurya (we believe that innovation is crucial for companies that want to succeed)
My blog posts of this year that I personally appreciate most are these:
- Programming Like Kent Beck
- Do You Know Why You Are Testing?! (On The Principles Underlying TDD)
- How to Create Maintainable Acceptance Tests
- What Is Clean Code? – In Quotes
- (Unit) Testing Swiss Knife: All the Tools You Wanted to Know
- Bad Code: Too Many Object Conversions Between Application Layers And How to Avoid Them
- Kent Beck: Best Practices for Software Design with Low Feature Latency and High Throughput
- Using Java as Native Linux Apps – Calling C, Daemonization, Packaging, CLI (Brian McCallister)
- Minimalistic Practical Introduction to Puppet (Not Only) For Vagrant Users
- Beautiful Code: Simplicity Yields Power
- Key Lessons from the Specification by Example Course, Day 1
Another blog post that I really like and that I haven’t written but have motivated it, is Iterate’s Books Our Developers Should Read presenting the 4 books we believe are crucial for all our developers/consultants.
Some of the best articles I have read and talks I have seen in 2013, in the reverse chronological order:
- Getting Real About Distributed System Reliability by Jay Kreps, the author of the Voldemort DB
- On Being A Senior Engineer – valuable insights into what makes an engineer “senior”
- Jon Pither: Clojure at a Bank – Moving from Java – the justification (productivity, dynamism, FP a better match for the domain) and process behind moving from Java to Clojure with a monolithic 1M LOC Spring/Hibernate app.
- Tom Gilb’s excellent JavaZone talk Managing Agile Processes, with a Stakeholder Value point of view: 10 Revised Agile Principles, claiming that development should always start from understanding the business need and delivering business value each iteration, all of that backed by metrics – all of that backed by many years of successful projects done this wat
- M.Fowler: ORM Hate – Why ORM is actually a good solution – a very valuable article where Fowler opposes the popular trend of criticising Object-Relational Mappers such as Hibernate.
- Gojko Adzic: Redefining software quality – an obligatory read that introduces a holistic view of SW quality and the quality pyramid
- Bret Victor: Inventing on Principle (55 min, see at least the first 5 min) – very inspiring! Victor firmly believes that “creators need an immediate connection to what they create” and demonstrates how this can be achieved
- The Game of Distributed Systems Programming. Which Level Are You?
- Shapes Don’t Draw – thought-provoking criticism of inappropriate use of OOP, which leads to bad and inflexible code
- Jay Fields’ Thoughts: Compatible Opinions on Software – about teams and opinion conflicts – there are some areas where no opinion is really right yet people may have very strong feeling about them.
I have begun to use screen (via the wrapper byobu) for long-running sessions on servers, switched to IntelliJ 12 for Java development, begun to re-learn Emacs for the sake of Clojure. I have also adopted Cluster SSH for multi-server ops tasks, started to experiment with the fish shell (with addons) instead of bash or the growingly popular zsh