title: Deployable software
date: 2018-05-03 06:39:09
slug: deployable-software
status: published
link: https://jj.isgeek.net/2018/05/deployable-software/
display_format: entry
syndication: https://twitter.com/jjdelc/status/991930144083279873


Turns out that writing code is fine and dandy, until you need to get it running in another computer.

This is of course critical for any code that is not a script. It requires you to be aware of your environment, what libraries you use, what is provided by your system and learn about your system. 

You need to learn to package your code in such a way that it can be deployed/installed in another environment.

It requires a different set of skills from your regular abstraction thinking, data structures, control loops, state, etc. Most likely it will come in handy for automation but it is necessary to learn a whole new set of rules, formats, standards that don't get you cool features (but then without it, nobody will get to see your cool features), but are required to get your code shipped somewhere else.

This skill does not necessarily intersect with the interest of coding. You can tell that packaging is an afterthought of programmers by how many languages don't really provide much tools for it until later in time it was acknowledged that it was necessary so tools had to be included.

I quite like how Rust takes care of this, forcing you to have packaged code since the very beginning. This makes it not suitable for scripts, which can be a bit of a bar to get pass for beginners. But once you're into it, you are grateful that most of the hard work is already done by the time you got your code ready. Unlike other languages (Python ugghhhhh).