100 Opinions on this -- prompted by @vgr

Will have to break for a call any minute, but will do best to free associate in meantime. https://twitter.com/vgr/status/1206034891390902272
1. Johnny Von Neumann isn't nearly as deep a genius as people seem to think.

If he was, he wouldn't have said bullshit like this
2. Code is crystallized thought
3. Object Oriented Programming (as practiced today) is bullshit.

Hedgehog paradigm.

Requires you to have taxonomic overview of the program you're writing before you start writing it.

Inevitable that will end up as spaghetti of incidental complexity.
4. Nobody really has been doing OOP since SmallTalk (maybe RealTalk and the shit they've been doing at HARC and Dynamicland are exceptions)

Java and Ruby (God forbid Rails) and Objective C for sure aren't following Kay's footsteps.

https://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented
5. The purpose of a programming language (and the programs you write) is to build up useful abstractions that extend the realm of thinkable thought and hold otherwise intractable problems in your head.
6. The measure of a good programming language is the speed at which you build DSLs for the problems you want to solve

The measure of good code is whether you and the people you work with are able to reuse it for problems you weren't anticipating when you wrote it initially.
7. Syntax matters, a bit.

One simple reason Clojure is better than CommonLisp is that it is easier to read

Vectors are [ ]
Let bindings in a vector
Maps are { }
keywords :this

In CL (vector a b c) (hashmap x 1 b 2) -- way harder to skim.
8. Polish notation is way better for reading and writing code than things that try to look like english

https://en.wikipedia.org/wiki/Polish_notation
9. The ternary operator in Javascript is pretty dope though -- I do sometimes miss it when writing simple if statements in my let bindings.

Sometimes have thought about making a macro for it, but something tells me this is a sin I would live to regret.
10. Sapir-Whorf hypothesis is true -- but the effects are far more pronounced for programming languages than for spoken languages.

The language you write code in ends up shaping huge parts of you worldview even when you're not programming

https://en.wikipedia.org/wiki/Linguistic_relativity
11. Rich Hickey is a better guru than the Pope or the Dali Lama.

He understands exceptionally deep truths about the universe, and converts them into actionable tools for building a better world.

Learn about Whitehead's metaphysics through him https://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey/
12. The coolest thing about Javascript is prototypical inheritance.

Totally mind bending when you think about it, and how it maps to your mind.

Steve Yegge nailed it in this post

Better intro to Douglas Hofstadter's work than any I've seen by Doug.

https://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html
13. Any program could be theoretically written on in any turing complete language, but it is not actually possible for humans to write a complex web app in brainfuck

Same applies for modeling paradigms for problems and data

Some problems suit a given paradigm, some don't
14. One of the best things about Clojure (as an "immigrant community") is that people bring paradigms and patterns with them from other languages.

APL, J -- very cool ideas there from array programming langs. Can play in that headspace via core.matrix

15. Pattern matching in Erlang gives a totally different style for writing and thinking about recursive functions.

You get to step into that world thanks to Sean Johnson when you use core.match
16. Clojure as a programming language community might be what really good post-racial Fascism looks like.

Everyone is there because they really love and trust Rich's aesthetics and principles. Glorious leader.

Great ideas brought in from everywhere, but filtered through a lens.
17. Bruno Latour's paper "Visualization and Cognition" is relevant to understanding the emergence of of Science in the west, and what works and doesn't work in programming languages, and in our sense-making institutions today

http://www.bruno-latour.fr/node/293 
Ok, time for a break
18. The best purpose of language in general, and programming languages in particular is to expand the domain of thinkable thoughts
19. Excel is a purely functional reactive programming language and environment with a built in database.

It is far better than most languages and IDEs
20. The folks working on Visual Programming Languages, Low Code, or No Code, to try to make programming more accessible to people are... I dunno, focused on not the best goal..

Rather than make it easier to do what you can do with JS, better goal is to make a better excel.
21. Eve started in the right direction: combine the database, a UI for human I/O, and a nice declarative language

showed lots of promise @ 1st



you could tell they went off the rails when the demo was how to build Flappy Bird. https://futureofcoding.org/essays/eve/ 
22.

10.7 Million Javascript developers
(most popular " programming language")

500-750 Million people use Excel
(actual most popular programming language + env)

Why? Excel lets you treat you thoughts as data.

Easy to get started, can ALWAYS upskill to solve harder problems
23. Weaknesses of Excel

Really only works for quantitative thoughts

But there are all sorts of relationships between qualitative thoughts, and algorithms you can run on them

We need a programming language for meta-cognition, + db + io

ideas here https://twitter.com/Conaw/status/1205809314612404229?s=20
24. Advances in programming languages reduce incidental complexity -- the complexity of talking with machines that doesn't relate to problems you're trying to solve.

Big advances: garbage collection/not having to worry about memory management, performant immutable datastructures
25. Big ideas that shape whole languages have made their way into Clojure through libraries

The paper Communicating Sequential Processes inspired the creation of Golang (Go) -- very popular at google.

In Clojure, core.async library gives you all that!
26. Bret Victor is right about direct manipulation generally.

Specifically: CSS is a flaming pile of garbage.

Messing with margins and padding to try to get a layout to look the way you want is 100% incidental complexity.
27. Just parroting his quote from above talk

"So much of creativity is discovery, and you can't discover anything if you can't see what you're doing"

Similarly, programming languages should not only be conceived of as text or symbol based

see

http://worrydream.com/KillMath/ 
28. Getting beyond abstract symbols does not mean getting beyond abstract ideas.

The power of programming languages (and why you may want to learn them, even if not intent on building software) is that they let you get you hands dirty with building and using ur own abstractions.
29. Cheating and linking an old thread https://twitter.com/Conaw/status/1134173307878629376
30. Datalog is a much better query language than SQL, and will be more widely used than SQL in 2050

But might be only if you count people using natural language datalog, which will go mainstream in next 10 years

https://web.archive.org/web/20181102114644/http://alexwarth.com/projects/nl-datalog/
31. Urbit is an interesting project, but won't actually take off unless/until someone writes an X -> Hoon or X -> Arvo or X -> "whatever" compiler because no one actually wants to think in Yarvis' pig latin.
32. Hosted languages that provide nicer abstractions over the libraries from their host language have a huge huge advantage over new languages starting from scratch.

The ability to work with libraries from an existing/broader ecosystem is damn near table stakes for a new lang
33. The world is a worse place because MIT switched from teaching LISP in the intro CS courses to teaching Python.
34. If you haven't learned a programming language for a reason other than

A) It was a assigned to you in school

B) You thought it would make you money

Then I doubt your
a) curiosity
b) open-mindedness
and as a result
c) competency as a engineer
35. There are two problems for programming languages to solve

1) Performance on machines

2) Usefulness as a tool for thought

Right now those are complected -- Intentional Software was doing something interesting toward separating those two out

https://en.wikipedia.org/wiki/Intentional_Software
37. Your type system won't save you
38. Provably correct doesn't mean it works
39. Contracts and gradual typing > strong types

40. Many people with 10 years of experience in software engineering haven't actually grown or learned much in that time.

They've done the same first year 10 times on repeat.

Polyglots generally avoid falling into this pattern.
41. Reagent (A Clojurescript wrapper around React) is way easier to read, write, and maintain than vanilla react.
42. Dan Abramov has said that Redux is not a javascript clone of Re-frame (the CLJS framework for writing SPAs in react), it is just that both were inspired by elm and arrived at similar pattern...

But even so... Re-frame was first and still much better in almost every way
44. Clojurescript is an EXCELLENT choice for consumer or SaaS internet startups.

If you are starting a new company and can afford it, you should spend invest a few months in learning it first and building in it vs your normal stack, will pay huge dividends over time.
45. A great engineer can learn Clojure well enough to be productive in under a month.
46. Setup for react development (Webpack/Babel/100 other tooling things) was a dumpster fire in 2015.

It's probably still bad.
47. Create-React-App and Gatsbyjs probably have made setup for Javascript projects much better.

Still probably not as easy to use or as powerful as shadow-cljs.
48. Typescript is mostly hype.
49. VScode is a typescript IDE, is probably pretty magical, and I am likely missing some cool sources of tools for thought inspiration by not playing in that ecosystem.
50. Airtable is on track to be the Wordpress of relational databases.
51. Graph databases are far better than relational databases for most things.
52. Amendment to 4. No one who is loud about OO is doing real OO.

Agree Erlang is OO https://twitter.com/weskerfoot/status/1206058780703776769?s=19
53. In general, folks thinking about programming languages and computing more broadly, don't know enough history.

Folks interested in the topic should read "The Dream Machine" to start and not blindly trust shitposters like me.

VN def over-hyped tho https://twitter.com/Grady_Booch/status/1206311525851357184?s=19
54. One reason to know history is so you can see what elements of your language were put in place to deal with constraints in your environment that no longer exist

We don't use punch-cards, we don't need a distinction between expressions and statements

http://www.paulgraham.com/diff.html 
55. Questions are not a sign of ignorance, they are a sign you are paying attention.

It's more than OK to ask people to define terms or give a concrete example, and ok to stay in conversations you can barely understand.

Applies to conversations in and about all languages.
55. Meta opinion about my opinions on programming languages https://twitter.com/Conaw/status/1206324267513597952?s=19
56. Datomic is far and away the best graph database available today.

Has Java and Clojure APIs, non jvm languages can use rest apis.

If you're a startup, worth being in Clojure though.
57. Listen, I'm not saying he didn't have massive contributions, esp on the math side.

Just know too many AI bros (who I still love) who've said things like "We just need 50 Von Neumanns to build an AGI god and we're set"

No.

And he's not all that. https://twitter.com/zhaphod/status/1206327029601165312?s=19
58. The most important idea in Datomic is that there is no reason to overwrite data just because it changes.

It is more than a graph database, it is a graph database with a notion of time and history built in.

What was Joe's address as of Dec 2017?
59. The main limitation of the EAV tuples (popular in Semantic Web land) is that you can't easily describe the relationships.

You get the FACTS, but it is a bit tricky to add information to those facts like "where did this info come from", or make statements like

If A then B
60. To model human thought in a computable way you need to solve the problem in 59, you move closer to this goal if you give each "fact" or "edge" in the graph a unique identifier.

Long history of this in Associative Databases

Example in @RoamResearch

https://roamresearch.com/#/v8/help/page/WhSDOjZ0d
My shit posting on Eve has evoked the ire of @ibdknox, whose work I do greatly respect.

So will offer my more nuanced opinions on Eve and programming languages related to tools for thought, esp related to @RoamResearch and see if that gets me the last 40 https://twitter.com/ibdknox/status/1206244381252034560?s=19
61. Designing a programming language - a medium for people to express their thought in a machine computable way is insanely hard.

Perhaps even harder to get the time and funding to do that level of deep work.

Exponentially harder to do on VC timescales.
62. The fact that Chris and team were able to get venture funding AT ALL is an insane testament to the them, and quality of prior work /vision.

The fact that they got funding from some of the top investors in silicon valley put the project in historic category.

Lot 2 liveup 2
63. Light-table (from Eve team) promised a smalltalk like IDE for devs using clojure or js

Easy access to docs, organize workspace by function not file, see values pass through

Huge potential for intelligence augmentation!

Easy switch for a userbase

64. Alpha sheets (later project, diff team) let you use R & Python code in a collaborative excel like spreadsheet.

Was like Light Table but from another direction.

Adds programming to Excel, versus adding better reactive env to programming

65. Light table had a very Bret Victor type feel

make it easier to explore what you could do

make it easier to get a handle on what is going on in the program in real time

give yourself a bunch of contextual information and focus your attention only on what matters
66. That project (Light Table) thus offered huge potential for "intelligence augmentation"

Allow people to solve problems that they otherwise wouldn't be capable of solving

Invent things they otherwise wouldn't have been capable of inventing

For beginners or experts alike!
67. With both AlphaSheets and Light Table, you started with a tool and paradigm people were familiar with, and you added in either more programming power or a more powerful environment.

Both gave the users a clear path from where they were to a better world.
68. Risk with both of those is incrementalism.

If you think that both excel and programming lead toward a dead end, perhaps you have to rethink things from first principles and go back to go forward.

Seemed like Chris's view

https://www.chris-granger.com/2014/03/27/toward-a-better-programming/

I don't *exactly* agree
69. My take is you need co-evolution of tools and culture.

Tools shape us, then we shape our tools.

I believe in bootstrapping - in the Doug Engelbart sense.

Programming languages are as much about the community as about the underlying technology.
70. After Eve raised VC, appeared to me to take a hard reset approach to try to make programming level capability available to complete beginners

Inventing new UIs, new language, and new database - based on Dedalus

Incredible engineering lift that I would def not be capable of
71. When I say they went off the rails, really means they took a strategy that I didn't agree was a good one / was aesthetically opposed to.

But they weren't on my track

I was living in India at the time, lurking on their list serv, building prototypes of @RoamResearch
72. The prototypes of Eve I found most compelling where the ones that were more like a semantic Tiddlywiki with a natural language query engine.

I liked the ideal of Excel power applied to notes

Building full apps/games felt way out of scope to start

https://tiddlywiki.com/ 
73. To be fair, I think I share a lot of @ibdknox's long term vision.

The big point of departure is that I don't think most "non-programmers" enter the world building games.

I'd rather help them build explorable/interactive models of the world.
74. On this point, there is another caveat I'll add to my OO shitposting in points 3 & 4.

I still hate Ruby (my first language) for web-dev, but Modelica is great example of how the principles make a ton of sense for modeling systems.
75. Similarly -- I think there are a ton of great ideas in Analytica for building quantitative models of systems

Problem there is the tool has like a $1,000 license and only works on Windows.

Mostly just used in places like the Defense Department.

https://en.wikipedia.org/wiki/Analytica_(software)
76. You don't actually know a language until you've built something substantial with it.

Substantial is relative to what you've built before.

Often in new languages we start by trying to follow paradigm we're used to.

Anyone saying I don't know my shit is probably correct.
77. Disclosures:

I've built web apps with users (at least two!) in
- Ruby
- Javascript
- Javascript during a Haskell inspired phase where I did everything with Ramda.js and all my shit was curried and point free
- Clojurescript

Ramda is super fun imo
https://ramdajs.com/ 
78. You should not trust my opinion on Python.

The only reason I learned it at all was to write a few scripts on an open source Python IDE called Leo, which had cool way of organizing knowledge in a graph, again similar to @RoamResearch
79. I have zero personal experience writing Erlang

However, I CAN tell you that

- The What's App team built a $1B company with 11 engineers using it.

- Joe Armstrong (a co-author) has some really incredible talks.

He even mentions Xanadu in this one
80. The Elm language has had a massive impact on the front-end web

There is now so so much information about Redux on the web I can't find it, but original writeup from Dan Abramov on his inspirations for the architecture was a treasure trove, and he credited Elm for main ideas
81. Programmers have accents https://twitter.com/Conaw/status/1206414142866739202
82. Good Programming Languages are DEFINITELY NOT about "Thinking Like a Machine" https://twitter.com/Conaw/status/1206413740888903681
83. Ivan Sutherland's "SketchPad" is what we should have

Ability to do direct manipulation to get to general area you want to go, and then ability to adjust code to normalize and get pixel perfect.

https://twitter.com/ndyfschr/status/1206415136463806467?s=20
84. If a project not having recent commits on github makes you immediately think you cant use it, there is something fundamentally wrong in your language community.

Code shouldn't rot.
85. I haven't actually figured out how to use generative testing (test.check in Clojure, QuickCheck in haskell)

But when I do... and it generates millions of test cases my functions... I know in my soul it will be truly glorious https://twitter.com/pentateu/status/1206459605481443328?s=19
I'm so tempted to finish this out with Good Book / Bad Book opinions on learning various programming languages and be done, but I think I might pull a Venkat here and just wait till later in the week.
Ok, some hot takes on programming language learning material https://twitter.com/ArtirKel/status/1206492488468484102
86. Yes, you can stitch together a huge amount of free online learning material to teach yourself a new language...

BUT

It will cost a huge amount of time and energy, and once there is a thing you KNOW you want to learn, it is often good to buy a course https://twitter.com/Conaw/status/1203914479500529665
88. It is ok for a big chunk of your personal budget to go toward your own education -- and far far more cost and time effective to work outside of academia (DON'T GO TO GRAD SCHOOL)

There were months when I was in research mode where I spent about as much on books as on food.
90. The Elements of Clojure is a incredible resource even for non-Clojure devs

Most important idea -- How to NAME THINGS

Naming things well is one of the hardest parts of programming, huge gains for code legibility if you do well

Great to have a guide https://leanpub.com/elementsofclojure
91. If you are poor -- or you are living off of your nest egg to do research and worried about your burn rate -- it is 100% OK for you to pirate textbooks, O'Reilly Books, and scholarly articles.

Textbooks: http://gen.lib.rus.ec/ 
Journals Articles: https://sci-hub.se/ 
92. If you are rich - pay the publishers, fund the kickstarters, chip in for the Patreons.

If you run a Startup with funding or are profitably bootstrapped - everyone on your team should have an unlimited expense account for books and online courses.
93. Open source is about increasing the information commons -- putting out free things that give other people power and agency.

There are many ways to contribute

Write tutorials, record screencasts, expand the docs, open source your example projects.

http://www.catb.org/~esr/faqs/hacker-howto.html#respect3
94. If you really want to level up in a language - find a great example project and deeply study the code.

I spent hours and hours going through the @ZetawarGame code base with pen and paper to reverse engineer every decision

http://dev.zetawar.com/  https://github.com/Zetawar/zetawar 
95. Everyone interested in programming languages (or writing software to do powerful things) should read Paul Graham

Especially his earliest essays like
http://paulgraham.com/progbot.html 
http://paulgraham.com/popular.html 

and most especially **Beating the Averages**
http://paulgraham.com/avg.html 
96. When you read those, and the quote below has sunk in, and you start to have dreams like the xkcd author

Then consider this

https://twitter.com/Conaw/status/1176276601048199168
97. The WAT talk is hilarious, but when you learn a new language - don't spend ALL your time looking at it's flaws

I trolled OO hard in this thread, there are still beautiful ideas there

Explore new lands for treasures you can bring back home.

https://www.destroyallsoftware.com/talks/wat 
98. Programming languages have a culture.

Go to the conferences and meetups, join the list servs, hang out on the slack channels.

If the language community isn't filled with the kind of people you want to be around -- enjoy the books, but take the ideas with you somewhere else.
99. It's much easier to do (98) if your language has Macros though!!

And the Clojure community is exceptionally friendly to beginners and folks who don't fit the stereotypical profile.

Incredibly curious, incredibly pragmatic.

So really, my opinion is you should learn Clojure.
100. Form your own opinions on programming languages, and share them freely.

When someone contradicts them, it is a great signal to get curious - not defensive. You may learn something

But use the block feature widely for anyone who turns disagreement into a personal attack.
👑 These are just my opinions. They may not be true, but I hope they have been interesting.

It is more important that they be interesting than true anyway. https://twitter.com/Conaw/status/1077395379253960704
101. Decided I'm going to keep extending this thread

Mostly because this point from @elzr brings together my two largest points

Lisp and Excel are both powerful because they expand the domain of thinkable thoughts

Goal of @RoamResearch is to combine em https://twitter.com/elzr/status/1261302638617997312?s=20
102. The kind of affordances that the person in this video gets for solving Sudoku should be generally available anyone trying to solve complex problems

Relates to ideas of Magic Ink from @worrydream

http://worrydream.com/MagicInk/  https://twitter.com/Conaw/status/1265036367383281666?s=20
Follow up - this thread on [[Essays]] about [[Software Engineering]] looks like might be more useful than anything I wrote above https://twitter.com/benskuhn/status/1285387721435942915?s=19
My opinion:

This is why @RoamResearch has a cult.

We make certain things so fast -- citing another idea via [[page links]] or specific statement ((block references)) -- that completely new behaviours are possible

[[Reflections on Software Performance]]
https://blog.nelhage.com/post/reflections-on-performance/
Biggest change in my workflow/worldview around programming in past year was that it is not just OK, but GOOD to copy/paste code, Sometimes.

@sandimetz with brilliant articulation of why and how this is great way to improve life for you & eng team

🙏🙏🙏

https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction
You can follow @Conaw.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled: