Live data from Hacker News

Build Impossible Programs

jvns.ca

111–120 of 131 posts

Re: Build Impossible Programs

#111
post #79

I just wanted to share that everything jvns is saying here is true. In 2014, for the Google Summer of Code program, I applied to build a JIT compiler for the MoarVM virtual machine. (It is actually more correct to speak of my work as a JIT backend than a full-fledged compiler - the 'frontend' of the compiler was already under development when I started). At the time, I knew just short of nothing about compilers, let…

Indeed. Mostly, it just takes time and getting familiar with whatever idea you're tackling. I love to throw out crazy ideas. Most of them get filtered away, but I've gotten to prototype some initially unapproachable stuff: * Generate a dsl for interacting with web pages in ui tests from the frontend framework templates * Write a test recorder that lets you step through the browser state * Write a Jenkins plugin to tr…

I find DSLs and FSMs are the most satisfying things to develop. Getting a DSL right is like a magic turbo button and a FSM with the right states and transitions can help clarify really ugly problems.

Re: Build Impossible Programs

#112

One thing that caught my attention is Julia’s value of work / life balance and the humanization (if that’s the right word) of programming. She very deliberately didn’t work on this in her spare time (underlining that coding isn’t the only important thing in her life) and when she did build the prototype she explicitly wanted to do it at a weekend coders retreat with other “wonderful” people around (as opposed to secl…

Same here. I had to do a double take when she mentioned that. She is a pretty accomplished individual and I always assumed that a lot of her personal time was taken up doing programming related activities. Now I know you don't necessarily need to sacrifice all your personal time to become HN famous.

Re: Build Impossible Programs

#114
post #79

I just wanted to share that everything jvns is saying here is true. In 2014, for the Google Summer of Code program, I applied to build a JIT compiler for the MoarVM virtual machine. (It is actually more correct to speak of my work as a JIT backend than a full-fledged compiler - the 'frontend' of the compiler was already under development when I started). At the time, I knew just short of nothing about compilers, let…

I would like to know, when you run into the situation that you don’t know was is going on with what you are building and feel a sense of confusion, do you: 1) Stop and spend time trying to get a clear mental model of what you are confused about 2) Push forward and try to build despite not understanding In the past, when I tried doing super-ambitious things, I used the second strategy. Many sleep-deprived (tip: “sleep…

It is interesting because I went through this exact question recently with an intern.

My condensed advice is:

1. Are you still making progress? Keep going. Don't give up.

2. Are you spinning your wheels? Take a step back, re-evaluate what you know, investigate things you are not clear on.

3. Still stuck? Ask for help. Don't panic or be ashamed. Show the progress you've made in step 1 and share the things you studied in step 2.

Re: Build Impossible Programs

#115
post #79

I just wanted to share that everything jvns is saying here is true. In 2014, for the Google Summer of Code program, I applied to build a JIT compiler for the MoarVM virtual machine. (It is actually more correct to speak of my work as a JIT backend than a full-fledged compiler - the 'frontend' of the compiler was already under development when I started). At the time, I knew just short of nothing about compilers, let…

I would like to know, when you run into the situation that you don’t know was is going on with what you are building and feel a sense of confusion, do you: 1) Stop and spend time trying to get a clear mental model of what you are confused about 2) Push forward and try to build despite not understanding In the past, when I tried doing super-ambitious things, I used the second strategy. Many sleep-deprived (tip: “sleep…

These are all good questions, and not so easy to answer :-) Any answers I can give are personal, of course, and may well have no relevance to your situation.

a): 'Studying' is definitely very important to get an idea of the context of the thing you are trying to solve. (I did a lot of reading both before and during the project). But, it doesn't always relate easily to the problem you have right now. (E.g. I'm using linear scan allocation, and the papers on that method all glossed over the nature of a 'live range', which took me 3 iterations to figure out). And without a practical problem to guide you, it is easy to get lost in literature.

b): What I find is that before I try to do something, I typically put together a high-level overview of how I think I can achieve it (what stuff to change where, and what I will need for that, roughly). But I'd classify that more under planning than under studying per se.

What I also do is take lots of notes. I have several large org-mode files (big fan) and before that paper notebooks in which I write down thoughts as they come up. I think org-mode is superior because it lets me organize things after the fact. Notes are a crucial bit of making progress for me, because I don't need to revisit the same things over and over.

The other thing that I find helps very much (and which I wasn't very good in at first) is to do incremental, small-step improvements. Move a function here, change an struct there, change an interface, move some process earlier or later, split it up. Simple things that you can do and that you know will not go wrong. Many problems can be broken down in that way, and the few that can't can at least be 'isolated' so that you can fix them 'atomically'. I wrote a blog post about this some time ago, if you'll excuse the link: http://brrt-to-the-future.blogspot.com/2016/06/in-praise-of-...

c): I was lucky to be able to join the perl community as part of a GSoC project, and fortunate that the perl community is altogether friendly and welcoming. And I really can't speak for the node.js people at all. But what I will say that anyone with a genuine interest in contributing (as you seem to have) and a willingness to do the work to learn (and to listen) will find a warm welcome from nearly all open source projects, because all of them are relatively understaffed compared to their ambitions :-)

So in your situation, I'd start with checking out the node.js source, start with trying to figure out how a debugger could work (there is lots of prior art here, of course, so you can check out the chromium source as well), and ask your questions basically as the jvns comic demonstrates.

I hope that answers some of your questions.

Re: Build Impossible Programs

#116
post #79

I just wanted to share that everything jvns is saying here is true. In 2014, for the Google Summer of Code program, I applied to build a JIT compiler for the MoarVM virtual machine. (It is actually more correct to speak of my work as a JIT backend than a full-fledged compiler - the 'frontend' of the compiler was already under development when I started). At the time, I knew just short of nothing about compilers, let…

This can work well if you are in an environment like the Google Summer of Code program. It's much harder to do this if you don't have a mentor or two who would be able to spot your mistakes and guide you in the right direction. For many engineers out there they would not have the same set up. Someday I would love to help out somebody with something ambitious but I feel like I need to learn a ton before I am in that p…

Indeed, I owe a debt of gratitude to a lot of people.

Re: Build Impossible Programs

#118
post #79

I just wanted to share that everything jvns is saying here is true. In 2014, for the Google Summer of Code program, I applied to build a JIT compiler for the MoarVM virtual machine. (It is actually more correct to speak of my work as a JIT backend than a full-fledged compiler - the 'frontend' of the compiler was already under development when I started). At the time, I knew just short of nothing about compilers, let…

I would like to know, when you run into the situation that you don’t know was is going on with what you are building and feel a sense of confusion, do you: 1) Stop and spend time trying to get a clear mental model of what you are confused about 2) Push forward and try to build despite not understanding In the past, when I tried doing super-ambitious things, I used the second strategy. Many sleep-deprived (tip: “sleep…

A heuristic I use that is very accurate for me is whether or not I can easily step away from what I'm doing (for a break, or just to finish the day) or do I feel a compulsion to keep going. If stepping away is difficult, I'm definitely in a "death spiral". At this point I can be sure that my productivity is already low, and it will just get worse. It's a burnout; a feeling that your problem-solving apparatus has overheated; severe tunnel vision coupled with impatience. It's weird that it produces such a drive to continue.

So when you pose the question, whether to push or take a step back, in my experience, it's better to pick clarity over aggressive pushing. It's subjective though. While I think there are overarching principles, I also think that different people react to these situations at least a bit differently.

To say a few words about confusion when confronting something you don't fully understand, I think the more confusion you can take, the better. Ideally confusion should be second nature to us, too often we jump to something prematurely just to escape it. When you think about it, we never fully understand all the things at play. It's about not being paralyzed by that.

Re: Build Impossible Programs

#119
post #80

If I'm reading that correctly, Segment was (is?) providing some people $8K per month for 3 months to work on open source projects. That's amazing! Here's a link to their 2017 application page: https://open.segment.com/fellowship

Wow, $8K per month is a crazy amount of money (for a developer in Europe), especially to work on a project of your choice.

Not really- it’s a decent amount but not crazy. You would have to be a contractor to take this up, and that’s quite a bit less than a contractor on say 500 EUR/day would make.

Re: Build Impossible Programs

#120
post #80

Earlier quoted context omitted.

Wow, $8K per month is a crazy amount of money (for a developer in Europe), especially to work on a project of your choice.

Not really- it’s a decent amount but not crazy. You would have to be a contractor to take this up, and that’s quite a bit less than a contractor on say 500 EUR/day would make.

That's also less than what a contractor on say 10000 EUR/day would make.
Post reply on HN