I am looking forward to learning a new programming language apart from JavaScript. My reasons are mostly extending my overall programming and engineering skills, getting to think from a different perspective but also having a solid tech in my stack with a promising future in the world of software development. Oh, and it should make fun to program with!
In a prior version of this article I did a short (and not well-thought assessment) based on some resources on the web but it turned out to be uninformed and incomplete.
I'd rather like to hear from people here what language is actually joyful to work with (including tools, deployment etc.) and has at the same time a good selection of paradigms, as well as a strong community and extension / package system.
What are your thoughts?
Top comments (44)
Could you elaborate on why do you consider C# being "too closed in their scope of usage"?
Also Delphi is not a language but IDE. The language behind Delphi is Object-Pascal.
From my knowledge C# ist basically locking you to the .Net platform, right?
Regarding Delphi, lazy me to search again what this was again but I knew I associated IT with the term legacy. Sry. I think was still correct with that regarding Pascal.
Free. Cross-platform. Open source. Supported.
C#.NET
is free. There are no fees or licensing costs, including for commercial use.C#.NET
is open-source and cross-platform, with free development tools for Windows, Linux, and macOS.dotnet.microsoft.com/download
So Apps can now also Run on MacOs and webapps can also Run on Linux Servers?
Yes exactly , You can write in
C#
and run anywhere.For Mobile you can use
Xamarin
and write inC#
and Deploy your apps in Android, IOS. All in one go.This will help you ship your products faster with only one language.
dotnet.microsoft.com/apps/xamarin
It seems that xamarin itself is not provided for Linux based distrubutions, so I can only develop with C# and .net core on linux, right?
By the way if you are looking to learn to get a
Job
, Currently bothJava
andC#
will help you get Job inMNC
companies. AlsoGo
language is coming up, i heard many startups are using it for making cloud native apps.Java
andC#
has some common syntax style , so you can switch over each other easily.I feel
C#
gives developer happiness and makes developer life easy because its easily maintainable for large projects and by providing tools likeVisual Studio
andVS Code
its easy to code faster.Don't be confused of choosing the best language, Just choose one after your research and start learning, if you don't like you can switch over other easily.
Hope this helps.
If you are talking about to develop Mobile apps using Xamarin in Linux. I think Its currently not possible. But only possible on
Mac OS
andWindows
.As you are learning, I suggest learn
C#
first then start learning buildingWeb App
usingAsp.NET Core
, as of now Web Apps has moreJob
opportunities.2 Ways to build Web Apps:
youtube.com/watch?v=C5cnZ-gZy2I
Asp.Net Core Web API
and Consume it usingJS
frameworks likeAngular
orReact
Asp.Net Core Web API
- For BackendAngular
orReact
- For UIyoutube.com/watch?v=fom80TujpYQ
youtube.com/watch?v=NemyDIUcC64
Thats Just basic
CRUD
based tutorials, Advanced projects based tutorials like a Ecommerce shop etc you can search online to learn more.Basically, you can write .Net Core code on Windows (Visual Studio, VS Code, Rider), Mac (Visual Studio for Mac, VS Code, Rider) or Linux (VS Code, Rider) and it runs on Windows, Mac and Linux on x86, x64, arm32 and arm64 desktop or server (headless).
You can write console applications (.Net Core), backend APIs (.Net Core REST API), web applications (ASP.Net Core + Razor), reactive front-end applications (Blazor - plain HTML + C#, no javascript/typescript required unless you need to access advanced browser features like sensors, etc.), IoT applications (.Net Core IoT), Machine Learning applications (ML.Net), desktop applications (WinForms and WPF) or mobile applications (Xamarin). All with just .Net Core.
You can compile and pack applications as single-file multi-platform executable (with .Net Core framework embedded).
All as open-source. .Net has progressed quite a lot over the years.
Yes, you lock yourself to Microsoft but not to Azure as it can run anywhere. But the same can be said about Java, Rust or Golang.
C#
, the best upcoming news is Blazor. C# -> WebAssembly -> then run in minified Webrowser(Electron). That will give C# the ability to run anywhere. The ProofOfConcept is already done, now they are looking into how much they can minify the webbrowser. Current size is a couple of MB, but the dev-team at MS wants to shrink that to KB. =)Even the server-side Blazor over WebSockets is nuts.
I don't understand. Can you please elaborate?
Can you please be more specific what you don't understand and would like to get explained? I'd be glad to help.
I totally don't get the meaning of the sentence, since I rarely know Blazor nor it's relation to Websockets.
Did anyone say WebSockets?! =D Have you seen the draft for the upcoming replacement for WebSocket? It's called WebTransports and it will/can run through the Quic protocol instead of HTTP1/2. Which makes it blazing fast as a streaming protocol. I suspect that Microsoft will integrate it into Blazor as well. Here is the link for the draft: WebTransport
Ah, I see. Basically while Blazor is front-end framework for building reactive applications (similar to React, Vue or Angular) it has in contrast 2 modes of operation. Client side rendering (similar to other frameworks based on Javascript or Typescript) where the code runs on the client. For this, of course since it is based on C# .Net you download minified version of .Net framework at very first run which technically is running as WebAssembly and AFAIK is currently based mostly on Mono (Open source .Net compatible framework for *nix systems that existed prior to multi-platform .Net Core).
The second mode of operation is Blazor server-side rendering using WebSockets. How this works is that your browser instead of downloading whole front-end application downlaods minimal WebSockets client that connects to the server, bootstraps your app and every request you do is handled and rendered at the server over this WebSockets connection where your browser downloads only resulting HTML and displays it by replacing the appropriate DOM elements.
The latter way was introduced in .Net Core 3.1 the former (client side) was until .Net Core 5.0 experimental but is getting wider adoption now.
Both have advantages and disadvantages, e.g. server side does not expose business logic but cannot work in offline scenarios (however supports automatic reconnection to the server) and updating it is easier and faster as all the code is on the server. Client side needs to load so far several megabytes of client binary (WebAssembly .Net Framework) at first run that is cached in the browser.
Hope that helped.
Two suggestions: Python, and Elixir.
Python Is a resonable choice because:
The big downsides to Python are that packaging and dependency management are a bit complicated, though still better than something like C, and concurrency is rather difficult (it has similar issues to JavaScript in that it’s not really designed for proper concurrent execution).
Elixir is also a reasonable choice given that:
The big downside here is that the ecosystem beyond certain very specific libraries is not great, but on the flip side a lot of the stuff that you would find yourself needing to add yet another dependency for in JS just doesn’t need it in Elixir (for example, it includes Unicode normalization functions as part of the standard library).
Thank you I really appreciate this addition. Your points on Elixir are really interesting. Which of both give you the more joyful experience? You know, the flow feeling :-D
It really depends on what exactly I’m working on. I much prefer Python for small one-off stuff, or prototyping, or even automation and system management stuff (I actually use Python for this as much if not more than POSIX sh). Whenever I’m doing something where performance or concurrency really matter though, I tend much more strongly towards Elixir.
What would an "ecosystem equivalent to NPM" be like? There are like millions of packages in the Maven Repository.
You're right and I was very vague here. I personally count dev experience with Maven as too technical and overly complex compared to NPM. I will clarify that in the post.
Maven uses XML. Generally speaking, that's the extent of its complexity, at least in regular day to day usage. Besides that, maven tends to be much more reliable than npm, both with regard to how it functions and with regard to the packages that are available.
These are technical arguments and I agree with them on the technical side. Still lacks UX to me and in my post I mentioned it should also make fun.
For example: How do you search for, let's say a "currency converter" package and estimate, based on the results, if the package/library could be worth to become a dependency of your project plus then install it? I mean please prove me wrong but this was not really a joyful experience for me or maybe I just did it wrong.
You Google "Java currency converter maven" and try the handful that come up. Something to keep in mind is that although it's not hard to publish to the Maven repository, the barrier is higher than for npm. As a result, people tend to not use the Maven repository as a Pastebin, meaning that the average quality tends to be much higher.
Python has a fantastic standard library which will be very refreshing for you as a developer who first learned JavaScript.
I've saved so much time using python's core modules, where the alternative would be lots of JavaScript libraries and dependancies. Having access to simple things like Sets and Tuples out of the box can really help solve your programming problems.
Lots of other programming languages have these features too. I just think you might appreciate Python the most as it is not too far a jump from JavaScript in terms of how you create software.
The latest version of Python 3 also has some lovely quality of life feature for string formatting that will suit your existing JavaScript skills nicely.
Python is actually very high on my list of candidates. Are there also things that annoy you when using Python? What about the indentation based syntax? Is this something I could tackle with a linter (if there is something like this for python)?
Yes, there are actually some pretty good linters for Python. The two most used are flake8 (mostly focused on coding style over anything else) and pylint (which covers coding style, but also covers a bunch of other things).
The off-sides syntax though is surprisingly easy to get used to because it tends very strongly to follow logically from where you would be indenting anyway in other languages. The only tricky part is remembering that you need to explicitly mark empty code blocks with
pass
and remembering that it is usually harder to read one-liners.The big complaint for most people with Python is how the package management isn’t really designed in a way that makes handling of concurrent versions of the same thing sane. Essentially, packages default to being global unless you use a tool like venv (included in the Python 3.3 and newer standard library) to create an isolated environment, in contrast to how NPM defaults to all packages being local unless you tell it otherwise.
Most code editors will have support for Python indentation based syntax without any further configuration required. If your needs are greater then there is a rich ecosystem out there to cater for you as Python is one of the most popular programming languages in the world.
Most Python projects will follow the PEP-8 coding style. Python's seemingly restrictive syntax has a great benefit; It makes looking at other peoples code easier since everyone has to use the same whitespace rules. The PEP-8 style guide allows you to quickly understand the source code of most python projects by removing coding style as a barrier.
Link for official docs for PEP-8 standard (they are kinda dry, so I recommend a tutorial instead!) - python.org/dev/peps/pep-0008/
All good Python programming courses deliver course content in PEP-8 coding style so you will build muscle-memory for this as a matter of course. They likely note this in the course description.
Good luck in your learning!
Never tried Rust. I tried Ruby, specifically Ruby on Rails. I wasn't as excited about it as my colleagues, but I had no major issues with it.
I saw Python being used a lot in academia and data analysis, so that is one thing to consider for it.
Personally I would probably go with Ruby and focus on the system outside of Rails, but that is also because of personal preferences and goals.
Consider learning C# and .NET platform development. Once you get the fundamentals of C# and .NET you can extend your skill set into web development with C# and .NET by learning ASP.NET. Beyond that if you feel like it's a development platform you find value in you can enter into a more specific track and add Kendo UI to your stack. Kendo has bindings for JQuery, React, Vue, and Angular, which really diversify the platform.
If you're learning for a potential employment path you need to conduct some research and see how many C# .NET jobs are available in your immediate area. Or if you're willing to relocate or work remote.
My rationale to learning the C# and .NET stack is derived from two main points:
C# and .NET are the native Windows development platform and Windows isn't going anywhere any time soon. There will be demand over time.
With the introduction of .NET Core x.x you can now target Linux/Unix systems and develop cross-platform.
I've seen some people mention that learning C# and .NET is too limited in scope. I think the issue with that argument is that the scope of what you can do with C# and .NET is broad enough that the limiting effect is void.
You learnt javascript which is the prominent language for front-end.
I'd say now learn another one that is for back-end mainly.
Between Java and C#, I'd suggest C# as it has lots of cool framework and features with upcoming .NET 5.
By learning that you basically open your way to system designs, mobile development, cross-platform development as well.
Try these:
If I look at your stated goals then maybe you could learn a pure FP language like Haskell or Clojure, because it's a totally different paradigm. But they're pretty hard - maybe something like Elixir would be more gentle (very good tooling and a focus on "developer happiness"). Another one I can recommend is Rust (which also supports some FP concepts), that's a very well designed language.