Great post. I think that skill floor/skill ceiling is a great framework for thinking about programming language accessibility. But I think there is more as well...
An important factor is not just the skill floor needed to get started, but the skill floor needed to understand (and maintain!) other people's code. That is, what skill level do you need to participate in a programming community?
For example, lisps have a very low skill floor, but my guess is that you need a high skill to participate in the current CL programming community. It's interesting to see the difference between CL people and Clojure here :)
OTOH, Go was explicitly designed to have a low "skill ceiling" which limits what you can do, presumably with the goal that all code would be maintainable by anybody.
Python is great example of a language with a very low skill floor and also a high skill ceiling. What's nice though, is that Python community eschews clever code, and so the vast majority of Python code is straightforward and easy to understand.
C# and Java also have a reasonable low skill floor (but not nearly as low as a scripting language -- you have to understand complicated stuff like builds, jars/dlls etc). You can also do complicated stuff in them, but again, the vast majority of C#/Java code is straightforward.
So that's why I like #fsharp. A low-ish skill floor (for a statically typed FP language, anyway!), and more importantly, the F# community values straightforward code. Let's keep it that way. If you want more complex features, use another language!
Seriously, I love that there is a whole ecosystem of programming languages, each with its own style & philosophy. Rather than forcing a language into something it wasn't built for (OO Cobol, anyone?), just take each one as it is, and switch to a different language if you need to.
Finally, what's considered "straightforward" obviously changes over time. Generics were exotic at first, but are now widely accepted. Ditto for LINQ style pipelines, and lambdas, and more recently "async". And we can see the "pipe" operator becoming mainstream as we watch!
So, maybe in 10 years, type classes (or dependent types, or effect systems) will be considered common knowledge, and in that case I would have no problem with them in F#. The trick is to be able to innovate without getting too close to the bleeding edge!
And please read this excellent follow up by @algo_luca
And going back to F#, here's a great example of what I'm talking about in terms of accessibility

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Scott Wlaschin

Scott Wlaschin Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @ScottWlaschin

2 May
In response to this tweet, people recommended their favorite design-focused books, which I'll list.
But read on to the end because I want more :)

"Growing Object-Oriented Software, Guided by Tests" by @natpryce & @sf105
"Practical Object-Oriented Design" by @sandimetz

1/n
"Programming DSLs in Kotlin" by @venkat_s
"Joy of Kotlin" by @pysaumont
"Designing Elixir Systems with OTP" by @JEG2 & @redrapids
"Data-oriented design" dataorienteddesign.com/dodbook/
leanpub.com/usablesoftware… by @alexboly

2/n
And some FP-focused ones

"Elements of Clojure" by @ztellman
"Grokking Simplicity" by @ericnormand
"FP in Scala" by @pchiusano and @runarorama
"Functional Design and Architecture" by @graninas

3/n
Read 10 tweets
1 May
Where are all the modern software design books?
There was a huge burst of creativity around software design & analysis from the late 1980s up to the early 2000s (All the OOD ones, GoF, Fowler, Martin, Evans, HtDP etc) and then there's not been much since (except for DDD stuff)
Recently there has been some new activity: "A Philosophy of Software Design", "Secure By Design" and just now "Software Design for Flexibility".
("Designing Data-Intensive Applications" and "Code as a Crime Scene/Software Design X–Rays" are great but not really design books imo)
Yes, there's been been lots of architecture ones, first SOA and now microservices, but I don't count those as software design either. If you search on Amazon, there's nothing too interesting other than the ones I already mentioned. Many are really old! amazon.com/gp/bestsellers…
Read 6 tweets
30 Mar
Thread! I've watched 100s of hours of photography videos on YouTube. I've learned from the experts! From them, I've learned that being a good photographer is all about having the latest gear, having more megapixels, and knowing those cool Lightroom tricks.
So, thank you, YouTube experts! I now have the confidence to help other beginning photographers get better. In the rest of this thread I'll critique some photos that have been sent to me for review.
We'll start with one sent to me by "Henri". My critique: there's too much motion blur. Next time, up your ISO and use a faster shutter speed. And there's way too much sensor noise! Get yourself a professional camera, mate!
Read 24 tweets
23 Dec 19
If you care about usability, human factors, normal accidents, etc, then this is a must read. If this has been reported correctly, the design of the ship's navigation system is shocking.
features.propublica.org/navy-uss-mccai…
To summarize: The US Navy's John McCain collided with an oil tanker and 10 people died. The crew using the navigation system got blamed but the navigation system itself didn't. Sadly, though, many of the mistakes have been made before and will probably be made again 😟
Mistake #1 -- Lack of training: [the helmsman] felt confident using the system to control the speed and heading of the ship. But... “There was actually a lot of functions on there that I had no clue what on earth they did,” he said of the system.
Read 26 tweets
12 Oct 19
I'm developing a new alternative to microservices that addresses many of the problems that people run into. I call it "SPMSA". Bear with me -- I'll explain the acronym in a later tweet. 1/
First, design your microservices in the usual way. No more than 500 lines each, say, and with well-defined interfaces. But here's the first trick: you put them all in the same repo. This means that you have a single commit that encompasses all services at once. 2/
That means when you commit or refactor, you can build and test the services as a whole system and be sure that they *always* all work together! Awesome! 3/
Read 12 tweets
4 Aug 19
This is a great idea: . Before I was a programmer I use to do a bit of odd-job carpentry, so I'm going to chime in with my take based on my experiences in that field.
When you're outside an area of expertise looking in, it can often seem monolithic and uniform, but when you're an insider you quickly realize that there are many different subcommunities, each with different specialties and different approaches. They sometimes hate each other :)
We know this is true for programming, so why shouldn't we expect this is true for everything else too? In fact, a good clue that someone doesn't have any experience in a certain area is that they radically over-simplify things. Experienced people never think things are simple.😀
Read 25 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(