31 ms·
Trying new programming languages helped me grow as a software engineer
- raydiatian 4y agoWouldn’t it be more useful to your audience (juniors I assume) to say that “learning patterns in software design helped you grow as an engineer?” I mean you call out things like discovering DDD and I’m sure you also came across Data-oriented design as well, Patterns of enterprise architecture, etc. In my experience knowing those patterns provides far more value in one’s toolkit than “knowing” Kotlin, Ruby, Scala, Golang, Rust & C++.
- sidlls 4y agoDifferent languages provide different features and support these patterns in different ways. I think they’re complementary. Not to mention that learning different languages can be quite valuable for one’s career, as it is another skill one can employ for practical purposes and for distinguishing oneself among peers.
- raydiatian 4y ago> 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 converged around the “imperative++” feature set: Language-level async/await, object-oriented, garbage-collected, w/ a package manager for other people’s code. Whatever nuance between how Kotlin does abstract classes vs Typescript I can certainly learn on the job, for instance. I don’t disagree that there is value in learning two or three languages but beyond that the marginal utility drops off quite sharply in my experience. > Not to mention that learning different languages can be quite valuable for one’s career, as it is another skill one can employ for practical purposes and for distinguishing oneself among peers. I mean if it comes right down to it, a decision between two otherwise identical candidates, hire the person w/ language experience. But we probably agree that theory knowledge precedes language familiarly in importance, always. Which is largely my argument for why the title thesis is probably inaccurate.
- cardanome 4y ago> 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 were the main features that functional programming languages pioneered. Now, PURE functional programming like in Haskell is not mainstream. It is a testament to the success of functional programming that these days we mostly think about these extreme examples when we talk about functional programming. If anything, it is object oriented features that are becoming optional. At least the class based approach is starting to decline for good with many new languages explicitly not implementing them. Also, I strongly disagree that all programming languages are starting to converge. It seems you just picked languages that are very similar which I agree, will not expand your mind much. Learning languages like Common Lisp, APL, Forth, Prolog, Haskell and so on though will will greatly expand your understanding of programming.
- raydiatian 4y ago> 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.
- dopidopHN 4y agoIt’s two different things. For instance using more functional language convinced me of the vertus of immutability. Pattern won’t do that
- raydiatian 4y ago> Patterns won’t do that I’m pretty sure Clean Code by Uncle Bob has a section on why you should use const to achieve immutable variables. In any case, good style guides inevitably are preaching this as well, as are good senior engineers. All in one’s first language (human), without needing to understand lambda calculus, or monads to run a hello world.
- mrkeen 4y ago> I’m pretty sure Clean Code by Uncle Bob has a section on why you should use const to achieve immutable variables. Doesn't go far enough. Firstly, it's just advice. I might like it, but it doesn't mean I can get my teammates to do it. Secondly, if I want to do it, I have to get it right, any mistakes I make are on me. Thirdly, const is not enough. You'll probably end up with immutable pointers to mutable data, rather than any kind of referential transparency. A language which helps you get immutability right is a world of difference. It's like the difference between a memory-safe language vs just using C (and a C textbook which recommends that you write memory-safe code)
- raydiatian 4y ago> A language which helps you get immutability right is a world of difference. It's like the difference between a memory-safe language vs just using C (and a C textbook which recommends that you write memory-safe code) I mean I understood how to get immutability right before I ever picked up an FP language, but I can see how this is a flexible point though. The virtues of immutability really don’t take a long time to extol, and they’re a concept you’re introduced to immediately in MyFirstFPLang™.
- dopidopHN 4y agoOf course; but reading it from clean code 10 years ago I thought “yeah sure”. Having no way to mutate my variable in List or Elm or scala … and seeing first hand that a lot whole class of bug disappeared, is different. But we need both ! Absolutely both. And I will probably never code again in scala or lisp. That was fun. I learned a few things ( scala taught me how functional codebase can be unreadable as well )
- tender_euler 4y agoWhen I visit the site, I get TypeError: Cannot read properties of undefined (reading 'reduce') at getTweets (/myapp/build/index.js:898:22) at runMicrotasks (<anonymous>) at processTicksAndRejections (node:internal/process/task_queues:96:5) at loader5 (/myapp/build/index.js:991:48) at Object.callRouteLoader (/myapp/node_modules/@remix-run/server runtime/dist/data.js:77:14)
- tender_euler 4y agoOh, immediately fixed. Interesting
- filippofinke 4y agosame
- LudwigNagasena 4y agoTbh that’s kinda ironic.
- baransu 4y agoShould be fixed now
- ftyhbhyjnjk 4y agoError on page...
- mkl95 4y agoI have used several languages professionally and written personal projects in about a dozen languages. But I'm not sure if it has helped me grow as a software engineer. I'm mostly saying this because every company I worked for implemented similar antipatterns. It's like the human brain subconsciously leads people to make similar bad decisions regardless of the programming language. On the other hand, learning different languages makes you more gritty. If you can troubleshoot code in half a dozen languages, chances are you can figure out the 7th.
- tester756 4y agoI 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, strong standard library) edit. just to be clear: I don't see value in learning C#+Java+PHP, but C#+Erlang? yea I do see value in learning Rust after C but still - concepts are more important, you don't have to learn langs in order to be familiar with concepts Learn software engineering - it's broad as hell and you can easily do that using one language
- wildrhythms 4y agoWhen I was in undergrad our professor had us learn Java, but also Lisp and Prolog, and that was very valuable to my growth as an aspiring (and now thankfully employed) programmer :)
- tester756 4y agoDon't get me wrong, I'm not saying that there's no value in programming languages I'm saying that programming languages aren't they only way to get familiar with concepts
- green_on_black 4y agoI agree, but certain concepts exist strongly at the language level. Like functional programming, Haskell for example: the power of static typechecking along with good type inference, or functional/immutable patterns, or programs as data (IO monad). Or Prolog and logic-based declarative programming. Or any GC'd language. Or a Lisp and its metaprogramming. I daresay these ideas would be very difficult to see the practical use of, or "impractical" beauty of, without touching the languages.
- RHSeeger 4y agoNobody said they're the only way. But they _are_ a very good way, for a variety of reasons (which have already been discussed here).
- eric4smith 4y agoI’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 data and static html files. Don’t focus on the language, focus on the business case. Sure some languages are more efficient than others but all those do is help you build a solution faster. And languages are similar for the most part - so that helps you learn new languages faster.
- deltasevennine 4y agoThat'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 accomplished with Bash, text files to hold the data and static html files. Why? Junior programmers are aware of this already. And get this: junior programmers are even aware that everything can be accomplished with assembly language. They are also aware why things aren't done in assembly, typically.
- gjm11 4y ago> 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".
- deltasevennine 4y agoThat's one language. He said he learned 9. I'm betting out of the nine of those most of them are from the algol family and involve OOP. Yeah it's an assumption. My confidence is based on the fact that most languages are from the algol family and are OOP.
- rlv-dan 4y agoNot learning new languages and frameworks all the time gave me time to build actual software.
- stoicjumbotron 4y agoI 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.
- z3c0 4y agoAgreed. 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.
- raydiatian 4y agoFrankly 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.
- jll29 4y agoI 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-Programmers/dp/193435659X 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/1941222153 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).
- tonmoy 4y agoOther than the fact that C can be run on basically any device on earth, and the super rich history behind it, does C as a language have any benefits? I personally don’t find C more ergonomic, expressive or beautiful compared to any other language.
- habibur 4y agoPointers. Nearer to the core. In assembly it's all pointers, pointers and pointers. C having better support for pointers makes it nearer to how the processor works, compared to other languages.
- aatd86 4y agoNowadays, I think that implementing a language would be even more valuable.
- zahllos 4y agoFeels like the moment to mention 'Strange Code' - https://nostarch.com/strange-code https://nostarch.com/strange-code by Ronald T. Kneusel (no relation or affiliation, I just like the book). You're never going to build your next major project in one of them (unless you happen to be a COBOL developer or happen to maintain OpenFirmware boot code written in Forth) but seeing different ways of doing things is both interesting and instructive.
- dejj 4y agoConcepts like: - Pony’s lifetimes and destructive reading [1] - Mercury’s overloading of dataflow direction and determinism [2] were mentioned in [3]. [1]https://tutorial.ponylang.io/reference-capabilities/consume-and-destructive-read.html#opaque-reference-capabilities https://tutorial.ponylang.io/reference-capabilities/consume-... [2]https://www.mercurylang.org/information/doc-latest/mercury_ref/Determinism.html#Determinism-categories https://www.mercurylang.org/information/doc-latest/mercury_r... [3]https://news.ycombinator.com/item?id=33102582 https://news.ycombinator.com/item?id=33102582
- _the_inflator 4y agoIf I hadn't tried new languages, I would be stuck with assembler language forever. ;) To this date I feel that using Python and SQL are amongst the best decisions in my developer life. Domain specific, without any helper libraries nor macros. Eye opener for using abstractions instead of doing everything the hard way using any low level languages.
- mikedelago 4y agoIt's also really, really fun to use a language that's completely different than what you're used to. I've learned Elixir, Scala, F#, and Common Lisp on the side in the past year or so. I like Elixir and CL to the point where they're typically my go-to for personal projects. I liked Scala and F# a lot but I don't reach for them so often; it'd be nice to work with them. The worst part about learning (and liking!) new languages is that at work, we're pretty firmly in Go. IMO, while Go is nice from a minimalism and resource utilization standpoint, it's simply not fun to write after using much more expressive languages.
- wefarrell 4y agoElixir was the most pleasant experience I’ve had learning a new language. I really enjoy the ergonomics of pattern matching and the pipe operator. Really wish I had an opportunity to use it professionally.
- mikedelago 4y agoI agree, so many of the idioms (tuple returns into pattern matching, comfortable lambdas, DI through behaviours) all just felt like a breath of fresh air. It feels like the language was designed to be as good as any other language you've learned.
- phillipcarter 4y ago> IMO, while Go is nice from a minimalism and resource utilization standpoint, it's simply not fun to write after using much more expressive languages. It's definitely a blessing and a curse. What I think I'd say about Go is that it's a simple "day 1" language and a complicated "day 2" language. Speaking strictly from an expressivity and language semantics standpoint, as its runtime and standard toolset are simply great, it's just filled with so many head scratchers when you dig into what's going on and why. Like the go modules import compatibility rules forcing you to create new vX versions of modules. It's not that it's unsound, it's just unlike everything else out there, and so you can't take your knowledge from other packages managers and apply them to Go. Maybe that expands the mind a bit, but in my experience it just confuses teams and forces them to sometimes go back and revert a major version bump because it's easier to just do that.
- synthc 4y agoDifferent languages also have their own culture and ecosystem, which are also valuable to learn in order to get a different perspective. Some things that are taken as best practices are bad practices in other langauges and vice versa. For example, lots of Java devs are against early and multiple returns to the point of absurdity, while in functional languages this is idiomatic and no problem at all. Using different languages lets you see how different approaches work out in practice, so you can get a better view about which approaches work and which approaches are just cargo-cult nonsense.
- sendomatic 4y agoI find the java example different to my experience. java doesn't have all expressions return values, like if, making the attempt to have single returns from functions much harder to do tidily than in other languages like for example ruby, rust, scala.
- 0x445442 4y agoYou can program just about any darned way in Java which can lead to some pretty schizophrenic code bases and organizations. I recall a fairly recent code review where the author had a static method in a class which took in another type, did some reasoning on the state of the type and returned a result. I asked why that method was not in the type itself since all the state required to answer the question lived in the instance of that object. The author said, oh we tend not to use “smart” objects.
- BlargMcLarg 4y agoThe 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. Large scale adoption tends to happen only when some major framework insists on using a certain paradigm.
- goto11 4y agoLeaning new languages is great fun, but I do think it has diminishing returns when you have covered the major paradigms. The key to growth is to discover new "aspects" where you can broaden your experience, e.g. windows vs unix, desktop GUI versus web versus systems programming, low level vs high level, game programming vs line-of-business development, stand-alone apps vs large enterprise systems, green field versus legacy. Knowing 27 languages but only having worked on say small green-field web apps is still a very limited experience.
- 300bps 4y agoEvery so often, it's the first language we were taught in college or bootcamp. In the last few years I’ve interviewed over 100 graduating Computer Science students from very good schools. One of the questions I asked was, “Did you learn your first programming language as part of your college curriculum or before?” Almost all of them answered they learned their first programming language in college. I can’t even fathom it. I learned BASIC when I was 10. Logo when I was 12. Assembly when I was 13. C when I was 16 and C++ when I was 17. This was a long time ago of course - I can’t believe how much things have changed with a population self-selected for being interested in computers.
- lordnacho 4y agoI 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 first time. It was also the first time I did anything on the web, including figuring out how pages are laid out. Bought a MacBook for the first time too. - A consumer iOS app written in Swift. New language again. Went native, ran into a lot of constraint errors that eventually taught me a lot. - A trading system in c++ that didn't use STL. I remember at the beginning of each new language/framework thinking "OMG how do I do this". And yet it's not that bad once you've done it once or twice. I reckon it's a lot easier than learning a new natural language (German, Mandarin). The thing it really gives you is a low opportunity cost. If you have some task, and the evidence points towards some specific framework/language being a good choice, hopefully you won't resist it due to internal anxiety about starting over again.
- otachack 4y agoThe constraints are such a pain at first for iOS! Then you get used to it and become a guru :D Happy you've had opportunity to try out a vast ecosystem.
- mettamage 4y agoHow do you get all these different jobs? I’d just hear: you don’t have enough experience in framework/language X.
- lordnacho 4y agoIt was an interlude, so not the normal leetcode grind. I knew various people who needed an MVP made for their startup, and with a little bit of familiarity people will let you do things you haven't done before.
- whimsicalism 4y agoI'm assuming they are working for startups, typically startups do not require the same level of deep domain expertise as big firms.
- lucasyvas 4y agoWithout even reading the article, one hundred times yes. Exposure to different paradigms and concepts is more important to absorb than syntax in this endeavour, however.
- Aperocky 4y agoIt's happening in the industry too. My job involves using multiple languages, our small team own packages that include java, kotlin, ruby, python, typescript. Everyone is expected to write in any language as needed. We also conduct interview in any language a candidate would like to use.
- zffr 4y agoTangentially related, but learning to build a programming language has helped me grow as a software engineer too.
- dehrmann 4y agoA 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.
- agumonkey 4y agoSome logic programming sibling too
- metaph6 4y agothe startup company i work in uses 6 different programming languages, which makes me feel what you argue here. to add, markup languages are fun and contrubiting also, particularly devops developing with yaml and composing Docker components makes you think in a different organizational mindset than other programming domains
- sylware 4y agoFor my personal case, I found out that writing "real programs" in anything else than assembly with a conservative usage of a macro processor is kind of toxic: it is a complex matter based on my experience and what I could understand from "software history". A high level script language would be such "real program". Idem for a command shell. risc-v, if successfull, will help a lot to this then remove a lot of what I consider toxic.
- Jtsummers 4y agoAre you actually saying all programs should be written in a macro assembly language? Tied to only one hardware platform, with high level concepts completely obfuscated by the need to express them in assembly? So when MS wants to make an ARM version of Windows, rewrite! When Apple switched from 68k to Power to x86/x64 to ARM, rewrite! Port the Linux kernel to a new platform, rewrite! Port the unix utilities to a new platform, rewrite! Any application writer wanting to port their program from one hardware system to another, rewrite! That would be an awful world to live in, though more people would be employed. Less would actually get done, though.
- sylware 4y agoThat's why I cited risc-v. Standard of interoperabitily at the assembly level. Yes, and porting from 1 assembly to another is easy.
- Jtsummers 4y ago> Yes, and porting from 1 assembly to another is easy. So I disagree with this because it discounts the actual differences between hardware systems (including RISC-V variations, 32-bit memory addresses versus 64-bit, different sets of instructions depending on the underlying variant). Then again, I've worked with systems that gave you complex number registers which are not terribly common on any other system. Could be translated away (and sometimes was, but usually to a high level language first) but if you stuck to assembly you exploded the instruction count to do so since now you needed complex math routines (among other things) that were baked into the older system. But let's say it is easy, then you are either wasting a massive amount of time doing something by hand a computer can do for you (only a fool does this for long), or you have a computer do it for you. At which point your ISA I Assembly->ISA II Assembly translator becomes, wait for it, a compiler. And then you have a really shitty language (some old system's ISA) instead of an actually useful high level language. EDIT: And suppose, somehow, you kill all non-RISC-V ISAs (good luck). How do you handle other hardware like GPUs? Do you really expect a common ISA to form there any time soon?
- throwaway234239 4y agoProbably 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).
- kazinator 4y ago"null-safe type" is a term which takes the perspective of backpedaling out of a mistake, which keeps highlighting the mistake. The mistake is unnecessary in the first place; types do not naturally have a null in them that has to be exorcised. For instance, when we think of a type like "the natural numbers", that's just a set of 1, 2, 3, ... there is no "null reference to Integer" in there. Thus I think terms like "null-safe type" is just something we should leave to Java programmers, and not use as a way to talk about types.
- jumperjumper 4y agoI 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 https://www.usenix.org/system/files/1311_05-08_mickens.pdf
- wycy 4y agoWhat grew me the most as a programmer was doing the Advent of Code challenge every year using a different language each year (and doing 1 year with 3 languages each day). Learned so many new algorithms and languages I never would’ve otherwise encountered. Side note, Advent of Code 2022 starts December 1!
- 48cfu 4y ago[dead]
- chrsig 4y agoLearning 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 understanding of how every other language works though, even if there's different semantics for a particular language. When I was really into learning new languages, I think it was because I didn't have a good sense of how to do more challenging things. At some point, I settled down and got more into projects that really require more domain knowledge. Writing an external merge sort, interpreter & compiler, a gameboy emulator, a disk persisted b+tree, ray tracing & physically based rendering, etc. Those types of problems are what really pushed my boundaries and made me think more about how to solve problems. In the case of ray tracing & pbr, it forced me to learn some calculus, linear algebra, and statistics, which has been an incredibly rewarding experience. It can be fun to imagine what solving a problem looks like in a language, because it may have some qualities that play to the strengths of a solution. At the end of the day, the languages are just tools people have come up with. Learning the quirks of C++ becomes less fun when you start to realize that it is the way it is because of how history unfolded rather than because of some interesting concept. (edit: hn list formatting)
- tomtheelder 4y agoWhat 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.
- aranchelk 4y agoI’d imagine idiomatic use of macros.
- tomtheelder 4y agoAh that makes a lot of sense.
- zelphirkalt 4y ago> Because of some of my programming teachers, I had a feeling that JavaScript is not a “real” programming language. In addition, it was JavaScript in the frontend environment, so you know, moving divs and buttons around, not algorithms. Well, it certainly does not live up to the standards of languages, which those people would call "real programming languages". So while they are doing a true scotchman thing there, there is also some truth at the core of it. If we remember JS how it was a decade or more ago, and what JS today still keeps downwards-compatibility with, it is easy to see, how the very foundations are flawed, to say the least. Self-respecting computer scientists, professors or not, will most likely not accept those shaky foundations as something worthy. Anyway, it is not the pure count of programming languages, but rather the count of programming language families one got to know, that makes the difference. If all one ever touches are languages out of the algol family, then it will have far far less benefit, compared to trying out languages from various families. For example one will learn much more, trying out SQL, a lisp, an APL, Prolog and a Smalltalk dialect, a language with stytic typing and a langauge with dynamic typing, than from trying out Java, C++ and C# and the like. This is because the various different families do things vastly differently and require you to switch your brain into different modes, while languages of the same family will mostly only make you learn a new syntax and new built-in function names.
- justshowpost 4y ago> grow as a software engineer > For me, JavaScript became my primary language and stays Oh, my God! Computer science of leftPad.js strikes back.
- jeff-davis 4y agoA single programming language, isn't always a "single language" across different code bases. Especially for languages like C and C++, there are many different approaches that different code bases use -- memory management strategies, all kinds of internal APIs, different control flow, etc. Other languages might feel more like a "single language" because they are more domain-specific, and there are established basic libraries that are widely used, so moving from one code base to another is more fluid.
- Tozen 4y ago"...trying something new to broaden your perspective." At the very least, nothing wrong with being a bit more open-minded.
- summerlight 4y agoI think it's also very important to see (and easy to miss) that a language is just a part of bigger programming systems. Every problem domains with enough complexity will eventually grow into some sort of a domain specific programming system to provide flexibility and simplicity. Composition, abstraction and generalization are all important tools to tackle this problem and programming languages exist exactly for this reason. Because general purpose language only solves a tip of iceberg, you will find out that your system begins to resemble more and more of a language as your system evolves. (Although it's usually best to avoid this situation IMHO, but if more than thousands of users depend on it then it's inevitable!) At this moment, some knowledge on language design and implementation could be helpful to avoid pitfalls and make the system more consistent and easy to the users even if it doesn't take a form of a textual language with its own unique syntax.
- xutopia 4y agoI think if you try different enough programming languages it helps a lot... but what I found even more interesting is doing the same coding kata in those different languages. Elixir vs Javascript vs Python vs Ruby... so much difference.
- Existenceblinks 4y agoHere my thought: I would love a language that is simple as Lisp, compose via pipe all the way down, have elegant type like StandardML, that run on powerful concurrency engine like Erlang/OTP.
- lanecwagner 4y agoI love moving domains every so often because changing up tooling and languages is such a great learning experience. Here's a related piece I wrote talking about why I think learners should also be learning multiple programming languages: https://blog.boot.dev/education/learn-multiple-programming-languages/ https://blog.boot.dev/education/learn-multiple-programming-l...
- epalm 4y agoI’ve learned a handful of languages over the years, it was fairly straightforward to reason about all the c-likes (java, php, js, c#, etc), and others (python, tcl). They all have quirks and unique pros/cons, but it was mostly a matter of applying familiar ideas to a new environment/syntax. But by a large margin nothing melted my brain more than learning a pure functional language (xquery, in my case). To have to think about programming in a completely different way was extremely beneficial. I highly recommend it, given the chance.
- bern4444 4y agoFinding a compiler from your new language to your work language is a great way to practice this. I became interested in F# and found a F# to JS compiler. I can write F# code and call it from JS and do it in any toy code or side project I have. This lets me lift up any JS or TS to F# to any degree I want across any project. That's an awesome environment to build in as I can experiment and learn more about the language just by rewriting code that is already figured out.