I know some really good writers. People who make money out of writing. People who wow others with their ability to conjure up emotions and worlds full of intricate detail all with the power of a pen (or laptop as the case may be). These people are in their element when writing. But, it doesn’t stop us all learning to read and write at school because it is the foundation and platform for interacting in the world. We have to learn otherwise we would struggle to communicate in general society. It doesn’t mean if you can’t write you can’t contribute, but it does make life just a little easier if you can. Letters, words, sentences, grammar, printing and writing all help us express ideas and communicate. It has been and continues to be fundamental to progress in the world. Communication is fundamental. And now the medium of communication is changing…
After a recent post I was asked by quite a few people why I was bothering to learn about modern software engineering languages and tools rather than focusing on more managerial type skills. Maybe this was because I suggested it was for ex-developers to learn and not everyone (the point was that I am an ex-developer and believe that I need to learn more). I had a few people say that we should let the expert developers develop code. Now, I wasn’t advocating that the results of my learning was going to see me back in front of a keyboard full-time to develop production code. I was more intrigued into the practicalities of development with the modern languages, databases, tools and concepts so I could better understand the decision-making processes, trade-offs and choices being made by the experts who deal with the work on a day-to-day basis. But, there are a couple of other reasons why I was interested and I wanted to share my reasons.
The next generation
At the moment, the UK is trying to promote Computer Science in schools. It isn’t just about teaching the kids though, it also means teaching the adults. We have a big gap in the quality of teachers who are capable of really teaching the foundations of computing. At the moment, the ICT curriculum isn’t really taught by specialists but rather people who have either been asked to do ICT as a secondary subject or the people who have a passion for it but more as amateurs. Often, anecdotally, people talk about how the Geography and Sports teachers are also the people teaching ICT. The fact that we are now trying to make a difference is a good thing, but it is going to take a lot of time to bridge the knowledge gaps. Claire Sutcliffe did a great talk about the gap and the lost time over the last couple of decades (the gap is explained at about the 4:45min mark). There has been a recent drive for digital literacy, but this goes further than having people be able to drive a computer with a keyboard. It is about understanding the platform for the next wave of creative output.
I want to give my own children and other young family members good guidance and advice. The world is becoming more dependent on code. Not just for the developers, but for everyone. As this article on edSurge suggests every age demands its own set of skills. I believe it is not too far away when many non-developer roles will need to be writing code on a regular basis. This will not be the computer code required to create the web browser you are reading this on, but more the type that is required to search for, sort and present data in usable ways. Or automation of simple tasks to get jobs done more quickly. Imagine a customer service agent sitting in a call centre – wouldn’t it be great if they could get access to the vast information stores that an enterprise has about the person they are talking to on the phone so they can know more about the person they are talking to and the products and services they have. I bet many companies have record of most interactions with customers, but that isn’t currently at the fingertips of the call centre agent. Most enterprises are trying to solve this problem by producing canned reports and centralised data warehouse systems. Large business and management information programmes costing millions upon millions without delivering the value promised. It might have been better to have invested the same money in giving more people access to the training to allow them to write algorithms to search and sort data. It might also be a little more successful than most of the enterprise data warehouse programmes I’ve seen.
But the next generation will need to express themselves online more than we have ever done. They will probably take many classes online. They will need to submit their art, music, writing, acting and dance projects online. They will likely even have to submit computing-based creative projects online too. They will probably see more and more projects based on the idea of the Internet of Things, and they will likely contribute to it. Open Data, Open Sensors, hackathons, code clubs and the like. They will live out much of their social lives online too, just as we are only just starting to. To innovate and push the boundaries they will need to code. To participate effectively they will need to code. To fit in they will probably need to code. So, who is going to teach them how to do this, and participate safely? The schools will have a part to play, but I believe there is an onus on the wider community to provide guidance and support this.
The current generation
The then there is another group I come across in my travels; the development/department/product/project/programme managers who are in charge of IT based products and services or delivery programmes because that was the route for promotion, empowerment and decision-making within their environments. The world hasn’t always appreciated and valued the work of a developer. These managers are no longer in a position where they understand the work being done, yet they are meant to be representing those doing the work and managing them. They are still being asked to make the decisions, manage suppliers and staff, and generally be seen as the experts by the people above them. Over the last decade there have been shifts in the workplace and more value is being placed on the developers than the managers. Even in very traditional and established businesses this is starting to become true. Many would agree that this is a good thing, but typically not for the people who no longer understand the work. For this group of people, they need to learn new skills (or indeed re-learn old skills) quickly to remain relevant and valuable. Helping these people through the transition of roles and value is important. I wouldn’t want to see people become disenfranchised because the world has moved on. I sometimes get asked direct questions from this group about what and where can they learn about the advances in technology.
I can’t believe that coding isn’t going to be as important as reading and writing in the next decade. It will be an important medium for creativity and innovation. I know people in many different states of confusion – from 14 year olds looking to choose their GCSEs, to Mums who are struggling to understand what their teenage children are up to and then there are parents and teachers who want to educate for the future, and the managers and professionals who are trying to keep pace with how the world of work is changing. The explosion of broadband and the internet is creating some interesting challenges for people. And some need and want to do more to contribute, but don’t know how to get started. My foray into learning more about the modern tools is in a desire to help others understand where to find good resources and learn how to learn more. There is a huge amount of information out there, it just isn’t that easy to get started.
Me: Hi, my name is Phil.
Everyone: Hi, Phil!
Me: I used to be a developer. It has been 8 years since I last wrote software for a real system. I still think I know how to code and I’m sure I add value to all design and development meetings, but I am starting to think that things might have changed.
Everyone: It’s good that you are here. We know how you feel.
Me: I was pretty good back then. I was so good I got promoted to running things. I still know how it all works, and I’m not worried I don’t understand the new technologies as I can run rings around these young guys. I now do all of the other managerial stuff and make all the important design decisions, create architectures, commit to deliveries and do all of the planning work. Because I know the technical stuff really well, I can represent the technical team.
Everyone: Oh, dear, Phil. We might need to help you.
Me: Well, what has really changed over the last ten years? Programming is programming. I could still develop today, right?
Things have changed and are continuing to change. A lot.
And, if you are an ex-developer who thinks it is still the same world, you might need to learn a few things as you might just be getting in the way.
Development has changed
I come across so many people who used to write code and started their careers as a developer. I come across so many, I think we might need to create a rehab group for all development managers, agile coaches, team leaders, project managers and other senior executives who think that they still know how to develop cutting edge software solutions fit for today’s customers.
Life has moved on. Programming today has changed. And yet, in some ways it is still the same. But, I believe the differences now outweigh the similarities. The practices used are different Everything is agile. Everything is TDD. It is all continuous delivery. The tools and infrastructure. The frameworks that exist now are so good that you can build amazing solutions in a very short pace of time. The old process of capture all requirements, design the whole system, build it, test it and deploy it a couple of years later has gone.
The problem is that technology expectations have risen. Customers know they want more and now. Businesses want more and now. Everyone wants more and now. Mobile platforms are everywhere. Software is now more open and re-usable. Scalability is a bigger deal today than 10 years ago. User experience is not a nice-to-have. Software is eating the world and everyone involved in delivering products and services needs to understand more about what is being built, and how it is being built. This idea is illustrated beautifully by a passage in the Valve’s Handbook for New Employees:
Non-Engineers: program or be programmed
Valve’s core competency is making software. Obviously, different disciplines are part of making our products, but we’re still an engineering-centric company. That’s because the core of the software-building process is engineering. As in, writing code. If your expertise is not in writing code, then every bit of energy you put into understanding the code-writing part of making software is to your (and Valve’s) benefit. You don’t need to become an engineer, and there’s nothing that says an engineer is more valuable than you. But broadening your awareness in a highly technical direction is never a bad thing. It’ll either increase the quality or quantity of bits you can put “into boxes,” which means affecting customers more, which means you’re valuable.
The tools and practices that help programmers be successful are very different today than when I studied computer science at University. They are certainly different to those that the people who developed the original cobol programs that underpin virtually every major enterprise used.
Storage and databases have changed. SQL is even being challenged. That’s mind blowing for someone who only built enterprise software on Oracle, SQLServer and others that underpin most enterprises today. Is the RDBMS dead? The answer is not conclusive, but there are definitely things to consider. Technology choices have exploded for the modern developer. The start-up scene is doing things differently and they are outpacing the established companies. The open movements in software have created a marketplace that can have the novices’ head spinning. And, whilst I don’t feel like a novice, I wonder if I am.
The first step to resolving any problem is to admit that you have one. So, I am going to investigate many of the latest trends, tools and techniques to see how bad it has become. I want going to explore 7 areas of the latest stuff, and provide a resource for others in where to find good information in each of the areas. I might end up going in to other areas if I stumble across interesting things, but I will start with these 7.
I learned C, C++, Lisp, VB and Java. I hear functional programming is in vogue again. This puzzles me given the shift to OO that happened 15 years ago, and my lecturers insistence that objects were the way forward. I’m sure it is not that straight forward.
Ruby and Python seem to be very popular as they help developers be far more productive delivering web-based systems than other languages. I’ve never come across either so I’d like to see what the fuss is about.
My goal is to learn one or more new languages so I can compare and contrast the different paradigms, and maybe build a little app or two.
Startups are following the Lean Startup methods. Agile is now the norm. People are using the Y Combinator approach to deliver working products in weeks. In the years since I left enterprise software delivery in BT, things have moved on and there is much to learn. Luckily, my company has created the world’s first work-based education programme based on agile and lean. It is time to put it into practice.
Git, heroku and other build and deployment tools
This is an area that has changed massively in the last 5 years. SaaS, PaaS, BaaS, EverythingaaS has my head spinning. Git is very different to the SCM tools of the past. Heroku looks cool. I have done a little bit on AWS, but I think this is an area that needs real investigation. I suspect there is much to learn.
I used to run big enterprise systems that didn’t really deal with front-ends. Usability, speed and rich experiences are important for all sites. This is one area that I really want to explore. My design skills are not great and I suspect learning the languages will be the easy bit. Making good looking things will be harder, one suspects.
So what’s changed here? RESTful architecture seems to be a popular topic. Is MVC something people still talk about? I think there is a lot to look into for scaling software, promoting re-use and creating more maintainable software.
The whole NoSQL movement is intriguing. MongoDB, CouchDB, BigTable and other tools will be tools to examine. I have no idea if this is where Hadoop fits in or if that sits elsewhere. Regardless, another thing to look into.
Modern Test-First Tools
At Christmas, I took the developer test for Emergn. It is a core part of our hiring process so we can see how developers think and what they consider to be high quality. I had never written TDD code before the Christmas holiday. I know test first is really important for design and quality reasons, and I’ve seen the results of high-quality development, but there is much to learn. BDD, Gherkin, Cucumber, RSpec, JUnit, Selenium and DSLs.
I’m sure I should be looking at iOS and Android development too, but it seems like an awfully long list already.
Now all I need is a couple of little projects to provide a backdrop for learning and making all of these areas practical. I am certainly not confident in the amount of new things to look at and I suspect it is going to take a long time to crunch through all of this stuff. Especially whilst holding down a demanding day job. If you have any ideas for shortcuts, useful resources or other areas to look in to, I’m all ears. I will share my findings.