Bruce Tate Profile picture
Follow4 Elixir, prog langs, code insights. Founder: Level up. Learn to learn. Author 7 Languages 7 wks. (he/him) @GigCityElixir & @LonestarElixir.
Andy Doddington Profile picture 1 added to My Authors
1 Sep 20
After some time away after writing Seven More Languages, I spent some time with @JeffBezanson, a co-creator of @JuliaLanguage and could immediately see some of the reasons the language was successful.

Read this thread. Where am I right? What am I missing?

more ->
The team has a firm grasp on what it takes to make a language successful, especially understanding the core audience. It's here where #JuliaLang shines. Here are four things that @JeffBezanson, @Viral_B_Shah, @StefanKarpinski, and @JuliaComputing (Alan Edelman) got right:
Julia embraces functional concepts, but not slavishly. Functions are familiar to scientists, but technical computing requires mutability. Julia libraries allow idiomatic math in many spots, and also performant imperative code. @JeffBezanson: "Good programs are 80% functional."
Read 7 tweets
29 Jul 20
Today I am working through the final written chapters for #ProgrammerPassport LiveView. Some of you have asked why we're covering so much Elixir in a program for programming language exploration

more >
Programmer Passport exists to help developers accelerate their careers by guiding them to make intellectual breakthroughs in computer science.

Call it guided curiosity.

Developers who hunger to learn progress faster. We nurture that.
Some breakthroughs are around *nuance*. Looking at different frameworks within the same ecosystem is a great way to reason about new things.

So I teach several wildly different programming models in Elixir because it helps developers understand nuance.
Read 5 tweets
6 Jul 20
Long @elixirlang / @elixirphoenix tweet... beware.

1- Layers

In the Workerbee book, we recommend layers for do-fun-things with big-loud-workerbees (boundary).

The data-functions-tests in the core are often wrapped in a boundary.
2- Mappings of services

In a typical @elixirphoenix app, the layers are:

Services separate a functional core (schema(s) and pure-ish module(s) in a context directory)

boundary is in a *context*.

Changesets get created in an ecto *schema* and applied in a *context*.
3- Mappings of layers in a live view

- The *render*, either in templates or a render function, is in the *core* layer

- Handlers are boundary concerns... all data must go through a boundary layer, often a context.
Read 5 tweets
2 Nov 19
Goose bumps.

I am preparing my talk for India's FP conf and ran across some quotes from Joe Armstrong passage. I read them avidly. Bear with me as I list a few of them. Tweaked slightly to fit the twitter format.
“The next programmer we hire must read all of ‘A la recherche du temps perdu.”’
“All seven volumes?”
“Will it make them better at punctuation and make them get their quotes right?”
“Not necessarily, but it will make them a better programmer. It’s a Zen thing....”
Knowing a small amount about many languages is a useful skill. I often find that I need to understand a bit of Python or Ruby to solve a particular problem. The programs I download... are often written in a variety of languages and need a little tweaking before I can use them.
Read 9 tweets
10 Apr 19
Struct wizards Activate!


1. The shorthand sigil syntax is great for structs.

defmodule User do
destruct ~w[name email]a

The ~w is a sigil with an array of words; the trailing a makes these atoms; the [] instead of () is a valid use of delimiters.
2. Structs are maps, with one extra key:

u = %User{}
-> %User{email: nil, name: nil}
Map.keys u
-> [:__struct__, :email, :name]
-> User
3. Structs don't implement any Map protocols:

-> ...User does not implement the Access behaviour
u |> -> x end)
-> ...protocol Enumerable not implemented for %User...
Read 5 tweets