My Software Tao

October 5, 2015

The world of software has a spectrum of skills and people upon which the industry is built. This spectrum ranges on one side with programming and on the other side with software architecture. This essay briefly describes the jobs and roles that people play on that spectrum and some of the skills required for each.

Programmers are entry level. The duties and responsibilities of Programmers are writing code on individual modules based on a given set of requirements and specifications and fixing defects. They should be engaged in learning. They need to learn at least one new language each year. Programmers should learn to apply good coding practices, design patterns, and ensuring their code meets all requirements given and adhere to good coding standards. They should make their code as readable and maintainable as possible. They have a limited set of tools that they should be actively developing into a repertoire of languages necessary to gain a varied background. A lot of Programmers liken themselves to artists. This is an accurate parallel because a Programmer will have a hard time duplicating their creations with a high degree of safety. In terms of a city plan, Programmers can be likened to a drywall hanger doing construction on a single room.

Software Development is more difficult than merely implementing software requirements that Programmers are used to doing. The Software Developer uses tools from a wide array of skills to solve problems in moderately complex software systems. Websites, web applications, phone apps, and web services are examples of the kinds of things Software Developers build. Software Developers have gained competency with the artistic aspect of software development and they are aware there is a scientific aspect. They are like a stone mason who uses a hammer and chisel to craft their work. Each piece they create is its own work of art that fits into a larger system of stoneworks. In terms of a city plan, Software Developers are the people who are constructing high rise buildings.

Software Engineering is a lifelong discipline. While Software Development is still on the artistic end of the spectrum, Software Engineering is on the scientific end. Engineering principles are applied to the art in order to ensure a measure of software safety, predictability, scalability, and reuse. Software Engineers can reliably use software systems to build and integrate extremely complex systems. Software Engineers have a deep background in a vast network of languages, hardware platforms, and engineering techniques. They apply their knowledge in creative ways to design and build other complex software platforms. In terms of a city plan, Software Engineers ensure the buildings on the city blocks all have the electrical, plumbing, fire safety, and other safety codes they need for people to inhabit them. They make sure their buildings are reliable, safe, and are as efficient as possible.

Software Architecture is concerned with the big picture of extremely large and complex software systems. They create the vision for the strategic roadmap of where they want the system to be. They employ Software Engineers the way a military general uses Colonels to marshal their troops to achieve tactical and strategic mission objectives. The vision of the Software Architect is in terms of years. Their designs and plans account for every possible use and outcome of the systems they envision. They are the masters of software creation. Software Architects are the ones who are laying out the city. They design the city infrastructure, the roads, rail lines, city light systems. They make sure there are enough parks and parking in the right places, etc.

Each role has its purpose. There is no one role that is more important than the other. However, there is typically a career progression from Programmer to Architect, but that is not to say every Programmer will become an Architect. Most of us will stop at the Software Development stage and decide to become outstanding application developers. Few Developers ever gain proficiency with the fundamental engineering principles that allow them to continue their career progression. Those of us who do go on to be Engineers are the ones who build the frameworks that are used to construct the applications that the rest of the world is familiar with. Every Facebook has, at its core, a framework which an engineer has designed and constructed to allow for seemingly infinite capacity. This is my Software Tao.

iOS 8 Trick of The Day

September 11, 2014

Predictive answers. Check it:


I Upgraded To iOS 8 Today

September 10, 2014

My first impression: it’s pretty!
Somehow, the fonts are smoother. The colors seem a little more crisp. I can hardly wait for the new iPhone 6 hardware to see it for real!
Some of the cool new features are:
• double tap the home button to see a list of frequent contacts at the top of the screen
• there is a voice feature built into iMessages. Think “Voxer”.
• there is also a picture of the person you are chatting with in iMessages.
• finally, (for now…) there is an enhanced keyboard. New predictive text bar instead of the stupid bubble.

So far, I’m a huge fan!

For Those of You Who May be Wondering About Apple Pay

September 10, 2014

What makes Apple Pay revolutionary? How is it different than Google Wallet/PayPal?
Well, Apple Pay is NOTHING like google wallet. The iPhone 6 has a piece of hardware that stores your payment card info encrypted. Your bank has to be able to process Apple Pay payments because, when you pay with your phone, that security chip in the phone generates a one-time use token, sends that token via NFC to the Apple Pay enabled point of sale. The point of sale sends that token to the merchants payment gateway which sends it to your bank. Your bank decrypts the token into your payment information. From there, it is a normal payment.
So, it operates a little like public-private key encryption. Your bank holds the private key. The security chip holds the bank’s public key. ONLY the bank can decrypt the information and you have your own public key. But, more than that, your fingerprint (more biometrics coming later) is the password (the salt in encryption terms) to unlock that public key on the device.
This means, if you lose your phone, you simply deactivate the public key on the phone with find my iPhone.
Google Wallet works like paypal. It fronts the real payment info with a pseudo account which can still be stolen and used without authorization.

The iCloud Breach

September 7, 2014

Does anyone else think the timing of the iCloud breach is just a little too coincidental to the reported new security features that are built into the new iPhone devices?

A Couple of Ideas

September 7, 2014

A journal system: this seems very viable and useful.

A music server: Perhaps a bit more ambitious, a system where I can serve music (maybe more and different content later) that I can serve from a central server and stream the content to a client.

Reboot Project: Journal System

August 31, 2014

I’ve been meaning to start journaling for a while. I don’t want to keep a paper journal because, well, what if I want to put something private in my journal? I don’t want the whole world to see it. I think this might be a good project to work on. I have some good ideas for the short term as well as some ideas for future expansion.

More to come…


Get every new post delivered to your Inbox.

Join 166 other followers