Live data from Hacker News

Trying new programming languages helped me grow as a software engineer

cichocinski.dev

31–40 of 192 posts

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

#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 plan, it's a long way away from C.

It's hard to appreciate the power of interactive debugger REPLs like binding.pry or JS's debugger without experiencing them. A C++ debugger, even a Java debugger, is a pale imitation, and it's not easy to simulate the experience without building a dynamic language inside the static language.

If all you've ever known is statically typed languages, you can suffer from a myopic parochialism with respect to dynamic typing. IMO the most popular statically typed languages only work well because they have runtime polymorphism holes in their type systems. More powerful statically typed programming languages tend to grow ever more esoteric typing constructs to enable static types to follow dynamic control and data flow - there's an inherent tension there and if language complexity isn't carefully managed, it becomes harder to express intent and error messages get more vague and cryptic.

Algebraic data types and pattern matching tends to be under-appreciated if one is schooled in object-oriented languages. Object orientation has a big hammer for switching control flow based on data values, dynamic dispatch, and architectures tend to leverage dynamic dispatch where they would be much better off with switch statements. If the set of variants is known up front, you're probably much better off with sum types and pattern matching than with interfaces, abstract classes and virtual methods.

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

#32

Earlier quoted context omitted.

> Different languages provide different features and support these patterns in different ways. I think they’re complementary. I mean, I didn’t learn that much from learning FP that didn’t already know from reading Uncle Bob’s clean code and style guides. In fact I think for awhile it just made me a pretentious clown who wouldn’t stop calling things monads. Furthermore, haven’t most languages today pretty much converg…

> Furthermore, haven’t most languages today pretty much converged around the “imperative++” feature set: If anything, functional programming has absolutely won. Support for first-class and higher order functions, anonymous functions and so in are absolute must-haves for any modern language. These features have become so bread and butter that people will not even think about them as functional programming but these we…

> It seems you just picked languages that are very similar

No no, I picked languages that have jobs waiting in industry. 3 Billion devices run on a language that literally requires everything to be an object ;) I haven’t seen too many elm/elixir job postings, but rest assured when they start cropping up with the frequency of say JavaScript or C#, I’ll be dusting off my notes from previous side projects. I’ve also done Prolog, I’ve also done Haskell, I’ve also done Scala. Far more important than being able to write Haskellish code for my typescript backend is the ability to write idiomatic Typescript code with good patterns. And the whole discussion here is not whether you should check out FP (you should) but whether learning extra languages is more important than learning patterns in software design (ie canonical Martin Fowler, GoF, Uncle Bob). There are absolutely useful models and perspectives to be found in FP, but I haven’t found them to be stuff that I use every day. If every imperative language is shipping with first-class functions (which I personally don’t think is as dazzling a notion as it sounds—even C has shipped with function pointers since the days of old) and all the jobs are in imperative languages, it seems pretty practical to focus on learning patterns before learning FP. Respectfully.

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

#33
I value learning new languages, especially as I have yet to find a very good one. Some are pure and beautiful like Scheme, but if you asked me what single language I would take to a lonely island with me where I was stranded, it would still have to be C.

To those here who would like to have some guidance diving into other languages I can recommend these two books:

Bruce Tate: Seven Languages in Seven Weeks https://www.amazon.com/Seven-Languages-Weeks-Programming-Pro...

Bruce Tate: Seven More Languages in Seven Weeks https://www.amazon.com/Seven-More-Languages-Weeks-Shaping/dp...

You can work through them in <4 months, and then we can talk again whether you found it useful (I did).

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

#34

Earlier quoted context omitted.

> Learn concepts, obtain foundational computer science knowledge Well yeah learning a wide variety of languages is a good way to do that. People write new languages because they want to implement new concepts.

>Well yeah learning a wide variety of languages is a good way to do that. Well, depends what concepts are you talking about. Computer science is huge as hell, concepts that you may learn from programming languages are just subset. There's a lot of interesting and hard stuff that does not touch those (I'm not focusing on some domain-specific-languages that nobody know about)

But learning languages is a great way to learn many concepts. Obviously it doesn’t teach you everything - nobody claimed that.

Want to learn concurrency? Try a concurrent language.

Parallelism? Learn a parallel language.

Data flow? Learn a data flow language.

Pattern matching? Learn a language with pattern matching.

Etc for a thousand useful subjects to learn.

These are great ways to learn so many software engineering concepts. Use other techniques to learn other things sure.

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

#35

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…

This is pretty much the point of the article.

I have a few reasons to work in (not just learn) close languages. The languages might use roughly similar concepts and syntax and solve similar problems (think, C++, C#, PHP, Java, Go), yet their community, practices, tooling, frameworks are wildly different.

If as a C++ developer in 2005 you never experienced how smooth debugging and profiling could be in Java, how fast things could compile, how easy it was to drop a jar and deploy to your server farm, you were missing out.

Similarly, if as a Go developer you don’t know how quickly you can install WordPress, write a 200 line PHP plugin, and get an entire business off the ground, you are missing out.

Most transformational for me was to be a Common Lisp developer, and find the language that allowed the ideas and concepts in my brain to be turned into prototype at the speed of thought. It’s a challenging language to use in the real world, but it really brought the point home that a language is just a vessel for ideas.

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

#36

I’ve worked deeply with about 9 programming languages. Not hobby level, but client work level. They did not really help me to become a better software engineer. What did? Being able to understand the business of the customer and create software that helped them do that easier. That’s why today I tell junior programmers that almost everything we do these days could be accomplished with Bash, text files to hold the dat…

"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.

Yes to be a more useful employee or more successful freelancer etc understanding the business case is absolutely an essential skill. But the 'engineering' begins once the problem has been defined; how do you actually implement the vision.

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

#37

I don't know why the comments are so negative. I agree that the fundamentals are important and that you can then learn almost any language, but OP might have a different learning process and getting the hands dirty might be helping him and honestly trying out a new language along with making your fundamentals clear does not hurt anyone.

Agreed. Personally, the way I overcame my lack of a complete college education was through learning multiple languages. Researching the way different languages solved the same problems - and why - helped me understand the fundamentals, as I didn't have an algorithms or data structures course to lean on.

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

#38

I don't know why the comments are so negative. I agree that the fundamentals are important and that you can then learn almost any language, but OP might have a different learning process and getting the hands dirty might be helping him and honestly trying out a new language along with making your fundamentals clear does not hurt anyone.

Frankly the article reads like it’s an Instagram post that you’d find with #blessed on it or some other self-important nonsense. Which is fine if the target audience is juniors—look at all the cool stuff this guy is doing because he’s continuing his education. But then he gets the content of the message wrong, so to other seniors it’s kind of open season.

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

#40

I’ve worked deeply with about 9 programming languages. Not hobby level, but client work level. They did not really help me to become a better software engineer. What did? Being able to understand the business of the customer and create software that helped them do that easier. That’s why today I tell junior programmers that almost everything we do these days could be accomplished with Bash, text files to hold the dat…

That's because you've been learning languages that are similar. The algol family of languages with OOP. You need to learn languages outside of this family to see the benefit. But the benefit won't be in your ability to do "business". It will be exclusively improvements in programming unrelated to "business programming" >That’s why today I tell junior programmers that almost everything we do these days could be accomp…

> That's because you've been learning languages that are similar. The algol family of languages with OOP.

What makes you so confident of that?

I took a look at eric4smith's website. His current language of choice is Elixir, which is not in fact a member of "the Algol family of languages with OOP".

Post reply on HN