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.
Ruby is probably just as closed as any other language in its actual use scope - from what I've seen, it's for rails, and other usages are a little niche. Glad to be corrected on that, but if C# is 'closed scope' so is Ruby.
Python is very flexible and relatively simple to get started with. I don't know as any other non-javascript languages really do packages in the same way as npm, and that might be a good thing, you'd learn a lot from finding out the pros/cons of the different ways of managing packages.
It depends what your goals are but I think most developers would benefit from having experience with either C# or Java. They're massively popular and are used all over the place. You'd also learn something about OOP in the process.
You should probably consider a functional language if you want to take your abilities further. You don't have to use the concepts you'll learn, but it's very beneficial to gain new perspectives.
Thanks a lot. I think I have to reconsider and review again. I will Update that Post soon.
Give Go a try, especially if you are dealing with backend, api or command line stuff.
I have worked with many languages and tried a few more. But the simplicity of the language and the amount of things you can do with just Go itself is amazing. You barely need much else. But the community is great as well.
The support in VSCode is great.
The cloud runs on Go (k8s, docker).
...
JoyFul programming language?
well, every programming language is joyful as soon as you start getting it. i started my career with PHP and HTML/CSS around 8-9 years ago. designing tables, image rendering thru HTML was interesting but when i started first day of PHP, i was almost prepared to leave this field because it was completely new to me. now i enjoy almost all programming language including Go, Python, Rust, Ruby and Frontends.
thing is, making thing joyful is not others job, its yours. you start thinking theres a ghost inside the house, you will find the Ghost.
I'm learning Rust right now.
I think, it hits a sweetspot of good DX (nice type-system, docs, community), good performance, and not being bound to one company.
I would highly recommend Python because it is a really nice language and ecosystem. I learned Python as an engineer who became a Data Scientist for a start-up for about 3 years. I learned JavaScript after Python and it took more effort to learn JavaScript.
There are analytics workloads that can be done in Python to produce data visualizations that are very powerful. It's large growth in recent years puts it in the top 3 languages and probably the #1 scientific computing language. It's the default language in most machine learning (ML) applications now.
JavaScript is now my favorite because it is so core to the web & creating visual anything in a browser, but I will use Python again soon on data analytics workloads that will come from my Meteor app data in MongoDB.
As a Data Scientist, I tried out many many environments for the most productive analytics platform, and I did end up with a favorite called Databricks.
There is a free community edition that you can try/use here: databricks.com/product/faq/communi...
This environment is sufficient to learn most of what you need with Python, although you'd for sure use your local machine too. The Jupyter notebooks are a very popular open-source local alternative to Databricks.
Databricks was built by the creator of Apache Spark, and there are also Python APIs to access all the of the distributed computing resources made available in Spark. This environment makes it really easy to eventually learn Spark & Scala too.
amplab.cs.berkeley.edu/software/ (check out the Amp Lab stack)
Here is how simple it is to connect MongoDB to Databricks and run some ML analysis on the data. This example is in Scala, Scala is a lot like JavaScript in my opinion, so it's also super easy to pick up.
docs.databricks.com/_static/notebo...
Here is a simple Python notebook in Databricks using the Plotly library which I also really like a lot.
Link to Python Notebook
Anyway I hope you enjoy learning any new languages you pick.