This week, we are back with Doug Thompson in our interview series. Some may remember him from a prior interview where he shared his opinion about TDD, Typemock, and good and bad unit tests. This time, you can see what he has to say on topics such as languages he likes (and hates) and what he does against ‘Code Blindness’.
Tell us a little bit about yourself
As a kid, I grew up glued to the TV watching DrWho side by side with my Father. One Christmas he bought me my first computer, made out of plastic and springs (a DigiComp).
At school, my main subjects were Physics, Maths and Technical drawing – all a bit of a challenge being Dyslexic and that not being understood in those days.
I left college with an OND in technology, with a focus on Electronics Engineering (like father like son) and I went to work for IBM in October 1977. In those days what an IBMer meant was ‘anything was possible’ thinking, the culture at that time was expansive, with one day a week to focus on any project I liked to grow and skill up. I loved going to work, any job I did there was a pleasure till I left in when Mainframe market when into a tailspin.
The final years at IBM I spent developing PC/Server skills, working on automation and competitive analysis (eg Visual Age vs MS Visual Basic). Where IBM was still focused on ‘High Brow’ software and Microsoft ‘Low Brow’ software for the masses (eg VB).
I now work in a sector that is focused on Software Defined (Network) Architectures, providing capabilities to large TelCos (#WanAnywhere is soon to grab some headlines), but with so many things having internet access in a swarm of functionality, something needs to make sure that it’s all running smooth. I have worked in a number of sectors: Manufacturing, Finance, Insurance Health, TelCo, Government, and Software Houses both as an Employee and Consultant.
I am an optimist, living in Brighton one of the most bohemian, creative cities in the UK with my partner I met at university.
When I think back, I first visited Brighton as a ‘Small Town Boy’ from a very parochial small town, where small thinking was the norm – but now with the reach of the internet, so much has changed, we now live in a world where change is inevitable and the rate of change is accelerating.
I cannot imagine not working even though retirement is looming, just wished my father was alive as he would have loved this pace of technology growth, cool stuff for him was (Ham) radio, and he died way before the internet was even thought of, he never saw the Mainframes I built or programmed as a young man. In some ways, I am a little envious of youth entering this new industrial revolution era, but not the student debt that can go with it.
My job at work is to inspire the apprentice developers to develop wider horizons and imagine that anything is possible – just like IBM used to do.
How did you get started in programming?
I first did programming in Algol60 when I was at college when I was doing Electronic Engineering back in 1977. When I graduated, I joined IBM working first on its flagship 5MB (Gulliver then shrinks to 8in as Piccolo) disk drive, then to mainframes.
Having access to all the testing kit needed, I built from scratch first my ZX80 and later added a co-processor of a Z8000. I also built a Floppy Disk controller as I had an abundant supply of 8in floppy disks, which enabled me to buy my first Pascal compiler (pre- turboPascal days) for a third of my month’s salary. I then moved from Electronics to Computing. At work, I used REXX as my first programming language in 1985. Later I programmed in others such as C, Smalltalk80, Prolog, ADA, PL/1, and Cobol – but REXX was the love of my life.
For the most part, REXX worked equally well on Mainframe and PC, both were extensible with C or ADA. Later used Visual Basic that came on the front on a magazine cover on a 1.44mb free diskette on up until VB6
For me, programming was a porthole to an amazingly creative world, where I created many of the features we now take for granted in MSWord but were on the Mainframe.
Back in 1985, I was using GML with cascading style sheets, later it became BookMaster, and allowed you to render to the screen (just like HTML). The concept of Hypertext was in its infancy and HTML was still a way off – I still have the VHS of OWL HyperText and the diskettes. My main focus was that of automation, automating peoples jobs away, eventually my own. I then joined other companies to do much the same.
What are some of the languages you use today and why?
What type of applications do you develop?
I develop both: mobile app (for pleasure) and Enterprise systems for the day job. I still use ADO over EF, though with the rising cost of developers EF has an appeal due to its productivity. I write and consume APIs of all kinds and a large part of my job is integrating into third parties – where ‘standards’ are very fluid and some people have never heard of the Data Dictionary or Naming Conventions.
What’s your biggest passion these days related to programming?
I enjoy writing Apps and connecting into IoT – my main job is maintaining the quality of service for the IoT and Wan-Anywhere, as well are the automated orchestration of software-defined infrastructure (typical networks) and the automation of peoples jobs – productivity is king.
What still sucks and shouldn’t be in programming?
Development Estimation is still a black art.
Back in the 90s, we used function points to get an idea of how long it would take.
We have to develop to the price point of the customer budget, as they want the earth for free – this is being set by the Apps agenda where all apps (like the internet) is free and is paid for by some magic elsewhere. The setting of the clients’ expectations is a skill.
Test Driven Development can be seen as Gold Plating – why should I have to pay for testing of something that is meant to work already!
Nobody wants to pay for Project Management or an Architect so these skills have to be re-bundled and call something else that a client will pay for to get what they want.
So understanding what is the least you need and to define it as ‘Done’ is a skill. The context of ‘Done’ can mean different things to different people.
The client is far too used to expecting you to be a mind reader. Getting a signature out of him for the one paragraph requirements is a challenge, then the time you spend engaging with him to get all the info you need to complete the job, is money/time he does not want to spend.
As I also commission software, I too am the client, so I hone my skills on People-Per-House to make sure I can craft specs that get what I want for the price I want. If you are too lazy to tell the developer what ‘Done’ looks like then don’t be surprised if you are disappointed.
Equally, if you are client what is out to ‘cheat’ developers, and have a restriction where you cannot talk to previous people that have worked on that project – walk away. This is meant to be an open and transparent relationship. Platforms such as Team Foundation Services allow an open and honest relationship with all the stakeholders is a global network.
What are some of the most important skills developers can have?
Everything is moving at such a pace. Life-Long-Learning Never stops learning – even when you retire.
Just because the Server used to be a Mainframe there is no reason that it cannot be a micro-service on a nano-server in the cloud somewhere – the cloud is just another name for the Machine Room. Equally the client is no longer an 3780 emulator on a PC but an app on a phone or a widget on an HTML page or indeed another micro-service.
Stepwise Refinement is a way of decomposing a problem (see “How do you eat an Elephant”), this is then used in debugging and Test Driven Development, its a mindset regardless of the current fads and fashions. See what you can reuse from the Old Days, just because you used Client Server on Mainframes, does not mean that it cannot be used on PCs, just because we have 3-tier architecture, we cannot imagine n-tier or slicing and dicing in whatever way makes sense.
I’m still learning this. My emails are long because I want to be accurate and ensure that the reader can make informed choices. I now use bullet points way more.
Show&Tell Sessions (part of agile working) allow you to connect with your stakeholders in a way that allows them to understand the shared vision. You need this to get funding for the tools you want for your development team, to get your development team to work my consent (versus “This is not a Democracy” management style).
What you will discover is that there is very little that is new and there are too many fads, that some speakers invent gimmicks (event-driven design) so that they can talk about it when they do the speakers circuits. I have been to all the major software and solution architecture events in the UK and Europe. You get a little jaded after a while.
Keep it Simple
Someone has to maintain your code long after you have left, and whilst you have selected the fads that have help your CV, the people coming up behind you may be have been trained in your version of the MEAN stack, and AngularJS is so last month anyway. If a Development Manager ever hears the word ‘Self Documenting Code’ he should feel nervous, I get a cold chill whenever I see what is called self-documenting.
You see what is hot this week, which will suck next week. Today’s hot stills are one of the versions of Angular with added Typescript, connecting into either a Python or C#/EF backend. It will change again, you can bank on that, so subscribe to MSDN magazine to see what is coming down the track, eg a Pluralsight account to learn what’s new and Talk to other developers outside your sector to expand your experience.
Don’t be afraid to go contracting, as you won’t get a pay raise with the same company only when you move. Contracting exposes you to a wide diversity of work and reading others peoples code is always a learning experience. For good or bad. You are also free of office politics, rivalries and job titles, the downside is the steady paycheque, the upside is not having to work during the summer, and the diversity of work. However, you can find a full-time role that is operating at the cutting edge, where your work matters, if I did not work here I would rather work at Space-X.
What they teach software apprentices today (if they are lucky enough to have a small class size with a teacher who has time), is to teach them the current fads established the marketplace that the employers want to be joined with what skills the teachers are prepared to learn.
Some students assume they need only to limit themselves to pass the exams. Reality is that the industry sector they are in, with all that jargon and constant picking up and learning the software industry – even pre-internet, is quite a challenge. I only had the ACM Journal (Association for computing machinery – what computers we called back in the day).
How did you learn about Typemock and what was your first reaction?
When I was already using TDD in VS2005, I was looking around at other toolings that could help with what we now call DevOps.
The first time I used Typemock, all it did was to kill my beefy PC and deliver little benefit – It was a horrible waste of money, it did not deliver on my expectations.
If was only recently that I thought I would give it another try now that FAKES are available.
Typemock has come a long way since then, now you can benefit from the code suggestions, and even if you don’t have VS ultimate you can still benefit from them.
I can now test functional areas previously hard to test. An obvious one being SMTP – how can you test that sending emails are fully worked without sending one and an email is received as intended.
Do you have tips for readers who are just starting out with Typemock?
Don’t expect it to do magic – there are few silver bullets in this world, and many products do promise them, a bit like Fat-Burning Diet Pills that cost the earth.
Treat the suggestions from Typemock as just a starting point.
With the easy to use Fakes we can make sure APIs are fully tested in a secure sandbox, any HTTP/Network activity can be fully mocked, and the Suggest functions can look at legacy code and create a test suite for it. The product works well with ReSharper levering the power of both. The best thing is to leave Typmock running overnight and to check the test suggestion over my entire code base in the morning since it tests every path, you might discover some surprises.
These tests teach you how to write your own from scratch. I would not give up ReSharper for Typemock as ReSharper helps you write better code. The Typemock test runner is much faster than ReSharper, it also tells you how many tests cover a given method and if any have failed and why.
It works well with Resharper (it’s not a replacement), a toolbox has more than one type of screwdriver.
Use your Task Manager to allocate your CPU cores to different processes – avoid core zero.
Get to know what the process names are which ones you can kill if VS becomes unresponsive – create a script to stop services that are not needed during heavy development, it is handy to have some Shell Commands to switch off services you don’t need when working on a given project.
Understand what the magic memory limit is for your set up, the time when you need to restart VS or cancel tasks – At home, I have 32gb and 12 cores, at work 16gb 4 core Laptop – I notice the difference, See 12 Steps to better code (Joel 2002 are you 16 years behind the times? ).
How do you convince your manager to write more unit tests or practice TDD?
Poor quality and fragility can make your product undesirable to the end client.
The usual excuse that the UAT testers “Did not test that bit because it was not part of the Work Pack” does not cut it, when they ship out something that is now broken is a dusty part of the code that you did not expect to change.
Writing Unit Tests allows you to be more productive (esp with ReSharper) when you can try out a concept, then refactor it to the correct namespace. This is the old-fashioned Step-Wise Refinement I learned back in 1985 that is still true today, it worked well in engineering so why not in what we now call software engineering.
You have to address unit tests in the return on investment (ROI) and total cost of ownership (TCO) as managers think in terms of money. You have a programmer all the time, you are paying for him if he is drinking coffee or programming, so why give him the best tools to do his job?
The Agile Agenda dictates you give your expensive developers the best tools and the best PC money can buy – this is at odds where a PC or dual screens are selected on your status or job title. If you trust your developers who are as keen as mustard, then you give them training and the tools to do the job.
This is a hard one for the CTO to justify to the board when Marketing all want Macs to impress clients when you do presentations. There is a balance of how much does it cost to create maintain and support your product. If you want to retain your staff (who only get a pay raise by job hopping ever 18 months), your software has to be quick to learn (test cases are test examples of use cases that help them understand the system).
If they are all using the current fad, then you have a pool of people to hire from. Ideally, you should have an age spread of talent in your times, the older ones don’t want to move and the young bright thinks are looking at all their next job (before they have a family and have to settle down).
Unit Test and TDD save you time and money in the long term (12 tips) – I learnt this back at IBM in the Manufacturing process where we introduced early life involvement from engineering, we now know this as a process feedback look and this is why you take a Technical Architect and Lead Dev Engineer to client meetings to foresee any problems and to sell what is possible.
Whenever you go for a job interview ALWAYS ask to see where they are working, to see what the typical workstation environment looks like, are they ‘Putting their Money where their Mouth is?’ because it is quite possible they are All Talk – if there are any excuses why they don’t, then walk; discover if they do have a high turnover in staff, that they view you only as cattle or battery hens.
Seeing that they give you the best tools for the job also implies that they are interested in Master Craftsmen/women like you, that they have a learning culture that cultivates this.
It is possible that they just want your Microsoft Certification for the freebies they get as a Microsoft Gold Partner – so ask how many of their employees have they paid to be trained to pass that exam (it costs about £5k to get trained for an MCSD). This speaks volumes about the employer. Again look at Joel’s blog.
Any tips on making managers understand the importance of using Typemock?
Test Suggest – Having (AI) software that scans through all your code base, testing all possible paths and providing tests for it does what a developer won’t or would not think to do. Some of the suggestions need improvement. You can take the suggestions as a starting point for your test suit and move them into the ‘keep net’.
These are not substitutes for code coverage, but they allow you to test hard to test stuff, that is too hard for developers to bother to test, so don’t or choose not to maintain. It’s all the same to a machine.
Support (thanks, Eva) – The support team is responsive, and they help you with your tests, even if some cases are strange or edgy.
If your software matters to you, if it is what your share value is connected to, then it’s a golden asset and you take care of it.
Do you practice TDD and if so, what are some of your favorite code katas?
When I was a lad, I was doing Karate Katas and we just practiced all moves till they were in muscle memory.
These days we have ‘how do you eat an elephant’, ‘how should you crash’, what does ‘KISS’, ‘DRY’,’YAGNI’ and ‘SOLID’ mean.
You can look at people like Peter Provost to get some ideas.
What are some of your must-have tools or libraries that you use in your daily working life?
Other than Typemock, ReSharper/dotCover, Web Essentials for Visual Studio and Red-Gate SQLToolbelt; then there is NPM etc..
If all I had was VS Community Edition, the ReSharper and Web Essentials, whereas RedGate just makes your life easier and more productive– all I bought myself, I have found Telerik Ultimate productive with world renown support and just so many sample projects for almost every support call they ever had.
I choose to make even my work life easier – others would work slowly given then hand they are dealt, at my age I see life as too short for that.
Who or what inspires you in the technical world?
Sadly there is not that much. I greatly appreciate the giants that have gone before us, I greatly appreciate people like Elon Musk and his choice to focus his fortune on SpaceX.
I make note of all the poor User Experiences (UX) that I see in other products and vow not to do that in mine – I learn from others, you can choose to learn from your life experiences and not to moan(that’s just frustration, it does not actually transform anything, it is also cancer in the team). We can choose to stand on the shoulders of giants that went before us, give them credit and create value in every aspect of our lives.
So how many Elon Musks are there in the world and are you going to be one of them?
When you need a quick recess at work to regain focus, what do you do?
To refocus, I jump onto another project, this saves me from the Code Blindness of doing the same thing every day.
Having the same person doing the same job with mindless monotony is a good way to get them to leave, staff turnover is expensive.
I do something completely different (still programming), equally with pair programming one of you is using the right-hand side of the brain whilst the other is using the left-hand side, swap over often.
Take time to do some Blue Ocean Thinking and on sunny days, I just sit back and look at the clouds, let your subconscious do some heavy lifting for a change.
As a Buddhist, I can Meditate in my lunch hour, I can walk out into the forest and refocus and feel re-energized; this happens within seconds with training you only need to ‘Recall It To Mind’ as the Buddhists will tell you 😉
What’s your horror/war story from the coding trenches?
Frankly horrified that the kids these days can’t/won’t read books to learn and expect everything to be on YouTube (however great it is).
But that is a difference, as I always had ‘Read The Flipping Manual’ said to me at IBM when I was a kid.
In those days there were manuals, there were information architects and technical writers.
We have to move with the times and have information in a place where the consumers are (e.g. YouTube).
These days few understand about Data Dictionary to Affordance – The Design of Everyday Things.
What’s the best advice you’ve ever received or what advice would you give your younger self?
I would tell my younger self to get tested for Dyslexia or ADHD far sooner than I did. I would then also advice my younger-self not to believe people who say you can’t be a programmer with Dyslexia – you are just a different and more creative programmer if you have Dyslexia!
This information helps one to choose what sector is best for you. But it is more than being told you can’t do something based on dyslexia meant that you developed strategies to deal with it, in my case a lot of cut & paste.
Moreover, for your team, it’s useful to have diversity as this brings a wider approach to problem-solving.
Dyslexia is not a big deal, it only means your learning style is different and you and your environment can adapt accordingly.
Read the job spec one more time than you just did, and ASK QUESTIONS, don’t be afraid to ask for help.
Seek out the best Mentor you can find, or become one, get a Pluralsight account and subscribe to the MSDN magazine – Self Invest because nobody else will.
My historic lesson is – if it’s not written down it does not exist (from the BS5750/iso9000 days), this is true of a spec or requirement. If you cannot be bothered to define instructions to do something (that a robot can do) don’t be surprised at what you get back.
What are some interesting links you can share with yourself?
You can find me on LinkedIn.
What is one question that we should have asked, and we didn’t and what would be the answer?
Why Choose Computing?
So if you watched Star Trek and Captain Kirk talk into communicators – someone with creative vision imagined that an engineer, bit by bit made that, starting with a phone the size of a brick to something the size of Dick Tracy watch – we now have an Apple Watch with GMS. When choosing a degree you might want to look back at the end of your life and ask what you achieved or could have done more?
I don’t see computers taking my job, but they will be excellent tools to help me make the next best iteration – they still can’t stare up at the cloud and image what if…