The Complexities of Software Development

Software development is extremely complicated.  As a business it’s a combination of processes, skill sets, roles, resources and methodologies.  As a developer, the programming piece of the pie alone is outstanding.  If any non-programmer were provided a list of all the skills necessary to become a competent programmer I think most would turn around and look for something simpler as a career option.

I really started my life as a developer in my second job at a start-up where I was the lead developer with only 3 years of experience under my belt.  The business owner, whom was a salesperson, thought any major software undertaking could be completed in as little as a few weeks of development.  Those were the days when development occurred at a 100 mph and the software was truly tested at the hands of the client with no true software testing outside of the developer doing his own.

I started programming when PERL/CGI programming was the thing; I have learnt a lot since then. I used to read anything and everything I could get my hands on which was mostly about programming and architecture.  Thinking about processes and dealing with clients and anything that didn’t involve code was foreign to me.  There was no developer bible that I was aware of that could have helped me carve a smoother path. So that’s when I decided I wanted to write a book for those developers of today.  A reference to help them in every aspect as an individual in a company where they need to wear multiple hats.

While taking notes about what I knew and trying to cover as many aspects of software development that I could, it became quite apparent at the effort that would be involved.  One of the keystones of great software is quality assurance and is a very complex undertaking.  Some of the major steps involved are listed below:

  1. Developer Testing
  2. Unit testing
  3. Code review
  4. Integration testing
  5. QA testing
  6. Continuous testing
Each of the items above is a discipline in its own and requires a significant amount of effort to learn and implement, let alone agreeing on the libraries to use, best practices involved, conventions, etc. All based on a set of requirements having previously been provided by the business analyst in concert with the software architect and client. Of course, this is assuming you have a business analyst, or an architect.
This of course is above and beyond the very basics of choosing and learning a programming language, learning best practices for the language’s paradigm. Learning to use the compiler, interpreter, software packaging and deployment. And then learning to debug effectively, profile code and over time being able to write very optimized code without much effort. 
And even these days that’s not enough as now you’re required to develop through the whole stack of the web from HTML & Javascipt through AJAX & JSON to the Java, C#, PHP, etc. back-end via SOAP web services to another server that communicates to the database…maybe.
And then once you’ve mastered all that, being able to consume business requirements and speak technology and vice versa.
Don’t forget also that as a developer, potentially squeezed between the salesperson/client and other developers, you’re required to provide estimates, be able to think in terms of risk and mitigation, and also to be able to clearly define the true Definition of Done and live by it.

It may not be rocket science, but it’s computer science. So if someone does ask, tell them you’re a scientist.

Done. Done.

Continuous Learning through YouTube

I consume anything I can get my hands on, be it books, magazines, websites, YouTube video. Any media that has something to teach me I’ll consume it.  I’m one of those people who tries to be as efficient as possible with my time.  So while I’m working I often switch between work, and taking 5 minutes here and there to read an article online on programming, leadership, architecture, financial, etc.  Whatever keeps me engaged.

In particular, I love learning new programming languages.  About a year ago, while on the bench, I was on a big learning kick and started learning Python, read some articles on Go and had fancy for Erlang. So I scoured YouTube for all the videos I could find on all the above, in particular Python and how it pertains to data sciences. I found a lot of stuff on how Python is used and it main use.  But what I had a hard time finding was a succinct tutorial; I hate reading big articles.
Just today I was browsing through YouTube looking for some music to listen to keep me focussed and found a new author, Derek Banas, that has published a slew of videos on Python, C++ and Go, but I didn’t see anything for Erlang.  
The videos were created for intermediate developers and up, are approximately 45-60 minutes long, are fast paced, and extremely well executed.  For those who have listened to some of Khan Academy’s videos, you’ll like the tone and speed.  What I liked about the videos is that they’re easy to follow and watch while I’m working without interfering with my productivity.  
The videos don’t go into best practices or design principles, but do a very good job of explaining the basics.  As the author states he explains about 95% of the languages. Check out his page on YouTube and all the topics he covers.
I’ve pasted the video for the Go language below.

Great Opening Lines…

A few years ago when I was into the writing-a-novel-thing I ran into an online article that listed the top 100 opening lines from novels. I had a quick glimpse at it and some of the entries were pretty interesting.  All seemed to have something in common, enticing the reader to want to keep reading, and in some cases what seemed like setting the tone for what kind of adventure the reader would be getting himself into.

Then I had a thought, what if I could apply this technical to everyday life.  For example, work emails; where you write an enticing subject line and a concise first line.  Sure it doesn’t have the same sort of adventurous zeal, but it would display a degree of relevancy and importance to the email.
This is also a technique that I’ve been trying to apply to resume writing to great difficulty; it’s quite hard to make a mundane task such a making photocopies seem so eloquent and chock full of danger and adventure that a potential employer would hire me for.
But once in a while I do come up with these (what I think are) great single line or single paragraph prose that could potentially be the beginning of a story or a very short short story of its own.  I`ll craft that piece of ingenuity to be concise, fluent and hopefully self-sufficient.  For example, here`s something I came up with last night:

As the full moon peaked through the dissipating cloud cover he felt his veins starting to pulse, his heart pound against his rib cage like a boxer’s fist against his opponent’s chest, his body warming to Chernobyl levels. His hormones spiked, awakening his darker self. He felt stronger and mightier as his body changed from a weaker self to something angry, deprived, yearning to fulfill a thirst he couldn’t comprehend. He felt his every muscle become denser, heavier, tenser. The full moon, bright white, full and round was clean and clear of the clouds. The bullet shot he had sustained healed quickly after the bullet had been pushed out. The pain of the transformation subsided and he stood erect, in control and in awe of himself.  He turned on his assailant who had seen all this and with all his might lunged at him, leaping high and far, his jaw grabbing his shoulder, the sharp teeth breaking the skin and digging into the flesh.  He squeezed, bones cracked, the man screamed and body quivered for a moment as the wolf basked in his almightiness.  He clamped down and crushed the shoulder, more bones cracked, blood spewing everywhere. The man’s body went limp. The wolf tossed it away and howled.

Anyway, hope you enjoyed it, or not. Have nice dreams.

Categories ABC