It seems like there are about 22 27 46 219 320 493 1840 active subscribers here. I have a few questions for you all.
- Which programming languages do you regularly use?
- Which are your favorite to work with and why?
- Which do you have interest in trying and why?
It’s not really a coding language but I use SQL a lot for work. Occasionally Python and R. As you can probably imagine with this list, I’m a data scientist.
My favorite to work with is actually autohotkey, which I use to automate stuff, because it can be a fun little challenge to figure out how to automate based on the system it’s running on and what I’m trying to do.
Funny how you said SQL Python and R, my mind immediately said data analysis.
I’m not sure what autohotkey is or does. Is it Windows only?
I could have sworn at one point it was cross platform but it’s seemingly only Windows now
The Mandela Effect strikes again!
AHK is a powerful scripting runtime for Windows, yeah. I use it to create custom media hotkeys when using a keyboard that doesn’t have actual media keys built in. But that probably the smallest tip-of-the-iceberg of what it can do.
I had to convince IT to let me keep it installed because it CAN be used by bad actors with how powerful it is. But it’s not too different from what any program on Windows could do; just makes a lot of basic things VERY easy.
Favorite: Ruby, because everything makes sense. Once you get that “everything is an object”, the rest just falls naturally into place. No other language has been so intuitive from that point.
Regularly use: JavaScript. I hate it because absolutely nothing makes sense. I don’t even understand enough to explain more than that, yet somehow I’m able to copy/paste things that do work and tweak them enough until they do what I want. At least some of the time.
- Prehistoric C++: Core language for my main project at work. Unfortunately we’re stuck with C++98, but it’s still a massive improvement on C.
- C: For some of the older parts of the aforementioned project
- Python: For test automation for the aforementioned project, also rapidly becoming the main language within the community that covers my secondary work project. I used to really not care for Python, but to the extent it displaces MATLAB I’m 100% in favor of it. I’ve also grown to really like it in the test automation role. The only thing I could wish for is that it had a mode that required type hints across the board.
- Modern C++: Used for my other work project. While I do think that C++11 is a huge step up from C++98, I think the later standards have added a lot of cruft and very little value. Given the choice I would definitely take modern C++ over C++98, but I’d really rather be writing something like Rust
- Java: This was a mistake I made years ago when I started a project as a very junior developer. Unfortunately I work in a research context where even as the junior developer I was still the most experienced developer on the team when it came to some things. We needed a REST API for this project and doing it in C++ didn’t seem feasible at the time (no idea if it’s better now). Some other teams in my org where using Spring so I jumped on that bandwagon. In hindsight, I wish I had written the API in Python since we’re slowly moving a lot of our C++ code into Python on that project now.
- Shell: For automation that’s just a little too easy to bother with Python
- Rust: Only used on hobby projects for now, but it scratches the same itch as C++ a thousand times better. The language itself is wonderful once you get used to the borrow checker and
cargo
is an incredibly valuable part of the ecosystem as well.
At work, I use both Python and C++. At home I also try to use Rust where I can; but mostly C++, Python, and C# (largely for game engines)
I teach a class taught in OCaml. Despite that, I don’t really like OCaml. It’s good for education but IMO not that great for actually using it. My brother works at Jane Street and even he agrees… Like, it’s fine, but not great.
Beyond that I make regular use of Haskell and Python for my graduate research and personal projects. I recently took a course in Java, but unless I don’t have a choice, I’d rather use Kotlin. I’m also involved in the hardware simulator Turing Complete, so a lot of my side projects lately have been ETCa assembly programs.
I want to learn Rust and Scala, probably in that order.
edit: I also quite like Scheme and I used it for advent of code last year. Unfortunately I don’t get opportunities to use it much, but if I ever get to teach a compilers course, I want to try the “reverse nanopass” approach that is currently used, I believe, at Brown University.
I don’t really like OCaml. It’s good for education but IMO not that great for actually using it. My brother works at Jane Street and even he agrees… Like, it’s fine, but not great.
I don’t get to converse with a lot of OCaml users. What makes it “not great”? Is it the tooling?
What is your graduate work on?
The tooling is actually OK, provided you work on Linux. If you work on windows, the tooling is basically telling you to go get Linux.
It doesn’t capture a lot of what many functional programmers consider the essence of FP: the language, and the people who use it, actively encourage mutable state in programs, and the type system is not powerful enough to capture useful abstractions like functors (generalized containers) or monads (generalized patterns of computation).
There are also some specific language design decisions that I don’t like. For example, this code typechecks:
let id : 'a -> 'b = fun x -> x;;
The
'a -> 'b
is a type annotation that says “you give me anything of type'a
(a type variable), and I’ll give you back something of type'b
.” That’s complete bogus - that’s not possible. It typechecks because OCaml goes “OK, this is fine as long as'a
and'b
are the same variable,” and then for the rest of the typechecking process, that’s what happens.id
actually gets assigned the type'a -> 'a
. In the best case, this is confusing and occasionally useful to do what other languages do with “type holes.” In the worst case, it’s actively wrong. Using different type variables in a type can provide static guarantees that some things cannot mix, and with OCaml that is simply not possible for a declaration like this one. You can do it, but with a lot more boilerplate. Compare that to Haskell, where the right behavior is the default, and you can obtain a type hole just by using a variable name that starts with_
.My graduate work is currently on type error provenance. You know some piece of code has a type error, but where is the actual problem? This is a hard problem that compilers are notoriously bad at answering.
Regularly use: Common Lisp (SBCL mainly) and Crystal.
Favorite to work with: same as above. They seem to match how I think well, so it’s easy to solve problems in them. Their speed is also a nice bonus, as is Common Lisp’s debugging and image-based development. I also really like how Crystal feels like a dynamic language (it’s very reminiscent of Ruby), yet is still statically typed and compiled.
Interest in trying: m68k assembly for some ungodly reason lol
You’re in the lead for the most unexpected reply. I didn’t know that Crystal had any industry use. I didn’t know mIuch about it though. I simply knew it existed.
I prefer to keep assembly behind the compilers it might as well be flipping individual bits to me.
Ooh, never heard of Crystal, looks awesome.
Mainly JavaScript, typescript, html, and scss. Occasionally bash and groovy. My favorite to work with is typescript. It’s a superset of JavaScript so naturally JavaScript is a very close second. I am interested in ruby and rust. Just because those are the two languages that I have been enamored with in the past so they are the ones that I have spent more free time than any other learning about them and using them for side projects.
give Zig a try
Thanks for the suggestion!
I love Ruby, I wish it were more popular. I’m starting a Ruby + Sintatra project. Your post is making me want to try adding typescript in there.
Wow, I forgot about groovy! How is it to work with?
Eh it’s not bad to work with. We use it for our Jenkins pipelines.
Professionally, I mostly use Kotlin, Typescript, and Java.
For fun, I’ve recently been using BQN, which is quite nice compared to J, which I had been previously using. I also use Elm, Rust, Python and a smattering of others.
The APL family of languages aren’t the most popular, but there seems to be cult like followings of each variation.
Yeah, I think they’re just the more vocal subset of users. The same thing happens in functional languages. (Especially Lisp.)
Array languages in general are fun to use because you can express a great deal in very little space. Of course, you have to think more about how to encode something, or even when reading. I feel like those are good muscles to exercise for when you’re reading more densely written code in any language.
I use python mainly because thats what i learned programming with. I like the bracketless design, no need to track down unclosed bracks/parenthesis plus its versatile and can do most anything.
Other the python the other one i mainly use is bash. I know JS and C but don’t really use them much.
I want to learn more C just because Im interested in diving deeper into how memory is managed but just havent found a suitable project to start using it for.
Ive been learning a lot of web design and want to get back into JS because i wanna start doing frontend, since i mostly know backend.
That being said i’m also interested in php because i think it’s cool that i could run a script directly on the backend without an api
For work: PHP, Ruby, JavaScript (Svelte, Vue), CSS (debatable on if it’s a prog lang) For fun: Swift.
How do you like Svelte?
Swift has a lot of enthusiastic users. What are it’s strengths?
Svelte is so nice
Indeed it is
JavaScript/TypeScript (React, Angular), Python, PHP, Go, and Java (Spring) are all languages I’ve had to use for work in some form or another over the last year (not counting bash scripts and the like).
I like Go and Python the most. Used to like Java but it feels like overkill for the projects I support which are all smaller in scope. I would like to learn Rust or brush back up on my C at some point, it’s been awhile since I’ve used it.
I regularly use Python, C++, and Java. My favorite are Rust, C, and assembly I want to try Haskell because it looks like pythoned rust. Yes I know Haskell is OG complex typing system, but I learned Rust and Python first.
If you don’t need manual memory management, Haskell seems like a strong option for wrangle complexity.
Python and C# for the most part. I’m also putting serious effort towards learning Rust, but I likely won’t be able to use it at work. It’s a good learning experience, and I can tell that my code after learning basic Rust in C# and Python is better than before.
What’s better with your code? What did using Rust reach you?
The “correctness” of my code would probably the greatest single difference I’ve noticed in my own habits.
For example, I’ve become very strict with myself about using type hints and relying on appeasing type checkers and such. The way I structure my projects has changed, where I separate functionality from data to a larger degree, mimicking
struct
andimpl
where it makes sense to do so. I’ve pretty much stopped usingdict
, and rely on dataclasses instead when writing Python. I’ve given up on forcing everything to be OOP (even C#), which has made my code easier to read and maintain. There are probably other things as well, though I can’t list them at the top of my head.Some of it is probably just good practice, a result of having matured after being exposed to new languages. Some of it probably wouldn’t be considered pythonic or idiomatic, but I’m not sure I care anymore. My code is more reliable (and often faster), and that’s what matter in the end.
No Swift? I use it exclusively for my app development, but I also teach HS computer science. We use Java, JavaScript, and Python across my different classes.
I’d really like to learn Rust, but haven’t had a compelling project to get me started.
Typescript primarily.