Posted on 3rd June 2024
What interests me and what worries me about programming today?
What interests me when it comes to programming is the product of writing code and what it can make possible. I don't really enjoy discussing the nuances of programming languages and software engineering tools, but I do have several areas of interest when it comes to developing technology overall.
So what are my areas of interest when it comes to coding?
There are many aspects of the act of building software and how we go about it that I find interesting. For example, some of my interests when it comes to technology include:
- Product and UX design
- Mobile apps
- Search (information retrieval)
- Logic and Constraint Logic Programming (solving optimisation problems)
While working on and researching some of these topics, I have acquired knowledge, skills and opinions on things including programming languages and their design. Debating aspects of programming languages and frameworks can be tedious, because the discussion tends to focus on the pros and cons of applying them in a very narrow set of circumstances. However, there are some valuable insights to be gleaned from an open discussion about how we build software.
How interests lead to insight (using mobile apps as an example)
Lately, in pondering some of the problems facing the tech industry and considering how we can build better software, I've come to realise that any solutions to these problems must take into account (amongst other things) what we learn about coding as software engineers throughout our careers.
Over time, as a programmer, you tend to gain a broader understanding of designing and building technology. Of course, many of us specialise in specific subject matter, but almost everyone who codes for a living (no matter what they are working on) gains an increasing appreciation of how the 'business of software' works in general. This fuels some useful opinions we form about how we work and how we can make it better.
For example, when it comes to mobile app development, I have strong opinions on how various aspects of the status quo are problematic. I also have a few loose ideas about how we can improve the situation. These includes considering whether any of the current crop of options in terms of programming languages and tools (mobile app frameworks) are working for us. And more fundamentally whether the Google / Apple dichotomy can or should be disrupted or transformed in some way.
So in a roundabout way, what I'm saying is despite my relative apathy when it comes to discussing coding in general, I am interested in talking about it in the context of solving specific problems. In this regard, on a personal level, if I had all the time in the world I would experiment more with the ideas I have.
There's just not enough time in the day (to experiment with code)
I'm sure I'm not the only one with insight into how we might improve our work, but I am probably also one of many who don't get much opportunity to develop these thoughts further.
It's a shame that the very thing that helped me learn how to build software - experimenting by taking an idea and creating a program to make it happen - is something I now rarely get to do, ironically because I'm now a professional programmer!
I don't overly resent this dynamic. For me life is too short to regret not having enough time to play with computers. I spent a lot of my time doing that in my youth, but these days it's just not that high on my list.
But my point is that there are actually things I find interesting when it comes to programming and I do think about them a bit from time to time.
For example: Lately I've wanted to see if there are better alternatives to the dominant mobile app development technologies, experiment with lightweight and pared back languages and frameworks, even trying to see if I can still write a bit of code in C. In fact I found it is possible to run C code on Android in a fairly simple way. I'd love to try it out one day and see what possibilities it opens up.
An underestimated branch of AI that I like
Also all the talk of AI in the public domain has got me thinking about my CS degree and the options I took in Machine Learning and AI. I was particularly taken with the way logic programming created an environment where setting out a particular problem and defining a goal allows the computer to work backwards to find a way of solving a problem. This is known as a declarative approach, and I think the way it turns programming on its head is pretty neat.
When I delved deeper into logic during my degree I found a whole category of 'optimisation problems' such as scheduling and resource planning, that could be solved by defining the constraints involved. This is called 'constraint logic programming'.
While I have an appreciation of the potential elegance of declarative programming, what motivated me in exploring this further during my degree was those potential applications. As well as being applicable to large scale things like manufacturing and logistics, you could use it to code the logic behind AI 'opponents' in games and navigation systems for robots. In the right context it's a powerful programming 'paradigm'.
Some concerns about the current state of web, desktop and mobile development
I'd be lying if said now I'm in the middle of my career that I have utilised and developed these areas of interest as much as I'd like. But I can't complain about the overall trajectory of my career. Ultimately I stay interested by doing my best to build what people want. I just wish some tech companies did the same when it comes to their developer community and the users they serve.
I'm becoming particularly concerned about the problems of long-term maintenance and support of mobile apps. Secondary to this, I'm also concerned about the simultaneous decline in investment in web and desktop user experiences. I've already hinted above and talked before about the problems of app stores and having two dominant classes of devices. How this relates to programming specifically is that developing cross platform applications with longevity is pretty much impossible.
Cross platform frameworks are useful but have never been particularly stable in terms of long-term support. And learning two, rather different, native coding ecosystems is a real pain. You have the mad situation where, if you want to develop apps and you want to avoid the cross-platform framework route, you really need to have twice as many developers for anything non-trivial, particularly if you want a high quality product.
New iterations of mobile frameworks (such as .NET MAUI and Flutter) seem like reinventing the wheel. They're probably better environments to work in if you're building a new app from scratch than we've ever had in the past, but they don't solve the fundamental problem of fragmentation in app development. Also when considered from a user experience point of view the whole concept of cross-platform apps is a paradox.
It's a problem that doesn't exist if you decide to build a web app. The web is a very reasonable alternative for everything that can be done with an internet connection. Despite Javascript being reviled by many programmers (and I certainly have my concerns about bloated web frameworks and server side JS), for a majority of software needs it does the job well enough. Moreover there are currently no web overlords gate-keeping the publishing of web based software to worry about.
Issues to consider as a programmer today that might make things better for users
Most new software these days is implemented on the web first and only if absolutely necessary (due to the costs involved) iOS and Android apps developed for a 'mobile' context, such as offline use. Desktop development is an overhead that's not considered particularly worthwhile for most new software.
In my opinion from a user perspective some things have deteriorated as a result of the decisions big tech companies have made that affect how we develop software. It used to be a given that you owned software you bought, it would work for several years and it ran locally with no internet connection just fine. Even if something did stop working, or didn't run on a different machine, often there were workarounds you, the user, could implement to fix the situation.
Perhaps as programmers we have failed users by not communicating the choices and tradeoffs of software being primarily web based. We have also failed to build an environment as compelling as the web (despite its faults) for building modern software for other platforms. However, I suspect the answer has as much to do with the economic drivers of technology businesses as it does the principles of the programming profession.
The vision of the future epitomised by 'the internet of things' is another concern. A rise in the use of 'embedded technology' is an opportunity to do things differently and perhaps avoid the problems of iOS and Android development. However, wedding ever more devices to the internet and proprietary operating systems seems like a recipe for a similar situation to me, though I must admit I'm not well versed in the world of 'smart' devices and it does seem like an area of technology that still has room to continue evolving.
Thinking more deeply, it is worth considering if we have stumbled upon a situation where technology is no longer the servant, but the master, in our lives. If so, did this happen inadvertantly? Or are we all a little complicit in ending up with a situation where how we build solutions is dictated by the existing technological landscape rather than our specific needs?
That turned out a longer post than I thought...
Phew - well I think there was a lot that's been on my mind in the background when it comes to coding and it seems the threads that link my interests, what I work on and what I care about have been coming together lately. At the same time some problems related to technology that I've been thinking about for a while seem to be coming to a head.
Day to day as a tech professional, it's unlikely you get much chance to grapple with your interests and the issues you care about as often as you'd like. As I've already stated, I don't lose much sleep over that. But there are moments you stop and wonder if things could be different.
I think it's important to try not to completely lose sight of what got you into your profession in the first place. Writing this blog is one way of doing that - it offers me the cathartic opportunity to offload what I'm thinking, which is really important. It doesn't always have to be with some goal in mind. Though if I had to distill the essence of this post into one sentence it would be -
If as programmers we followed our interests a little more and solved problems we thought were actually important, perhaps the world would be a slightly better place.
That's easier said than done, but it doesn't mean it's not worth saying at all.