Vue.js Creator Evan You Interview
evrone.com
evrone.com
A "Patreon-funded full-time job position" and the ability to take weeks off at a time? What an amazing career path Evan has taken. He sounds so passionate about Vue and he is fully funded to be able to do it. And what a good project to fund, always moving forward but at the same time pushing for the features that users want.
However he would be sacrificing a lot of autonomy to do so, because Vue.js would effectively be developed under the same corporate stewardship model as React and Angular. He doesn't make as much money as he could given his accomplishments, but he maintains broad control and ownership over his work.
Likewise his Patreon sponsorships can increase over time as Vue.js increases in adoption. And if he wants more income, he can take on lucrative consulting contracts for Vue.js deployments with large tech companies. A few of those per year would likely meet or exceed everything he's bringing in through Patreon.
is a good site to check ranges at a variety of companies (not affiliated, just a fan).
E6 at G/FB can range between $450-$600k.
That's $192k, pre-tax, between two people and likely infrastructure and tooling costs. Most developers of You's skill earn nearly double that at FAANG companies.
I think the money is decent and Evan must also consider it to be decent enough to get a person working full time with it. And that's what matters
As far as I understand, he's not really running a company though. It's mostly a solo endeavor.
So it seems like in this case time put in ~ outcome.
The team is more than just Evan.
I mean I basically have online social anxiety in that I don't tend to go read my old comments and possible responses to it. I rant without standing for and defending what I say. If you run a project like Vue, you can't avoid things like that.
Even my HN account is anonymous.
(That I think is holding me back too.)
I cannot imagine myself working like Evan.
It frees us from following others opinions or a group direction but we also lose track of something (I'm blurry I have no precise word for this)
I deal with all of these things as well, but have pretty much decided to not go the anonymous route, because I would rather try to build that confidence in myself and embrace the accountability that comes along with it.
That said, I still don't comment or publish much online out of this same anxiety. /shrug. It's a work in progress :)
I'm going back to good old life.
This! The biggest pro is the freedom to say politically incorrect things.
I do keep my hn profile low profile because it is also nice to have an outlet for fresh idea's and opinions that need refinement. I actually change my mind the most about things I comment in on HN. On my work everything is within the Overton window.
Recently he built Vite to see if it'd be possible to have a dev setup with no bundling (just using ES modules). It's evolved since then, but he picks up work a lot on new ideas and seeing how it can drive the direction of Vue.
Evan took a huge leap of faith when he quit his job for working full time on vue. I am happy that it has worked out well for him.
But it does not mean this path will work for other open source developers, of course they can still get corporate backing(node.js) or paid to work on it (react/angular) or make a business offering around it (laravel/tailwind)
This road is very less travelled.
The tailwind project model seems like it would pay better. The profit amount might make for sense for the pretty popular project vs the extremely popular project. It's a compromise because you stop working on the core project and start building these additional businesses that take time/effort away the project.
Corporate backing would make sense but enterprise has picked react. Vue lives because it's a great framework that is easily assessible not because it started as a corporate sponsored project with a popularity boost buildin.
Starting of with the composition API was great. No "this", easy reuse of logic via react-like "useXYZ" hooks and a general fast development. But two things really bugged me:
* You need to be really careful when passing around values and how you handle them. Destructure a Proxy object? You instantly lose reactivity. Not using a reference to proxy object in computed? Changes won't trigger the computed function. There is a lot of magic involved and while it may seem that it takes a lot of "thinking" from you, once it doesn't work you will have to rethink and maybe even ditch some of the underlying language's features.
* "ref" vs "reactive", where "ref" is used for primitives which need a proxy object wrapper and "reactive" is used for objects/arrays. Now, my primary problem is that you again have to use specific operations based on whether your using ref or reactive. A "ref" array can be easily set to an empty array via `arr.value = []`. If you try this with a "reactive" array, you will lose reactivity; you would have to use `arr.length = 0`.
TypeScript detects a lot of those pitfalls and, IMO, it is essential when using the composition API. Without it, there is too much invisible magic happening.
After trying to use v3 for a new project and trying out the composition API, I've gone back to React.
With v3, and the composition API, to me, it lost all of its appeal (being simple, easy and complete). Now to me it has the worst of both worlds... it's not as easy anymore, has a lot of gotchas and conceptual overhead.
The Options API is still the default and remained pretty much the same.
Why would you think that? To me it sounds like a completely unbased opinion and goes agains everything that I read in the v3 documentation or in numerous discussions.
> Possibly the biggest change is our new Composition API, which is entirely additive- the previous Options API will continue to be supported, as the Composition API is an advanced feature.
https://v3.vuejs.org/guide/migration/introduction.html
The Composition API is the last item in the API reference, the Options API is positioned much more prominently.
https://v3.vuejs.org/api/options-data.html
In the Guide, the Options API has its own section while the Composition API is nested within the "Advanced Guides" section.
I've primarily moved over to Django with server rendered content and sprinkles of JavaScript where needed.
Nice. We need more of this.
Here's a great introduction to LiveView:
For those interested in LiveView-esque functionality in other frameworks , there are some similar projects cropping up:
- Django Reactor https://github.com/edelvalle/reactor
- Laravel Livewire: https://laravel-livewire.com/
- Rails Stimulus Reflex: https://docs.stimulusreflex.com/
- Intercooler.js: https://intercoolerjs.org/
There’s a combination of low level features that combine to make LiveView work effectively.
Do you use Hooks in React? Because in that framework, that actually is replacing the older methods, and if you use Hooks then the Composition API is the same (and better in many ways).
4 year Vue dev here (right after 2.0 release). In Vue 2, you have a bunch of "magic" properties. Your state goes under the "data" key, computed properties go under "computed", methods go under... etc. Then you have the lifecycle hook magic methods: "created()", "destroyed()", etc.
In Vue 3, you have one function -- "setup()". This function returns the stuff you want to use inside of your component. This could be state/reactive data using "reactive()" or "ref()", derived data using "computed()", watchers, plain functions, whatever.
If you need to use lifecycle hooks, then you put an "onMounted(() => {})" or whatever in your "setup()".
The API was stripped down to essentially one initialization method where you set up everything you need.
Though to be fair, these days I write Vue like a weirdo and I use JSX with it.
const App = defineComponent({
setup() {
const state = reactive({ count: 0, msg: "Hello" })
const doubledCount = computed(() => state.count * 2)
const inc = () => count.value++
return () => (
<div onClick={inc}>
<p>{state.count}: {state.doubleCount}</p>
<p>{state.msg}
</div>
)
}
})Docs are fantastic as well.
Congrats to Evan You for a stellar job
Projects driven by "biggest things since sliced bread" tend to vane very quickly after the initial excitement, and agiotage about its buzzword feature is gone.
Check what extensions you use, and use uBlock Origin as your adblocker.
It's not noticeable on larger screens but they should consolidate these to a single location and definitely don't have a banner ad in the main page header.
Sample screenshot: https://i.imgur.com/bDste7S.png
I know there was a big meme about how js frameworks come and go every 2 years but it feels to me like react and vue are almost the end game frameworks. They work so well and have been so stable over the years that this might be what we end up with. It almost blows my mind how they manage to make such simple interfaces for things that are super cumbersome in plain JS
I recently I learned that it not always true. As a matter of fact Vue (and many frameworks) does a lot of optimization under the hood to keep your apps breezy.
For example when you're dealing with lots of data, One of such concepts is re-using input fields and DOM elements via keying. So if you are trying to render lots of input fields, Vue can intelligently reuse(1) the components so as to make minimal changes to the DOM (implementing this vanilla JS is possible but might require lots of efffort).
(1) https://vuejs.org/v2/guide/components.html#Reusing-Component...
As a former backend engineer, I'm really grateful to be working with Vue. I used Backbone, and a little React and Angular before. Vue was the simplest and the most fun so far.
Having everything in one file was the thing I didn’t like about Vue - constantly scrolling up and down the file between the methods and the template/styling got pretty annoying quickly.
Probably the same thing that stopped you from not using SFCs in Vue: One is idiomatic, the other isn’t ;)
The only way I know of to make them is to use styled components. RedwoodJS seems to doing something like a template literal for styling but that's still not really the same. In my opinion Vue's <style scoped> approach is much more elegant.
constantly scrolling up and down the file between the methods and the template/styling got pretty annoying quickly
Buy a bigger monitor. :)
Still, Vue is my favourite tech for SPAs.
Ref: https://vuejs.org/v2/guide/single-file-components.html#What-...
I'm having a hard time getting on board with the Composition API. I'll admit I was one of those that pushed back against it. While it looks like a powerful API and I think it would be a great replacement for mixins for instance, I don't want to start writing all my components with it.
BTW, My main fear was not that they would deprecate the object-based syntax, like Evan points out in the interview. What I'm worried about is now walking into a Vue role where I don't know if they're using Object syntax, Class syntax, or the Composition API syntax, or a combination of all three.
My fear was partially confirmed when we had a meeting at work about the upgrade path to Vue 3 and almost all of the other engineers stand in support of writing everything with the Composition API.
Time will tell if the Composition API becomes like React Hooks in terms of popularity I guess. But I'm already using frameworks like Svelte, and a few others at home as a kind of backup plan. BTW, Some nice looking, Typescript-friendly frameworks I've also checked out are https://aurelia.io and https://stenciljs.com
In my vue, that is mixing politics and personal opinions into a public coding project. I believe this to be a non-no. It implies that those that don't share your [unrelated] views are not legitimate.
In this example, it implies that those who are pro-minority rights but anti-protests are in some way less committed than their pro-rights and pro-protest counterparts. Which is not correct - there are many, many people like myself who have dedicated their lives to helping minorities, but think it can better be done if we don't turn them into victims.
You can disagree, but don't make it part of the code.
I encourage all large public projects to please respect the opinions and efforts of all their users and possible contributors, even if their users are not woke, or try to do good in ways other than you would.
The banner is gone, so am hoping that other commenters will respond to this as an example, not as a specific. (In other, don't defend BLM, there are other venues for that.) Please, please keep politics for the media to exagerate, and keep large projects politics free.
edit - sigh For all those erstwhile readers that are righteously downvoting me into oblivion - that's fine. I respect your right to consider my verse worthy of ire. But a comment to explain why you disagree would be so much better! Angry destruction without reason is already plentiful, but it is neither constructive nor persuasive. It reinforces the feeling that you will happily cancel anyone with another point of view just because you don't care to hear it.
The Django, React Router and React docs all definitely had BLM stuff.
In comparison, the charity-ware of vim is fine to me. It does what it's supposed to without all the backpatting.
You know what has happened to Georges Floyd, Breonna Taylor and many others. People murdered routinely by the police without any consequences. Using whatever platform you have to speak out against it is morally right. Protests happens after decades of police violence against black communities, by being against those you are standing against an human rights issue (Whatever is your reason, even COVID). You need to be aware of that and think if that's a good use or your life. Plenty of people do, usually white nationalists, KKK members and neo-nazis, who are vocally againsts humans rights and equality between white people and people of colors.
I also am pro human rights. Very much so. And yet I think that BLM does it all wrong, and all that will come out of their protests are more police, more government, more bigotry against the blacks, and more slums.
I suspect that there are a lot of people like myself.
Turns out, human rights activists have been peaceful. For decades. It did nothing. Even filmed in broad daylight, with people begging him to stop and with the whole world watching it on the internet, a police officer can still murder a black man and get away with it. Which they would have without the protests. Now, each time that happens, there will be a wave of righteous anger through the country. Until that doesn't happens anymore I hope.
MLK's protests weren't peaceful. There was the same stuff happening, looting, violents elements, confrontations with white nationalists, and they've changed things, tremendously for the better. I hope the same happens with BLM.
The equation is do you lose more patrons by having or not having the banner (and be accused of being a racist). Easiest, and most profitable, to just to add the banner...
I didn't downvote you but I'll tell you what rubbed me the wrong way about your comment. I think people who did downvote you probably felt similar. In short, I think your comment is patronizing. You imply that the people protesting are doing so in part as a result of "media exaggeration" and being "turned into victims". I read this as you saying that things aren't actually that bad, and the people protesting are doing so based on false pretenses. Your comment has the paternalistic air of "I know how to help these people better than they know how to help themselves".
But in the case of a project with over 50 branches, and hundreds of thousands of users, that advertises an active community and wants me to get involved, then it is entirely something else. There I think that great pains should be taken to keep out emotionally charged views, as there are bound to be lots of people that you actually want to be part of your community that will feel out of place. Hence my statement "large open source project".
Does it though? That seems highly sensitive. Also, their support of BLM does not necessarily mean they support violent protest. They could be using their platform to show support of the movement and peaceful protests, which are critical to a functioning democracy. So are you anti all protests, or do you make the distinction and oppose only those that use destructive methods?
Creds: I moved into a low-income area and have spent the past ten years providing education, money, and support, trying to improve the lives, and championing the cause of those living in such areas. I adopted a kid with a police record longer than your arm, and worked with him getting detoxed. I spend most of my waking hours on this, all volunteer.
I grew up in the projects. There was a dude some ten years older than myself - a programmer (back before computers were a thing) - who convinced me that I can do something with my life, but I have to take the onus of responsibility upon myself - even when it is someone else's fault.
That's the message I now try to give over - you guys are awesome, and some day you can change this whole here community around. But you gotta take the whole responsibility upon yourselves - especially when it is not your fault.
That's a big message, and hard for me to write in a post like this, but it works. I have hundreds of students that have healthy lives, and we have grown to 30 volunteers who help me.
When there are riots like these it passes a huge message - it is all "their" fault, and "we" deserve everything because of it, and we don't need to take any responsibility.
So, protests have a place. But the way that BLM projects it is, IMO, destructive, even if there are no riots.
Edit: I am not dismissing the bad and uncaring attitude projected by the police or government. I am not dismissing the emotion, anger and sometimes guilt of the protestors. There are protests and other actions that can be extremely useful. Perhaps thought can be put into what objectives can be gained, and how to get them, and then think if supporting BLM is really the way to get them. (Also, I know a few people who have joined BLM protests as a way of protesting Trump. IMO, not the best way to do that, either.)
I agree with a lot of what you say, and also relate very much to your message about accepting the burden of personal responsibility - as difficult and unfair as that may feel at times.
> So, protests have a place. But the way that BLM projects it is, IMO, destructive, even if there are no riots.
This is a position that I also very much agree with, and something I think many people either do not understand, or will not admit. I've seen your other responses to replies on this thread and think you are right that there are many, many people that feel very similar to the way you (we) do.
If you wouldn't mind sharing more info on the (your?) organization you spoke of, helping students and coordinating volunteers, I'd love to learn more about your efforts to lift up people around you.
No, I don’t see any irony here. Name one programming language/framework/tool that’s universally game-changing for every single developer. The reality is that technology doesn’t work that way.
The fact that detractors of Vue exist in no way means that Evan doesn’t care about users. It’s very clear that he spent years working on a problem hard enough to build a solid response to React, a project with so much more momentum and money initially.
What backlash against Vue 3? I know that there were very passionate discussions about several different RFCs that eventually lead to the current Composition API. But as far as I can tell, the current Composition API is very well accepted in the community. Also, the Composition API is an addition and does not replace the API of Vue 2.
So do you refer to the controversies about older RFCs? Because I can't see any other backlash. BTW, having discussions in an RFC is a good thing as it helps getting to a better overall solution.
> creation of Svelte
How is Svelte related to Vue in general or Vue 3 specifically? Svelte 1.0 was released in 2016 and I can't really see any irony here at all.
I think they share more goals than they compete on, with Svelte being newer (compiler based) and Svelte taking an older style approach (Virtual DOM) to implement those goals.