Tylor Steinberger on learning programming, streaming and reactivity in JavaScript and JS ecosystem

Illustration of a relaxed person with hands behind head sitting at a desk with a laptop, coffee mug, and phone, next to three-dimensional text blocks reading "Cycles," "Mosts," and "Xtream." Illustration of a relaxed person with hands behind head sitting at a desk with a laptop, coffee mug, and phone, next to three-dimensional text blocks reading "Cycles," "Mosts," and "Xtream."

Today we interview Tylor Steinberger: the core contributor to CycleJS, MostJS and XStream, the author of MotorCycleJS, a few CycleJS drivers as well as numerous stream-related libraries. Tylor is relentless experimenter, the drive force of any community and (simply put) a person who blows your mind once you get to know him.

You say you're "still quite new to programming". How it started right from the advanced subjects of streaming and reactivity?

For me it all really started with seeing Andre Staltz' video about the user as a function. I had been programming very lightly and not quite seriously for about 7 or 8 months prior to this, mostly in Python. After seeing his video, I really wanted to try CycleJS out. I spent a little bit of time trying to learning JavaScript, and I joined the CycleJS community chat on Gitter asked lots of questions and learned as much as I could.

You have a unique experience of contributing for two major stream libraries: MostJS and XStream. What are the key differences between them? Any criterias to prefer one over another?

MostJS is a wonderful streaming library, and it is maintained by a set of brilliant people. I love that MostJS is carefully thought out. Brian Cavalier, the author of MostJS, always likes to find solutions that are mathematically sound which I think leads to very robust internals and a very reliable library.

XStream is different to MostJS. It was put together quickly with the idea of creating a library that is small and easy to use with CycleJS applications. I don't think that the internals ended up very clean, and I don't find it very easy to maintain as a consequence of that. I would love to find a way to incorporate both libraries into a single project that could benefit everyone.

I believe the choice between the two is gonna be difficult and quite subjective. I'd absolutely prefer MostJS in all applications that are not CycleJS-related as it has more operators, more flexibility, and is easily extended.

I find it much harder to suggest one over the other with CycleJS. Perhaps I'd suggest XStream over MostJS for beginners as it has smaller API and multicast-only streams that make reasoning about a stream graph a little easier. However, I think MostJS performance characteristics and extensibility give it additional benefits for large Cycle applications.

MostJS stands out among stream libraries because it exposes functional API. What do you think about functional and curried APIs in JavaScript? Do you think they have a chance, given the current dominance of object-oriented paradigm?

I personally really love using functional and curried API's with JavaScript. It takes a little while to get used to it. We use Ramda at work and it has improved the readability of our codebase significantly.

I definitely see more people learning and using Ramda in the communities that I'm involved with. So I think curried APIs are beginning to reach more developers each day and are slowly gaining foothold within the JavaScript community. It is an initial time investment up front and can sometimes take a little longer to write, but the readability after is well worth the time investment.

MostJS 1.0 was finally released. What are the further goals of this project? Which changes should we expect in the future?

We plan to do lots of non-user-facing things like rewrite the scheduler to use a hash-wheel and port the code base to ES2015, as well as modularize even more. However we do actually plan on adjusting some of the public facing API, and making it all curried! I think you'll see a large amount of community based projects pop up, as we just started a MostJS organization on GitHub, and are going to try to foster an additional help from the community.

You work with TypeScript in a lot of projects. Did you hit any language limitations in practice?

I've not really hit any limitations per se, but I've found it difficult to work with in a library code. When you have polymorphic functions like combine from MostJS, you end up writing lots and lots of code to make the function useful when type checking and it still doesn't cover all cases perfectly. Also currying is difficult, yet possible, to work with in TypeScript currently without writing lots of code or type-casting a lot.

Do you think TypeScript is mature enough for JS applications, full-stack in particular?

I think TypeScript is quite mature, but personally I'm waiting for 2.1 to be released before I really start suggesting it as a true alternative. 2.0 is going to allow for strict null type checking, a type inference is going to be amazingly m§fore polished. By the time 2.1 comes out, all the features from 2.0 will be very polished and reliable. That is when I'm going to push for the switch at work myself.

What about CycleJS? Does it keep it's exponential mindshare growth? What do you guys plan to do after Cycle Diversity?

I think CycleJS continues to grow. I've begun to see new active people in the Gitter chat every day. They are constantly answering questions of each other, even the hardest questions. I think it will continue to grow for a lot more time to come. Cycle Diversity was a huge release for us, and it took many months of work.

Staltz and I have discussed many things we'd like to do now, after the release, but I think one of the largest focuses is going to be a developer experience around debugging, and libraries that help achieve commonly needed functionalities like collections. So definitely stay tuned for future announcements.

Many people mention a growing interest in functional and reactive paradigms in the JS community. And also static typing. Can you confirm that?

I think a lot of people are drawn to it. React has slowly popularized functional ideas and patterns that the JS community is also adopting. I think reactivity is something that is growing much more slowly though. Angular 2 uses RxJS internally, so it will be interesting to see how many people begin to make use of it and start to learn more about reactivity.

You had a bit of experiments with PureScript recently. What's your impression? Is there a chance for some purely functional language to become mainstream in the near future?

I spent about 2 days I had off experimenting with PureScript. I found it very interesting, and I can't begin to emphasize on how wonderful their community is :) They are seriously welcoming and helpful. If you plan to learn PureScript I would definitely suggest reaching out to their community.

I really don't think purely functional languages will become too mainstream any time in the near future. They have a very large learning curve, and sometimes it feels like you're not being productive. In my short experience with them, most of your time with a functional language is spent with getting everything to type check and it can feel like you haven't written much code in the same amount of time as you would with something like JavaScript.

What is the best and the worst in JS ecosystem and community in your opinion? What would you like to keep and what would you like to change?

This is a very tough question for me to answer, as I really haven't been involved with much else out of the CycleJS and MostJS circles. From what I can gather though, I love that it is so large and there is a place for all: from newcomers to veterans a like.

I'd like to see it continue to be welcoming and friendly to newcomers. I think being welcoming is absolutely key to sustaining an environment where everyone contributes and learns from one another.

For me the only thing I'd really like to see change, or to see less of, is few people who feel as though it's other's jobs to maintain and write libraries / frameworks for them. Its very difficult to maintain any sized open source project and lots of effort are required. All on our own free time. I don't see much of it, but when it does occur it is always a bit of a let down.

Which tech subjects are you interested in, besides reactivity and functional programming?

I've always been very interested in compilers / interpreters and languages in general. I don't feel I've learned enough about programming as a whole to really tackle a large project such as a computer language, but definitely expect to see an attempt at it in the future.

Besides compilers I've also become increasingly interested in debuggers and other developer tooling. I definitely want to start working on developer experience in the near future.

Your advice for beginners?

The best advice I think I can give to beginner developers is to find a community in which you are interested and get involved. Ask lots of thoughtful questions and you will find that you'll also get thoughtful answers in return which, for me, are the greatest way to learn.

Andre Staltz and Frederik Krautwald were very active in the CycleJS community when I first got involved, and they were always answering questions and I have learned almost everything I know about programming from them.

I'd also like to mention Brian Cavalier here, as he is also very active in the MostJS community and also gives wonderful answers to questions that I always still find myself learning.

As a new developer myself, I can only say that you need to find something you are passionate about and never stop creating and learning.

Thank you, Tylor! An example of your progress as a self-taught engineer serves a perfect source of inspiration for many of us. We hope to see more of your projects in the future, gaining even more community attention!