4 ms·
To be clear, one of the reasons I decided to focus on Python in the early 2000's was this reason, that I wanted to work within a computing language that was as
by zzzeek 7y ago
To be clear, one of the reasons I decided to focus on Python in the early 2000's was this reason, that I wanted to work within a computing language that was as accessible as possible to the widest variety of programmers, thus helping to ensure that the code I write would be maintainable by others, the libraries I create would be in high demand, and whatever code I write for employers would be maintain a high degree of transparency to everyone else at that employer.
My general impression of functional languages with Haskell at the top, is that these languages are inherently not for "junior" programmers of any stripe. That is, if you are a programmer writing Haskell code that actually works and does something useful, by definition you are nothing like a "junior" programmer. A "junior" programmer would be doing it in PHP, C#, or Python. Just the kind of motivation one would need to learn Haskell and actually be functional at it would take you out of the realm of the vast majority of "junior" programmers.
This is based on my own experience of working alongside many other programmers, many of whom were probably not necessarily "junior" however they were the kind of programmers that went home at 5 pm. These people could get a lot done but only in a language that did not require intensive conceptual visualization. Even in Python, parts of code that I would write that would get too clever / recursive / FP-ish would be lost on everyone else and I'd be stuck having to save everyone from that little clump every time something had to change with it.
- thanatropism 7y agoOne would expect that a language like Haskell abstracts away the need for junior programmers. In the same way that digital computers abstract away the need for pencil-and-paper calculators.
- rubber_duck 7y agoI've never seen a scenario like this and even with the ideal case of current abstraction frameworks there is always tedious grunt work that juniors get to cut their teeth on - doing minor adjustments to fine-tune requirements, adding minor functionality, etc. Stuff where you don't want to waste time and focus of senior devs. The only scenarios I saw where juniors were not needed is overly complex systems where the barrier to entry was so high you needed a huge amount of upfront knowledge to do anything. Those were not good projects to work on.
- sukilot 7y agoClose, but more it abstracts away the need for non-PhD programmers (or non-"could have gotten a PhD if they wanted to" programmers), and once you get a research professor on board, it abstracts away the need for mere PhD programmers too.
- reikonomusha 7y agoPython has a sort of opposite problem. It’s so easy to write code that it can be difficult for engineers to know whether the code they’re writing is good or bad. And while bog-standard imperative code is easy to read, it gets hairy when people are slinging dicts and stashing things away in object attributes at runtime. It’s easy to say “well, no true Scotsman would write code like that!” except it appears in all corners of the Python world, professional, open source, and otherwise. One example I like to cite is: What I’d you want to tee a stream in Python to two different substreams? Stack Overflow it and you see cargo culted duck-typed classes that don’t derive from any clear specification.
- dr_zoidberg 7y agoThat's not a problem really. Good code is easy to read and mantainable. Regarding the tee operator: it's a solved problem, you have ot import it from itertools[0], which should be where any experienced python programmer would strt. [0] https://docs.python.org/2/library/itertools.html#itertools.tee https://docs.python.org/2/library/itertools.html#itertools.t...
- reikonomusha 7y agoI mean something like an IO stream. Something like s = tee(stdout, myOutFile)
- emodendroket 7y agoI don't know Haskell but I have worked in Scala. It's an adjustment to express yourself in functional idioms, but the payoff is that it's easier to reason about, test, and debug (not to mention parallelize) side effect-free pure functions. I often reach into this bag of tools even when working in other languages.
- clarry 7y ago> That is, if you are a programmer writing Haskell code that actually works and does something useful, by definition you are nothing like a "junior" programmer. So what do you call someone writing useful code in Haskell for their functional programming course during their second year of CS? (That is my little sister right now)
- zzzeek 7y agoWell I was in CS about 30 years ago at this point so I am talking out of my old crusty butt but I recall that while we did fancy FP things in lisp and APL or whatever, the software we wrote was still on a very small scale compared to what you work on once you get into a job and inherit a huge codebase. I think the term "does something useful" is the point of contention on this. We wrote things like, take a document and word wrap all the paragraphs. That is useful. But that's not really a real-world enterprise level assignment. Again, that's the crusty old perpsective informing me on this, your sister could be building out a self-driving car platform for all I know in Haskell, good on them !