You can’t program the world to suit you

Last year, I was drafting more notes regarding the Free Software for SMB that I talked about before. While doing so I recognized that one of the biggest takeaway for myself is that successfully making a software project thrive takes a lot more than just good programmers, developers, designers. If you have customers you need people who know how to make a business work, you need people who can market your product, and you need people to remind you what the customers actually want as well as what they need.

It’s not an entirely new lesson — I wrote (in Italian) about helping Free Software without being a programmer fifteen years ago. I also wrote about the importance of teamwork two years ago. And I have spent a good chunk of my opensource and professional careers knee-deep in documentation matters.

I actually want to go back to the tweet that spawned the teamwork post:

Most things don’t work the way I think they work. That’s why I’m a programmer, so I can make them work the way I think they should work.

This is not meant to single out the author of the quoted phrase, but just to take it as an example of a feeling I get from many talks, and discussions, and in general just people out there. The idea that you can tech your way out of a problem. That by being a programmer you can change the way most things work.

And that’s not true, because the world is not running on servers, unless you found the Repository and I don’t know that. Indeed wielding “the power of programming”, thinking of changing the world just with that, sounds to me like a recipe for either failure or disaster.

I heard all kind of possible “solutions” to this — from insisting on teaching ethics in Software Engineering courses (with reasonable doubts about it), to regulating the heck out of any action businesses can take. I think the closest I have seen to something I would like (with all my biases of course) would be to make sure there is a mix of non-programming subjects in every university or high school that teaches programming as well. But even that has its own limitations, and I can totally say that I would probably have been frustrated by that and just ignored everything that’s not programming-related, when I was that age.

To make the example of Italy, that is under political turmoils most of the time, I could see a number of critiques of (in my opinion horrible) politicians based on where they went to school. In particular I saw some left-wing intellectuals criticising ministers (who have enough to be criticised about in deeds) based on the fact that they didn’t study in a lyceum but rather on a technical (or professional) school. Well, turns out I studied at a tech school, and I studied basic economics and (very basic) civic education for two years, and I found out the hard way that I know how VAT works much better than most of my local acquaintances who got an university degree after a lyceum: they never were introduced to the concept of VAT, the difference between types of taxes, and so on.

You could argue that there is no reason to know this particular tidbit, which is where I’m actually going to end up: there is no perfect education, the same way as there is no perfect solution. People need to learn to work with each other and they should know how to play each other’s strengths instead.

What I really would like to see proposed more often is focusing a lot more on teamwork. And not in the sense of “Here’s a topic for research, now work on it with your team”, which I had to do in high school — many of us have had the experience of being the only person working for a group assignment. What I would have loved to have would be cross-school year-long projects. Not competitions, but rather something that requires more than one type of expertise: trying to get three programming students in a room to work together, in my experience, turned to either two of them slacking off, because one of them actually enjoy doing the work, or if you’re lucky having someone with actual leadership skills telling them how to do their job… but still gives the impression that you just need programmers to do something like that.

In hindsight I would have loved instead if I had a project shared with some of my colleagues from electronics, mechanical and business tech-schools. Come up with a solution for a problem, that requires hardware and software, and a product plan that would include optimising the bill of material for small batch production and still make profits.

Sounds complicated? It is. Having had my own company, alone, for four years, made it very clear that there is a lot more than just being a programmer if you want to succeed. If you want to change the world, and in particular if you want to make the world a better place, then it takes even more energy, and a bigger group of people who can work together.

It also takes leadership. And that’s not something that I feel can be taught, and it’s the one that makes the most difference on whether the change is for good or not. I’m not good at leading people. I don’t have the right mindset most likely. I have trouble rallying people towards a common goal. I know that. I just hope that at some point, when I’ll be looking at more meaning in my work, I’ll find the right leader that can take what I can add to a good team, and let me shine through that.

I know it’s going to be repeating myself, but that is also what I mean with “there is no perfect solution”. If we decided that leadership is something that is important to score people, whether it is with school results, or with performance review at work, then we would be pretty much excluding a significant part of the population: not everyone wants to be a leader, are people who don’t want to be a leader worth less to society? Hint: this is not far from the question of how many multiples of a line worker a CEO should be worth.

And if you need a proper example of how “tech will not solve it”, just look at 2020 in general: tech is not really solving the Covid-19 world crisis. It does help, of course: videopresence, social network and chat services (including my employer’s), online “tabletop” games, shared documents infrastructure, online shopping, and so on… they all allowed people, isolating or not, to feel closer together. But it did not solve the problem. Even if we including medical sciences as “tech”, they still have not managed to find a way to deal with the crisis, because the crisis is not just medical.

People don’t ignore the lockdown requirements because they don’t have enough tech: it’s because there are other things in this world! It’s one thing to talk to my mother on the big screen of Portal, and another thing to spend a week at her house — including the fact that I can’t fix her house’s wiring while physically in another country. And then there is the big elephant in the room: the economy — tech can’t solve that problem, people working in industries that had to shut down because of the lockdown can’t just be “teched” into new roles; they can’t magically be vaccinated overnight; they need political leaders to make tough decisions around supporting them.

So no, you can’t program the world to suit your needs. Great for you if you have more tools in your toolbox – and there’s a lot more use for even basic programming literacy that has nothing to do with working as a programmer – but that doesn’t make you super-human, nor it allows you to ignore what’s going on in the world. If “being a programmer” is providing a superiority complex, I feel it’s more related to the fact that we’ve been well paid for a number of years now, and money makes the difference.

But that’s a topic for an entirely new rant, later on.

Dual seat need development

So yesterday I started fiddling with bringing up a dual seat system. It’s not really bad as it is, it’s actually quite interesting to have it working. I’ve also been suggested to try Synergy, which could solve also the need for two keyboards, bringing a similar effect than xinerama even if ran with more than one X instances, and I probably will try it out in the next weeks.

I’ve been thinking a lot about dual seat lately. With today’s CPU power, with multicore systems, and high memory, most users are going to waste CPU power. Beside the users of Vista that need a last-model system just to make the desktop appear, graphic artists, developers and gamers use their CPU power. Most home and office users have a false need for more powerful boxes: browsing the web, writing letters, downloading photos from a camera are all tasks that require very little CPU power and not so much memory.

Think for instance of a family with two kids, both of which want their own computer: why not setting up a single computer with two seats? Then both kids can do what they want with the computer (or almost) with just one more monitor, keyboard and mouse, which is a limited cost compared to a whole new computer. Now of course doing this with Windows is quite… impossible, I suppose, so the kids will have to use Linux, but that’s not the point anyway, right?

Another place where this could certainly be useful is schools. I didn’t know it, but reading the Wikipedia article on Multi-seat, this is actually being used in Paraná. This is quite an interesting fact, especially for people like me who are concerned with the waste of money in the educational system, like I wrote (in Italian) yesterday .

Education is not free, there is a cost tied to that, but education is what can improve society. Better education helps people on the long run, if it’s proper. In Italy for instance I have a lot of reserves over the working state of universities, especially after seeing the mess I actually tried to get into myself.

Computers can improve the quality of education, but they don’t come free; even when they seem to come free as they are provided by a manufacturer, they have a cost behind them. Free Software can cut the cost on software (license-wise), but it can’t cut the cost of hardware up to a certain point (you can avoid the requirement for newer systems that Vista puts on everybody), alone. Multiseat can cut this cost as you can easily have four students working with a single computer. Even in a computer science class like I had in my high school, the power of the computers could easily divided in four without any problem with the users.

Unfortunately multiseat is not yet easy to handle in modern Linux systems. While it’s certainly possible, and thanks to modern hardware like multi-head videocards and USB keyboards and mouse there is no need for strange hardware anymore, the software support for multiseat seems to me quite lacking.

The only way I could get it to work on my system was to use evdev for the keyboards. But latest release of evdev didn’t like me to tell it to use a Device, nor it liked the use of Phys. I had to take the latest GIT version, and that worked, but still required me not to change the order of connection of the keyboards and mice. Also it’s quite an incomplete support what we have now, for instance I can’t get F13 to F19 to work on evdev without using xmodmap.

Input hotplug is a pretty nice need for modern desktops, but it will be pointless or even broken for multi-seat arrangements. I’m afraid of what might happen when Xorg will relay on that.

But even without going into Xorg itself, there is need for better support for multiseat in software, by for instance understanding that even if there is usually just one instance of a software per-user, there might be more than one user on the system logged in at once, and so it makes sense to be able to share as many pages as possible by using properly .rodata and similar.

I think it would be nice if there was a more focused look into this kind of possibilities in the Free Software communities. For instance it would be nice to provide better tools to developers to even test multiseat without having to create one in true hardware. Sun: you bought InnoTek and are now taking care of VirtualBox. Give us a properly-working virtualised environment with two or more video cards, so that developers can actually test their code on multiseat, that might be good for your karma too :)

I think I’m already working toward this goal myself, even if I didn’t understand that before. My work toward reducing Copy-on-Write pages will make better use of memory in multiseat environments, and I’ll continue with it for a long time.

I’ve seen there are similar work in progress for improving support to multiple video cards. It’s also a piece of the puzzle. Making better use of disk space is also an important task. Even if the cost of disk space is falling down, employing it in the right way will reduce the cost on education, too.

Don’t ask me how I started being so concerned with education, probably it depends on the fact I see a lot of bad things happening that could be solved even just with a bit more knowledge of how processes work…