Live data from Hacker News

Trying new programming languages helped me grow as a software engineer

cichocinski.dev

141–150 of 192 posts

Re: Trying new programming languages helped me grow as a software engineer

#141

Probably the best is learning null-safe types and why it is important for basic hygiene. When you don't learn elementary type-safety, you create languages like Java and Go which are plagued with NullPointerException's and nil panics. So please, learn an ML (and a Lisp).

I agree that learning ML style languages has benefits, when I discovered the concept of "Option" the ideas behind pattern matching and functional programming made a lot more sense, especially when it comes to writing systems software. But for some reason your comment reminds me of James Mickens quote from "USENIX: The Night Watch" article[1] "You can’t just place a LISP book on top of an x86 chip and hope that the hardware learns about lambda calculus by osmosis"

[1]: https://www.usenix.org/system/files/1311_05-08_mickens.pdf

Re: Trying new programming languages helped me grow as a software engineer

#142
post #102
post #31

Earlier quoted context omitted.

Concepts can often be simulated in many languages, but only clumsily, and the lack of ergonomic affordances in syntax, control flow and type systems can lead one to believe that a different paradigm doesn't work very well - it can be hard to see the wood for the trees. It's hard to write a declarative querying library in C. SQL is not an ideal language, but as a way of expressing intent rather than a physical query p…

It's interesting you bring up REPLs. I never in 20 years working have ever worked with one. I switched jobs and a few people are coco in love with them. This probably more than anything else comes down the programmer style. I had to use Jupiter notebook to help my wife learn programming Python and it was horrific. I could never imagine that real work was done in this way, but I know many good programmers that swear b…

I agree with your sentiment about REPL's, but there are two use cases where they're very useful.

1. When you need to explore behavior.

For example, C# has slicing syntax now. MyString[..15]. What happens when the string is only 8 characters long? Lets hit the REPL and find out.

2. Poking at systems using the same code as the rest of the codebase. For example, RoR. Being able to load up the RoR framework and poke at the ActiveRecord objects can be hugely helpful for tracking down an issue.

Re: Trying new programming languages helped me grow as a software engineer

#143

I think the period where I grew the most as a dev was an interlude when I knew I was changing jobs, including moving countries. From having built trading systems in c++, I ended up building, over about a year or so: - A django (python / js) website. It integrated with both Android (java) and iOS (objective-C) apps that could read QR codes and ask the server stuff. It also made me interact with the app stores for the…

How do you get all these different jobs? I’d just hear: you don’t have enough experience in framework/language X.

I'm assuming they are working for startups, typically startups do not require the same level of deep domain expertise as big firms.

Re: Trying new programming languages helped me grow as a software engineer

#144
post #126

Learning different programming languages definitely helped expose me to new ideas, but I think it's a relatively shallow way to grow. There's only a few that I think are really worth learning for the sake of personal growth: - both C and C++ - Some form of lisp. I could see julia taking this spot. - Haskell - SQL There are obviously more that are worth learning for industrial use. Learning the above will give a solid…

What would you say the value is in learning some sort of lisp? I see the value in all the others, but lisp dialects tend to be pretty vanilla aside from their syntax. I can't think of anything you'd learn from lisp that you wouldn't from Haskell.

I’d imagine idiomatic use of macros.

Re: Trying new programming languages helped me grow as a software engineer

#145
post #107

Earlier quoted context omitted.

C has a virtual machine? Do tell more.

It appears to also be called the "abstract machine"[1]. C semantics do not work "directly on the hardware" but instead on an abstract machine that is then converted to the actual hardware. It most often comes up when talking about undefined behavior and pointer behavior. Some assorted reading, mostly in the context of Rust and C: https://blog.regehr.org/archives/213 https://raphlinus.github.io/programming/rust/2018/0…

I don't think it is fair to conflate the "abstract machine" of C with the virtual machine. There is no software virtualization at work when running C code, it is compiled directly to assembly.

Re: Trying new programming languages helped me grow as a software engineer

#146
post #126

Learning different programming languages definitely helped expose me to new ideas, but I think it's a relatively shallow way to grow. There's only a few that I think are really worth learning for the sake of personal growth: - both C and C++ - Some form of lisp. I could see julia taking this spot. - Haskell - SQL There are obviously more that are worth learning for industrial use. Learning the above will give a solid…

What would you say the value is in learning some sort of lisp? I see the value in all the others, but lisp dialects tend to be pretty vanilla aside from their syntax. I can't think of anything you'd learn from lisp that you wouldn't from Haskell.

I think the big value is in learning to work with the AST itself, internalizing structure and representation. And how else are you supposed to enjoy SICP?

Re: Trying new programming languages helped me grow as a software engineer

#147
post #126

Learning different programming languages definitely helped expose me to new ideas, but I think it's a relatively shallow way to grow. There's only a few that I think are really worth learning for the sake of personal growth: - both C and C++ - Some form of lisp. I could see julia taking this spot. - Haskell - SQL There are obviously more that are worth learning for industrial use. Learning the above will give a solid…

I think it is impossible to make a list of programming languages that are worth learning. Just as a comparison, would you also make such a list for normal languages? English, Arabic and Chinese? Choosing a language to learn depends on, among many more aspects: * What style do you prefer. Return codes vs exceptions, small lambdas vs elaborate functions... * What paradigms you find useful (procedural, functional) * how…

> I think it is impossible to make a list of programming languages that are worth learning

"Worth learning" is a subjective phrase, so it'll naturally be different for everyone. My list above was to give a list of languages that would cover as much of the spectrum as possible.

> would you also make such a list for normal languages? English, Arabic and Chinese?

No, for starters because I'm terrible with spoken languages and rather ignorant. But to make it a better comparison, I would say "learn one romance language" (or maybe just latin), or "learn one language written right-to-left".

If you were taking a painting class, it would be reasonable for the teacher to select some techniques to teach over others, or to showcase some select master painters to try and cover as much ground as possible in the course.

The idea being that you have a finite amount of time. Do you want to spend it getting a wealth of very similar experiences, or a broad appreciation.

Using your python vs ruby example: I think the more you learn, the smaller the differences between python and ruby are. There may be a profound difference on the experience of using either based on the users preferences and choices the languages made. But from a conceptual point of view, they're very close to each other.

Re: Trying new programming languages helped me grow as a software engineer

#149

Earlier quoted context omitted.

The reason why I’m not adopting C# is because I’m never going to be a windows user.

It works on Linux just fine

Problem is the mono C# compiler is several years behind Roslyn in terms of features. It's pretty much a non-starter if you don't have nullable types in 2022.

Re: Trying new programming languages helped me grow as a software engineer

#150

Earlier quoted context omitted.

I think it is impossible to make a list of programming languages that are worth learning. Just as a comparison, would you also make such a list for normal languages? English, Arabic and Chinese? Choosing a language to learn depends on, among many more aspects: * What style do you prefer. Return codes vs exceptions, small lambdas vs elaborate functions... * What paradigms you find useful (procedural, functional) * how…

But I think the point should be to get at least a taste of either end of every one of those continuums, so that you get a broad overview of what kinds of problems are well suited to different sets of tradeoffs. For another silly example, see the difference between rust’s collect and using generators in Python. Same end result with very different semantics. Without this, there’s a risk that the “learning” is just tunn…

I understand what you mean and I agree for the most part. Still, there are multiple degrees of freedom for choosing languages, any list is just a proposal.
Post reply on HN