Tao of Software Development

Software development is torn between two extremes:

– imperative vs declarative programming

– interface vs abstraction

– syntax vs semantics (see daemon vs systemd as PID1)

user experience vs “curse of knowledge” – abstraction is the luxury of expert

– centralized vs decentralized (client/server vs peer-to-peer)

– dependency management (determinism vs idempotence)

– development vs operations

Examples:

Imperative programming – jQuery, shell scripts

Declarative programming: Angular, Ansible

Interface: API vs Frameworks (abstraction)

– Developers (software features) vs Ops (software stability)

So with these two polar opposites, the compromise is to strike a balance in the middle.

To quote Michael Crosby,

Spending all your time working on abstractions is like spending all your time managing your todo list, the real work never gets done.

Go figure.

Advertisements

Subjectivity aside, leave a reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s