by Carl James | BLOOMINGTON, IN | July 7, 2024
You've heard the old saying many times: "When the only tool you have is a hammer, every problem looks like a nail."
In software development this quote is a commonly evoked quote encouraging
I don't completely disagree with either of these, especially in professional development. That being said, I will make an argument for why I have a very narrow software development toolset that only expand upon once I determine that it is extremely necessary.
I am not a full-time professional developer. I love writing code. I do occasionally write tools for myself at work. I have also produced software for pay in my side work and hobbies. I also consume a lot of tech advice via Mastodon, YouTube, and podcasts. The best advice specifies who the audience is for. Even if it doesn't, it is usually easy to pick up on context clues.
Now, I don't ignore content produced for professionals. Not at all. I want to learn what is working, what is hot, and I am interested in what is happening in the broader software world. I won't dive into the details of learning to apply those tools, unless I have a really specific need that can't be solved with a tool that I already use.
"But, Carl, [this tool you know] is not the best for the thing you are trying to do. [This other tool] is so much faster and trendier!"
If it takes me 60 hours in my spare time to properly to learn [this other tool] and it saves me a full second in runtime for an app I run once per day, I don't see the real benefit to me.
"But it doesn't scale?"
It'll scale to 1000 users. It would be awesome if I had that many. I know full well that I won't, so why I am I going to spend 4 weeks of my free time learning this when I can spin it up in a tool I already know in one week? The answer should be obvious.
So yes, I use the tools I know well: Python, Django, Postgres, HTML, CSS, and HTMX so solve almost any dynamic problem I decide to solve with code. With these tools and often other pip installable packages, I can create applications that do what I need them to do. I use Django as a user interface for some applications that would be better served by a native graphical user interface if being distributed. Django is a web framework I know well, and if I'm the user, I have a web browser on my computer and I can run the app through a web browser. It works, and I don't have to learn another user interface.
With the exception of HTMX, the tools in my toolset are popular and have been around a long time. Python is the most popular programming language in the world. It is easy to read and write with tons of online content. It is general purpose and thus can doing anything. Django has a built-in admin so when I spin up a database model, I have instant access to a user interface to create, read, update, and delete items in the database before I write any view-based code.
HTMX is the newest tool in my toolbox. It is a JavaScript library, but is called within HTML tags, so is just a bit more very powerful functionality added to a tool I already use and know well. I used to code in raw HTML almost exclusively in the 1990s. Front-end JavaScript libraries are complicated by including code significant code on both the server and client sides. Doing almost everything server side has limitations, but so far those limitations have not been outside of what I have been trying to do. Hyper media is how the world wide web was designed, and it is pretty powerful.
I don't mind being looked down upon because I make the vast majority of the programs I write for myself or a relatively small group of people over the internet. The software I create is customized and does exactly what it is supposed to do, and does this as quickly as I need it to.
As always, I'd love to hear you're thoughts and questions, so feel free to shoot a Noot to @jovian34 on Mastodon and I will gladly respond and perhaps write a blog post on a topic you suggest.