<story><title>Trying new programming languages helped me grow as a software engineer</title><url>https://cichocinski.dev/blog/trying-new-programming-languages-helped-grow-software-engineer</url></story><parent_chain><item><author>tester756</author><text>I do believe that learning many programming languages is overrated&lt;p&gt;Learn concepts, obtain foundational computer science knowledge, write complex projects&lt;p&gt;not just get familiar with somebody&amp;#x27;s interpretations that they implemented as a language.&lt;p&gt;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, strong standard library)&lt;p&gt;edit. just to be clear:&lt;p&gt;I don&amp;#x27;t see value in learning C#+Java+PHP, but C#+Erlang? yea&lt;p&gt;I do see value in learning Rust after C&lt;p&gt;but still - concepts are more important, you don&amp;#x27;t have to learn langs in order to be familiar with concepts&lt;p&gt;Learn software engineering - it&amp;#x27;s broad as hell and you can easily do that using one language</text></item></parent_chain><comment><author>barrkel</author><text>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&amp;#x27;t work very well - it can be hard to see the wood for the trees.&lt;p&gt;It&amp;#x27;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&amp;#x27;s a long way away from C.&lt;p&gt;It&amp;#x27;s hard to appreciate the power of interactive debugger REPLs like binding.pry or JS&amp;#x27;s debugger without experiencing them. A C++ debugger, even a Java debugger, is a pale imitation, and it&amp;#x27;s not easy to simulate the experience without building a dynamic language inside the static language.&lt;p&gt;If all you&amp;#x27;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&amp;#x27;s an inherent tension there and if language complexity isn&amp;#x27;t carefully managed, it becomes harder to express intent and error messages get more vague and cryptic.&lt;p&gt;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&amp;#x27;re probably much better off with sum types and pattern matching than with interfaces, abstract classes and virtual methods.</text></comment>
<story><title>Trying new programming languages helped me grow as a software engineer</title><url>https://cichocinski.dev/blog/trying-new-programming-languages-helped-grow-software-engineer</url></story><parent_chain><item><author>tester756</author><text>I do believe that learning many programming languages is overrated&lt;p&gt;Learn concepts, obtain foundational computer science knowledge, write complex projects&lt;p&gt;not just get familiar with somebody&amp;#x27;s interpretations that they implemented as a language.&lt;p&gt;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, strong standard library)&lt;p&gt;edit. just to be clear:&lt;p&gt;I don&amp;#x27;t see value in learning C#+Java+PHP, but C#+Erlang? yea&lt;p&gt;I do see value in learning Rust after C&lt;p&gt;but still - concepts are more important, you don&amp;#x27;t have to learn langs in order to be familiar with concepts&lt;p&gt;Learn software engineering - it&amp;#x27;s broad as hell and you can easily do that using one language</text></item></parent_chain><comment><author>larve</author><text>This is pretty much the point of the article.&lt;p&gt;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.&lt;p&gt;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.&lt;p&gt;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.&lt;p&gt;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.</text></comment>