It was way back in the early 90s and I had completed three years on a maths and philosophy degree without even touching a computer, then ended up working as a council housing officer. I had friends who were game programmers and realised I had missed a trick: software engineering was the perfect match for my analytical puzzle-loving brain. So I quit my job and studied for a Masters in Computation, going straight from there to my first software developer role.
Twelve years later I was bored and disillusioned and left the industry for four years. I didn’t think I was coming back. I spent those four years being a freelance writer, having a baby and then retraining as a high school maths teacher. But I was hopeless at controlling classroom behaviour and ended up running back to IT with a huge sigh of relief. For the last eight years, I have embraced learning and Extreme Programming, and I'm currently loving my role as a lead consultant developer with ThoughtWorks.
C# at the back end, using Visual Studio as my IDE. A lightweight REST API like Nancy in the middle. For the front end, I'm currently enjoying playing with Swift for iOS development, but I've never quite mastered front end development so I'd normally defer to whatever front-end experts I happen to be working with.
I don't think of repos that way. They're not like podcasts or websites or sources of entertainment. I dip into other people's repos briefly to see examples of whatever is relevant to what I'm doing, and then I forget all about them!
Having said that, this repo created by a colleague of mine contains some really useful advice for people who are new to coding: github.com/charlottebrf/coder-newbie-advice
I’m currently working on a project as an infrastructure engineer, and I’m actively exploring how a test-driven software development mindset can be brought to the world of elastic cloud. I’m also excited about finally (after nearly 20 years) learning how to live comfortably on the command line. The book “Data Science at the Command Line” by Jeroen Janssens is helping with this.
Weirdly, although I've been surrounded by microservices enthusiasts for some time now, and worked on several service-based architectures, the universe has not brought me any microservices experience. It would be lovely to rectify that.
I'm really interested in what can be done with data science, machine learning, deep learning, etc. But I'm also increasingly aware of how these technologies can be misused or misunderstood, for instance when poorly-examined algorithms are used to make life-changing decisions about criminal justice, insurance, finance, etc.
But to be honest I've always been more focused on what's behind the technology. The patterns and processes we use to build software. The ways we interact as humans. For instance, I've always been an object-oriented gal but I'd love to find the time to dig more into functional programming and compare the two. I'm not that bothered which new shiny technology I'm using, I want to know what's going on behind the scenes.
(cartoon courtesy of xkcd: xkcd.com/1289)
If we're talking about personal projects: If I was a perfect human being with limitless time, I would use a simple tool like Trello to display work in progress and store a backlog which I would regularly review with a team of enthusiastic people, keeping an eye on current priorities and WIP limits. I would have deployment pipelines in something like Circle CI, deploying a progressive web app continuously to the cloud, with beautiful dashboards giving me useful actionable information about the current state.
I would have a fit-for-purpose test suite with a mixture of acceptance tests, integration tests, and unit tests, with an open-source code base in GitHub and a whole community of passionate developers helping me to build something amazing.
In reality... um... I feel very proud of myself for practising pair programming and TDD with small commits that are fully tested at every turn. On one of my personal projects, deployment is more or less continuous. On the other one, not so much. At Hack Manchester last year we managed to run mini sprints with some story mapping and mini retros. We won Best in Show which was very exciting, and the judges commented on how organised we were.
Our Hack Manchester team:
If we're talking about my professional life: I don’t like to be too prescriptive about exactly which tools, technologies or processes are used. I want those decisions to be reached by a team of people, taking local constraints and considerations into account - and these can vary widely. But generally I want to see the following:
Good communication with stakeholders to collaborate across the whole team in producing a well-prioritised backlog.
Agreed ways of defining value and measuring progress.
Small numbers of works in progress, with everybody swarming to clear blockages, and with deliberate slack built into the system (don't try to schedule every hour of every team member's life).
Just-in-time preparation, where appropriate team members get together at the start and end of each piece of work, to agree on the definition of done.
A high degree of pairing and mobbing, to spread knowledge across the team and reduce the need for long meetings.
Continuous integration and deployment, often to the cloud.
High involvement of dedicated test professionals.
Cross-functional teams with data, UX and devops functions kept in-team where possible.
Good communication and collaboration across all layers of an organisation, with as much autonomy as possible in individual teams.
Small commits, no branching, automated tests.
Fast feedback loops with user input contributing directly and meaningfully to ongoing development decisions.
Regular retrospectives where participants are given the freedom to examine and refine every aspect of their workflow, with no blame or judgment.
I love to learn! I’m learning several things at once, which isn’t unusual for me:
- Infrastructure engineering: Command line proficiency, Terraform, GCP, maintaining an ELK stack (Elastic Search, Logstash, Kibana).
- Data engineering (data pipelines and how to service the needs of data scientists).
- Swift and iOS development, but moving towards cross-platform mobile development.
- I've also been consolidating my Software Queenery skills such as TDD, refactoring, clean code, and software design
(cartoon courtesy of xkcd: xkcd.com/1053)
I'm currently working on a personal Accounting & Reconciliation tool that has reduced the amount of time I spend on private accounting each month from 4.5 hours to 2.5 hours. It has a real practical use and the code is very satisfying.
You know what, my answer to this may not be what you expect. I don't think we put enough emphasis on the fact that there is NO one specific technology or skill that beginner developers must learn.
What they must learn is that the learning never stops. The learning is the job. Everybody you meet, no matter how in awe of them you are, will have huge knowledge gaps and will still be learning new stuff. If they're really good, they will acknowledge this. They will embrace it and celebrate it. If they suggest otherwise, be wary of them.
The most important skills you need as a developer are these:
- An open mind
- An eagerness to learn
- A willingness to communicate and collaborate
- The ability to think critically and analytically
- The ability to pay attention
I work for a global consultancy (ThoughtWorks), so we don't have our own in-house technical estate. As a consultancy, one of our big technical challenges is maintaining our Tech Radar - which people across the industry rely on to give advice about current tools and technologies. People would love it if we could tell them exactly what to use on their projects, but the reality is that there is such an explosion of new tools, libraries, etc each year that it is very hard to maintain an objective view and give advice that can live independent of company-specific constraints.
I had a great time making this podcast about teaching software developers, with @CarlFranklin and @RichCampbell for Dot Net Rocks, and I'd love for people to listen to it: dotnetrocks.com/?show=1621
I'm speaking at Lead Dev London in June 2019 on the subject of time and working hours, with my wonderful friend and collaborator @SalFreudenberg: https://london2019.theleaddeveloper.com/talks/#sal-claire
I have two blogs: