Python. It’s the only one I know :(
I’ve been trying to learn C# too but object-oriented programming just slides right off my smooth brain lol.
Been learning python for selenium and I love it. I know some C# and Javascript but I enjoy Python a lot more as a newb.
object-oriented programming just slides right off my smooth brain lol
Don’t worry, although it’s good to learn, IMO it’s still on the wrong side of overused and overrated and could stand to be applied more selectively than it tends to be.
Nothings stopping you from writing object oriented code in python too, or function oriented code in C#.
Once oop clicks it’s a revelation.
Go. It’s high level enough in terms of syntax that it’s easy to build complex apps in, and low level enough that I’m able to control pointers, manually run the garbage collector, and benefit from the runtime performance.
It’s the best of python and JS.
Hell yea. Can’t forget those compile times and that parallelism handling. I can’t think of a language that has a better dev cycle to performance ratio.
I really want to learn it, and I understand the basic syntax and patterns. What apps did you make with it to learn it? I can’t think of anything big to make.
I made quite a few. Most of the apps on my portfolio use Go on the backend.
I like R because most everything is vectorized out of the box, and you can subset multiple ways. You can do stuff like
a = c(1,2,3,4) a - 1 # 0,1,2,3 a < 3 # T,T,F,F a + a # 2,4,6,8 a[a < 3] # 1,2
Also map (“apply” functions in R) is implemented very intuitively, and R discourages you from doing anything object oriented.
Also Shiny is so cool.
After years, and many languages, I still have to say Ada. Kotlin, Rust, Julia, and Nim are my current contenders to overtake, but here’s what Ada does well enough to still be my preferred tool when appropriate:
- strictness: typically my code works the first time it successfully compiles with few or no bugs. Rust is almost on par in this respect.
- structure: a corollary of the above is that it forces me to “plan ahead” more than just “start coding” which I find fits my programming style better, and leads to better “Unix Philosophy” product designs. I haven’t found any other language that has the same effect other than maybe Haskell.
- speed: I honestly find that Ada code outperforms C/C++ code most of the time. The only times C/C++ outperform Ada is after optimizations that come at the cost of readability.
- multitasking: Ada’s first-class tasks and protected objects are the only way I’ve ever been able to write bug-free concurrent programs that are more complex than async/await and/or producer/consumer structures (and I took a dedicated elective on concurrency at university!). Kotlin is almost on par in this respect with its coroutines.
- hardware: The fact that Ada basically ships with a hard real-time OS built-in and can compile to e.g. AVR means that all my fancy libraries I’ve written or saved work just as well for a desktop game, a website backend, or an embedded microprocessor. Just look into representation clauses and interrupt pragmas to see its unique powers.
- design: The whole design of the language has lead it to be the only language where I can consistently return to a multiple year old passion project with no attempt to write maintainable code, and fully understand what its doing and modify it with little effort.
- tooling: While this is the biggest downside of Ada (see below) gprbuild is still my favourite build tool. I have no idea why strongly-typed build systems aren’t more common. Its always a joy to work in gprbuild, once you get gprbuild working of course.
- static polymorphism: Ada’s generics are some of the best I’ve found. But they have some limitations that leads us into…
There are some situation where Ada shows its age:
- static calculation: I love Nim (and Zig, etc) for the ability to run arbitrary code at compile time. It allows me to describe what would normally be an opaquely initialized data structure or code path in a clear and descriptive manner.
- terseness: Ada is verbose, that’s not such a big deal, but I find its just a tad too verbose which can lead to some slight difficulty when parsing code.
func
/proc
(Nim) vsfun
(Kotlin) vsfn
(Rust) doesn’t make much difference to me, butfunction X returns Y
/procedure X
starts to add a lot of visual noise to a file. - web compilation: The ability for both Kotlin and Nim to compile to either ASM or JS is AWESOME. If I have to write a “full stack” application, Kotlin multiplatform with ktor every day.
- operator overloading: Only the built-in operators can be overloaded in Ada. It always makes me wish I could overload arbitrary operators. A small thing, but a symptom of…
- TOOLING: Ada’s tooling is BY FAR the hardest I have ever seen to get working. It takes the “eat your own dog food” too far. The fact that even in Arch Linux you have to install a bootstrap package, then the real package shows how hard it is to get a consistent build environment. ALR is helping in this respect, but is still not quite mature in my opinion.
Here’s when I use the alternatives, and their biggest weaknesses:
- Kotlin: anything where I want both one or more JS artifacts and one or more JVM/native artifacts. Weaknesses: performance, static analysis, on the fence about tooling (gradle is cool, but sometimes seems too over-engineered), Biggest weakness: IDE dependency, writing Kotlin outside of IntelliJ is a pain, which is somewhat fair given who maintains it!
- Rust: so close to beating Ada, if not for two things: ugly code - so many operators and glyphs that pollute the reading experience, maybe I’ll get used to it eventually, but for now I can’t scan Rust code, nor pick up and revisit it nearly as easily as Ada; language scale - I find Rust suffers from the C++ design attitude of “we can add this as a language feature” it takes too much mental effort to hold the entire design of the language in your head, which you sort-of have to do to develop software. Java and C are IMHO the undisputed kings in this respect. After reading through the specifications of both languages, neither will ever have any surprises in store for you. There’s no magic under the hood or special case. All the cool features are done by libraries and rely on the same simple syntax. Every time I learn a new cool thing Rust can do, its at the expense of another edge case in the compiler that modifies my conceptual model of the code.
- Julia: multiple dispatch and mathematics plus clean module design and easy unicode incorporation leads to clean code for math-y/science-y code.
- Nim: templates and macros are excellent, concept system gives access to Rust-style traits without all of the additional “ugliness” of Rust, excellent performance, tiny executables. I just find that the syntax can get clunky. The UFCS easily cleans up a lot of the mess that Rust creates with its added features, since it keeps the parsing the same even when using some fancy language feature.
Thank you for attending my TED talk :P. Any questions?
That’s a great opinion piece you’ve written there. You could with a little editing and restructuring turn it into an article.
I learned Ada in the early 90s before being plunged into a world of C/C++. I haven’t heard much about it since, but I’m glad to hear it’s alive and kicking. I’ll have to have another look, see if I recognize any of it!
I’ve never used Ada (I’ve heard great things, though), and I’ve only used Rust and Kotlin a little bit, but I can at least vouch that Julia and Nim are both supremely lovely languages.
Perl. Its installed everywhere I need to run it and stuff I wrote over 20 years ago is still doing exactly what it should.
deleted by creator
That’s the joke, but it’s really not true.
You can write unintelligable code in most languages.
Perl’s syntax is fine, and you can write beautiful code with it - but it will also let you write fugly code that works.
I think those who say this seriously just don’t understand Perl, or even programming generally. (Whilst I like Perl, I’m also proficient in C, Java, JS, Python, PHP, Bash and probably a few more, so I’m not just promoting the only thing I know.)
deleted by creator
deleted by creator
That’s a poor developer problem, not a perl problem.
LOL that’s so true.
I really had to scroll this far to find perl. I like perl too. Underrated.
Python
It’s real easy to just launch it and get a script going, no need to wait for and ide or a compiler, there’s alot of nice modules, and it’s really API friendly
I’ve spent more time in the blender python API than I’d like to admit
It’s a tie between Julia and Nim for me. Both have a high-level, readable syntax while also being natively very very fast.
Julia is great for exploratory numerical/scientific computing, e.g., AI, simulations, etc. It especially has amazing math syntax and unicode character support, making for really elegant math code.
Nim is a systems programming language, and I’ve been starting using it for embedded systems lately. I think it could be really good for running machine learning on embedded devices, as C/C++ are kinda miserable for that, but MicroPython is way too slow and not well suited for production embedded systems imo. Plus it compiles to C and C++, so you can compile it and run it on any device for which you have a working C or C++ toolchain.
Python for its versatility.
Rust for its strictness and speed.
Try Julia, it has both
By versatility, I’m also including the ecosystem. Julia doesn’t seem to be anywhere near python on that.
However, I’ve heard good things, it’s on my to-do list.
Bash for quick scripts, Ruby for some smaller scripts, Golang has been a favourite as of late due to integration into the ecosystem with k8s,p8s, envoy…
Kotlin. I like how versatile its features can be and how much more it adds compared to Java. I also think it’s cool how Kotlin can be used to write native apps and web apps too.
I would like to learn Rust. I heard nothing but good things about it. I however don’t have the need or enough motivation to do so.
Every time I go back to Java I feel sad.
I like C….
It’s difficult to pick only one, but I’d have to say Ruby. The syntax is wonderful to work with, I can often implement the same logic in fewer lines of Ruby than other scripting languages I find, and it has constructs that make for elegant code like metaprogramming. It’s certainly not the fastest language out there and those same concepts like metaprogramming can be abused, but ultimately I find it to be an excellently designed language that’s a lot of fun to work with.
Oh my favorite is Crystal. It’s a statically compiled dialect of ruby.
It supports:
- Most of the ruby goodness: custom DSLs, patching classes/mixins (monkey patching instances is not supported)
- Compile time type checking (but it also uses duck typing)
- Coroutines / fibers that work across multiple threads (multi-thread support is still experimental, but from my experience works well)
- Possible to create small self-contained binaries (like go-Lang apps).
As much as I love the expressiveness of crystal, there are a few cons:
- It’s slow to compile. Due to the dynamic nature of the language, the compiler needs to parse a lot of files (think C/C++) before it creates a binary.
- The number of libraries is very immature at the moment. Crystal is a young language and is missing support for things like aws.
- The library management mechism (called “shards” akin to ruby gems) is not great (in my opinion). There are helpful tools to create the scaffolding, but if you’re pretty much stuck with the defined structure. For example you cannot have a single git repo that provides a library and an application that uses it.
Other than that, the type checking but with ruby-like syntax is awesome!
edit: fixed formatting
I’ve never been happier and more productive than when I was working in Perl. It’s a language that, at its apex, had a community of incredibly smart and creative people evolving it and its ecosystem. It’s a practical, powerful, multi-paradigm language that let me get work done with a minimum of fuss.
Perl was a language that felt like an extension of my thoughts, like it was working with me and for me. Most other languages feel like I am working for the compiler rather than the other way around. Or at the very least, spending unnecessary effort satisfying some language designer’s personal pet peeve, which constantly takes me out of the flow of the job I’m trying to do.
Perl was always fun
I still use Perl for everything I do. Using anything else just feels too much of a struggle trying to get it to do what I’m telling it to do.
But maybe that’s the 25+ years of using it talking.