Thinking of quitting the software industry
Approximately 12 minutes reading time
I love software development. I believe technology is an enabler.
I am also getting tired of this industry.
At the age of 36, beginning to feel tired about the lack of principles, lack of professionalism and education in the software industry.
My first computer was a Sinclair ZX 128K +2. I remember writing a few lines of BASIC but that was about it when it comes to programming. Owning an AMIGA didn’t make any difference as I would mostly play games on it. With a PC, I started tinkering with DOS, editing config.sys and autoexec.bat files, primarily to manage memory to, guess what, run games. With the arrival of Windows 95 I spent a lot of time understanding how hardware and software worked together, albeit at a high level. I would format the hard drive almost every week due to messing up the OS. The back of the PC never had its screws tight as I would open the case, move cards around PCI slots, change PATA cables, overlock the CPU, install better RAM, etc. Come to think of it, I was constantly optimising.
Have felt really bad in the past for not having a CompSci degree or for not being that good with algorithms. Please don’t fall for this.
In 1998 I went to study at the University of Sunderland towards a BEng Computer System Engineering degree. After the 1st year, I switched over to a BSc Information Technology. I believe I did it with a career prospect in mind.
"qnoid" is the name of a demo game that wrote in VB back in 1999 as a first year student at Sunderland University.
One of my first software development assignments was to build an application using Visual Basic. I wrote a simple loop to move a “spaceship” left and right while deflecting a ball within the window. I wasn’t given a high mark because the tutor assumed previous programming experience, hence the handicap. Funny.
Did you notice the sound effect when the game ends?
In 2001, I was offered a work placement at CERN. This is where I got my first real world experience in building software. I was thrown into Java EE, databases, XML and the web. I had no prior knowledge of any of these technologies whatsoever.
Had to read a lot, practice even more, write code, take notes, repeat.
My office at CERN. Books and notes all over the desk.
The following year, I went back to University to finish my studies. That year I was taught Java as a programming language. I remember the whole class (100+ students) struggling to understand basic principles. What is an object, what is a class, what makes it abstract, what is an interface, where and how are applicable. Even though I knew what the tutor was talking about, I too had trouble forming a well rounded understanding. Hell, I remember myself at the end of the year (“2 years” into Java), during the exam telling my tutor “I finally understand what an interface is”. Still, I was ignorant of the how, the where and the why.
I finished University and got a job as a “Java Web Developer” at an Internet Service Provider working mostly for projects related to the tourism industry (don’t ask). There was a project manager and a single developer. That would be me. A database admin was generally available to ask questions but not attached to a project. Same for a system admin. Also senior developers, colleagues working on other projects, willing to answer my ignorant questions.
Tho @Macropoulos is an amazing macro photographer, most knowledge that have of bash originates from him way back in 2004. Thank you Stavro.
I had no idea how to build software.
I knew how to hack code. Did I understand anything about software design? No. How to manage a growing codebase? No. How to deal with technical debt? No. Why I had seemingly decided to opt for design X, decided on Y or go with approach Z? Of course not.
My critical thinking in software development had developed very little all these years at University.
I remember constantly re-writing the codebase as I was going along in an effort to get a better understanding of how code fits together including trade-offs. I would print Java articles off the Internet to read every day.
Notice the printed article to my right. Yeap. Had a stack of these.
I discovered ORM, faced the “N+1 selects” problem and learned about caching. I had an urge to understand how things work, take them apart, examine, put it all back together.
I fondly remember the “Head First Design Patterns” book with its “There are no dumb questions” section. That book developed my critical thinking even more. Same goes for Effective Java.
I stayed for almost 4 years on that job, learning and practicing constantly. Around 2008, I also started teaching Java to final year University students. They were utterly lost, drawing parallels to my time at University 5 years ago, damn!
When started the iPhone Stanford course in 2009 didnt imagine giving a talk on a iOS conference right after @edog1203
I held 3 more roles as a Java Developer, until 2011, working in academia and research, the media industry, finance.
In the meantime, in September 2009, I started attending the iPhone Stanford course on iTunes and a year later started building verylargebox.
I went to work as an iOS Developer at NCR, lead the technical delivery of Tesco Bank‘s Mobile Banking app for the iPhone and just recently as Head of Mobile at Soldo.
Throughout my career, every time I went into a new work environment, I’d come across a different mindset. Whether that was from developers, managers, directors; technical or not, involved in the software delivery process none the less.
Some didn’t believe in the merits of software testing or any software engineering principles, others in database normalisation or denormalization for that matter.
Thrown in there, arguments of the “tab vs spaces” type.
Some felt strongly about procedural programming with very little structure, others fixating on functional and reactive programming.
If you come from an OO background and want to get a grasp on FP, one of my favourite talks from this year's @nsconf https://t.co/ej9p9NMqOV
Software development processes varying from non existing to very inefficient. Long discussion meetings, ad hoc phone calls, emails. No planning, no management, no roles, no ownership. It’s like watching amateur football where everyone chases the ball.
Learned a lot on project management and software delivery by working alongside @mattfarrugia in the past. Thank you Matt!
Why do so many people involved in the software industry believe that software development is subjective?
FWIW, this is what it's like to hire for a Lead iOS developer. Worse than the worse customer acquisition strategy.
The bar is low. As far as I can tell and see, education (higher education, online courses, training, schools) falls short in all of these below.
- Academics are detached from the software industry.
- Professionals who do know, do not necessarily make good teachers/mentors.
- Not enough practicing your craft.
- Teaching how to write code rather software development as a discipline.
- Failing to develop critical thinking.
Whether they come from language, platform, hardware, network, interaction. Know the fundamentals, use critical judgment. Should be enough.
It does not help that the industry is still evolving. There are new paradigms, languages, platforms and challenges all the time. Still, by now we should have a solid foundation on which to start from and agree upon. People have very little interest in studying history when the technology always stays fresh and exciting. Repeating the same mistakes in the process, debating on issues that have already been settled, going down the same path in a different language, platform, domain.
The software industry is growing, without any signs of stopping any time soon, generating an unsatisfied demand for people. On top of that, there is money and there is plenty to go around.
Private investments, government funding or simply because software is driving businesses everywhere that are profitable there is very little understanding of how wasteful a software development process is, concern about the quality of people through the door, incentive to invest in the people.
Software is driving the economy and is unregulated.
Brilliant slide by @unclebobmartin at @xup_uk. Let this fictional front page suck in for a minute.
“Regulating pieces of software as if they were taxis or hotels makes no sense at all and wouldn’t help protect consumers or stimulate the economy,” said James Waterworth, vice-president of CCIA, a lobby group for the tech industry.
European court takes up the question: what is Uber? https://t.co/tbe0p2G0m0 — Financial Times (@FinancialTimes) November 28, 2016
So how is all that affecting the industry as a whole and me personally?
It is creating a culture of rockstars and ninjas and the chances of finding a good, solid team to deliver software are slim. We spend more time arguing, cranking code, boosting our egos, rather than focusing on solving problems, building software, growing personally, professionally and the industry as a whole.
It is considered acceptable not to be a professional as long as you produce software, regardless of whether it’s delayed, of questionable quality as long as it satisfies the business needs. It’s all been factored in the operating cost for the company.
This is an industry where mediocracy rules with no sense of collectiveness and no-one being held personally accountable in their profession. Salaries are going up, no-one is grabbing us by the collar and software is still eating the world.
This is an industry where I am finding it hard to grow, do good, generate value and bring positive change in this world.
Building the perfect team @nytimes is worth a read; amusing that Google was looking in data. https://t.co/EmZrLoFQ1B