Development and coding

Not a Linux-specific question but am curious: How many here do software development vs only OS tech & tweaking?

And, for the developers, what stacks are being used by others on Linux? I’m looking to get back into development and have been looking at options. My background is extensive MS stack (C#/.NET/SQL Server/IIS) from my career. Is anyone here doing C#/.NET or Mono on Linux?

I’ve played with Python but it just doesn’t feel like a fit for me. I like what I see in Dart/Flutter (but, yeah, Google…). Rust? Go? Maybe go back to my pre-.NET days to C++?

2 Likes

Here are the fastest stacks for all the developer on linux specific

  • PHP (web developers) (backend) :
  • Javascript / Typescript (Soydevs) (frontend)
  • C# (Cross platform) (Games / engines) (UWP (win only))
  • C++ (Software devs) (large projects)
  • Rust (low level devs) (Memory safe language large community)
  • Go (software dev) (easy and has garbage collection and nice community)
  • C (Low level devs) (hardcore developers/kernel/drivers) (no garbage collection or memory safe just try hard ig)
  • python (hackers & web/software devs) (very nice but slow)

This long list include all kind of developers on linux
you should never ever hybrid a language just pick one that suit your job
and be skilled and be good at it, that my advice

1 Like

Hey @IronRod – multi-decade developer here; I owe you one, so here goes:

@Halono has a good start; from that I would focus on one, add two language ecosystems not mentioned, as well as speak against one in particular, and shy away from another, and just skip past the top choice.

I come from an Assembler / C / C++ / *Basic / other background in the 1990s and then carried that forward to all the main trends in the newer languages

Will start with the bad and move to the great.

This is a flamebait topic usually, so I am going to expect a lot of disagreement. I am trying not to bikeshed and just return the favor here since I still pinch myself when my terminals wake up on their own without a wired button right now.


Skip PHP that ship has sailed

I have a lot of PHP code out there but pretty much cannot stand the language ( most C++ like from the list probably though … but replete with gotchas ) … this is a vestigial tail language compared to all the strengths and weaknesses of the others. There will be a lot of fights on this point but I would just say, since this is favor-for-favor, do yourself a favor and just avoid that…

Most of what is going on there is chasing down technical debt and trying to preserve OLD codebases which are rightly rewritten in other languages… and which will be now since ‘AI’ is making that easier and easier. I do not anticipate PHP being rightly around, but it will likely eek out another 20 lackluster years or so, with all our souls feeling nails on chalkboards until it’s over.

Against

go is essentially a one-way ecosystem when it comes to prepared packages/libraries, so if you add an application or library, it’s there forever unless you remember everything added and painstakingly remove it. This is a huge pain and especially since go tends toward telemetry by default, you start to have a network of spies on your drive… whether or not they are running.

Shy away from

rust is not a sure thing right now; there are awesome applications written in it ( especially Zed ) but it is not very populated compared to the other languages.

It has still not crested the “might mostly be hype” bell-curve … a lot of blood sweat and tears are going into rust staying or being wiped out, but that is not the environment for a novice/intermediate/cross-over programmer.

Not mentioned and obscure by comparison

Erlang and Elixr are radically powerful but very niche by comparison to the other languages. They mostly focus on asynchronous, concurrent, parallel, and somewhat distributed programming.

They are weird though because there is an immutability standard trying to work there, to facilitate the style of development ( a/c/p/d ) but that is a high cognitive price to pay when most people can do everything with Crystal or even Ruby and not have to go full-nerd.

Python is kinda compulsory, but not for long

All languages can be translated between each other now using ‘AI’ but Python is not secure in its position there. It has a lot of underlying drama in the ecosystem and the code is not quite in the same situation as PHP but not far off when it comes to cultures. Preserving code because it exists is different than advancing. I would not vote for Python with my blood/sweat/tears.

If I had a green field situation, I would go back to Crystal and push for that to become a more significant player…

As a fun experiment, in your standard prompts ( if you use LLMs, especially/only local hopefully ) try adding “Give all examples in <language preference>” … and magically the LLM forgets to push you into Python by peer-pressure and you see whatever example code in your language of choice. Otherwise you will be seeing a lot of Python code samples and wrongly feel the world is tending that direction.

Not mentioned but outshines most of the list

Crystal and Ruby are very, very closely related; almost identical syntax but semantics are different. One is compiled, one is interpreted. I have a lot of background in both but the one deserving attention these days would be Crystal more than Ruby because the power of “Rubyiod” languages that is compiled is just mindblowingly awesome and pretty much ends the debate of whether to consider Rust and Go … both those are dwarfed by Crystal when it comes to overall developer experience ( see: “The Joy of Ruby” :tm: )

Crystal is also not tied to one BDFL who is a bit too eccentric. There are many other high-tent-posts in Ruby but they all kinda cheat toward the same eccentricity by deference versus Crystal which is not anything like that.

What is great in the new design modalities is that is not a choice of “which language” but “which languages” so I do anticipate removing pieces of my infrastructure and re-coding them in Crystal ( see: ‘AI’ ) when performance really becomes an issue. That is a benefit of designing for language agnostic strategies, where you can have many languages in one “system” design.

Crystal ( like Ruby ) has an awesome library/package management system and really shines ( pun intended ) but it is a bit more hard-core than most people can handle… Coming from C++ though you have the seriousness probably, versus just wanting to move icons around and change colors on components.

What will go the furthest with the most tailwind is TS/JS

Compared to all the others mentioned, Typescript which is really Javascript with more strictness ( but still JS once processed ) pretty much wins hands-down on community liveliness right now, in terms of immediately usable code.

There are many alternatives for the same thing without a ton of cross-talk and drama… Real diversity rather than yet-another-this-or-that.

The package management is much better than all the others, arguably, with alternatives for the same basic functionality on that also.

Picture that like having a choice between apt and snap and flatpak ( and rpm ) on the OS level, but for code.

Mostly you will see npm and yarn which both use https://npmjs.com packages through different CLI tools, and both/all using the same package.json conventions without clobbering each other too badly.

The most impact is likely in TS/JS but the floor underneath is shifting.

If you are aesthetic as well as pragmatic in mentality, you will love TS/JS; it goes right to the edge of the current conceptions of UI and has cross-platform capabilities without fuss… but also without efficiency unless you refactor to hyper-native. But that too is usually not necessary since PWA is the new silver-bullet modality. The entire concept of what an “application” is is in transition, and most of my designs expect a single system to be really three major applications behaving as if one… and one of the applications much also be several more within a cluster.

Docker and other containerization ( but mostly Docker ) goes hand-in-hand with ‘programming’ now, and you are pretty much always talking about releasing a container, unless you are in a niche. This is a generalization but it is pretty much bearing up under scrutiny.


A lot of major languages not yet mentioned, but what matters most is the underlying concepts expressed in the various languages better or worse, depending on the purpose. This is the same as with OSs which make hardware usable and you really need to understand the hardware concepts then pick an OS for the concepts you require.

Most coders these days are losing that concept-depth aspect as ‘AI’ becomes their cognitive ability more and more directly. If possible, try to think about what you think about, then what you want to do with what you think about. A lot of the very abstract stuff is just plain lost on the current generations and is sad to see leaving, but also awesome to mop up.


As was closed on in the post above… the real question is:

What do you want to do with code?

That ought to determine >80% of what language… if not >90%. Usually. I try for more of a ~20% bias toward enjoyment of the experience, then ~70% utility and ~10% pure network-effect, judging by ecosystem momentum. That factor of having a tail-wind and ease of up-take for new ideas is key, and is an x-factor.

Especially for that reason, TS/JS is versatile enough that if you get in there, you can pivot into any direction pretty easily. It is “layin’ in the cut” within programming right now, with the most activity to watch and take cues from, or jump in and support… TS/JS is the middle of the field and sort of the Queen in chess… Can move in all directions as far as you want.

The other languages, even if not obscure, are more crufty and alien feeling, in terms of syntax/semantics, with Crystal or Ruby winning the “feel” category.

3 Likes

@Halano @migrator – Thanks for the input. In my career, I used all of those at one point or another except for Crystal/Ruby, Rust, and Go (the latter did not have a significant presence until after I retired). I note that neither of you mentioned Dart/Flutter in your replies.

During my career, using C#, I built many web services, desktop apps, mobile apps, and tools/utilities. Of course, I know that – as you’ve both pointed out – particular languages lend themselves better to particular purposes.

I was just curious if anyone here is (or knows of some who are) doing C# dev using mono or .NET core on Linux and how well that has been working for them; whether there is a community of any size doing that, or if the MS “taint” on C#/.NET has kept it from having a real presence of any size in the Linux space.

Pardon the wide-answer for a focused intention. You sound like you know the field and have a very specific outcome in mind.

Have seen Dart and Flutter but only in very limited contexts… with the same feel as .NET ( as described ) … always as an after-thought or niche, catering to a certain vendor agenda/competition with a more wide-spread convention.

Have noticed around the Remult community a lot of cross-over into .NET ( but not directly in the project ) and likely on Windows vs. Linux.

Hope you find the answer you’re looking for there!

1 Like

I was just curious if anyone here is (or knows of some who are) doing C# dev using mono or .NET core on Linux

I never known or seen .net programmer who daily drive linux tbh
but the runtime seems to work on my machine
here a simple preview :

4 Likes

That’s the extra mile right there…

@Halano you are somethin’ else :laughing:

1 Like

There’s lots of good advice here, and I’m just adding my $0.02 regarding Rust, which I’ve been studying for the last year or so. As has been said, Rust isn’t a sure bet, but I chose to learn it, and recommend looking into it, because

  1. It optimizes to fast code.
  2. It has traits (like Java’s interfaces), my favorite Rust feature.
  3. Related to 1, it allows low level tweaks (alignment, memory mapping, SIMD).
  4. The Linux community seems well represented.

That’s why I think it’s worth looking into. You might give the first few chapters of The Rust Book a go. It’s pretty heavy on storytelling, which introduces motivations for why Rust is how it is.

I don’t like Rust’s documentation, but I’ve made peace with the The Rust Reference, and when I learn something, I feel like I’ve learned something for keeps.

2 Likes

I appreciate the perspective you have @Mat … will keep that in mind.

Have you ever used Crystal and compared those points? Seems like much of that is going to be the same ( exceot not sure about traits in detail, or if there would be an equivalent )

1 Like

Crystal didn’t show up on my radar when I searched for a languages to learn in early 2023. Thanks @migrator for making me aware; I’ll give it a look. I’m invested in Rust, and I’m pretty sure it’ll stick around for reasons similar to why Debian sticks around.

2 Likes

Honestly, Zed is so significant ( and coming off a prior world-shaking win for the team ) that I am inclined to agree with you. Zed seems to be the Rails of Rust to me right now, in terms of driving a language’s growth… but in the mid-term, pending a lot of other shifts. Not really visible on the horizon yet, but I have my fingers crossed.

Crystal doesn’t have nearly the same level of exposure as Rust it seems. And Rust seems to have an edge on performance at the moment. Not really seeing a lot of change in either space on fundamentals until the implementations start to necessitate the language evolving.

Will look deeper into Rust down the line, and grateful for mind-shifting push back.

I appreciate all the input; thx. I’m going to explore doing C#/.NET on Linux – just because it seems silly to not check it out since I have used it for so many years. But I have been interested in Rust (for all the stated reasons) and will look into Rust-GTK.

By the way, I asked qwen2.5-coder:14b about this:

Is it possible to run C# .NET in a linux environment, natively, with first-class support, such as comparably to PHP or node.js?

Watch where you step!

Yes, it is possible to run C# .NET applications on Linux environments natively. The .NET ecosystem has evolved significantly to support cross-platform development, including Linux.

The .NET Core and later versions of .NET (now referred to simply as .NET) are designed to be cross-platform, allowing you to develop and run applications on Windows, macOS, and Linux without significant changes to the codebase. This is achieved through the use of the .NET Runtime which can run C# applications on various operating systems.

Key Points:

  1. Cross-Platform Support: .NET Core and .NET 5+ are cross-platform, meaning they can run natively on Linux without emulation or compatibility layers.

  2. Performance: The .NET runtime is optimized for performance across different platforms, ensuring that applications run efficiently on Linux.

  3. Rich Ecosystem: .NET offers a wide range of libraries and tools that cater to various development needs, similar to what PHP and Node.js offer in their respective ecosystems.

  4. Development Tools: Visual Studio Code, with the C# extension from Microsoft, provides excellent support for developing .NET applications on Linux.

  5. Deployment: Deploying .NET applications on Linux is straightforward, often involving simply copying the published application files to a server and running them.

Getting Started:

To get started with .NET development on Linux, you can follow these steps:

  1. Install the .NET SDK:
    You need to install the .NET SDK on your Linux machine. This will allow you to build, run, and publish your applications.

    wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
    chmod +x dotnet-install.sh
    ./dotnet-install.sh --channel LTS
    
  2. Create a New Project:
    Use the .NET CLI to create a new project.

    dotnet new console -o MyConsoleApp
    cd MyConsoleApp
    
  3. Build and Run the Application:
    Build your application and run it.

    dotnet build
    dotnet run
    

Documentation:

For more detailed information, you can refer to the official .NET documentation.

In summary, C# .NET has robust support for running natively on Linux environments, providing developers with a powerful toolset similar to what is available for PHP and Node.js.

Removed any :poop: I found on the surface, but who knows.

Seem to glow… now that the adults talked it out first :laughing:

I’d found similar info and had gone the route of installing dotnet and the related extensions for VSCode. But then I got side-tracked with a request for an update to an earlier program I wrote (in C#/.NET) for researching WA state voter registration data. I’m currently doing that work on Windows (since that environment is already set up with VS2022 and the target platform is Windows). But when that’s complete, I’m going to try porting that project from .NET Framework to .NET Core and then try moving it into the Linux space. It will be a good experiment to see how it all works.

Washington has some excellent data-sets from what I’ve seen.

Last lab was in the PNW, and continued evaluating that region after departure. ( vs. Wyoming or the Outback States ) … mostly loved the data and law, from down by the Grand Canyon… thinking about grass and trees.

Also the refinement of the population ( previously more than currently ) is obvious, especially going through and comparing the ordinances and similar.

Well hey, a little bit more Linux is better than a whole lotta Windows

Sounds like fun, enjoy @IronRod //

Hey, I am mostly involved in scientific software development and analysis, which I don’t think would be considered “proper” software engineering by many. But I definitely use my Linux box to get stuff coded up, and not really to tweak the OS itself.

As most of the field that I’m in is using Python for new packages and tools (thankfully switching over from MATLAB), this is also the language I am using most at the moment.

As another retiree I’ll weigh in here. During my career, most of my development was in C, as a code maintainer in an OS group, I had both C (OS specific) and C++ (in the Common Desktop Environment (CDE).

As for every day stuff, I’m not a very good programmer; I find Bash to be quick and easy for stuff that doesn’t loop much; Bash has terrible execution speed, but for UNIX and Linux admin scripts, it can be just right. If I want to make GUI scripts, I either add Yad to bash scripts to create graphical pop-up windows; I did this for a little clock experiment, writing digital clock programs. A friend gave me a C program clock; it was fantastic, but much more complicated than anything else. Bash and Python were easy, and since the clocks are low overhead, those were great.

Mentioning rust - yes, I recently got into rust, not writing IN the rust language, but installing the rust environment; I was able to use the rust cargo tool to get one editor, amp, and I fiddled and also got zed working on one or two distributions. WARNING: rust is fast and efficient, but it has a lot of overhead so if the system is marginal, though it will work, the system will quickly get hot when you run a rust app - this DID show up when I attempted to run zed on an older system; it worked but the system rapidly heated to 60-70 degrees Celcius so I shut down zed as fast as I could to avoid system damage or even a fire!

I am able to run zed on the system I’m using now, but even then, I typically do not run it very long; what zed adds I don’t really even need; Neovim/nvim is fine for me.

Regarding C# I’ve seen it on a few limited cases, all Windows Servers. It ran fine. I consider C#, ironically enough, to be similar to Microsoft’s answer to Java. Rather than attempt a Java-ish name to their development tool, they made theirs a bit of a cross between
C++ and Java, calling it C#. I didn’t get enough experience with it to form much of an opinion; the apps I was testing worked fine, that’s all I can say.

Without a doubt migrator has far more experience, current experience at that, than I do; I’ve WAS a systems integrator and I read a lot of code, used a lot of code, and from time to time changed code. The number of programs where I was the author were generally utilizing code that others wrote that I “repurposed” and rewrote so I’m not an expert in anything here, just have decades of system experience where I’ve come across code that I’ve used and occasionally modified.

I consider C#, ironically enough, to be similar to Microsoft’s answer to Java. Rather than attempt a Java-ish name to their development tool, they made theirs a bit of a cross between
C++ and Java, calling it C#

That is how I have always thought of it – they took C and dressed it up in Java clothing. By this point (C# 12) it is a pretty robust language and there is a lot I like about it. So, I am going to explore using it on my Linux systems. But, there is still part of me that – even though they have “open sourced” it (yeah…) – it still feels like Microsoft running the show. And, that, leaves an unpleasant taste in my mouth. :wink:

At the moment, though, I am getting enough into rust that I can say “uh-huh” in the right place during conversations. :grinning_face:

1 Like

I also support this. I was programming in Java for a few years, and then when I wanted to try .NET programming, C# was the natural language to move to, because it was so much like Java.

So from that experience, yes I wholeheartedly agree with this statement.

1 Like