News for hackers. Stuff that matters.
Re:Learn more programming languages, even if you won't use them by dxbydt on Saturday April 13, 2019 @11:48AM (#19653676)
Learn more ? I'm actively trying to unlearn a bunch of languages at this point!

ofcourse, when I was a wageslave in the bay area, its nice to know python, java, javascript, scala etc. - got me jobs every 2-3 years & put food on table.

now that i'm in academia, its completely upside down. literally everybody is way more productive than me in just about any task. The other day I as supposed to program a poisson clock, it took forever. Meanwhile my advisors & classmates with zero industry experience chug thru these tasks effortlessly. Lately I've confirmed its because they know exactly 1 language , but they know it so well & in so much depth, they know exactly where to look, the right mcmc library, the right slice sampler, the right optimizer, that's what matters.

There's no point programming the same bloody front-end & back-end in a dozen different languages just because of industry constraints. That's like eating a spaghetti with a fork, a spoon, with chopsticks, with your fingers...its the same fucking spaghetti. cook something else, not just rotate dish-ware.

Re:Learn more programming languages, even if you won't use them by klibertp on Saturday April 13, 2019 @12:31PM (#19653968)
It's perfectly possible to know several languages in-depth. It just takes a lot of time and effort. Moreover, it gets easier with time and practice. Knowing N languages makes learning N+1 language just a bit easier. For me the turning point was around N == 10, since when learning a new language - and yes, in-depth, including idioms, stdlib, some external libraries, maybe some framework (if needed), and also some facts about the implementation and its inner workings[1] - takes a week at most, and for simpler cases a weekend is enough.

OTOH, it took around 15 years to get there. I understand that this kind of dedication may not be possible or worth it for everyone.

[1] Because there is very, very little unique features to each language. Unless you go to the fringes, you're bound to see the same concepts applied again and again and again, which gets really disheartening after a while. If you don't believe me, try naming any "new" feature which was added to your favorite (EDIT: I meant mainstream - TIOBE top 10 or 20 - lang here!) language recently - and I'll show you that same feature implemented 10 or 20 years ago in another language(s).

EDIT: more neutral wording.

Re:Learn more programming languages, even if you won't use them by blub on Saturday April 13, 2019 @01:40PM (#19654499)
I don't doubt it's possible.

What I do doubt, is that it's possible to know several languages in-depth and at the same time be at least very good in a specific domain (webdev & mobile apps are not domains), have good algo and problem-solving skills, have decent to good soft skills, know at least a little bit of PM and also be a good conversation partner and well informed citizen of the world, while also being a good husband/wife/dad and being reasonably competent at some hobby that is hopefully not related to computers.

Learning and keeping up to date with the N+1th language takes space from learning the many other interesting things this world has to offer.

Re:Learn more programming languages, even if you won't use them by klibertp on Saturday April 13, 2019 @02:34PM (#19654836)
Yeah, it's a matter of personal choice.

My choice was to forgo any hobbies unless they are somehow useful for programming, ignore most of being "well-informed citizen of the world", ignore the whole mating and breeding business and to focus solely on programming at first, then on programming-related fields that picked up my curiousity. I'm still competent enough in other programming- and work-related areas - at least I've never been told otherwise - but, indeed, half of what you write about is nonexistent in my life.

Actually, if there was a monastery for programmers, with ascetic lifestyle and good broadband connection to the Internet, I'd go there in a heartbeat.

OTOH, I don't think you'd need to go to such lengths normally. As a programmer, you'll be working for 40 years at least, right? 30 minutes of reading a day will eventually get you to the respectable N (if you choose this particular field), it'll just take longer.

The OP said the fact that he learned multiple languages makes him fall behind his peers in coding tasks. I'm saying that he would have no such problems had he learned these languages in-depth and it's perfectly possible to do so. I admitted immediately that the effort needed for this is at least substantial, no disagreement here - I just pointed out that, after that initial effort of consistently learning N languages for 2*N years, the following languages become very easy to pick up. That's it :)

Re:Learn more programming languages, even if you won't use them by Retric on Saturday April 13, 2019 @03:25PM (#19655199)
Even then, I don’t think you can ever really learn even one mainstream language in depth. For something as ‘simple’ a C every compiler is slightly different and includes different flags and run on different CPU generations and this stuff is constantly evolving. A language like Java has a giant and evolving standard library plus multiple compilers etc. And that’s ignoring any simply popular libraries etc.

Really learning what you can safely ignore in whatever context is the most important part, everything past the basics is domain specific.

Having said that, I have read several language specifications which can be useful for general understanding. But, that’s simply the tip of the iceberg.

Re:Learn more programming languages, even if you won't use them by klibertp on Saturday April 13, 2019 @05:19PM (#19655806)
You're moving goalposts a bit here, I think. Or maybe it's my fault, I should have defined 'in-depth' more precisely.

Anyway, I specifically mentioned knowing "some facts about the implementation" instead of "knowing the implementation inside-out". The same is true for tools, libraries, and frameworks - there is no need to remember every function/method signature and every class name in a library - as long as you know the most important parts and can quickly and accurately find the relevant documentation for the rest.

To me, 'knowing in depth' (as a language user) means that no matter the question, you know where to search for the answers. There's no need to remember the answers themselves, although it kind of happens naturally with repetition anyway.

On the other hand, it's also important to know which questions are not worth answering. It's exactly as you say:

> Really learning what you can safely ignore in whatever context is the most important part

So, to sum it up: if you can do both these things, then, to me, you have in-depth knowledge about the language (or actually any other field). The next step - ie. actually knowing all the answers by heart - is mostly useless for language users and only matters for (and is best left to) language implementers/advocates/nerds.

> A language like Java has a giant and evolving standard library plus multiple compilers etc. And that’s ignoring any simply popular libraries etc.

Java stdlib is only "huge" in comparison with C, where stdlib is non-existent. The popular libraries may be ported from other languages or even directly called via FFI. And if the library is really good, it will be ported to other languages, too, which means you'll have an easier time using these languages in the future.

Even without all that, though, if you know more-or-less what's where and can quickly search for the details - you're good. It's not that easy to learn this - you need to remember the structure of the docs at least - but it's much easier than actually learning and remembering all of the stdlib, etc.

Re:Learn more programming languages, even if you won't use them by gubbrora on Saturday April 13, 2019 @05:58PM (#19655994)
Languages change. In depth knowledge comes with an ongoing cost.

For this reason I think it may be rational to only learn what will be used in the near future and spend the saved time on more timeless knowledge.

Re:Learn more programming languages, even if you won't use them by klibertp on Sunday April 14, 2019 @08:07PM (#19662430)
> on more timeless knowledge

Like interpreter and compiler architectures, type systems kinds and their meaning, ways of specifying the semantics formally, and also the structure of novel kinds of abstractions proposed by researchers in some experimental languages.

If you learn all of that today, the next time you'd need to learn anything new about a mainstream PL would be in 10 years, if not twice that.

Example: many modern languages only recently started supporting some of the Algol-68 features. That's 50 years to get a lambda into the language...

Re:Learn more programming languages, even if you won't use them by moron4hire on Saturday April 13, 2019 @03:51PM (#19655347)
I manage to do it, though I've been studying for 20 years. Helps that I don't watch sports.
Re:Learn more programming languages, even if you won't use them by rb808 on Saturday April 13, 2019 @02:00PM (#19654618)
Define know though. A C++/Java programmer can quickly write some Python code but isn't Pythonic. To me being able to write a program in a language doesn't mean you can write some code in it, you also have to know the paradigm its supposed to be used, as well as the layout styles, build tools, commonly used libraries etc etc. Even learning a new library often takes months alone.
Re:Learn more programming languages, even if you won't use them by another-dave on Saturday April 13, 2019 @05:33PM (#19655865)
Yes! Exactly. Oftentimes I look for "X for Y developers" style tutorials to try and fasttrack that for myself (e.g. npm ≈ Maven but this is how they differ), but high quality ones can be hard to come by & takes a long time to fully grok a new language
Re:Learn more programming languages, even if you won't use them by throwaway34241 on Sunday April 14, 2019 @01:38PM (#19660613)
I think this is true for just learning the language alone. But for the type of productivity the grandparent post is talking about the language ecosystem can be a bigger challenge, at least for me.

It wasn't in academia, but I spent a while working on one of the major native front end platforms almost exclusively and had the opportunity to get very familiar with it. And by 'familiar' I don't mean just knowing where to look things up, I mean knowing many of the exact APIs by heart, and having a wide variety of things I could just type in (without much looking things up) even if it involved working with images, network requests, JSON, file IO, string processing, dates/scheduling, collections, serialization, menus, windows, controls, input, drawing, sound, etc.

Another big thing was when there are multiple ways do the same thing, having done it both ways and having direct experience of why one choice will likely be more effective in general or for a particular project. This can apply to choosing libraries/frameworks or app architectural decisions.

I noticed I missed this level of familiarity quite a lot when I switched to a different ecosystem later. Maybe this is worse for native UI development because of the large API surfaces. But I found needing to consult the documentation again to be a lot slower.

Having had that experience has kind of made me wonder about full-stack vs specialization, and optimal-language-for-the job vs standardizing (although of course some languages are totally inappropriate for some jobs). At least in my own experience I found sticking with the same language for a while to have continuing productivity benefits well beyond the 1 week/month period.

Re:Learn more programming languages, even if you won't use them by throwaway34241 on Sunday April 14, 2019 @01:53PM (#19660692)
And for a specific example of the sort of ecosystem stuff I am talking about, to save/load some local data on iOS you have some API options:

Core Data

SQLite

NSArchiver

NSKeyedArchiver

NSUserDefaults

JSON

Property lists

Protocol buffers

stdio

NSData

memory-mapped files

Realm

This is without getting into anything too obscure. This list is probably also out of date.

Re:Learn more programming languages, even if you won't use them by klibertp on Sunday April 14, 2019 @07:32PM (#19662316)
> But for the type of productivity the grandparent post is talking about the language ecosystem can be a bigger challenge, at least for me.

My claim was that:

> learning a new language - and yes, in-depth, including idioms, stdlib, some external libraries, maybe some framework (if needed), and also some facts about the implementation and its inner workings[1] - takes a week at most

I also tried to define "learning in-depth" in another post:

> To me, 'knowing in depth' (as a language user) means that no matter the question, you know where to [quickly] search for the answers. There's no need to remember the answers themselves, although it kind of happens naturally with repetition anyway.

> On the other hand, it's also important to know which questions are not worth answering. [ie. what to ignore while learning]

And I stand by it: I believe that there's no need to memorize too many details to be productive, you just need to be able to quickly and accurately find the relevant details, no matter which details are they. Various docs indexes and viewers, your IDE features, cheatsheets printed on a wall - all of that can help you if you forget a bit of syntax or a signature of a function. There's nothing, other than just reading a book or two, to help you if you don't understand a crucial concept in a language or the architecture of the library/framework.

Also, all these concepts are reused all over the place. For example: "Io is a purely-object-oriented language with prototypal inheritance which allows objects to have many parents." Each word here has a meaning, and that meaning is (well, mostly) standard across most programming languages. With this description, if you know all the words, you just learned 3/4 of all there is to Io OO. Another example: "Dylan is a purely-object-oriented language which is class-based, allows multiple inheritance, and also decouples methods from classes by relying on generic functions, which use multiple dispatch - similar to CLOS." This one is longer, but it's still a single sentence, which conveys most (or if you're familiar with CLOS - all) of the characteristics of Dylan's object system. Sure, there are obviously more features in Dylan that you need to know before you start coding... but they are all defined with a single sentence. It takes half an hour to go through them all, and - again, if you know the exact meaning of each word - at this point you know more about the language than a beginner programmer would learn in a year or two.

> I mean knowing many of the exact APIs by heart

I was like this in the past, so I know what you're talking about. Unfortunately, my epilepsy makes my memory reset significantly from time to time - I can't do it, or at least not for long. It caused a loss of productivity for a bit, but it went back up when I started using well-configured tools. This is why my definitions of "knowing in-depth" above are what they are - I live them, for better or worse.

> (without much looking things up) even if it involved working with images, network requests, JSON, file IO, string processing, dates/scheduling, collections, serialization, menus, windows, controls, input, drawing, sound, etc.

Yes, that's what tends to happen with repetition - unless your memory is impaired in some way - you just remember things. There's nothing else than repetition that can get you to that point, which also means you "only" need repetition to get there. In other words, it happens naturally with time, provided you consistently work with the given tech stack, and that you use it for the various things you mention.

But again: good tooling makes the rote memorization mostly unnecessary, and I really don't see many benefits of keeping all the idiosyncrasies of the whole stack in your head. It's completely different story if you code in Notepad without Internet access, though.

Further, all the things you mention are implemented in all general-purpose languages. Moreover, most implementations look really similar. In almost all languages "network requests" are built upon sockets - an OS-level mechanism. Images are more tricky because of decoding/encoding (which is handled almost everywhere by simply linking to libjpeg & co.), but after that they're 3-dimensional int array/vector/list/what-have-you (yes, there are other representations - and yes, they are all implemented across most PLs and have very similar characteristics everywhere). "file IO", too, is based upon OS-provided streams, or a crippled reimplementation thereof. It's the same everywhere. "collections" are almost language-agnostic: the names and interfaces may (slightly) differ, but the underlying data structures are the same everywhere. "input", "windows", "controls", "drawing" are event-based everywhere, and almost all languages have bindings to all the GUI frameworks. You can write GTK+ app in Python just as well as in OCaml or C# (even though GTK itself is C (I think?)) - and you'll get the same names and signatures, even.

You'll see for yourself in the decades to come - you're likely to switch the stack at least a few times by the time you retire. You'll see that most divisions in programming are illusions and - quite simply - matters of taste/personal preference, while in reality the differences between the popular languages, stacks, framework and systems are miniscule.

> Another big thing was when there are multiple ways do the same thing, having done it both ways and having direct experience of why one choice will likely be more effective in general or for a particular project. This can apply to choosing libraries/frameworks or app architectural decisions.

These are mostly language-neutral - the exact same considerations apply when deciding on library/framework or approach in every single language.

> I noticed I missed this level of familiarity quite a lot when I switched to a different ecosystem later. Maybe this is worse for native UI development because of the large API surfaces. But I found needing to consult the documentation again to be a lot slower.

It could be because of lack of proper helpers in your editor etc., but either way: if you stick with the new stack, you'll learn it naturally with time. You'll forget some of the previous stack (although I'm frequently surprised how I can recall specific quirks in technologies from 20 years ago.), which is also natural. Memory just seems to work this way. It'll take a few months to remember all the relevant details - less if the new tech is similar to something you already know.

Re:Learn more programming languages, even if you won't use them by throwaway34241 on Monday April 15, 2019 @01:17AM (#19663253)
I'm not really disagreeing that it's possible to be productive without memorizing all that (and I've since moved on to other technologies myself). Also I'm not a vim holdout, I use JetBrains IDEs with all the bells and whistles and use refactoring and keyboard shortcuts etc. But I feel like I was substantially more productive after spending a (relatively) long time on the same stack. So I'm just providing another individual data point that probably more closely matches dxbydt's experience.

Those sort of details I learned from extended use weren't really important for understanding things conceptually. But of course actually implementing something involves going through all the minor details and making lots of small choices. Being able to just breeze through that was really nice.

To use your example of a network request: on iOS it may be true the API is built on top of sockets or kqueue or whatever (I believe they've moved to user-space networking now but I don't really keep up). But you could use the toolkit APIs blocking on a background thread, or integrated with the main event loop with a delegate object, or on the event loop with a callback block. There's trade-offs to different ways of doing it (especially on a team project): some ways are more verbose, some introduce more thread-safety risk, using blocks everywhere may increase the chance that someone generates a memory leak through cyclic references, processing large requests could be more performant on older phones on a background thread, some patterns make it easy to cancel the request, etc.

I don't really miss iOS development. But I do miss the ability to go through all those details/trade-offs as quickly, and I kind of want stick with one thing long enough to develop that again.

Especially because as you observe many of the underlying concepts are the same anyway (especially among the popular languages that are the practical choices for most projects because of ecosystem/tooling concerns). To extend dxbydt's analogy I'd rather focus on the dish (problem-domain) than the cooking instruments.

Re:Learn more programming languages, even if you won't use them by klibertp on Monday April 15, 2019 @09:59AM (#19665327)
> But I feel like I was substantially more productive after spending a (relatively) long time on the same stack.

That's obvious, although the "substantially" part is a bit vague. But it's still obviously true - you will be slower if you need to check the docs often, it's a given. But:

> I kind of want stick with one thing long enough to develop that again.

It should take just a few months at most. You'll get there much faster than you (I assume, sorry if I'm wrong) expect. :-)

Or is it that you're already many months after the switch, and you still feel that you're checking the docs very often and it slows you down? Maybe there's something wrong with the docs, then? Otherwise, you should probably try learning in a more structured manner, like reading a book or doing MOOC.

> But you could use the toolkit APIs blocking on a background thread, or integrated with the main event loop with a delegate object, or on the event loop with a callback block.

Exactly the same options are present in every general-purpose language. There are quirks, like Python and threading or JS and event-loop, but you get the choice of blocking/non-blocking, and later if the non-blocking is based on threads and synchronization or on an event loop (or coroutines, green threads, CSP, Actors, etc.) The only thing that changes is nomenclature, which for some reason language developers like to reinvent all the time.

> some ways are more verbose, some introduce more thread-safety risk, using blocks everywhere may increase the chance that someone generates a memory leak through cyclic references, processing large requests could be more performant on older phones on a background thread, some patterns make it easy to cancel the request, etc.

Ok, some of these are indeed specific to a given platform and have no direct equivalent in (as many) other languages and platforms.

Yes, you need to learn those - as there's no equivalent in other languages and stacks, you have no choice but to learn, no previous knowledge will help you with them.

However, these tend to be higher-level concerns, where understanding the concept is still more important than memorizing all the relevant details. You write: "some ways are more verbose", which is obviously true, but IMO it's more important here to understand what "verbosity" is, what trade-offs it presents, and what is the "correct" level of verbosity for the task. Knowing this, finding the solution with the right amount of verbosity is as simple as opening a bunch of libraries' GitHub pages and quickly glancing on the code examples there.

---

All in all, I'm not disagreeing with you at all. You're right that remembering a lot of details makes you faster. You're right that there are considerations unique to the stack of language.

What I'm saying is it's not hard to remember all the essential details: you only need spaced repetition, which happens naturally as you work. Further, while unique features for a lang or stack exist, they are very rare, and it's not hard to learn them (exactly because they're so different than the rest, which makes them stand out). All the other - non-unique - features and consideration form a large pool of concepts which are frequently reused across many (or most, depending on the feature) languages and stacks. Internalizing this pool of concepts lets you effortlessly switch stacks and languages; and while you're right that the productivity will drop after the switch, I assert that with a bit of effort it'll get back to normal levels after a short time - just a few months (for the real mastery it would take longer, of course, but that's true always and for every kind of work).

Anyway - thanks for the discussion, I enjoyed it very much, thank you. I hope it wasn't too boring on your side :-)

Re:Learn more programming languages, even if you won't use them by chaosite on Saturday April 13, 2019 @01:07PM (#19654277)
I mean, I basically agree with you, but I like your challenge.

What about Rust's borrow checker? I considered it novel, but I'd love to find out it was stolen from somewhere.

Re:Learn more programming languages, even if you won't use them by dhash on Saturday April 13, 2019 @01:22PM (#19654392)
Rust’s borrow checker was inspired by clean [1], which applied the same semantics to monads to allow in-place updates

[1] https://en.m.wikipedia.org/wiki/Clean_(programming_language)

Re:Learn more programming languages, even if you won't use them by skrebbel on Sunday April 14, 2019 @04:56AM (#19658266)
Clean is not a mainstream language.
Re:Learn more programming languages, even if you won't use them by leadingthenet on Sunday April 14, 2019 @10:38AM (#19659645)
He didn't claim it would be, though. He just said, for every feature implemented in a top20 lang, you can already find it implemented somewhere else, 10-20 years ago.
Re:Learn more programming languages, even if you won't use them by skrebbel on Sunday April 14, 2019 @12:13PM (#19660212)
That holds for every mainstream X. It makes the challenge ridiculous.

Here's a challenge: come up with something that people generally think is fundamentally new. Given enough HN commenters, someone will present an example of how something super similar to that thing was already there 20-30 years prior.

Re:Learn more programming languages, even if you won't use them by dhash on Monday April 15, 2019 @01:45AM (#19663334)
It's especially relevant in PL or Databases. DB2 did such foundational work in database theory, and Python 3.6's new dicts finally made some very simple database theory finally available to users.

In PL, there's a massive amount of awesome languages that pretty much existed for the purpose of writing a PhD or doing something funky with semantics. It takes /really really/ long to get into an industrial strength language. Look at Rust for example, it's the first incidence of real Algebraic types for a non-gc language (excluding C++), letting you do wonderful things like https://github.com/lloydmeta/frunk

Some of my favorites are

http://bloom-lang.net/

https://www.luna-lang.org/

https://www.propellerheads.com/en/reason (i contend it's a fantastic programming language for the task)

https://cseweb.ucsd.edu/~wgg/CSE131B/oberon2.htm

Re:Learn more programming languages, even if you won't use them by klibertp on Sunday April 14, 2019 @07:51PM (#19662381)
> That holds for every mainstream X. It makes the challenge ridiculous.

But that was the point... :(

Or put another way, the major languages only include the "middle of the road", conservative features: mostly safe, uncontroversial, and well-specified and tested (it's all "mostly", "approximately" so, there are obvious exceptions). There is a limited supply of such features, which makes all the major languages have non-trivial amounts of overlap in terms of concepts or implementations. Moreover, even if one language implements a truly unique feature, it gets copied the next day (to where it makes sense), leading to even more similarity between languages.

The other part of what I'm saying is that if you research and learn as many unpopular languages as you can today - right now - you'll be covered (in terms of having to learn new features in your job's PL) for at least the next decade without any additional effort.

Re:Learn more programming languages, even if you won't use them by matt_kantor on Sunday April 14, 2019 @04:50PM (#19661633)
> That holds for every mainstream X

I thought that was exactly the point klibertp was making. The paragraph starts like this:

> Because there is very, very little unique features to each language. Unless you go to the fringes, you're bound to see the same concepts applied again and again and again

Re:Learn more programming languages, even if you won't use them by klibertp on Saturday April 13, 2019 @01:27PM (#19654419)
I think it comes from Clean language or maybe Cyclone or other safe-C dialects. Not 100% sure though - I gave up on Rust some time back due to the churn and still didn't get to go back to it :( - and anyway, at this point the borrow checker is more than 10 years old, so hardly a new feature :D
Re:Learn more programming languages, even if you won't use them by skrebbel on Sunday April 14, 2019 @05:00AM (#19658280)
Structural typing wasn't around in mainstream languages before Go and TypeScript.
Re:Learn more programming languages, even if you won't use them by matt_kantor on Sunday April 14, 2019 @12:00PM (#19660134)
I assume you were taking klibertp up on this:

> try naming any "new" feature which was added to your favorite (EDIT: I meant mainstream - TIOBE top 10 or 20 - lang here!) language recently - and I'll show you that same feature implemented 10 or 20 years ago in another language(s).

This is a fun game and I'll answer for them on this one: OCaml (1996) has structural types.

Re:Learn more programming languages, even if you won't use them by rifung on Saturday April 13, 2019 @02:38PM (#19654882)
> Lately I've confirmed its because they know exactly 1 language , but they know it so well & in so much depth, they know exactly where to look, the right mcmc library, the right slice sampler, the right optimizer, that's what matters.

That sounds like your "issue" isn't knowing too many languages but that you don't know any one language as in depth as they do though?

I don't see why you'd want to unlearn anything.. doesn't that knowledge only help?

I think there are benefits to learning more languages but also support the idea you should have at least one you're super comfortable with.. thats not mutually exclusive!

Re:Learn more programming languages, even if you won't use them by mokus on Saturday April 13, 2019 @12:09PM (#19653825)
Not sure know how far you may be into your career but as one who’s had a couple decades, it’s definitely possible to have both. I have been able to learn two very different languages (C and Haskell) to that level of comfort and am feeling nearly there in Rust. At the same time, I feel reasonably comfortable picking up a project in any of about 20 others with frequent reference to standard lib docs.

With only my own experience and that of people I’ve worked with to go by I can’t provide any broader scope, but I feel like it really is the case that a critical mass of familiarity with different languages and ecosystems makes it far easier to pick up and run with others and be more or less unaffected by the differences. It is probably important that the languages in your set be actually different though, rather than superficially different as most historically-popular languages have tended to be.

Re:Learn more programming languages, even if you won't use them by dvlsg on Saturday April 13, 2019 @02:06PM (#19654657)
I agree. If most of your experience is with a popular OO language, consider learning a lisp. Learn an ML. Try elixir/erlang to get a feel for how different programming for the BEAM can be.

I suppose you don't _have_ to use different languages to learn new concepts, but it certainly helps in some cases. For example, learning about currying is going to be much more natural in F# than it would be in C#.

Re:Learn more programming languages, even if you won't use them by mawaldne on Saturday April 13, 2019 @12:02PM (#19653769)
This reminds me of something Rich Hickey said about becoming a better developer:

https://gist.github.com/prakhar1989/1b0a2c9849b2e1e912fb

“A wide variety of experiences might lead to well-roundedness, but not to greatness, nor even goodness.”

Re:Learn more programming languages, even if you won't use them by zinclozenge on Saturday April 13, 2019 @02:21PM (#19654749)
Yea this is 100% nonsense, and is borderline gatekeeping. Well roundedness allows me to identify a particular language/tech stack that is most suitable for a task and then I can just drill down on it and get productive very quickly.
Re:Learn more programming languages, even if you won't use them by Skunkleton on Saturday April 13, 2019 @02:49PM (#19654960)
Agreed. And to address the grandparent comment. Its entirely possible that he is approaching his coding with a professional mindset and wasting time on things like maintainability, scalability, or similar just out of habit.
Re:Learn more programming languages, even if you won't use them by FakeComments on Saturday April 13, 2019 @03:19PM (#19655164)
It’s a waste of time to use classes, if all you’re doing is hacking together 500 lines into a stable enough heap to generate the graphs for a paper.

Not all academic code is that bad, but the heft is definitely towards that end of the pool.

I got really familiar with the distinction, because I spent a while translating PhD project/demo code into actual products for $JOB. It’s definitely mostly in making things secure, stable, maintainable, and debuggable that you lose most of the time.

Re:Learn more programming languages, even if you won't use them by web007 on Sunday April 14, 2019 @02:33AM (#19657919)
This a thousand times over. Academic code will take every shortcut and simplification possible. Hardcoded values, globals, no modularity, no error checking, shared-everything architecture assumptions, single-letter variables with mixed naming convention, anything to get the job done.

Once the paper is written, the data analyzed, the project is done. There is no such thing as "maintainability" because the code isn't used past publication.

Re:Learn more programming languages, even if you won't use them by shstalwart on Sunday April 14, 2019 @03:28AM (#19658048)
In mathematical code, single letter variables are often the clearest. "Descriptive" names only obfuscate the meaning further, because the meaning is in the math.
Re:Learn more programming languages, even if you won't use them by OtterCoder on Sunday April 14, 2019 @03:48AM (#19658099)
I've translated several mathematical papers into code, and I must strongly disagree. The very first thing I do is translate glyphs into names relevant to the domain I'm applying the math to. It makes the rest of the process immensely easier.
Re:Learn more programming languages, even if you won't use them by shstalwart on Sunday April 14, 2019 @04:12AM (#19658157)
I guess we'll have to agree to disagree then. I too have coded up a lot algorithms from academic papers. In my mind,

yk = C * xk + D * uk

is a lot clearer than

position_at_time_k = output_matrix * state_at_time_k + feedthrough_matrix * input_at_time_k.

The first is an idiom. The second is not.

Re:Learn more programming languages, even if you won't use them by FakeComments on Sunday April 14, 2019 @05:36AM (#19658394)
That may make sense internal to a library, where you’ve established idioms.

But as a counterpoint, I only know what you meant by the first expression because I read the second expression.

I actually agree with you in large part, that short variable names can have more meaning within an established set of idioms because they allow you to parse whole statements at once. But there’s a trade-off involved, because mathematics can take symbology further than that’s useful.

For example:

    E[i=0;5](i**2)

    sum([i**2 for i in range(0,5)])
So it often comes down to a matter of taste.
Re:Learn more programming languages, even if you won't use them by jononor on Tuesday April 16, 2019 @06:37AM (#19672478)
Why not something like this?

    position = C * state + D * input
Reasoning: k is the only subscript, so it can be dropped. Meaning of C and D are implicitly defined through their function wrt to state and input, so its OK not to name them. It also keeps the structure visible similar to that of the math.
Re:Learn more programming languages, even if you won't use them by h1d on Saturday April 13, 2019 @06:45PM (#19656224)
At this point I think it's the ecosystem that you pick and not exactly the language feature.
Re:Learn more programming languages, even if you won't use them by jlg23 on Saturday April 13, 2019 @04:02PM (#19655408)
> cook something else, not just rotate dish-ware.

As a developer you are the chef. If all you can make is spaghetti, is it the kitchen's fault? OP makes the point explicit: the language shapes the way you approach problem solving.

When declarative, functional and procedural programming all yield the "same fucking spaghetti", you might just have missed the point.

Re:Learn more programming languages, even if you won't use them by didibus on Saturday April 13, 2019 @01:16PM (#19654352)
It just sounds like they know the domain space better then you. You seem to know less about the domain of a poisson clock then them.

Maybe because I'm also unfamiliar with it, I can't judge. But knowing the right set of algorithms to solve domain specific problem sounds language agnostic to me.

That said, I agree that you should also continue to learn about CS, learn more data-structures, more algorithms, explore newer techniques and paradigms. That includes learning new languages, but not only that.

Re:Learn more programming languages, even if you won't use them by not_kurt_godel on Saturday April 13, 2019 @09:43PM (#19657006)
> Lately I've confirmed its because they know exactly 1 language , but they know it so well & in so much depth, they know exactly where to look, the right mcmc library, the right slice sampler, the right optimizer, that's what matters.

It sounds to me like you're working in a highly specialized area that requires deep domain knowledge and rich set of tools to apply that knowledge. Your colleagues have a lot of familiarity with that domain and those tools. Knowing multiple languages isn't your problem, it's just that you haven't spent your entire career working in this particular domain and you're playing catch-up.

Re:Learn more programming languages, even if you won't use them by ryanthedev on Saturday April 13, 2019 @11:56AM (#19653716)
I work for an airline. I known about constraints. If I knew only one language, I never would be at the level I am. Here is the tech stack I deal with daily.

VB6 Kix scripts Powershell .net 3.5 Winforms WPF .net 4+ .net core .net asp Java JavaScript React Angular C++ Golang.

If programming is a job and not your craft, it will be harder for you. You just have to practice more.

Re:Learn more programming languages, even if you won't use them by blub on Saturday April 13, 2019 @01:43PM (#19654520)
> VB6 Kix scripts Powershell .net 3.5 Winforms WPF .net 4+ .net core .net asp Java JavaScript React Angular C++ Golang

That just sounds like some mess that one is forced to deal with, not reasonable software engineering. I mean yes, some jobs will drown one in useless stuff. Doesn't mean that learning the useless stuff is a virtue now.

Re:Learn more programming languages, even if you won't use them by dahart on Sunday April 14, 2019 @12:03PM (#19660154)
What, exactly, makes you think any of that stack is useless or unreasonable? Do you know what all the pieces do? I don’t have a clue from a single comment, but I have enough experience to know that all stacks came from a series of reasonable decisions, and more importantly, specific problems to solve.

So, TBH, my gut reaction to your comment is you might lack experience developing & shipping any large applications. That’s not an insult, and not a judgement; experience comes with time. Plus I don’t know your experience, I’m just letting you know what your comment leads me to assume. My only suggestion is to be a bit careful throwing around judgmental words like mess and useless and ‘not reasonable’ when you don’t know precisely what you’re talking about.

FWIW, this stack looks very normal even for a web-only application, and it looks simpler to me than the stacks & tech people use for shipping console games. Hell, I’ve written personal projects with tech stacks that have as many pieces.

If I’m off the mark about your experience level, you could make your case stronger by demonstrating that there’s a simpler cleaner alternative that solves the same problems, provides the same or better performance, build utility, maintainability, deployment, user experience, etc.. Do you have any suggestions?

Re:Learn more programming languages, even if you won't use them by blub on Tuesday April 16, 2019 @04:01AM (#19671918)
Frankly, that particular enterprise is probably screwed and will be stuck with their legacy code until the end of time.

This is what happens when one gobbles up whatever Microsoft throws over the fence... and it's clear they haven't learned their lesson because .NET core is on the list. There is no simpler, cleaner, alternative for them. By their nature such companies will (almost?) always end up in this situation.

Any developer working for them must now learn VB6, ASP.NET and Powershell and other great future-proof tech. That is, once again, not a great career move and certainly not an argument for learning many languages.

For the sake of discussion, that entire stack could probably have been kept to C++, Java, HTML5 and something for scripting assuming a talented engineering team.

C++ would have covered their Windows desktop needs from Windows 9x until today, including going cross-platform if needed.

Java would have covered cross-platform desktop apps and back-end, likely including whatever they're using golang for. Had they wanted more agility on the BE they could have gone with Python which doubles as scripting language.

HTML5 is self-explanatory. No need for fancy schmancy React or Angular which I bet they'll have to replace (or rather append to) in 5 years time.

Re:Learn more programming languages, even if you won't use them by TeMPOraL on Sunday April 14, 2019 @06:52AM (#19658608)
It looks perfectly reasonable to me. VB6, KiX, Powershell and .NET suggest some part of the overall system is done through Windows desktop apps and Windows computers automation. JS, React and Angular imply that at least two frontends are involved (or possibly one under rewrite). Java, C++ and Golang are probably used for other parts.

It's only small and well-defined software that can get away in being written in one technology. For anything larger/serious, you're bound to end up in a polyglot environment.

Re:Learn more programming languages, even if you won't use them by blub on Tuesday April 16, 2019 @04:07AM (#19671945)
KiX is funny, had to look that one up, and it wasn't easy to find: it's apparently some closed source "careware" batch scripting language developed by an MS employee.

Yes, most environments use several programming languages. Done right, this can be Google's blessed languages approach. Done wrong, it can be every technology Microsoft ever brought into existence, ending up with a triplicate solution for each problem.

Re:Learn more programming languages, even if you won't use them by ryanthedev on Saturday April 13, 2019 @11:59AM (#19653750)
I had to use a jar in a .net program. Do you know how much of a pain in the ass that was?
Re:Learn more programming languages, even if you won't use them by ozim on Saturday April 13, 2019 @12:05PM (#19653795)
That is very nasty joke sir.
Re:Learn more programming languages, even if you won't use them by UlisesAC4 on Saturday April 13, 2019 @02:17PM (#19654727)
Sometimes our daily job tasks are nastier jokes than we would like to admit.
Re:Learn more programming languages, even if you won't use them by skrebbel on Sunday April 14, 2019 @04:57AM (#19658269)
Is IKVM not a thing anymore these days?
Re:Learn more programming languages, even if you won't use them by pjmlp on Sunday April 14, 2019 @05:18AM (#19658329)
Not really, and last time I checked there were no plans to ever migrate it to core.
Re:Learn more programming languages, even if you won't use them by skrebbel on Sunday April 14, 2019 @09:28AM (#19659291)
Woa, bummer! That stuff was amazing. It opened up the entire Java ecosystem to .net apps, in an impressively seamless way.
Re:Learn more programming languages, even if you won't use them by pjmlp on Sunday April 14, 2019 @10:11AM (#19659523)
Here, the project end announcement.

http://weblog.ikvm.net/

Re:Learn more programming languages, even if you won't use them by rmrfrmrf on Saturday April 13, 2019 @12:05PM (#19653790)
I'm not familiar with the author, but I didn't take the article strictly from the perspective of the labor market. There are people who program as a hobby, for example. For those who are interested, it can be enlightening to see how different language designs lend themselves to different tasks.
Re:Learn more programming languages, even if you won't use them by nathanyo on Saturday April 13, 2019 @12:12PM (#19653837)
The author wrote 'Writing an Interpreter in Go' for reference.
Re:Learn more programming languages, even if you won't use them by vram22 on Saturday April 13, 2019 @12:52PM (#19654159)
And a follow-up book about a compiler.

https://interpreterbook.com/

https://compilerbook.com/

Re:Learn more programming languages, even if you won't use them by aczerepinski on Saturday April 13, 2019 @12:29PM (#19653950)
I didn’t make that connection. That’s a very good book.
Re:Learn more programming languages, even if you won't use them by blub on Saturday April 13, 2019 @01:44PM (#19654529)
And it can be even more interesting to learn about operating systems, networking, algorithms, etc, etc.
Re:Learn more programming languages, even if you won't use them by plinkplonk on Saturday April 13, 2019 @12:01PM (#19653763)
" its because they know exactly 1 language ,"

which language is this? I'm guessing Python.

Re:Learn more programming languages, even if you won't use them by meko on Saturday April 13, 2019 @01:15PM (#19654338)
Asked myself that question too but think the answer may be: "it doesn't matter, because that's not the point".
Re:Learn more programming languages, even if you won't use them by p1esk on Saturday April 13, 2019 @02:01PM (#19654625)
Probably Matlab
Re:Learn more programming languages, even if you won't use them by bbatha on Sunday April 14, 2019 @10:13AM (#19659527)
It’s funny you say spaghetti and list two tools that were invented to eat noodles (chopsticks and forks). Even after it’s invention, it took centuries to improve the fork with a third and fourth tine. It seems hasty in an industry so young to say pick one tool and get great at it. We wouldn’t be in the same place as an industry if we didn’t accelerate web development with oo, dynamic languages, various innovative frameworks etc. a poison transform doesn’t change but the http spec and its requirements do (try writing the asynchronous code that http2 requires on the languages and frameworks of a decade.
Re:Learn more programming languages, even if you won't use them by baby on Saturday April 13, 2019 @12:52PM (#19654151)
You did it wrong. What you are supposed to do is learn a bunch of languages and master one or two.
Re:Learn more programming languages, even if you won't use them by nickkell on Monday April 15, 2019 @06:32AM (#19664356)
That's probably because those languages are completely middle-of-the-road, with a load of inconsistent APIs that one has to learn along with the syntax itself, and that don't really expand one's programming ability.
Re:Learn more programming languages, even if you won't use them by Yuval_Halevi on Sunday April 14, 2019 @10:18AM (#19659551)
that's the difference from being skilled in many eras, than focused on one single goal and be damn good at it.
Re:Learn more programming languages, even if you won't use them by hackbinary on Saturday April 13, 2019 @04:07PM (#19655439)
Is the language, or the languages library?
Re:Learn more programming languages, even if you won't use them by friedman23 on Saturday April 13, 2019 @04:05PM (#19655429)
why don't you share the code that they wrote? I'm interested in seeing the code produced by people in academia. Anyway, once you reach enough mastery in your craft using one language or another is just a difference in deciding what level of abstraction you can work at and this is determined by performance requirements.
Re:Learn more programming languages, even if you won't use them by shstalwart on Sunday April 14, 2019 @03:42AM (#19658082)
"The code produced by people in academia" is about as specific a target as asking about the diet of people in Portland. It ranges from a strict regimen of Taco Bell to pesca-pescatarian.