On which you deploy an web app that has 30 working components written in 10 different languages that is able to do a fraction of the work a single vertically scaled server that runs 3 C written components. And has less than two 9 uptime. No one person can grasp it mentally. Is statically linked and must be updated piece by piece, unable to use the distribution repos and upstream work. Oh, and man, what man? Every one of the 30 components is "open core" with cool new invented terminology that pushes you into paying for consulting or reading spaghetti "object oriented" code. It also has stack trace for logging.
How ungrateful of little sysadmin old me not to appreciate progress.
Lots of people do microservices for the wrong reason, with the wrong model. They don't realize this model asks for a lot of initial overhead per process for visibility and early investment into figuring out how these services communicate.
For instance, a service that sets off 3-4 layers of HTTP requests is an indicator of a bad microservice architecture.
A service that uses a shared data bus (e.g. Kafka) but can survive without it however...
That doesn't mean things are regressing. People have always done the wrong things for the wrong reasons.
In truth because the world of C (I was a C and then C++ programmer 30 years ago) did not enable the production of effective applications cheaply and quickly. Yes - you can write anything, but it took months and months and months.
We've traded efficiency for productivity. We have been able to do this because of Moore's law and all its friends.
Also, C code is hellish to read and understand (#define anyone?), and logging almost never happened.
As a sysadmin you will be able to look at the organisation you work in and count up the number of sysadmins, my guess is that there are less than 50% of the number 10 years ago, maybe that's the problem?
The C & C++ of 30 years ago, where compile times took days - sure. Nowadays building a whole yocto software stack, basically a full linux distro - from GCC, to the kernel, to glibc, to X11, to Qt takes 6 to 8 hours in a good laptop. In addition, modern language features & the general shift from runtime to compile-time polymorphism, especially in C++, make the potential for errors decrease sharply, and language simplifications - standard library improvements, terser syntax, also make time to release go down. Finally, tooling has greatly improved : I barely ever need to run a build with my IDE to check for errors, because IDEs now embed clang, clang-tidy, clazy... which checks your code as soon as you type and highlight it in the editor. And asan, ubsan, handle the remaining cases which cannot be caught at compile time, leaving only logic errors to handle.
As for time to develop, besides networking, C++ wins, even for hack projects, in comparison with Python even, JS/HTML/CSS w/ framework stack being far slower and making for terrible UX. (I'm not writing about languages I do not use.) Java and C# can be fast too, but it hits the limits when you actually have to calculate things which gets real awkward real fast. The main win is... Tooling. Java tooling is best now since maven and ant are mostly gone legacy, then C++ (I'm counting Qt Creator and Glade, cmake is eh, cmake+something is ok), then finally JS tied with Python. JS fails terribly on debugging and the creaky rarely adaptable UX libs, while Python after all these years still has tooling issues. (Plus performance where it matters.)
Rust is not there yet, maybe soon. Scala is nice though fewer people can use it than new C++.
Honorable mention to specialized tools like R, Faust, Lua, Matlab and Fortran. Note they integrate well with C and C++... Try anything else and you're in for a ride. Even second most supported, C# and Java, go through a C FFI layer.
I personally think more people should read and embrace the Unix philosophy of simple and reusable but on the other hand I'm afraid that the ship is unstoppable now.
> There was (and still is) an era where complexity (and the ability to comprehend it) is a synonym of mental machismo. Simple was left as something that lesser minds/developers had to worry about whilst the 10x devs (another great proliferated myth) which everyone worth his salt should strive to be (so the myth went on), must not only conquer it but also thrive on it and create more of it. Thus you got a multitude of tooling, languages, stacks that do the same things differently, you got Godzilla OO hierarchies and architecture diagrams that look like a dozen overlapped London metro maps.
I always believed that this kind of stuff is what mediocre developers relish. Meanwhile, the 10x developer looks at all this complex cloud-scale data pipeline, and does the same job 3x faster with a few Unix tools piped together on their mid-tier laptop.
I can imagine it's a lot cheaper. But what is the compared value/quality? I reckon it's below the slow and steady approach. You are free to argument against.
In fact, when you said "two nines" -- this is like 15 minutes of downtime per day -- I immediately thought about one of my jobs (long time ago) which involved website running on Windows Server, using a mix of ASP and DLL files. It would routinely go down for tens of minutes each deployment because someone would update the DLLs in the wrong order.
There was also using PHP with Apache. As a sysadmin, remember all those times when you had to hunt all the Apache-spawned processes and kill them by hand, so you can finally apply new configuration? Or when an .so file update made an app server not start, but that darned start-stop-daemon was silently eating both exit code and error message?
It got much better in the sysadmin world -- it is now easy to do the sane things, and all that containerization means that if programmers do provide something insane, it is trivial to clean up the mess.
If you look at the period of say 1990-2010 there was an absolutely insane ROI on human capital invested into IT. Arguably this level of ROI only happens once or twice in a century. You had young guys in their basements, garages etc. inventing life-changing technology with no investment other than a PC, an Internet connection, and time. It basically all revolved around getting people a PC, a 'net connection, and a phone, and then delivering services over those things.
Everyone saw what was going on and there was an unprecedented global migration of labor into the IT industry. There was a perception that anyone could be a millionaire, and anyone could change the world, etc. and some degree of truth to it.
There's no denying that much of the low hanging fruit is now gone, and there are more people in the industry than ever before (many of whom had huge expectations based on what they had witnessed transpiring a decade or two prior). So of course you are going to have a changing industry and an expectations mismatch. The old days are over and they're not coming back.
Any new wave of innovation and disruption is at least as likely to come from a non-IT industry as it is from IT.
There are still trillions of dollars to be made in IT. Since the future is never evenly distributed, a lot of these dollars are in emerging markets, and/or in industries which are being transformed by the IT revolution's latest waves a bit late in the game.
But it is a different industry now, there are fewer opportunities for disruption and there are many many more fingers in the pie. In general the way this money is made will look a little bit more like how money's made in mature industries every year.
There's no fighting history and you're not going to be the next Steve Jobs. But the pie is so big that you can carve out whatever kind of little niche you would like, as long as you understand the rules of the game.
We have not a single project for a "tech" brand in the pipeline, we are only now learning how do tech projects for complete industry outsiders.
Not so few have some tech expertise, but they are all strangers to ways of the industry. They all have own ideas where tech goes in their business model, and I can't say that all of them are "amateurish" or not thought through, I'd say some outsiders were better at running tech projects than some de-jure "insiders"
I bet that it will be all about ability to get more tech business outside of tech industry for us.
It's not that they're not getting better, but they're in the transition period where they move from new frontier to commonplace technology taken for granted.
For example, it seems crypto might never be successful as a replacement for consumer direct spending due to bandwidth issues. However, as a backend currency for a front-facing financial institution it has untapped potential. The growth in interest from here will be gradual, but will probably elevate.
I knew someday that would happen! I made up some story to myself that comments in TFA about "#cryptowinter" and "FUD in the community" might refer to communities losing confidence in cryptography techniques after too many companies getting hacked. Out of touch, I know, to not be aware of that hash-tag. O_o
I really hate that we have another meaning of "crypto" now so that misunderstandings like this can happen often. As programmers, we know how important naming is and how costly it is to create confusing collisions. Cryptography is too important of a concept in tech for us to not have a clean word for it. smh
It has hit the plateau. Ideas with value have already been invented. You have hammers powerful than ever, but what are problems you can hit with it? That is the hard part.
Before we are finding more meaningful problems to tackle, keep inventing hammers doesn't make too much of sense, it is just waste of money.
Maybe the future of IT will be to proven its usefulness solving problems that are hard before the revolution of IT, and are still hard after that. Like cheaper/greener energy, reliable/faster transportation, more accessible healthcare and etc.