How Developers Stop Learning: Rise of the Expert Beginner (2013) - <AUTHOR> http://www.daedtech.com/how-developers-stop-learning-rise-of-the-expert-beginner <comment><USER3> If you work in an average company who hires average people and you are well above average you quickly risk becoming exactly that. You can be the top 5% (I know it's subjective and controversial yet I'm sure we all have a clue what that means) of developers and this will make it likely for you to be that "local maximum" as everyone will see you internally as a guru.

But at companies who are employing the top 5% of the top 5% you will probably won't even make the first round of phone screens.

Get out of your comfort zone, and simply learn something new. Go wide, go deep or go both just realize that the moment you feel you are an expert on something it just means you are probably just ready to start learning it for real.

tl;dr Knowing more than your peers doesn't make you an expert. You are at a local maximum and you need to look at the big picture to avoid being stuck there forever

<comment><USER4> > If you work in an average company who hires average people and you are well > above average you quickly risk becoming exactly that.

I liked Steven Covey's 7 Habits take on this much more "Sharpen the Saw." This approach and wording puts all the blame on those around you. That is very good to think your above those around you and that you are above average.

A) Nothing wrong with average half the people are below average

B) Rating someone top 5% is totally a perception unless your in something that can be measured easily (Think fast 100m Dash or the author's bowling)

C) Having hired dozens of people for different jobs I can tell you that my top 5% at higher usually ended up being drama and the one person I just hired because I needed a body ASAP ended up being hands down my best employee. (Look at how Google has changed their hiring practices because hiring is close to impossible to get right, think NCAA Brackets)

D) Self-deception - Everyone believes their kid is above average and self- delusion inflates our own self-assessment. Blaming those around you give you a great out of self-responsibility.

<comment><USER5> _A) Nothing wrong with average half the people are below average_

This isn't necessarily true. Imagine a system where we could rate developers. There are 4 'A' developers (92,95,97,91) and 2 'B' developers (83, 85). Only 1/3 of the developers are 'below average' as compared to below median, and flip those numbers around and 2/3 are below average. This is kind of important when evaluating the type of company culture that you're in. Is it a place where there are a lot of 'top 5%' developers, and a short tail of good, but not great developers. Or is it a place where there are just one or two developers that doing 'A' work, but a long tail of developers doing solid, but not great work. The 'average' could be misleading in these cases.

<comment><USER4> Wow I have a Theology/Philosophy degree and I have seen what I can Theology/Philosophy gymnastics to make some wierd basic fact of life into a totally different thing. You might have missed your calling.

Average = Average you have 100 developers 49 and below are bellow average :P

<comment><USER6> What is the average of [1, 1, 1, 1, 1, 1, 1, 2, 2, 10]? How many entries are below the average?

<comment><USER4> No: Dealing with 10,000 People

We are talking rank so top person ranked 10,000 and the bottom is 1. 10,000 - 5,000 are Above Average and the 4,999 to 1 are Bellow Average.

What you showed was some abstract numbers that have nothing to do with ranking.

<comment><USER6> Nobody said we were using ranking. And we shouldn't, because ranking is misleading (it loses information by hiding the size of the gaps).

But even assuming it's a ranking - in a ranking there's possibility of equal rankings, right?

So, you can have rankings [1, 1, 1, 1, ..., 1, 10000], and the "average=median" assumption is violated again.

Most real-world distributions have different average and median values, the "50% is below average" is a common misconception that should be cleared out.

For one important example see average salary - huge majority of people in (almost) every country earn less than average salary in that country.

<comment><USER4> How is this NOT ranking. You are using the logical fallacy of Reification (the turning of something abstract into a concrete thing or object) [https://en.wikipedia.org/wiki/Reification_%28fallacy%29](https://en.wikipedia.org/wiki/Reification_%28fallacy%29). What __real world example __at all works with numbers like you are saying "[1, 1, 1, 1, ..., 1, 10000]". When you are talking about specific people with specific skills you can't go abstract. Average when talking a population group in skills is ranking just like in Standardized Testing. Yes half the children in the America are bellow average and the larger the number the more this is true. Likewise the lower the number the less this is true. We are talking tens of thousands of people.

EDIT: Oh I think you looking at this like average house hold income with Bill Gates throwing off the average possibly? Well we are talking about only one thing and that is the skills of a programmer compared to the skills fo other programmers. Just the same as the average math skills of children. This is why we have percentiles and my argument still holds on. Skills are not like money where one person has $60,000,000,000 and another has $100.

<comment><USER6> Call it "median developer" and I'm OK with that. Average is a different thing. Median developer is by definition a developer that is better or equal to 50% of developers.

> the turning of something abstract into a concrete thing or object

We're talking abstractions from the start. The only abstraction all my posts here rely on is the assumption that skill level is 1-dimensional. And you started using that assumption (by referring to average developer).

Real world example:

There are 10000 programmers. Many of the programmers that are just starting to learn have similar skills to each other. Some of them work for a few years already. Their skill levels start to diverge. Many of them never develop their skills too much (because they never need to and aren't self-motivated enough). Some of the programmers got lucky, work in places that allow/require them to learn forever, and become very, very good. There are few of them, and their skills vary widely.

There are tons of people near the bottom, and very few people near the top. It's natural consequence of the amount of work and focus it takes to move from the bottom to the top.

Ranking them hides some of the differences, but not all (because it's much more common for people to have the same rank near the low end of the spectrum, where there is much more of them, than near the top - where there is just a few people separated by big gaps). So, when you took ranks from these people you would get sth like below (1=worst, 10000=best, if your ranking works the other way - reverse it it still works the same)

[1 (repeated 20 times), 2 (repeated 15 times), 3 (repeated 10 times), 4(repeated 5 times), ..., 100, ..., 10000] - so the distribution would still be skewed and the average would still be different from the median value.

<comment><USER4> Average in statistics contains the following mean, median, mode, range and more. This (Not trying to be mean or saying you are trying to do this) pseudo- intelligent attack on average because they heard a cool attack on mean when it comes to income inequality isn't pertinent to speaking about above and bellow average.

Real world example: It is still an non-measurable skill set.

> so the distribution would still be skewed and the average would still be > different from the median value

You also mixing up vocabulary your still taking average = mean BUT average also means median.

Here is real world ranking of skills (Math, Science, English and Reading) [http://blog.prepscholar.com/act-percentiles-and-score- rankin...](http://blog.prepscholar.com/act-percentiles-and-score-rankings)

Once again what scores are you comparing? When I went to Graduate School I had to do GRE and MAT test and I needed to be over 70% percentile on the test just to be average in my field of study (Theology (highest of all fields of study while Education had one of the lowest scores which makes me laugh) This had HUGE implications on my later PhD program acceptance. I couldn't say I was above average in my field because I scored really high. I had to be better then well over 75% of the people taking the test in my field of study. Just because there are a ton of beginners that start and leave that doesn't mean that there isn't a middle and that middle ground will have great skills above the learners. I counter the argument on this paper discounting average developers and placing the blame on their co-workers and environment. Average workers are not to be looked down on.

<comment><USER6> To even speak about any average you have to have total order defined. And also addition and division (if you speak about arithmetic one).

What is the average fruit from a set of 10 different apples and 3 different oranges?

It was your assumption that skill level of 2 developers can be compared.

And it's not an useless theorethical distinction. In lay terms: most programmers are worse than average skill level of all programmers.

I even showed you real world example. IT is growing very fast, so most people are beginners.

I'm not trying to look down on anybody. Being better developer doesn't mean you are a better person, and I'm not above average IMO anyway.

EDIT: I looked it up (I'm not native English speaker), and you were right about the math terminology. In Polish average=mean=średnia. Damn false friends. So, if you meant average as median I agree.

<comment><USER4> No problem. I just get upset that people take a short quote and then decide to force it on everything associated with it.

Due look at the link for ACT Test (For college admission) this kind of shows how to make an average of skills and rank them with a population group. In statistics you can do just about anything and it can be scary but there is always a middle and it just depends on your decision on what is the best tool to use.

Have a great day.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> This (partly) explains a major paradox I see: all the best software engineers I know are over 50, and yet the young'uns who dominate the tech zeitgeist assume these same people are incompetent dinosaurs. The young'uns have reached the expert beginner stage, and because they assume they're experts, they refuse to seek out the actual experts to discover what it is they don't know. And if the young'uns ARE the experts, and older developers aren't part of their in-group, then by definition the older developers must not be experts.

This is why I (for one) am strongly biased towards hiring older developers.

<comment><USER8> _All the best software engineers I know are over 50, and yet the young 'uns who dominate the tech zeitgeist assume these same people are incompetent dinosaurs._

With age comes experience and also comes a strengthening of biases. Older people, so the stereotype goes, are inflexible and set in their ways, if _very_ experienced in those ways.

It's not really paradoxical, it just depends on what tradeoffs you're willing to make as the person responsible for hiring, which depends on your line of business. There are few things more tiresome than someone making mistakes you already made two decades ago and tried to warn about, and the same applies to someone ignoring the new and improved ways to get things done just because they've always done it that way and know it the best.

<comment><USER9> Actually I find a lot of the young guys pretty inflexible. They jump on the cool thing of the day and then don't look left or right for alternatives.

<comment><USER10> Even worse, (generalization) they get frustrated and blame the team/project when the tool-of-the-day doesn't work out.

<comment><USER9> I have given this some more thought and my theory is that probably most of the currently young devs will turn into old developers that will have stooped learning a long time ago. I guess that's the natural progression of things. Most people stop learning at some time. It happened to people who started 30 years ago and it will happen to the currently young hotshots too.

<comment><USER11> As an over-50 programmer who likes to learn, I'm gonna talk about something totally unrelated to programming...

I'm a musician. I've been playing guitar since I was a teenager. As a _technician_ , I've peaked out. I will probably never play faster, cleaner, or more complex than I do now. If anything, I'll start to go downhill as age takes its toll on my hands. But as a _musician_ , I'm always getting better. I'm growing more conscious, more sensitive, more subtle, more sophisticated. I'm a better musician now than I was a year ago, and a _far_ better musician than I was five years ago.

There's a similar thing in software. When you're still learning, still approaching real expertise, it's easy to think that being a great software engineer is about technique. It's not. I know a bunch of over-50 programmers. Sure, many are basically dead in the water, but many are not, and are constantly improving. It's not because they learn a new language, or a new framework. It's because they learn better taste. They learn more and more what is and is not important, how long things will take, best use of resources, translating requirements more effectively... these things will all make you a better engineer than writing glorified Hello Worlds in framework-of-the-month ever will.

</comment></comment></comment></comment></comment></comment><comment><USER12> Technology moves so fast that I'm not sure it even pays to become the actual expert anymore, most of the time. When I was younger I'd work 40 hours a week and spend at least 40 more becoming expert. It paid off and got me to the Senior level. However, all the technology I was an expert at 20, 15, and even less than 10 years ago is useless.

When hiring I usually looked for guys that were smart and could quickly learn new things or jacks of all trades. Now if trying to write new kernel drivers maybe I'd get a Kernel/C expert who values himself at 120k/year (probably contract so I could use him for a month or two). But, lets face it most of the time companies want to hire the 3 smart enough guys at 80k/year than 2 geniuses at one specific language or technology. At least that has been my experience, then again, I usually work at normal smaller/midsize and non tech large companies. I'm sure if you work at Google your experience would be very different.

The point is I don't care about being the expert anymore as it requires a lot of my unpaid personal time. Then after investing my time for free I find the tech trending down and have to go back to the drawing board again.

<comment><USER13> > Technology moves so fast

I've heard this many times before, but have not seen any evidence yet. Mind listing the technologies that got really, totally obsolete?

<comment><USER14> I think an even better question is: Mind listing the technologies that are truly new?

So often I see the next great thing hype turn out to be a reinvention of an existing concept, or a slight rearrangement of concepts that are positively ancient. Sometimes this includes an incremental improvement over the past.

A lot of the velocity of "tech moves fast" is just backfilling tooling, features, concepts, and edge cases into the new language or framework.

</comment></comment></comment><comment><USER15> I have many years experience with all aspects of Excel, including VBA and I understood Excel better than anyone else I knew. At one stage I had the arrogance to think of myself as an expert in Excel. Fortunately, I changed companies to work at a hedge fund and realized, with some shock, that I was very far from an expert in Excel. Those guys were doing things with Excel that made my jaw drop. I had got complacent and thought I knew everything that was worth knowing.

The funny thing was that this was not the first time this had happened to me. I underwent a very similar experience with C programming. I had read all the books, thought I understood everything there was to know about the language, then got exposed to some real C experts at a small high-tech company. That was a humbling experience as well.

Needless to say, after getting humbled twice, I will be very careful before I ever call myself an expert at anything in the future!

<comment><USER16> I'd be interested to know what sort of things you saw the hedge fund employees use Excel for. I'm probably at that 'local maximum' point with Excel, and would be interested in knowing what areas I could look into to further my skills. The only 'growth area' I'm currently considering is Apps for Office.

<comment><USER17> So you may be interested in [http://www.modeloff.com/](http://www.modeloff.com/) which is a competition for using Excel to create financial models. I was made aware of when listening to a Planet Money episode [http://www.npr.org/sections/money/2015/02/25/389027988/episo...](http://www.npr.org/sections/money/2015/02/25/389027988/episode-606-spreadsheets) , which I would also recommend if you haven't listened to it already.

</comment></comment></comment><comment><USER18> I recommend reading the whole series of posts; I am only part way through, but it has been very enlightening.[0]

Getting out of this trap is what motivated my first two job changes. I think there are a few things that are useful in staying on the narrow, difficult road to true expertise[1]:

\- Engagement with the wider technology community. You need to know where the global maxima are

\- An insistence on objective measurement and argument, rather than subjective assessment

\- A low tolerance for cognitive dissonance or sacrifices in quality to meet a deadline

\- A willingness to follow through and see the fruits of one's labor

\- As a corollary to the previous point, an insistence on shortening the feedback cycle as much as possible

\- Actively working to make it safe for others to criticize you and a willingness to say "I don't know" (in case you didn't know, criticizing others is genuinely very frightening for most people)

\- Greater graciousness towards subordinates, less towards superiors (the reverse of typical corporate culture)

[0] [http://www.daedtech.com/tag/expert- beginner/](http://www.daedtech.com/tag/expert-beginner/)

[1] Not that I am an expert, just that I _know_ I'm not an expert; and that I have met enough of both real experts and expert beginners to tell the difference.

<comment><USER18> Also, I have a hypothesis that Impostor Syndrome is the last defense of the rational mind against the descent into Expert Beginnerism. It certainly saved my bacon[0]. Listen to those doubts and seek out a mentor or a new job.

[0] In the sense of "How in the hell did the success of this project end up resting in my hands?" or "Why am I making fundamental revisions of the architecture?"

</comment></comment><comment><USER19> Published 3 years ago?? I thought he was commenting on whats going on now...

I think a great example of my issue with this is my father and I. He taught me the basics and got me to the Adv Beginner stage which allowed me to progress on my own. However, I chose web and he stayed with .NET for a long time. Only after a lot of pushing he started doing web like 5-6 years ago.

I, an expert beginner at the time (and probably still), thought I was way better than my dad. How could this guy not be better than me already? No answers to my questions. etc. In hindsight, yea I was better but his experience meant he learned things I never did cause I never knew I need them. HE also knew things from his several decades of experience that let him think through problems or only accept a certain level of quality in his work that let him solve and deliver things much better than what I can/could.

That said, we argued a lot about things. A father and son like us can have those debates, some times a little too heated, and be okay. But, if I was hiring I would be cautious (not opposed) about brining on people who would be too opposed to the way things are. The problem is that we (humans) avoid conflict and begin to play politics. If they don't avoid the conflict then we have open hostility. Either way, groups start forming a them/us mentality takes hold instead of the company working as a whole. Thats basically my general fear if I was in a position to hire. Thats what I feel "bad culture fit" would mean.

</comment><comment><USER20> I see this a lot in large enterprise environments. You have the "one person" or "few people" who implemented something 10 years ago and those architectural decisions are then re-implemented in any new project.

Because that person has knowledge of legacy and carries it over to new, they are compensated and promoted accordingly. Meanwhile any new ideas or better designs are sometimes dismissed because they're outside the comfort zone of the development team that has a collective 50+ years experience in that company.

Of course, many of us are resistant to new ideas regardless, but I see this pattern play out most often at large organizations.

<comment><USER21> Which is part of why startups can be successful, right? If large cos took the same risks and did the same things as startups, startups would not exist.

<comment><USER20> Completely agree, startup success is as much quick thinking and process as it is new ideas.

</comment></comment></comment><comment><USER22> The "expert beginner" concept almost gets it right, but it needs a little tweaking. The key insight is that growth stalls out when people lock into a sub-par set of habits ... and then spend years perfecting this not-so-good approach.

I've seen the same thing happen with journalists (oh, my God, it is chronic and horrible there), and with chess players, musicians and all sorts of other specialists at various crafts and creative skills. These people trap themselves with habits that prevent them from ever being great, yet are just marketable enough that they can earn a living for a long time.

The rot doesn't always set in exactly at the "advanced beginner" stage. It occurs whenever people's willingness to rebuild their game disappears, or whenever they fall under the sway of a mentor/boss who demands conformity to B-minus work practices.

</comment><comment><USER23> I like this article. I think im somewhere between the "competente" and "proficient" level learning and working with C++ and CUDA/C. As long as you dont consider yourself "an expert", you`re good. Experts are rly rare and otherwise you are most likely an expert-beginner stuck in the dead-end of the fork.

Two things i may add:

1.) I think the only way out (beside getting help from others) of the expert- beginner dead-end is through gaining more knowledge, instead of gaining more experience.

2.) In applications, theres a massive, i call it "invasion" of "experts", just because everyone is claiming to be an "expert", not to be sorted out by HR. HR is most likely not a domain specialist in programming stuff. Now, given you state in your CV, you are "proficient", but an "expert-beginner" states "hes an expert", your kicked out of the interview stage. What a mess!

</comment><comment><USER24> Just a quick plug for the wonderful Expert Beginner Twitter account. [https://twitter.com/ExpertBeginner1](https://twitter.com/ExpertBeginner1)

</comment><comment><USER25> There is a time-salary curve where it's socially acceptable to be a beginner. If your years of experience or salary are great enough, it takes a very honest, humble, and rare person to say "Look, I see and hear everything you're showing me. I clearly have no idea what I'm doing. Help."

The most important part of the article is this:

> ...and for whatever reason doesn't have much interaction with peers?

At some point you need to be shown what you don't know, and it's very rare for that to be a self-guided learning experience.

<comment><USER26> It's a u shaped curve though, sufficiently experienced people actually gain reputationally by admitting lack of expertise in a particular area. Only really works though if you're already respected for something else.

<comment><USER27> It's because they've stopped saying "I don't know" without following it up with "but I'll find out and get back to you tomorrow." And then actually doing it.

</comment></comment></comment><comment><USER28> If you want to break out of the 'Expert Beginner' mindset, here are some helpful things that can challenge you to grow:

\- commit one _new_ mistake every day

\- read about a theory, concept, model, or idea you didn't know before

\- look up the history of one tool, language, or software package you rely on and learn a little more about it

\- look up, and read at least one page in documentation for a tool you use

Making a daily habit of some or all of these tasks will force you out of your plateau. There's no telling in which direction your learning will grow - <USER2> it's hard to stay stagnant in your skills when continually exposed to new ideas. So make a habit out of exposing yourself to, and generating new ideas!

</comment><comment><USER29> Can someone propose a test or at least some heuristic to check if you, yourself haven't fallen in that pit? Because this seems like something that would be very easy to diagnose in others, but almost impossible to see in yourself.

<comment><USER23> I propose to study technical literature. Study advanced books at a university library. If what is written inside is new to yourself AND you consider yourself an expert, you are in the expert-beginner pit.

<comment><USER29> Well, I do study technical literature — just today finished reading lecture slides for Stanford's CS143. The problem is, the technical literature that's interesting to me is dealing with much harder problems that I get to solve on day-by-day basis.

</comment></comment></comment><comment><USER30> > _They've officially become Expert Beginners, and they're ready to entrench > themselves into some niche in an organization and collect a huge paycheck > because no one around them, including them, realizes that they can do a lot > better._

I think article is a bit naive. Nerds love learning for sake of it, but that is not usual. In what way the Expert Beginner could do better? Collect even bigger pay check? Or do less work for the same salary? Being N times better developer does not usually bring N times more rewards.

<comment><USER31> I have seen this happen several times. Some, not all, programmers and IT professionals are nerds as you describe them. In most Professional positions I have held, maybe 1 in 50 people programmed outside of work and maybe 1 in 20 chose to learn beyond the minimum required to get by.

Startups seem to have more of these types and big companies, fortune 500 sized seem to have almost none.

As for how it betters oneself to learn, you cannot know until you learn it. The new tech exists because someone tried to solve the problems of the past, sometimes it works. You can't know the benefits of object oriented or functional programming if you are still writing the same cobol you did in the past or for a more modern analogy you will need to stand up more apache servers to get the same throughout if you have never learned about nginx.

<comment><USER23> "In most Professional positions I have held, maybe 1 in 50 people programmed outside of work and maybe 1 in 20 chose to learn beyond the minimum required to get by."

Double signed. Barely anyone is using his free time to learn more than needed at the workplace (which means the employees are stuck at the "minimum knowledge level"). And this is not just true for the IT branch.

</comment></comment></comment><comment><USER32> At jobs like this article is referring to, we need to remember that you're never going to improve in life if you keep competing with people who stink. No offense, those who are not well versed. You gotta challenge yourself. If you don't, complacency sets in. And bad things happen when you become complacent.

</comment><comment><USER33> I'm worse at what I do best And for this gift I feel blessed

Kurt Cobain</comment>


Show HN: An app for entrepreneurs' Eyes - <AUTHOR> https://itunes.apple.com/us/app/eye-care-20-20-20/id967901219 <comment><AUTHOR> We built this in a day including the icon. My doctor recommended the 20-20-20 rule, which says those who work long hours in front of a bright screen should look at least 20 feet away every 20 minutes for 20 seconds.

<comment><USER2> Bet you didn't do that whilst developing this!

<comment><AUTHOR> Lol, that's a meta comment.</comment></comment></comment>


From Federal Worker to Uber Driver: Odd Jobs to Make Ends Meet in the Shutdown - <AUTHOR> https://www.nytimes.com/2019/01/22/us/government-shutdown-moonlighting-uber.html <comment><USER2> This seems like unnecessary denigration of what is a very respectable job that provides more direct service than a federal work and probably more satisfaction to the worker

</comment><comment><USER3> The WSJ reports that federal credit unions are extending payday loans to federal employees. So why so many articles about federal workers seeking odd jobs, defaulting on their mortgages, etc?

Can't they find their way to their banks?</comment>


Father of the moderm tiling WMs proposed for deletion in Wikipedia.  - <AUTHOR> http://en.wikipedia.org/wiki/Dwm <comment><USER2> Wikipedia should disable "non-notable" article deletion for a year and see what happens. The rampant deletionist problem really hurts editor morale. People spend hours working on articles only to have them deleted, often for arbitrary reasons. For a site that lives and dies by its ability to attract new volunteers, they sure do their best to scare people off.

<comment><USER3> Wikipedia also lives and dies by it's reputation. People have tried forking Wikipedia with more inclusive policies numerous times (the code base and articles are open source), and they've all ended up filled with junk.

I was involved with Wikipedia very heavily for it's first three years (not been involved for the last 5 years), and there have been periods when it went through more liberal stages of allowing a broader range of content. The policies they have now aren't something that've just been made up. They're policies that have evolved over a decade of seeing what works and what doesn't.

Non-notable articles often end up abandoned and vandalized for long period. Sure the precise criteria for notability and verifiability might be debatable, but there's absolutely no question that those criteria help make Wikipedia a reliable source of data.

Think about the reason you want something in Wikipedia (rather than just say on a Google Sites page or Mahalo, etc). You want it on Wikipedia precisely because of the reputation it has, and that reputation is in a large part down to the criteria of notability and verifiability.

<comment><USER4> I think people miss this subtle point, which is it's about volunteer's time and effort, not disk space. I want Wikipedia to contain as much information as humanly possible (and by "humanly" I mean across our species), but I recognize that it's a finite number of volunteers managing all of it. For that reason, it's inevitable that some articles will get cut.

<comment><USER5> If people are complaining about their articles getting cut, doesn't that mean that they care about those articles and would maintain them? Wikipedia is actively spurning volunteers and _reducing_ that "finite number" with deletionism.

<comment><USER4> Not necessarily. I think people are more likely to complain than do the grunt- work of active maintenance. It's certainly easier to do so. And creating an article doesn't indicate commitment.

I think there are problems - from what I've seen, people outside of an area can be too quick to judge notability. But I find the attitude that nothing should be deleted naive.

<comment><USER6> After a WP article about writer Alan Cabal was deleted, following many AfDs, I re-wrote it from scratch as a Squidoo lens, probably for the better: <http://www.squidoo.com/Alan_Cabal>

The WP article does still lie in userspace waiting to be resurrected, but it's a complete waste of time to try and get it back into mainspace: [http://en.wikipedia.org/wiki/User:MichaelQSchmidt/sandbox_Th...](http://en.wikipedia.org/wiki/User:MichaelQSchmidt/sandbox_The_unloved_article)

There are other options out there. Citizendium? If the article about dwm is deleted, re-write it at Citizendium. Why not?

Wikipedia is so 2001-2009. Its time is over, I think.

</comment></comment></comment></comment></comment></comment><comment><USER7> [http://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletion...](http://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletion/Dwm_\(2nd_nomination\))

This page is a lovely example of why I don't contribute to wikipedia anymore.

All the arguments are along the lines of, we should delete/keep this, because (WP:A, WP:B, WP:NO, WP:YES, meatpuppets, sockpuppets, random wikipedia lingo, inuslt to people who do not know wikiepda lingo)

I agree shared vocabulary helps communication, but on wikipedia it has become an active tool to discourage new editors. Sad as at one point I believed wikipedia to be the best thing to happen to Internet.

<comment><USER8> Out of curiosity, are there any Wikipedia forks?

*BSD guys had a lot of similar arguments and they ended up with many flavors of BSD (OpenBSD, NetBSD, FreeBSD, DragonFlyBSD etc.)

<comment><USER9> Some spammers mirror it.. But that's about it.

If you can work out a good way to share most edits between the forks --- because most edits won't be a source of argument --- then you have a fighting chance.

<comment><USER10> It could be as simple as mirroring wikipedia but never propagating the deletions. Trying to edit an article would redirect one to wikipedia; trying to edit a deleted article would instead edit the local copy (in the event of the article being recreated on wikipedia at a later date there could be an automatic upstream merge).

<comment><USER9> This might be a good start. Though you will also want to keep links to the deleted articles alive.

<comment><USER11> If you took half a second to look through the "New pages" feed, and saw not only the hideous quality and dubious nature of nearly all newly created pages, but also the vast quantity of new articles created every few minutes, you might rethink your position on keeping all deleted articles. Many new articles deserve speedy deletion.

<http://en.wikipedia.org/wiki/Special:NewPages>

<comment><USER10> Ok, so only add pages to the mirror that are older than N days or have more than M (non-reverted) edits. Probably you'd also need to have tracking for when page names change. It's not a deal-breaker.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> <http://en.wikipedia.org/wiki/User:Miami33139> is trying to remove every free software from wikipedia (ejabberd, many IM clients, dwm…).

<comment><USER13> Interesting how in his/her user-page, Miami33139 puts forth a defensive claim of being 'inclusionist'.

<comment><USER14> Also interesting how Miami33139 uses Ubuntu.

<comment><USER9> How does he? (I feel a bit creepy stalking him like this on the internet.)

<comment><USER15> It says on that on that page.

{{User :OS:Ubuntu Netbook Remix}}

</comment></comment></comment></comment></comment><comment><USER16> Yes, deletionism is getting ridiculous on WP. And it's only going to get worse, due to _evaporative cooling of group beliefs_.

[http://lesswrong.com/lw/lr/evaporative_cooling_of_group_beli...](http://lesswrong.com/lw/lr/evaporative_cooling_of_group_beliefs/)

But what to do about it? Various people have mentioned the idea of a WP fork. This has been tried before, a number of times. These tend not to go anywhere. The problem seems to be getting a critical mass of people to work on it.

Another idea I've been wondering about: start a movement to get inclusionists back into WP. It should have its own website, discussion area (inside or outside WP?), etc. Someone should write up ideas on how WP can be changed (e.g., vote NO on _all_ deletion polls, not as a statement that any particular article should not be deleted, but rather simply to set a higher standard for deletion).

Thoughts? (Or has this also been done already?)

<comment><USER17> From what I've read, this kind of thing (an organized movement of people planning to get into Wikipedia and influence votes) would make a lot of editors cream their pants in anticipation of all the bans for "canvassing", "sockpuppetry" and "meatpuppetry" they'd be handing out and how heroic they'd be defending wikipedia against such heinous infiltration.

</comment></comment><comment><USER18> I personally can't see why any article should be deleted unless it's obviously erroneous, its not like they're short of disk space. Obscure articles will likely remain as such, due to lack of references to them; deletion seems rather draconian.

As an aside I wonder if Wikipedia will ever be forked due to this apparent increasing bureaucracy.

<comment><USER19> Indeed the disk space argument is frivolous given the amount of discussion generated around deleting articles, besides which I wouldn't even be sure that articles are permanently deleted. This ignores the cost in time and morale to contributors.

</comment></comment><comment><USER20> Stuff like this makes me really want to publish a magazine called "Citation Needed" or "Articles for Deletion" that would just contain short articles by experts on whatever was speciously put up for deletion that month, just to flip off feckless deletionists. It would be worth it for the Wikipedia citations alone.

</comment><comment><USER21> Definition: Encyclopedia (from wikipedia) a comprehensive written compendium that holds information from either all branches of knowledge or a particular branch of knowledge

</comment><comment><USER22> !#@!@^% deletionists are ruining Wikipedia. They'll be the first against the wall when the revolution comes.

<comment><USER9> Reminds me of the Hitchhiker..

</comment></comment><comment><USER23> I cannot agree with deletionists, but it's still important that articles cite reputable sources. Unfortunately, those same reputable sources are by and large the same ones needed for notability.

About a year ago, there was a mini-campaign on HN to save the article about Fravia. It narrowly avoided getting deleted, but look at it now - <http://en.wikipedia.org/wiki/Fravia> \- it's still a terrible, rambling mess, with almost every citation leading to Fravia's own website. The information in the article may or may not be true, and we don't really have any way of knowing.

It really seems like something has to reach a certain level of notability before it's possible to write an article of sufficient quality about it.

<comment><USER24> Again, you don't speak to the criteria. It seems that dwm may actually meet the criteria these people are now employing. If so, a principal lobe of the brain of the open source movement is being cut out ... by itself.

</comment></comment><comment><USER25> No, <http://en.wikipedia.org/wiki/Ion_(window_manager)> is the Father of modern tiling WMs

</comment><comment><USER26> I also have stopped contributing to Wiki. It's not worth it after hours of work being deleted. They only want popular articles.

</comment><comment><USER27> I'd say Ion is the father of modern tiling WMs.

<comment><USER28> I was about to say... dwm was more like the grandson of modern tiling WMs.

Hell, it was fork from dwm author's _own_ project wmii.

</comment></comment><comment><USER29> Don't have the patience to read the whole deletion policy page. Why would they want to delete such a thing? Is it inconceivable that some day somebody might stumble across the word "dwm" and look it up on Wikipedia?

<comment><USER30> People don't want Wikipedia to be dump for all possible information.

<comment><USER31> Yes they do.

Personally I want EVERYTHING in it, even if it's not notable, I don't care. The guideline should be: would 1 other (un-involved, un-related, etc) person on the planet be interested it? Then put it in.

I want to see a page on tips and techniques on laying brick, and page on the history of the coffee house down the corner from where you live. Everything.

</comment></comment></comment><comment><USER32> Grrr. Wikipedia protocols for notability are just terrible for FOSS projects, which is rather ironic. I'm still kinna peeved about the deletion of the StumpWM article.

</comment><comment><USER33> I'm sure these policies are designed to keep up quality. Deletion is a great incentive for improving articles. Perhaps the best thing to do in this case is to fix the article at the moment there is little content. If you care, fix it :-).

<comment><USER34> Deletion isn't about improving articles. It is about removing them. If an article covers an obscure topic or person, what of it, so long as the article is properly referenced? There are many topics out there that are definitely arcane and of little interest to most people. Does this mean that Wikipedia ought to be a knowledge base for nothing but pop culture? I sure hope not.

<comment><USER33> Have you read the article? It reads like a blog entry rather than an entry to an encyclopedia. Wikipedia has been criticized before for not being well researched and factual. The problem with the article is it may as well be someone's opinion on the WM. I'm all for more pages but this does not read well. My point is if you care, make it read like it belongs in there. Wikipedia is not supposed to be an internet archive it's supposed to be factual.

<comment><USER19> There are flags that can note the article is poorly written so that noone mistakes it as authoritative in its current state. Indeed in this manner people interested in the subject can be attracted to improve it.

</comment></comment></comment></comment><comment><USER35> Haha, oh the irony... I once had my very own WM articles deleted on the portuguese wikipedia by a proposition of guy that... cataloged guava varieties.

</comment><comment><USER36> The pro-deletion side come across as dicks, but I think they're right.

Does every piece of software ever written need a Wikipedia page? If you don't like where they're drawing the line, where would you draw it?

<comment><USER37> What's wrong with every software ever written having a Wikipedia page if someone cares enough to make one?

<comment><USER4> We need more than one person to maintain a Wikipedia page. Multiple people should be able to vet an article's accuracy. I think the concept of notability sometimes isn't that the topic doesn't _deserve_ an entry, but rather that there aren't enough sources to make the entry obviously accurate.

(Granted, I understand sometimes the argument is that a topic doesn't deserve an entry.)</comment></comment></comment>


Curiosity Tests a New Way to Drill on Mars - <AUTHOR> https://www.jpl.nasa.gov/news/news.php?feature=7070 <comment><USER2> I know actually doing the work of drilling into a rock, seeing how much powder you get, then reprogramming to try it a different way probably iant actually all that cool, but the though of working on something like this is just amazing :)</comment>


Multiple Western Digital 5400RPM drives are actually 7200RPM drives - <AUTHOR> https://old.reddit.com/r/DataHoarder/comments/ikk0rv/psa_multiple_wd_5400rpm_drives_are_actually/ <comment><AUTHOR> Getting 7200 rpm drives when expecting 5400 rpm drives may result in increased power consumtion and heat issues. Pluse 7200 rpm drives are noticably more noisy than 5400 rpm drives.

Many EMAZ and EZAZ seems to be affected.

It seems that the iOS app Phyphox can be used to determine if your drive is running at 7200 rpm or 5400 rpm using acoustic analysis.

From the comments:

> "There is an app called phyphox that allows you to access all of your > phone's sensors. If you download it and use the Acceleration spectrum > feature, you can measure the speed of your drive by simply placing your > phone on top of the drive. The application is surprisingly accurate and I > use it to check the health of my drives."

<comment><USER2> If my memory serves me right, 7200 rpm result in higher spinning but reduced seeking/head noise (which I personally dislike more).

edit: I'm probably wrong

<comment><USER3> Why would rotation speed inversely affect head noise?

<comment><USER4> Ever drive a manual transmission? At very low RPM the engine will seem to _shake_ more. It isn't so much that there is less vibration at higher speeds but that it occurs at a higher frequency. That means the amount the part physically moves from one side of the oscillation to another is less, just as a higher-revving engine doesn't bounce around as much as it would at lower RPM. The total amount of noise/vibration may be similar but the change in frequency can still have other effects.

</comment></comment></comment></comment><comment><USER5> The hard drive industry is such a weirdly complex marketplace. For example, there's people dedicated to "shucking" the external hard drives for the purpose of extracting the drives inside for use in a NAS or wherever, which would normally sell for higher than those with the external enclosure included, then chronicling the types and attributes of the drives they've found. The [https://www.reddit.com/r/DataHoarder/](https://www.reddit.com/r/DataHoarder/) subreddit is a strange place.

<comment><USER6> Not sure if this will go on, often enough, USB hdd have dedicated controllers with direct usb bridge, you can't use it as sata unless full mod.

<comment><USER7> Not the mybooks which is what people are shucking. I have about 20 in my nas and they're going strong. For ~$120/8TB hard to go wrong when they're essentially red drives inside (they've switched to white label drives with the same-ish specs).

The controller card inside of the enclosure is just a simple usb and power converter.

</comment></comment></comment><comment><USER8> I bought a WD SSD recently and when I plugged it in, the firmware reported that is was actually a SanDisk, which is I guess a lower-end WD brand at this point. I saw an Internet discussion of other people having this problem with a July 2020 batch of SSDs, so I texted into Amazon support which promised to send a WD drive that didn't report itself as a SanDisk drive to the system.

I'm sure you can guess where this goes. The replacement unit arrived a few days later-- this drive also was marked WD on the outside and identified itself to BIOS etc. as a SanDisk drive. I called Amazon support again and they appeared to consider it a manufacturing defect and I returned it for a refund.

I'm not sure how much I care about whether the drive is SanDisk or WD, but it ought to be consistent. If WD can't get that simple step right I'm not sure why I should trust them to secure and maintain the integrity of a TB of important data.

</comment><comment><USER9> I would have thought giving a customer a faster than spec product isn't a terrible sin.

<comment><USER10> In this case it is. High capacity 7200 rpm drives can be unbelievably noisy, to the level that they are not recommended for home theatre NAS as you can hear the seeking sound during a movie or from the next room at night.

<comment><USER11> Speaking of seeking, if the data was laid out sequentially on disk, and the computer was not accessing any other files on the disk in question (spinning disks for movies and other data, SSD or m.2 for OS itself), then it would be very silent. But my impression is that a lot of the time we end up with files fragmented more than what is desirable. That's another wish of mine, that I would have a system that would keep this in mind and which would be better tuned to my use. Maybe one day.

<comment><USER2> Windows had (has?) a defrag tool for this purpose. With SSDs, it's not an issue.

<comment><USER12> Windows 10 had a bug this year where it defragged the SSD (yes) on every boot instead of once a month.

<comment><USER13> Wow first I've heard of this, do you have a source? I'd like to read more about it.

</comment></comment></comment></comment></comment></comment><comment><USER14> How much mechanical difference is there between (designed as) 5400rpm and 7200rpm drives nowadays? I'm somewhat surprised that they seem to be faking the performance characteristics rather than changing the rotation speed?

<comment><USER15> That's simply not possible. Tolerances are too tight on a modern drive.

</comment></comment><comment><USER12> Can HDs be (safely and effectively) slowed down by the user, with appropriate drivers? If not, why not?

<comment><USER16> Most likely not. The motors are most likely fixed speed. Even if not, the speed is unlikely to be setable through the sata interface, you would need to adjust the firmware --- and it's not usually a good idea to adjust hard drive firmware without deep knowledge.

</comment></comment><comment><USER17> That's strange. I would assume 7200rpm drive would be costly to produce compared to 5400rpm. What possible reason could they have to falsely advertising which could be a loss.

<comment><USER18> Economies of scale.

Producing 7200 RPM drives likely is more costly than 5400 in isolation, but running two full production lines itself is costly, when you could just run one and "fix it" via software.

Plus it allows you to vary the number of 5400/7200 RPM drives you "produce" to exactly what the market wants. Just keep them unlabeled in a warehouse as orders arrive: label, firmware, and ship.

<comment><USER12> Those would be 5400rpm drives maybe 7200rpm capable), then, not 7200rpm.</comment></comment></comment>


Rich Hickey's Clojure Bookshelf - <AUTHOR> http://www.amazon.com/Clojure-Bookshelf/lm/R3LG3ZBZS4GCTH

<comment><USER2> The most important item is completely out of stock :/

<comment><USER3> > _" Books that influenced Clojure, in no particular order"_

These books aren't ranked in order of importance.

<comment><USER4> This was a joke, the only out of stock item on the list is the Hammock at the bottom. This is a reference to Rich's talk "Hammock Driven Development": [https://www.youtube.com/watch?v=f84n5oFoZBc](https://www.youtube.com/watch?v=f84n5oFoZBc)

<comment><USER3> I missed the joke and the hammock. Had I seen the hammock I would have gotten the joke. I love that talk!</comment></comment></comment></comment>


Show HN: Alternative To by SaaSHub – view the top alternatives of any software - <AUTHOR> https://chrome.google.com/webstore/detail/alternative-to-by-saashub/bfllfmelefabahclnehpdocekedapcbj <comment><AUTHOR> Hi HN mates! I want to share my first ever Chrome extension.

All it does is querying SaaSHub for the top alternatives to a software product you are browsing. It is very simple and should save you time.

It already got some positive reviews and upvotes on ProductHunt so I hope it will be appreciated here, too ([https://www.producthunt.com/posts/alternative- to-by-saashub](https://www.producthunt.com/posts/alternative-to-by-saashub))</comment>


CShell: A simple, yet powerful, C# scripting IDE - <AUTHOR> http://cshell.net/ <comment><USER2> Well presented. I clicked the link and spent my loading-spinner time thinking thoughts along the lines of "This is silly. Why would anybody build a C# IDE to compete with VS.NET + ReSharper? Surely nobody would ever use anything but that??? I can't believe that anybody would be cheap enough to..."

... and then I arrived at a page that spent ten seconds clearly explaining exactly why I would want to use this thing even though I have VS.NET already installed on my machine.

A lot of open source & developer-facing small product sites in the world would be well served to read the contents of this page and study exactly what the author did there.

Well done!

<comment><USER3> The title would have been better if it said C# REPL. Then you wouldn't have experienced that confusion.

</comment></comment><comment><USER4> I guess I'm old. My first thought was [http://en.wikipedia.org/wiki/C_shell](http://en.wikipedia.org/wiki/C_shell)

<comment><USER5> It probably should have been named CSShell :-)

<comment><USER6> But I read it as CSS hell. Maybe SharpShell? Anyways, both are better than the original IMHO.

By the way, this is really useful. Loaded all our app libraries and works like a charm. I feel much more productive now except for the fact that it made me comment on HN =)

<comment><USER7> SharpShell would be a great name - fun alliteration and pretty clear what it's for.

<comment><USER8> I like it, will consider it. The naming is a bit unhappy, I agree.

</comment></comment></comment></comment></comment><comment><USER9> Nice to see another entrant in this space, offering functionality beyond LINQPad⁰ and the old SnippetCompiler¹. Microsoft has experimented with a REPL of their own² but there's nothing official yet.

Mono's REPL³ (MIT X11/GNU GPL; 2008) still has some rough edges on Windows. CS-Script⁴ (MIT; 2009) seems to have received the widest use but was hampered by a weird license until recently. Microsoft MVPs have stepped into the ring with scriptcs⁵ (Apache; 2013) based on the brand new Roslyn tech.

⁰ [https://www.linqpad.net/CodeSnippetIDE.aspx](https://www.linqpad.net/CodeSnippetIDE.aspx)

¹ [http://www.sliver.com/dotnet/SnippetCompiler/](http://www.sliver.com/dotnet/SnippetCompiler/)

² [http://stackoverflow.com/questions/1187423/anders- hejlsbergs...](http://stackoverflow.com/questions/1187423/anders-hejlsbergs-c- sharp-4-0-repl)

³ [http://tirania.org/blog/archive/2008/Sep-08.html](http://tirania.org/blog/archive/2008/Sep-08.html)

⁴ [http://www.csscript.net/index.html](http://www.csscript.net/index.html)

⁵ [https://github.com/scriptcs/scriptcs](https://github.com/scriptcs/scriptcs)

<comment><USER8> The sweet spot between a more full featured IDE like VS, LINQPad, or SharpDevelop and a REPL environment has not been explored very much so far. Even ScriptCS is more of one-off execution kind of setup, although they do have a REPL.

Filling this gap is what I tried to achieve with CShell. When I started, the Mono REPL was quite a bit ahead of Roslyn still, but now Roslyn overtook it. I'm planning to switch to Roslyn for the execution engine and use NRefactory for the code completion still (especially now that Roslyn is open source).

Where I want CShell to go, is it being a light-weight IDE with a focus on iterative execution. I use LINQPad evey day for DB stuff for example, but when I want to write progressing code, usually exploring some kind of data space - where I test each line, plot some charts, look at the data the variables contain - then there's no real competitor so far for C#. Either you have Matlab, R one one side, or linear code execution environments on the other.

</comment></comment><comment><USER10> Why don't people do a quick search before naming things: [http://en.m.wikipedia.org/wiki/C_shell](http://en.m.wikipedia.org/wiki/C_shell)

<comment><USER11> Maybe it really means "C Sharp Hell".

</comment></comment><comment><USER12> A combined REPL and editor for C# looks useful. I will try it next time I have some spare time.

The name is confusing. A C shell already exists ([http://en.wikipedia.org/wiki/C_shell](http://en.wikipedia.org/wiki/C_shell)). An alternative name could be CSharpShell. Btw, while googling that name, I found CsharpRepl, which seems to be a somewhat similar tool.

<comment><USER13> These tools straddle some Venn circles, so the developer pitch can be confusing.

For example, I make use of both ipython and bpython, both of which I refer to as either shells or REPLs; though neither program is a proper shell (in the /bin/chsh sense), and though people also call them "interpreters" (technically, the python interpreter still interprets), "environments" (vague) or even "IDEs" (wat?) – the concept behind the tools is popular and well- understood.

Personally I think it's particularly funny to call these Enhanced REPL Shell Interpreter Environments (or what have you) "IDEs" and lump them in with Eclipse or Visual Studio or those other behemoth coding tools; I like bpython and ipython for the myriad ways they are un-Eclipse-y, and if I did C# I would presumably get into CSharp for the same reasons. All of which, like many bicycle-shed innovations, are mere matters of taste.

</comment></comment><comment><USER14> Not very often you find a hedge fund behind an open source project. I guess it makes sense really, as many quants will be happy to mess around in a python shell, having a C# shell will probably play nicer with the rest of the companies infrastructure.

<comment><USER15> There are a few hedge funds that are quite happy to contribute open-source to the world.

Blue Mountain Capital for example;

[https://github.com/BlueMountainCapital](https://github.com/BlueMountainCapital)

One of their projects is Deedle; an F#/C#-equivalent of the Python 'Pandas' data frame package. Which would in fact make a nice complement to CShell I imagine.

Jane Street would be another choice: [http://janestreet.github.io/](http://janestreet.github.io/)

Their work on OCaml is currently trending on HN.

There are others I am sure, don't have any links handy.

Who'd a thunk it, hedge funds occasionally produce some social good ;-)

<comment><USER16> wow, didn't know that. thanks for putting together that list - maybe we should start a list somewhere where people can add, this is definitely super interesting.

<comment><USER17> Agreed - here's another one (I am not affiliated): [https://github.com/renshawbay/](https://github.com/renshawbay/)

</comment></comment></comment></comment><comment><USER18> Scriptcs is out there for quite some time now. [http://scriptcs.net/](http://scriptcs.net/) it also has the motto "Unleash your C# from Visual Studio."

It provides you proper scripting abilities by using other libraries, writing classes in the REPL and scripting, like proper scripting languages. CShell just seemed like a windowed application whereas Scriptcs also runs on Unix environment with Mono I guess.

</comment><comment><USER19> A C# REPL is welcome indeed, but C# is still too verbose for its own good. The F# REPL is much more useful when exploring dataset.

<comment><USER20> Although it could be improved with intellisense.

</comment></comment><comment><USER21> The point of scripting is to do things quickly at the expense of possibly being ugly. Most of the things we do in the UNIX shell are one-off local stuff. I want to rename all file extensions in a directory. I want to find a regex in files ending with _.c and_.h excluding the .svn and .git directories. Etc etc.

So I'm sorry but a "scripting" language whose print operator is longer than 5 chars is not a scripting language :)

<comment><USER6>
        Action<object> print = Console.WriteLine;

I mean, it's not perfect but you can also create a .Dump() extension method for all objects like Linqpad does. It comes really handy.

</comment></comment><comment><USER8> hey, I'm the developer of CShell, nice for this project to get some love. I'm aware of some of the shortcomings. Will definitely read you guy's comments and see what I can do.

</comment><comment><USER22> Similar: [https://github.com/drew-r/maverick](https://github.com/drew-r/maverick)

Provides a Lua REPL with access to the .NET framework. Also allows you to run mini-apps made up of a combination of C# 'scripts' and Lua scripts.

</comment><comment><USER23> First of all, let me say this is something I've wanted for a while, so good job and thank you to the author.

When I try the Tutorial.csx, I can't get this snippet to work:

static class MyMath { public static long Fibonacci(long n) { //anything more than 48 will result in a stack overflow. if (n >= 48) throw new ArgumentException("Enter a number less than 48"); if (n == 0) return 0; if (n == 1) return 1; return Fibonacci(n - 1) + Fibonacci(n - 2); } }

// Now the method can be called like so: MyMath.Fibonacci(12);

It gives me : "(14,0): error CS1525: Unexpected symbol `MyMath'" in the repl, anyone knows why?

<comment><USER8> Yep, I see the tutorial is not clear, will change it.

Anyhow what you need to do is simply select line 35-45 with your cursor, then press Alt+Enter.

And then, after that, execute MyMath.Fibonacci(12);

</comment></comment><comment><USER24> Also see [http://www.hanselman.com/blog/ProjectlessScriptedCWithScript...](http://www.hanselman.com/blog/ProjectlessScriptedCWithScriptCSAndRoslyn.aspx) \- no REPL though, although that would be easy to create since there's a SrciptingEngine for C# ([http://blogs.msdn.com/b/csharpfaq/archive/2011/12/02/introdu...](http://blogs.msdn.com/b/csharpfaq/archive/2011/12/02/introduction- to-the-roslyn-scripting-api.aspx))

<comment><USER25> ScriptCS does have REPL. Maybe it didn't at the time of that article. [http://scriptcs.net/](http://scriptcs.net/)

</comment></comment><comment><USER26> I've just started using scriptcs ([http://scriptcs.net/](http://scriptcs.net/)) and this looks pretty similar.

I'm not sure about the name. CShell implies C not C#.

<comment><USER27> Looks like uppercased CS is a play on a file extension and a shortcut sometimes used for C#. Personally, I read it as CS-hell.

</comment></comment><comment> V-2 I'm getting "(35,0): error CS1525: Unexpected symbol `static'" trying to run Tutorial.csx (when MyMath is uncommented), whether running the entire script or just the class and the MyMath.Fibonacci call alone, by Run Selection (then it's "Unexpected symbol `MyMath'").

public static class Foo { public static string B; } Foo.B = "5";

doesn't work either ("Unexpected symbol `Foo'").

I really don't get how to use that thing.

<comment><USER8> the thing is you can't really mix class definitions and straight scripting lines in one execution. So what you need to do, is execute the class first and then execute the other part.

For the MyMath example you'd just select the lines for that class, press Alt+Enter. And then run: > MyMath.Fibonacci(12);

With your example, you would enter following in the REPL: > public static class Foo { public static string B; } > Foo.B = "hi" > Foo.B hi >

<comment> V-2 Thanks for clearing that up. I believe this should be explained more specifically in the tutorial.

</comment></comment></comment><comment><USER28> I mean this as truly constructive criticism. There are several spelling errors on the site that made me want to cringe.

It allows you to use C# without any fluff right in a console like environment _caled_ a read-eval-print-loop (REPL).

CShell is a project sponsored and maintained by Arnova Asset Management Ltd., a quant _hege_ fund, which uses CShell daily for their research. The main contributor from Arnova is @lukebuehler.

That said I like this idea and look forward to trying it.

</comment><comment><USER29> Mono has had a C# repl for quite some time: [http://www.mono- project.com/CsharpRepl](http://www.mono-project.com/CsharpRepl)

Good to see the same thing coming to vanilla .Net!

</comment><comment><USER30> This is exactly what i need to test out if some code behaves how i want it to, without having to create a new test, open a new project or running code in actual project.

</comment><comment><USER31> I want this, but with nuget support. LinqPad seems about the best option, but i don't need all the SQL/Database stuff that comes with it.

</comment><comment><USER32> This may be useful for loading GBs of data and it's quick exploration but I am wondering if there are any other uses for it besides that?

<comment><USER33> well it's as useful as any other REPL ;)

Though for things like Python the REPL serves for me mainly as a 'figure out what type this thing is here' and 'does this work'... things that static typing solve pretty well.

</comment></comment><comment><USER34> I should look into it, but it seems to support multiple lines. So the ideal use case would be to add a seperate window into Visual Studio

<comment><USER35> Wouldn't that more or less be the Immediate Window that Visual Studio already has? Other than the multiple lines you mention. :)

I took a look at this to see if it can replace LinqPad, which is similar. LinqPad allows for more than C# alone (VB.net, SQL, C# and F#) but it has no code completion (unless you buy it) which CShell does have.

This seems like a useful tool!

<comment><USER36> I highly recommend buying a LINQPad licence. I use it several times a day now and it's so much better with the extra features.

My favourite feature is the ability to point it at a DLL which has an entity data model in it - and then work with that model 'live' as if you were inside app code.

Normally, to do that, you'd have to put a breakpoint in your app and use VS's Immediate window - which doesn't support useful stuff like lambdas.

</comment></comment></comment><comment><USER7> ... you know that whole PowerShell thing MS made?

They should've just skipped that and made this. Hot damn, neat!

</comment><comment> V-2 What "I/O error occurred"? I mean the IntelliSense hint on the screenshot.

<comment><USER37> Looks to me like the description of `System.IO.IOException`, which is the possible exception.

I would guess the tool tips are slightly broken in that it doesn't list the exception class name or put it on a new line.

There you go, simple thing to contribute a fix for!

<comment> V-2 Good point, I might go ahead and make a patch.

</comment></comment></comment><comment><USER38> Just tried it out, and it looks pretty awesome - I always wanted a real REPL for C#.

</comment><comment><USER39> Seems dead - last commit ~1 year ago?

</comment><comment><USER16> this is pretty cool, thanks for sharing! will see if I can integrate this with Excel-DNA.

</comment><comment><USER40> Very cool and useful, thanks!

</comment><comment><USER41> Unity3D port anybody?

</comment><comment><USER42> As much as i like C#, static typed languages are inadequate when using them in shell. You really don't want to type all that.

Powershell has access to the BCL and can do all that with a nicer syntax when using it in the shell.

<comment><USER43> If your language has you type more because it has a static ype system then it's just poor at inferring types and/or it's syntax has you write out things that it could infer anyway. You may have to write types in C# from time to time, but often you don't have to:

// This an array of integers.

var x = new[]{1, 2, 3};

// This is a list of integers.

var y = x.ToList();

// This is an anonymous type.

var pet = new { Age = 10, Name = "Fluffy" };

Zero type names there. Not all types can be inferred by literals though, most annoyingly dictionaries:

var myDict = new Dictionary<string, string>{ { "test", "test" }, { "test2", "test2" } };

although I'm sure that could also have been created without typing out the name if you really wanted.

<comment><USER44> Inferring types is cool, if it doesn't create bugs. But it does. Its not a lot of work to just say it outright, and it can save your life.

<comment><USER45> Can you elaborate? I'm not sure what you mean.

<comment><USER44> Unexpected conversions can add bugs. Putting a string into a table that was implicitely integer - if your string doesn't start with digits it gets converted to zero. Was that what you intended? Did you think the table would hold a string?

<comment><USER46> Type inference in C# with the var keyword doesn't work like a dynamic language like javascript. It works by simply using var as a placeholder for whatever type the right hand side returns, which is determined at compile time.

<comment><USER44> So the type depends upon the initial values, which might not be representative of your full intent? A list of strings doesn't guarantee you won't want later to put something else in there.

I guess you'd just have to declare it explicitly in that case.

<comment><USER47> But you could explicitly declare the string table and still try to put an integer into it. Your example isn't an issue of type inference, it's an issue with the developer not properly tracking what variables store what types in his/her own code.</comment></comment></comment></comment></comment></comment></comment></comment>


Programming in the Point-Free Style - <AUTHOR> https://eiriktsarpalis.wordpress.com/2017/04/02/programming-in-the-point-free-style/ <comment><USER2> Point-free is generally the main style for concatenative languages.

In order to be able to read it, you have to know by heart the signature of the standard operators, and then you have to learn on the go the signature of the operators of the particular program your are studying.

It doesn't fly well if the author doesn't follow certain "usability" rules:

\- name things thoughtfully and properly,

\- no more than 3 arguments for your functions,

\- keep the complexity of the functions as low as possible.

This is good advice in any language, but I'd say that with concatenative languages at least, deviations are likely to have more acute negative consequences on maintainability.

<comment><USER3> _In order to be able to read it, you have to know by heart the signature of the standard operators_

Unfortunately, while that tells you how many operands there are, it doesn't help you find them in the surrounding syntax.

In Forth, for instance, the operands of a + could be a pair of immediately preceding constants like _1 2 +_. These could be far away in a contrived way: _1 2 [... snip stuff that produces side effects and keeps stack balanced ...] +_. Or just due to expression complexity: _[30 word expr] [27 word expr] +_ : the left operand of + is the result of the 30 word expr, which is 27 words away from the + symbol. Or is that 26? 29?

<comment><USER2> > These could be far away in a contrived way: 1 2 [... snip stuff that > produces side effects and keeps stack balanced ...] +

This is obviously poorly written. "1 2 + [stuff]" is the sane way to write it. Or "2 [stuff] 1 +" if [stuff] takes one parameter and outputs one result.

> Or just due to expression complexity: [30 word expr] [27 word expr] +

Post that on comp.lang.forth, and people will certainly tell you "don't do that" or "why do you that" if it's less trivial than a factoring issue.

In similar situations some people have this trick of separating sub- expressions with double spaces. But that's ignoring the writing on the wall.

What I learned from Forth is that it's true that it has its shortcomings, but I have my own shortcomings too. As Forth is a DIY language, you have to make this distinction in order to improve language/programmer pair.

<comment><USER3> _This is obviously poorly written._

It's only obvious in the example form which I have. If such a thing occurs in real code, the stuff won't look like _[stuff]_ ; it will not stand out.

"Poorly written" happens.

</comment></comment></comment></comment><comment><USER4> I have yet to see the benefits of point-free programming. Don't get me wrong it's fun, but in my opinion it makes reasoning about programs much harder. I am a huge fan of functional programming nevertheless.

The opinion that a point-free style is "beautiful code" seems pretty esotheric to me.

<comment><USER5> How do you feel about shell pipelines? Most shell pipelines don't name the things they operate on. Point-free style feels the same way: you string functions together and don't name the input/output.

<comment><USER6> > _Most shell pipelines don 't name the things they operate on._

That's because they don't operate on much more than strings.

<comment><USER7> PowerShell still heavily uses pipes, and those are full-blown .NET objects being passed around.

</comment></comment></comment></comment><comment><USER8> Interesting article. So far I've been working on one (real and deployed) project that employs F# and I generally liked the experience. Much of my code still is F#ified C# and lacks a cohesive way of structuring things, but every time a new piece of the puzzle snaps in place and I get better, shorter and more beautiful code to replace the old "works but ugly" stuff. The hardest thing is where reality (.Net frameworks, API's, user input and databases) meets theory (nice formatted mathematical situations that make F# shine).

</comment><comment><USER9> Lots of the comments seem to be missing the point that, despite the title, the author is _not advocating the point-free style_ :

> The point of this exercise is to illustrate how the lambda calculus with > pattern matching (or set theory for that matter) is superior to the point- > free style in terms of expressive efficiency.

<comment><USER10> Sure but it's a deeply uninteresting exercise because no one programs in category theory.

<comment><USER11> No one programs in category theory, therefore... what?

ELI5: What's the connection between your comment and JadeNB's?

<comment><USER10> People aren't missing the point, they just aren't engaging with it because TFA makes it's point by claiming category theory is expressively inefficient... but nobody programs in category theory, the link between point free programming in F# and category theory is meaningless. Tacit programming in F# is a reflection on tacit programming in F# nothing else.

So the commentariate has decided to talk about point free programming in general instead of engaging the article's very narrow and unsubstantiated point.

</comment></comment></comment></comment><comment><USER3> Point free expression in production ANSI C90 code:

Function defined here, stored in _xform_listed_quote_f_ global:

[http://www.kylheku.com/cgit/txr/tree/eval.c?id=6ca6be767f8ac...](http://www.kylheku.com/cgit/txr/tree/eval.c?id=6ca6be767f8ac84a8c601c08d6e06822ced556f9#n3043)

Used as a mapping function here:

[http://www.kylheku.com/cgit/txr/tree/eval.c?id=6ca6be767f8ac...](http://www.kylheku.com/cgit/txr/tree/eval.c?id=6ca6be767f8ac84a8c601c08d6e06822ced556f9#n3108)

</comment><comment><USER12> Point-free programming is sometimes also called "tacit" programming. I found this practical description of tacit programming in Racket to be useful: [http://r-wos.org/blog/tacit-racket](http://r-wos.org/blog/tacit-racket)

</comment><comment><USER13> Points-free is helpful if you're mentally focusing on the "verb" or function, and not the "noun" or data. (sqrt x) yields a noun. (sqrt) yields a verb.

</comment><comment><USER14> > A category consists of abstract functions (or morphisms, or "arrows") that > have an origin and destination (or domain and codomain, or "argument type" > and "return type").

I think perhaps Maths people need to seek more consensus on terminology.

<comment><USER15> I've only seen mathematicians use the terms morphisms, arrows, and domain/codomain. It is true that morphisms and arrows mean the same thing, but I _think_ that's because the term morphism is specific to category theory and the term arrow is from graph theory.

All the other terms here (abstract functions, origin, destination, argument type, return type) appear to be the author's attempt to make the subject understandable to programmers.

<comment><USER16> Morphism is from Algebra/General Mathematics and it is a function that preserves a "structure". (Group Morphism, Isomorphism between sets, etc)

In Graph Theory the terminology is Node and Vertex.

Arrow, Source and Target are from Category Theory.

</comment></comment></comment><comment><USER17> A great talk from Strange Loop 2016 on this topic:

"Point-Free or Die: Tacit Programming in Haskell and Beyond" by Amar Shah [https://www.youtube.com/watch?v=seVSlKazsNk](https://www.youtube.com/watch?v=seVSlKazsNk)

</comment><comment><USER18> For haskell there is a fantastic tool that converts code into a pointfree function definition.

[https://hackage.haskell.org/package/pointfree](https://hackage.haskell.org/package/pointfree)

<comment><USER9> > For haskell there is a fantastic tool that converts code into a pointfree > function definition.

But why? If a point-free style is more readable, then by all means use it, but if you need an automated tool to do the translation for you, then that seems unlikely. If it's an efficiency question, then your compiler can, and (given the trickiness of GHC in particular) probably will, do anything that an external automated tool can.

<comment><USER18> For fun mostly but it can be useful too: it can find neat solutions I couldn't think of and I may decide to use it. Of course it gives also crazy stuff like `(((.) . (,)) .)` that I will never put in a program because I don't understand or it's just worse than the original input.

<comment><USER9> > For fun mostly but it can be useful too: it can find neat solutions I > couldn't think of and I may decide to use it. Of course it gives also crazy > stuff like `(((.) . (,)) .)` that I will never put in a program because I > don't understand or it's just worse than the original input.

If it is purely an intellectual exercise, to see how else the code _could_ theoretically be written, then I totally see the point. (I am a mathematician, after all!)

On the other hand, if it is code that you actually use in production, then surely the old dictum that I will misquote, for want of looking it up, as "if you write the cleverest code possible, then you are not clever enough to debug it", applies all the more so to say "if you aren't clever enough to write your own code, then you certainly aren't clever enough to debug it"! (Not you _personally_ , I mean; just a comment on programmer-facing auto-generated code.)

<comment><USER19> I think the lesson here is, if the conversion looks horrendous, then the original was questionable in the first place.

</comment></comment></comment></comment></comment><comment><USER20> _Two points particularly add to the complexity of the point-free definition_

</comment><comment><USER21> Having done a _lot_ of programming in Postscript, I understand the allure of point-free style.

Some code can seem extremely elegant, but mostly it's just _clever_ , and an exercise in showing off how smart you are and how much you can keep in your head.

And with all due respect to Joe Condon: Eschew clever code.

<comment><USER22> Interesting. I find composing operators on streams to require holding _less_ in my head than the equivalent non-point-free (ie, iterative / loop-based) code.

When reading (eg) nested for loops with conditions, I have to push a ton of context variables into my head, and then evolve them over iterations if I'm doing a close read. That's a lot of ask of my head.

But in the point-free style, each compositional unit tends to be small enough to be "obviously no bugs" vs. "no obvious bugs".

<comment><USER23> All things in moderation. Chaining list transforms (like map and filter) in one expression does have fewer points than giving every intermediate result a name or even using a for loop, but it doesn't require the level of tenseness usually associated with the term "point-free".

</comment></comment></comment><comment> mh-cx After a few seconds I was redirected to an ad site that made my mobile vibrate and that "locked me in" by some redirect trickery which blocked the back button.

Not really what I'd expect from a HN link with so many upvotes. Did no one else experience this?

</comment><comment><USER24> I think the article makes good points. We have already seen callback hell. I wonder how long it will take before we coin the term "monad hell".

</comment><comment><USER25> Great article. 100% agree. Especially the category theory example.

</comment><comment><USER26> try not to make global functions. or at least put them in name spaces. if the function is reusable cross code bases then make it into a module or library.

</comment><comment><USER27> Was the language Forth point-free?

<comment><USER28> It can be. Pure functions which exclusively operate upon the stacks are often considered idiomatic. If you choose, however, you can reference and alter named global variables within a function, and some dialects offer a facility for named local variables. You might argue that the 'i' and 'j' words, which interact with loop constructs to give you a copy of the current and outer loop induction variable, count as references to named variables, even if they aren't strictly the same thing.

As with most languages it comes down to the programmer.</comment></comment>


Major survey finds worms are rare or absent in 20% of fields in England - <AUTHOR> https://www.fwi.co.uk/arable/land-preparation/soils/major-survey-finds-worms-are-rare-or-absent-in-20-of-fields <comment><USER2> Back when I was a kid, after a heavy downpour the roads would be crowded with earthworms. You really had to watch where you step to avoid stepping on one of those suckers. Fast forward today and I RARELY see a single worm out on the road after a similar downpour.

<comment><USER3> Also did anyone notice that they don't clean off insects off their car as often as before? Just 10 years ago, when I used to commute 170km every day in my car, I would have to clean the windshield regularly. I think I cleaned it once the last year and I even travel further today...

<comment><USER4> Same car? Could improved aerodynamics play a part?

<comment><USER5> I noticed the effect motorcycling. With an aerodynamically unchanged helmet and headlight, riding mainly naked bikes.

Last time I saw this crop up in a thread another comment claimed they actually were using the same car.

Maybe 50 years of these rivers of metal boxes reliably taking out trillions of insects yearly has played a part too.

</comment></comment></comment></comment><comment><USER6> In the US, invasive worms are converting forests from fungal decomposition regimes to bacterial decomposition regimes.

Not a great development for mushroom foragers.

[https://www.scientificamerican.com/article/invasive- earthwor...](https://www.scientificamerican.com/article/invasive-earthworms- denude-forests/)

Fun stuff.

<comment><USER7> > Not all foreign earthworms are destructive. Of the 5,000 species around the > globe, only about 16 of the European and Asian varieties do the real damage. > One of them is the night crawler (Lumbricus terrestris), a popular fish bait > that can measure up to 15 to 20 centimeters (six to eight inches). Another > is the Alabama jumper (Amynthas agrestis)—also known as the snake worm or > crazy worm—an aggressive Asian worm that lives at high densities and can > literally jump off the ground or out of a bait can, according to fishing > lore.

So maybe we should use some of the remaining 4984 species of worms as fish bait?

<comment><USER8> Red wigglers are also useful for both purposes, and because they don't burrow they have trouble overwintering.

It's not perfect, but they are held to be a lesser of evils.

</comment></comment></comment><comment><USER9> Probably a result of tiling the soil. Disturbing the natural ecosystem of it. And pesticides too presumably.

Something like permaculture could help. Chop and drop. Mulching on the spot.

<comment><USER10> True only if tilling has _increased_ recently. The question is, what has changed since the last time the dead fields had earthworms? That's the cause. Reversing or neutralizing that change is the cure.

Let's figure out how to fix this the right way, and _now_ , before the remaining fields die off too.

<comment><USER11> I don't know the numbers for the UK but here [1] are some numbers for Bavaria with worm counts from a lot of monitoring spots starting in the 80s. (sorry, slides are in German)

In the conclusion the author says a connection to the tilling method is likely. (worm numbers in Bavaria actually have increased as more and more farmers have changed away from "full" tilling).

[1] [https://www.lfu.bayern.de/boden/bodendauerbeobachtung/fachta...](https://www.lfu.bayern.de/boden/bodendauerbeobachtung/fachtagung/doc/walter.pdf)

<comment><USER11> Sorry, I should probably add that the worm number also very heavily depends on the kind of ground you have on your fields. In case that is not apparent from the slides ;-)

</comment></comment></comment></comment><comment><USER12> I was out digging in my field yesterday (in Ireland, not England) and thought it was interesting that there was a large variance in worm counts. Some areas had massive numbers of worms pushing 20cm, and others had relatively few, smaller ones. The bigger worms were in areas that hadn't been grazed by sheep, but I'm not sure how that relates, if at all (the sheep have been gone for a few years).

<comment><USER13> Speaking of Ireland, the stereotype is true. The grass really is that green. What is in your soil that causes this? Nitrogen?

<comment><USER14> It is a well watered island, for one, with climate moderated by the Gulf Stream, even though well north of the US (The Boston USA latitude 42+, Dublin 53+).

</comment></comment></comment><comment><USER15> Any link to the actual study? Potential pitfalls of this kind of study:

\- is the historical data available?

\- is the decrease significant?

\- is the sample size sufficient?

\- is the sampling method reliable? (and conducted in the same conditions as the previous data points?)

\- is there a difference between cultivated fields and uncultivated fields?

\- is there any correlation between cultivation types and worm presence (not just usage of pesticides, but also types of cultures?)

\- are there differences in soil properties (minerals, etc...)

etc...

I'd really like to have reporters link to the actual paper, or even better, datasets, in this time and age.

</comment><comment><USER16> I may have taken part in this study with my kids at the Barnes Wetland Center last year. They had a kids 'science' event held during one of the school breaks, they had fun contributing to a "real" scientific experiment/survey.

We dug a hole of a specific size in a grassy field (the shovel was exactly the right dimensions) and counted how many worms we found in the soil to a set depth. We found a few worms, don't remember the number or what should have been normal.

We also did a butterfly count there as well, which was less formal (not under guidance of a Wetlands worker). What was cool was meeting an amateur lepidopterologist at the time who pointed us towards several camouflaged cocoons in another area. Fun stuff.

</comment><comment><USER17> > has shown they are rare or absent in two out of five fields

The title presumably should say 40%

<comment><USER18> Or is it 1 out of 5 fields? Big difference!

<comment><USER19> > 42% of fields studied had poor earthworm diversity

> 21% of fields lacked surface-dwelling worms

Seems pretty clear to me. Some vs. none...

<comment><USER20> Talking here about "earthworm diversity", is another thing that is wrong.

To identify earthworms is difficult even for experienced taxonomists and you need a microscope, a disection table and a lot of training. Polychaetes are much easier by comparison and I can assure you that they aren't easy. You need months of study.

Not, not everybody can do the work of a biologist. Not even the smartest children. Is complex, and hard work. Unless you want to classify the diversity of worms into "small", "medium sized" and "big worm", dig a hole and count isn't enough.

</comment></comment></comment></comment><comment><USER21> They took this Leave campaign too far.

<comment><USER22> Laughed more than I care to admit

</comment></comment><comment><USER23> Related anecdote: I moved to a small town in the West Midlands in the UK from Barcelona last year. One of the things I first noticed was an absence of nature sounds (but you can always hear a motorway, no matter how far you walk :( ). This is compared to living in downtown Barcelona in El Born. I finally figured it out after going back for a visit to Barcelona that there are just substantially fewer birds here, or at least in the area I live. I wonder if that's because there is less food for them?

</comment><comment><USER24> Summer 2017 we were overwhelmed by snails and worm of various species. Summer 2018 was long, hot, and dry. We hardly saw any. But of course they are there. Occasionally, the cats drag in an earthworm. Last winter, mice moved into the house in numbers. We heard them occasionally saw them, cats were constantly on edge, and the mice somehow managed to thrive on catfood. This winter, not a rodent in sight. And this winter so far has been clement. come summer, I expect we'll see snails and worms and mice up to normal - though probably not excessive levels.

 _Not_ claiming there are no longer term downward trends. There may well be. I'm not qualified to judge. But often wonder why the huge year-to-year variability of small, fast-breeding species is so rarely touched upon in this kind of article. Small critters can bounce back in force within very short intervals, given anything resembling decent conditions.

</comment><comment><USER25> I wonder what volume 'a spadeful' is? Presumably not a garden spade?

Edit: 20x20x20 cm volume. [https://journals.plos.org/plosone/article?id=10.1371/journal...](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0203909)

</comment><comment><USER26> Is this a relatively new development?

<comment><USER27> The article makes it seem like this hasn't been studied in depth before (maybe just in the UK?). Sound like they were just trying to get baselines, and the next step would be to understand the whys.

</comment></comment><comment><USER28> Lots of worms in my garden. I did a survey yesterday...

</comment><comment><USER29> Did anyone else notice that the article seems to be confused about "two fifths" versus "20 percent"?

</comment><comment><USER20> Without more context the study is not very useful

pesticides, copper levels, phreatic level, number and species of hammerhead flatworms...

<comment><USER30> Those questions are exactly why a study like this is useful - we didn't know there was a problem, now we can ask the questions to find out what's going on.

<comment><USER20> We knew there was a problem since decades in fact, the disemination of tropical hammerhead flatworms that predate earthworms and can release the same neurotoxin as fugu fishes (in our potatoes?).

But we shouldn't fall in the temptation of making a mountain from a sand grain. Falling in gross extrapolation for clickbait purposes is as bad as no data. I can be wrong, but it seems that what we have here is an article done in part by volunteers and non professional ecologists (there is a variability in the observers), about a local area and in a narrow date interval.

Would be like to register what I ate the 23-Jan and assume that this is what I will eat for the rest of the year. Earthworm populations can raise and fall as a normal process.

And we should not mistake quantity by quality. I had analysed marine trophic chains and marine annelida appear everywhere. There is a huge biodiversity in sea worms. Huge loads of some species is bad, not good. Means that the ecosystem is in big trouble. With earthworms is the same. Not finding earthworms is not always a problem and finding a lot of them is not always good news.</comment></comment></comment>


Can adding an index make a non SARGable query SARGable? - <AUTHOR> http://sqlservercode.blogspot.com/2019/06/Can-adding-an-index-make-a-non-SARGable-query-SARGable-instead-of-rewriting-sql-query.html <comment><USER2> Databases can be a black box from the developer perspective. This solution might perform differently across a number of variables:

Database management solution (sql server, postgres, mysql, etc) Database version (mysql 5.6, 5.7, 5.8, mariadb, etc)

This method of finding whether your hunch works or not is the easiest alternative other than trying to read the code (or documentation, which many db engines have excellent documentation for this sort of thing).

<comment><USER3> Hah, if versions were enough for consistent performance I'd be in heaven.

I'm plagued by cases where the same schema with the same indices on same version of servers running on the same architecture gets different plans and performance.

<comment><USER4> For SQL Server there's a very nice article on making query plans more predictable here: [http://www.sommarskog.se/query-plan- mysteries.html](http://www.sommarskog.se/query-plan-mysteries.html)

</comment></comment></comment><comment><USER5> Could you not just add an index on `Right(SomeColumn,3)`? Creating indexes for common queries seems less weird than adding columns...

<comment><USER6> The issue with nonsargable expressions is not that you can't create an index that contains what would be the output of that expression. It's that you are forced to do a row-by-row evaluation of each record in order to even utilize the corresponding index to do a seek/scan against. You basically force a scan of the smallest available index. And there are tons of commonly used , nonsargable expressions. Implicit conversions, string parsing, date parsing, isnull/coalesce.

<comment><USER7> Can you explain what sargable is? I've never used SQL server, but I'm sure a similar expression could be indexed in postgresql. (Not at a computer to check.)

<comment><USER8> > Can you explain what sargable is?

It means that the database take your Search ARGuments (SARG) and do an index seek to deliver the exact results you want.

</comment></comment></comment></comment><comment><USER7> I had no idea what sargable was. I guess it means using an index? Is this a sql server specific term? [https://www.sqlshack.com/how-to-use-sargable- expressions-in-...](https://www.sqlshack.com/how-to-use-sargable-expressions- in-t-sql-queries-performance-advantages-and-examples/)

Why not just use a function index?

<comment><USER8> > I had no idea what sargable was. I guess it means using an index?

Close - it refers to SQL Server being able to take your Search ARGuments (SARG) and do an index seek to jump to the rows you're looking for.

> Is this a sql server specific term?

No: [https://dba.stackexchange.com/questions/162263/what-does- the...](https://dba.stackexchange.com/questions/162263/what-does-the-word- sargable-really-mean)

> Why not just use a function index?

Microsoft SQL Server doesn't have those.

</comment></comment><comment><USER9> SQL Server Enterprise will also allow you to create a view with somewhat complex joins and conditions, index it, and then other queries can benefit from the indexed joins.

It's things like this that keep us paying $millions for SQL Server Enterpise vs. Postgres.

<comment><USER10> In postgres you could just make an index on the RIGHT(SomeColumn,3) expression.

See [https://www.postgresql.org/docs/current/sql- createindex.html](https://www.postgresql.org/docs/current/sql- createindex.html)

> An index field can be an expression computed from the values of one or more > columns of the table row. This feature can be used to obtain fast access to > data based on some transformation of the basic data. For example, an index > computed on upper(col) would allow the clause WHERE upper(col) = 'JIM' to > use an index.

No need to maintain a separate view or its index

<comment><USER6> That's actually pretty slick. I'd pay a fair bit of money for SQL Server to have computed indexes like that.

<comment><USER11> I mean, you could add a new computed column to a table and index that... It's really effectively the same thing, just more visible. Still requires a table scan and storage/maintenance of the index/column. I guess technically it may require additional storage but it's not radically different. Either way, still requires some foresight to implement it before your queries require it so neither is a magic bullet.

<comment><USER6> Right. What you'd really need would be for the query optimizer to recognize your non-sargable expression and be able to look up a corresponding function index, and then have a mechanism for seeking on that. Indexing a computed column, like you said, wouldn't actually solve the problem of having to evaluate each row to begin with.

<comment><USER11> Does a function index somehow eliminate the need for RBAR evaluation? I don't see how it's functionally any different in this context from a computed column

<comment><USER6> I don't know how postgresql does it, but I'm interpreting it as yes, their engine has a way to actually replace nonsargable expressions in the query plan itself, with some other operation that performs a seek against the index on the filter. Otherwise you're right, you'd still need an RBAR evaluation, which is really the crux of the issue. I wish they'd reframe this discussion as RBAR instead of sargability, because it covers so many more sins...</comment></comment></comment></comment></comment></comment></comment>