Live data from Hacker News

Trying new programming languages helped me grow as a software engineer

cichocinski.dev

101–110 of 192 posts

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

#101

Earlier quoted context omitted.

>but still - concepts are more important, you don't have to learn langs in order to be familiar with concepts You kinda do. Concepts are often exclusive to languages. And often concepts can't be internalized without practice of that lang. Your own examples in your edit literally contradict what you say as you chose langs with extremely divergent concepts. C# and Erlang, Rust and C. You missed haskell and lisp.

>Your own examples in your edit literally contradict what you say as you chose langs with extremely divergent concepts. C# and Erlang, Rust and C. You missed haskell and lisp. How so? You can learn and understand concepts implemented in Rust without learning Rust

Concepts aren't just "learned" by reading about it. True learning requires internalization. Internalization requires practice. Practice requires the concepts to be applied. Application requires real world tools. Usage of tools requires one to learn about the tools.

If the only tool available is rust, then one must learn rust to truly learn the concepts related to it.

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

#102
post #31

I do believe that learning many programming languages is overrated Learn concepts, obtain foundational computer science knowledge, write complex projects not just get familiar with somebody's interpretations that they implemented as a language. Languages that I used besides my job language barely gave me anything, in most cases they made me appreciate more for sane environment (package managers, IDEs, debuggers, stro…

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 by it. I suppose that when I need something like a REPL, I tend to use my debugger instead.

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

#103

I do believe that learning many programming languages is overrated Learn concepts, obtain foundational computer science knowledge, write complex projects not just get familiar with somebody's interpretations that they implemented as a language. Languages that I used besides my job language barely gave me anything, in most cases they made me appreciate more for sane environment (package managers, IDEs, debuggers, stro…

I agree that it is way more valuable to know / being able to invent concepts, algorithms, architectures. That is what interests me most when I design software products for my clients and for my own company.

Languages for me are just tools, like screwdrivers. I use / used many and do not get hung up. And no I do not learn languages just for the fuck of it. Only if I see some positive ROI.

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

#104

Earlier quoted context omitted.

The problem being, cargocults tend to hold the power. So yes, learn new concepts, practice them and more, but don't be surprised if in practice you can barely utilize them thanks to cargocults insisting they are wrong. We see this in C#. Has a ridiculous amount of features outside default OOP and continues to get more baseline, even has great interop with several other languages. But culture changes very, very slowly…

Which features are you talking about?

Take about anything you like of minimum level C# 6. My personal gripe being poor adoption of tuples/anonymous types and records.

C# has been trending towards introducing more things from the functional paradigm in particular, but just getting away from typical OOP patterns and replacing them with something more on the spot or functional isn't amazingly well received. The main thing which seems very well adopted is LINQ, and that's primarily due to Entity Framework and Microsoft pushing LINQ-adoption hard. Most places still program in C# as if it were Java with Lombok built-in.

And that's where I'm getting at mostly. New paradigms and languages are cool, but historically it's been difficult for them to get mass adoption unless a big name is pushing for it hard. Convergence has been the name of the game for a while now, rather than divergence.

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

#105
post #85

Earlier quoted context omitted.

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

.net core is not Windows only - works on the big three (linux mac windows). That said, I get where you are coming from - .net framework is pretty much just windows, and there a large number of libraries/apps that are Windows first, other platforms second. If you do end up needing to do Windows dev, though, I'd recommend it, same as if I were doing Apple Dev I'd recommend Objective C/Swift, or recommend you brush up o…

The other big C# ecosystem is Unity Engine with its own frameworks and plugins. It lags a bit behind Windows, and might be one reason why some C# developers seem to be behind the times when it comes to new language features.

Edit: The other reason Unity developers are careful around new language features is avoiding memory allocations. When you write C# like it was Java it's more straightforward to see where allocations happen but it's all too easy to accidentally write allocations in your main loop if you use everything the language has to offer.

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

#106

Earlier quoted context omitted.

Defining the problem is a core part of engineering to me.

Of course understanding the requirements is essential, but the post effectively said the most important aspect of SE is to help the client business. Imagine it's civil engineering, and we're talking about building a bridge. To what extend does a bridge engineer need to understand regional trading patterns, and what bridge location and size would give maximum economic benefit? To me that's a separate discipline to bui…

Definition of software engineering I got from DuckDuckGo: The application of scientific and mathematical principles to practical ends such as the design, manufacture, and operation of efficient and economical structures, machines, processes, and systems.

> "Being able to understand the business of the customer and create software that helped them do that easier." I don't consider that software 'engineering' necessarily.

Economical and efficient processes and systems to help someone figure out how to do their business would seem to fall under that definition, no?. I’m curious if you did attend engineering school because part of my curriculum in being part of an accredited engineering curriculum was classes that explored what it’s like being an engineer. You have to prioritize public safety first, integrity of being an engineer second, making sure the business succeeds and providing your advice third.

I disagree with OP in that learning languages does help you be a better engineer. It broadens your exposures to different ideas and cost effective ways to write code to solve those problems so that you can make better recommendations. That’s equally as important (perhaps even more in the beginning of a career) to being a well rounded engineer as is understanding business needs and matters enough that dismissing it as “I could do the same thing in Bash” kind of misses the forest through the trees because technology choices to impact cost to build, test, maintenance, ability to hire talent, cost to train people, etc etc.

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

#107
post #62

Earlier quoted context omitted.

> C having better support for pointers make it near to how the processor works, compared to other languages. Java is almost entirely pointers to heap allocations, yet I don't think anyone would argue that Java is close to how the processor works. I also don't think that the C virtual machine is all that close to how machines actually work any more.

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/08/17/unde...

https://www.ralfj.de/blog/2018/07/24/pointers-and-bytes.html

https://www.ralfj.de/blog/2017/06/06/MIR-semantics.html

[1]: https://stackoverflow.com/questions/53100198/what-is-the-pre...

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

#108
post #97

Earlier quoted context omitted.

Of course understanding the requirements is essential, but the post effectively said the most important aspect of SE is to help the client business. Imagine it's civil engineering, and we're talking about building a bridge. To what extend does a bridge engineer need to understand regional trading patterns, and what bridge location and size would give maximum economic benefit? To me that's a separate discipline to bui…

I don't think you're making the point you think you're making. You should absolutely understand what the purpose of the bridge is, what sort of things will be transported across it (trains? pipelines? weights? hazardous materials?), what sort of volume it will handle, what are the goals you're looking to solve with the bridge, what are acceptable and unacceptable tradeoffs? where are OK connection points, and where w…

> you give most software engineers a bridge building problem and they'll build the bay bridge when all they needed was a simple suspension bridge for foot traffic.

Care to give me an example in the physical world a case where overnight that foot bridge overnight suddenly becomes a highway off-ramp? Oh and suddenly we’ve realized that our highway motorists all need a place to park within walking distance of the hotel right nearby that we built last night? Also, there’s going to be spies looking for weaknesses in your bridge, robbers and invading armies looking to loot and pillage on a daily basis.

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

#109
post #62

Earlier quoted context omitted.

> C having better support for pointers make it near to how the processor works, compared to other languages. Java is almost entirely pointers to heap allocations, yet I don't think anyone would argue that Java is close to how the processor works. I also don't think that the C virtual machine is all that close to how machines actually work any more.

C has a virtual machine? Do tell more.

[deleted]

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

#110
A lot of people seem to overdo it, but I'd recommend

- Some sort of assembly

- C

- Java/Kotlin/C#/similar

- Python

- Javascript

- Some Lisp flavor

- Possibly Erlang

- Possibly Rust

This covers a lot of layers of the stack, along with some unique paradigms. I'd use it somewhat seriously for a while (months to year), not just as a toy to learn a language in a week. For a toy, JS and Java are close enough that you might not appreciate that once you get past the syntax, they're radically different.

Post reply on HN