Currently looking at ways of breaking large monolithic code bases into smaller packages without resorting to…

Currently looking at ways of breaking large monolithic code bases into smaller packages without resorting to maintaining multiple github repos. It seems many large projects use the “monorepo” pattern and use tools such as Lerna https://lernajs.io/ or this one by Sencha which is confusingly named Mondorepo.

This is the single biggest event in web development of the decade.

This is the single biggest event in web development of the decade.

You can now run your own personal favourite shitty language directly in the browser if you can find a way to compile it to WebAssembly, the machine code of the web.

Expect to see a mountain of shitty Python apps, shitty Java apps and shitty Haskell apps all grappling with the world’s most shitty and difficult platform and API. Let a hundred flowers bloom, let a thousand schools of thought contend…

Via Michael Verona

Via Michael Verona

Originally shared by Russ Abbott

Is programming obsolete?

The pattern is that there’s an existing software project doing data processing using explicit programming logic, and the team charged with maintaining it find they can replace it with a deep-learning-based solution. I can only point to examples within Alphabet that we’ve made public, like upgrading search ranking, data center energy usage, language translation, and solving Go, but these aren’t rare exceptions internally. What I see is that almost any data processing system with non-trivial logic can be improved significantly by applying modern machine learning.

This might sound less than dramatic when put in those terms, but it’s a radical change in how we build software. Instead of writing and maintaining intricate, layered tangles of logic, the developer has to become a teacher, a curator of training data and an analyst of results. This is very, very different than the programming I was taught in school, but what gets me most excited is that it should be far more accessible than traditional coding, once the tooling catches up.

The essence of the process is providing a lot of examples of inputs, and what you expect for the outputs. This doesn’t require the same technical skills as traditional programming, but it does need a deep knowledge of the problem domain. That means motivated users of the software will be able to play much more of a direct role in building it than has ever been possible. In essence, the users are writing their own user stories and feeding them into the machinery to build what they want.

I know this will all sound like more deep learning hype, and if I wasn’t in the position of seeing the process happening every day I’d find it hard to swallow too, but this is real. Bill Gates is supposed to have said “Most people overestimate what they can do in one year and underestimate what they can do in ten years“, and this is how I feel about the replacement of traditional software with deep learning. There will be a long ramp-up as knowledge diffuses through the developer community, but in ten years I predict most software jobs won’t involve programming. As Andrej memorably puts it, “[deep learning] is better than you”!

via Wayne Radinsky

“A perfect API”

“A perfect API”

This article introduces the basic ideas of algebraic JavaScript by using various libraries that implement the Fantasyland specification.

The author thankfully avoids using category theory terminology which is probably the single biggest barrier to the wider adoption of these principles by JavaScript engineers.

Seriously we need better names than Functors, Setoids, Semigroups and so on. Those names are ridiculous.

Manual currying of functions in JavaScript is easy and powerful. Eg.

Manual currying of functions in JavaScript is easy and powerful. Eg.

a => b => c => a + b + c

But what this article is saying is that autocurrying of function arguments is not a natural fit for JavaScript unlike say Haskell because JavaScript has all these ways of dealing with absent arguments. This includes new features just added to ES2015 to handle default arguments. In other words all those Pythonic things that have been added to the language over the years.

So rather than autocurrying how about language support for partial application instead? The main use of currying is to reduce functions down to single argument functions so they can be easily composed. This can be also achieved by partial application.

Language support for partial composition is a possible answer and there’s a proposal to add that in the process of being considered.

E.g.

const square = Math.pow( ?, 2);

square(3); //9

const maxGE10 = Math.max( 10, …);

maxGE10(7, 8, 9, 10); //10

maxGE10( 8, 10, 12, 15); //15