loading...

Illusion of differences between Operating Systems, Programming Languages and Web Frameworks

xet7 profile image Lauri Ojansivu ・1 min read

You see all those flamewars about Operating Systems, programming languages, web frameworks, and discussion about some of them are "dead" ?

Yes, I tried them all.

After maintaining Wekan many years since 2016-12, I tried updating another kanban software, made with Go and Angular.

Summary: Kanban software is all the same. Same acrobatics to update dependencies. Same kanban features. Same bugs that have already been fixed in Wekan. If both Wekan and that other kanban software used same CSS, user could not see any difference. It does not depend on programming language and web framework.

You have an illusion that there is any benefit or major difference between programming languages and web frameworks, or that those small differences matter in any way.

There is no spoon.

Do NOT participate to any of those flamewars.

So now, please go back to contributing to Open Source.

Best Regards,
xet7

(posted originally at: https://blog.wekan.team/2019/09/illusion-of-differences-between-operating-systems-programming-languages-and-web-frameworks/index.html)

Posted on by:

xet7 profile

Lauri Ojansivu

@xet7

Maintainer of Wekan, Open Source Kanban board https://wekan.github.io

Discussion

markdown guide
 

It's all about implementation.

Yes, one could theoretically implement any program identically in any Turing-complete language.

Practically speaking, though, the implementation details of different languages and their standard libraries does have an effect. For example, the default sort() function in three different languages might use three different sorting algorithms, some of which may have different implications for performance and memory handling (e.g. stable vs. unstable sorting on a linked list).

Meanwhile, some common algorithms which are very easy to implement in a procedural language (like C) are impractically difficult to implement in a pure functional language (like Haskell)...and vice versa. (And yes, algorithms have a major impact on the end result.) This isn't to the praise of one language or detriment of another, but it does demonstrate that not every tool is ideal for every job.

And yes, sometimes these differences are MASSIVE.

So, while technically the same code could be implemented identically, or reasonably nearly so, in any language, practically speaking, it seldom works out that way. The human developers have finite time, knowledge, and attention, so if a tool is ill-fitted for a particular job, the end result is going to have significant issues, if it even meets spec at all.

Every language or framework has scenarios for which it is well-suited, and scenarios for which it is ill-suited. Knowing the differences is a critical part of choosing the right tools. Pretending all languages are equal serves no one.

With that said, let me again emphasize, every tool has a job for which it is well-suited. Flame wars aren't rooted in practical discussions of language capabilities, but in imagined superiority of one's favored tools over those tools one dislikes, and that originates largely in a destructive emotional compensation pattern indicative of Imposter Syndrome.

 

How many are still staying at the point of choosing a tool, keep arguing, and do not even get started?

When there is existing software, it would take many years to change programming language and web framework. It's like, you build a house, and very often tear it down to change something that is below the house. When house is built, plan is to add more features, not tear down.

When comparing various Open Source kanban software, actual developer experience between programming languages and web frameworks is so similar. Each Kanban software has boards, lists, cards etc. User experience is very similar. Performance depends on how much data is loaded to browser. I fail to see any significant difference.

 

I think the trouble is, you're comparing your experience with a very specific project (web application-based Kanban boards) to an industry consisting of hundreds of disciplines, tens of thousands of applications of those disciplines, and millions of projects thereof.

Web development isn't directly comparable to application development, which isn't directly comparable to systems development, which isn't directly comparable to data science, to embedded systems, to machine learning, to whatever.

The majority of programmers/software developers/computer engineers over the last 50+ years were rational, intelligent people. If they created a tool or language, it was usually because they needed it, and nothing existed which did exactly what they needed. To accuse the whole lot of them of unnecessarily "reinventing the wheel" would be just as presumptive as to claim one language is inherently superior as another.

P.S. I'd say for everyone one real-world project stuck quibbling over language/framework, there are a hundred that just started building. Not every project is stalled on the Angular vs. React debate...in fact, most programmers don't care. The sane majority just goes unnoticed, because they aren't lending their voices to the clambor of the quibbling few.

Of course all those Operating Systems/programming languages/web frameworks are necessary, they have a lot of users, software etc.

 
 

That "dead" discussion also has caused phenomena, that some newbie comes to programming language chat channel, ask "is there existing this kind of software already in this programming language". And then when someone points to such Open Source project, but if it has not had very recent commits, that newbies says "but it's old". So they are searching something that "exists" but "is not old".

The correct answer to those would be "yes, that software has taken many years of development to get all features working, just go ahead and update it's dependencies, that is very tiny amount of work compared to writing all of it from scratch".

 

Yes, who has time to rewrite all those billions of lines of code that exist?

All still need continued development.

 

I am consider myself to be a prolific polyglot developer. Over the course of my career I've used at least 25 different programming languages in production (some of which have been discontinued).

There are very large differences in programming languages that do matter. Many languages may define themselves as multi-paradigm or general purpose; the fact is that every language fits into a niche of some kind. This niche is defined through any number of reasons; be it performance, implementation, community, personal bias, or availability etc.

Yes, it is kind of silly to have flame wars regarding programming languages (OSes and Frameworks) but it is also fairly silly to ignore these niches. These languages should be treated as different tools in your programming tool belt and you should learn when to use one over another.

BTW, I do tend to cringe every single time I see a "Top 10 programming language" list. Its really like comparing apples and oranges.

 

Yes, not everything is coded with those "Top 10 programming languages". There is much more coded and in use every day.

 

You are absolutely right. Just recently, I worked with clients using Elixir/Erlang, Clojure/Script, Scala, F#, Rust, Ocaml and Dart (this was in the last year). None of these languages are typically in your standard top 10 programming languages list but they all fit into their own use-case.

 

I think you are generalizing a non general topic and extrapolating with way to few cases. Of course there are cases when a reinvention of a wheel is not neccessary but also cases when they should be reinvented and even cases when the have to. There are very few "things" in general that are not a reinvention of something else and I can't think in an exception, I'm just assuming there is one.

 

Yes, I'm going here flying all the levels between 50 000 ft and tiniest details. I am searching for "the one" that allows me to choose to work at any detail level.

 

I think Rust is going there, is safe, low level and also very high level abstractions with zero cost, I'm just starting to learn moving a pet project from Django (Python) to Actix-web + Diesel (Rust) is not really much more verbose and the fact that you can do low level (sometimes I work with micro controllers) and with the same language do web backend and soon even frontend with WASM makes me happy. I have to admit I'm very lazy learning languages, the time it takes me to get from zero to somewhat productive feels wasted to me (I freelance so my CV doesn't concern me much) that was what attracted me to Python (you can do almost anything with it) and now with Rust not only filling the gaps but also taking over some makes me really happy. So far I love everything about Rust is not yet very mature but is growing fast, I try to not sound like a fanboy but is hard :|

Everyone is fanboy of what he/she has built, it's the IKEA effect.

I'm still at the very beginning of Wekan Actix version.

 

Not sure but if C++ had as many libraries into the standard library as some higher level languages probably it could fit there but sadly it requires some 3rd party libraries to achieve that

 

Yes, if you spend enough time learning all the different frameworks, languages and oses, they all start looking very much the same with only small differences in implementation etc.

It's true that the user only sees what they see and not what they don't see.... [Mind Blown] :D

Personally I find that it's newer developers who rave on about how great Framework X is, but it's usually because it's all they know. At least they are passionate!

The more responsible path to take is to test your framework or language for purpose (TFP=Tested for Purpose) and make sure you test it thoroughly.

You might just be surprised as I found out how badly the wheels came off one of the most popular language/framework combinations among young developers.

 

Yes I do love the passion. I just hope that they keep building with the wheel they know, and don't try to change to other wheel all the time, because it takes time to get something working with a wheel.

 

Changing to use new wheel is hugely expensive, it would take many years. I prefer to fix my current wheel, it's so much cheaper.

 

"Yes, I tried them all", well, why? why you didn't use your first language/framework?, you are expecting "noobs" to do what you "not noob" do now. Exploring is a natural neccessary part of a person development and the wheel sometimes has to be reivented, why kids have to learn how to write? why don't they just write books? as you quoted the Matrix, let me try "some things can't be told, has to be seen". And let me add, Angular and Go are wheels reinvented it's not C with plain HTML, CSS and JS.

Yes, exploring and reinventing is great!

I did try other programming languages and frameworks, because I'm trying to find "the one", that makes development easier, faster, and simpler. The one that is not "build a house in 4 years".

When building current Kanban software, 4 years is just at getting started. I would like to have some faster flying capabilities.

I did try all of them, to see can I easily get to same feature set as that currently Wekan has, and beyond. Every time, I did get stuck at something at the beginning. So I'm still trying to find "the one".

 

I wonder what do you think about languages and respective frameworks which cover a wide range of problems, like .NET, C# allows developing from console applications, to 3d games and webapps and recently ML.NET allows integrating machine learning, I find quite useful a single language doesnt force to use different languages and frameworks to accomplish a task

 

I'm currently listening to futureofcoding.org to find about various alternatives, what would make programming easier and safer.

My criteria is that programming language and web framework should be Open Source, so I am able to fix bugs in it.

This is because many years ago I developed large app with Access 97, it did work on WinXP, but not anymore at Win7.

 

To use some programming language, all these libraries and frameworks are very important. There needs to be all UI, database etc drivers available. That's because otherwise those libraries and drivers need to be coded by developer itself.

Some years ago I did try to code some file access code with C# and IIS but I did find from IIS docs that it was not possible, there was some file locking issues.

I did also try to code same with Go but Go server did keep crashing on Windows. Windows also locked file permissions so that I could not access all Go server related files.

On each programming language, usually I get stuck at the beginning.