The engineering team at NoRedInk, an education company, writes about Elm, Elixir, JavaScript, hiring, and remote work.
HN commenters point to its walkthrough of introducing Elm into a JavaScript app as a convincing case for Elm, and note its production use.
NoRedInk | San Francisco, CA or REMOTE for Senior, Pacific Time (PST) to Central European Time (CET)
We’re an ed-tech company on a mission to help all students become strong writers! Our team may be small, but NoRedInk is used by 1 in 3 school districts in the US, and students have answered over 1 billion questions on our platform.
We’re a group of friendly people who listen to and learn from each other. We discuss past mistakes openly so we can adapt our processes to the challenges that come with progress. Puns flow freely across our San Francisco office as well as on Slack, and we have remote engineers spanning six different time zones.
Our engineering team [1] prides itself on code quality and innovation. We use the cutting-edge Elm programming language for all our new front-end code, and have been migrating legacy React code to Elm as well. We started with Ruby on Rails on our backend, and have lately been working to introduce Elixir to our stack. You can read about our experiences with these technologies on our team blog! [2]
In addition to spending work hours open-sourcing useful libraries we develop [3], we also invest financially in open source. We hired the creator of Elm, Evan Czaplicki, to develop Elm full time. [4] Evan discusses his plans for the language with the team every week, periodically pairs with other engineers on Elm, and cracks up members of the sales team with his lunchtime jokes.
We use Amazon AWS for our infrastructure and automate all of our…
NoRedInk | Full-Stack Engineers, Senior Full-Stack Engineers, Principal Full-Stack Engineers, Frontend Accessibility Engineers, Growth Engineers, Quality Assurance Engineers, and Engineering Managers | REMOTE from time zones between (and including) Pacific Time (PST) through Brasília Time (BRT), which includes both the continental USA as well as countries outside the USA.
We’re a growing ed-tech company on a mission to help all students become better writers! NoRedInk is used by 1 in 2 school districts in the US, and students have answered over 5 billion questions on our platform. If you're looking to join a team of friendly people who listen to and learn from each other, discuss past mistakes openly as we adapt to the challenges that come with progress, all while realizing our mission, then you'll be excited to learn more about us.
Our colleagues span six time zones, California to Berlin and points in between, with lively discourse flowing freely across Slack, Zoom, and the office when we're able to be there. Wherever we're working from, we've always delighted in our work to ship new features—beginning with our curriculum and product teams, designers, through to testing by our dedicated quality assurance folks—that put teachers and students first. [1]
Our engineering team [2] takes prides in producing innovative, maintainable software. We use the cutting-edge Elm programming language for all our front-end development. Our back-end is primarily Ruby on Rails by lines of…
NoRedInk | Full-Stack, Site Reliability Engineers, and Engineering Managers| San Francisco, CA | REMOTE Pacific Time (PST) to Central European Time (CET)
We’re an ed-tech company on a mission to help all students become strong writers! Our team may be small, but NoRedInk is used by 1 in 2 school districts in the US, and students have answered over 5 billion questions on our platform.
We’re a group of friendly people who listen to and learn from each other. We discuss past mistakes openly so we can adapt our processes to the challenges that come with progress. Puns flow freely across our San Francisco office as well as on Slack, and we have remote engineers spanning six different time zones.
Our engineering team [1] prides itself on code quality and innovation. We use the cutting-edge Elm programming language for all our new front-end code, and have been migrating legacy React code to Elm as well. Our back-end is primarily Ruby on Rails, although we are working to split off smaller services as we scale to keep up with our traffic. You can read about our experiences with these technologies on our team blog! [2]
In addition to spending work hours open-sourcing useful libraries we develop [3], we also invest financially in open source. We hired the creator of Elm, Evan Czaplicki, to develop Elm full time. [4] Evan discusses his plans for the language with the team every week, periodically pairs with other engineers on Elm, and cracks up members of the sales team with his…
You're the Truffle Ruby person, yeah? Hi!
Re: method_missing, I supoose it's not as easy to understand as I thought, which is to say if I understood it better, I could explain it better. The best I can do is this...
1. A typical method call in Java means "I pass a message (args) to a method on some object, and block until I get a response", which usually means building of up stack of blocking calls waiting for a response". The message passing is sending the message, which in Java is tightly coupled to receiving the response.
2. In Erlang, you might have a process (think of it as an object for this example [1]), that sends a message to another process. The sending process doesn't need to wait for a response. Erlang does have function calls that feel pretty much exactly like method calls in Java, and then there is message passing between processes, and that separation makes the differences more clear to me, which is not to say I understand things correctly.
3. method_missing in Ruby is kind of like sending a letter in the mail to Santa Clause. There is no physical address for Santa (aka an undefinded function), but someone at the post office looks at the intended destination (SantaClause.mailing_address) of the North Pole and message itself ("I have been good, and want a Nitendo Swith for Xmas"), and determines how to respond (method_missing) to the message.
I do not know if this explanation is any good, so please be kind :) Doing my best!
[1] this article…
NoRedInk | Front-end, Backend, Infrastructure Engineer | San Francisco, CA | REMOTE Pacific Time (PST) to Central European Time (CET)
We’re an ed-tech company on a mission to help all students become strong writers! Our team may be small, but NoRedInk is used by 1 in 3 school districts in the US, and students have answered over 2 billion questions on our platform.
We’re a group of friendly people who listen to and learn from each other. We discuss past mistakes openly so we can adapt our processes to the challenges that come with progress. Puns flow freely across our San Francisco office as well as on Slack, and we have remote engineers spanning six different time zones.
Our engineering team [1] prides itself on code quality and innovation. We use the cutting-edge Elm programming language for all our new front-end code, and have been migrating legacy React code to Elm as well. We started with Ruby on Rails on our backend, and have lately been working to introduce Elixir to our stack. You can read about our experiences with these technologies on our team blog! [2]
In addition to spending work hours open-sourcing useful libraries we develop [3], we also invest financially in open source. We hired the creator of Elm, Evan Czaplicki, to develop Elm full time. [4] Evan discusses his plans for the language with the team every week, periodically pairs with other engineers on Elm, and cracks up members of the sales team with his lunchtime jokes.
We use Amazon AWS for our…
Oops, didn't realize that seamless does its own shallow copying strategy with `merge`, `set`, `setIn`. I can't speak to how this compares to persistent data structures implemented by immutable.js, clojure, elm, etc. But it looks like the seamless author said the following about it:
> Persistent data structures are different, as their performance improvements are passive. Although seamless-immutable does not (and cannot, while maintaining its backwards compatibility with vanilla JS collections) use things like VLists under the hood, its cloning functions—such as merge—only bother to make shallow copies, as shallow and deep copies of immutable values are equivalent. In practice, this simple passive optimization has been sufficient; we have yet to encounter a performance problem that Bagwell-style persistent data structures would have solved.
from: http://tech.noredink.com/post/107617838018/switching-from-immutablejs-to-seamless-immutable#performance