
Build Impossible Programs - Cmerlyn
https://jvns.ca/blog/2018/09/18/build-impossible-programs/
======
brrt
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 alone JIT compilation. So what
I did instead was learn, and make lots and lots of mistakes.

And it worked. The JIT backend I created has been in production since 2014,
with a new backend since 2017, and a small (but thriving) community of
contributors. It is far from the worlds most advanced JIT compiler, but it
does provide a nice speedup on real-world perl 6 programs. All the while I've
continued learning.

So... definitely try ambitious things :-)

~~~
afarrell
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 is for the weak” is BS) nights in
which I accomplished nothing left me with a strong feeling that I should not
try to do impossible things. However, since I learned the first strategy and
have been applying it successfully to projects at work, I am rethinking this.
I have increasingly been feeling like I would be able to be surmount large
challenges if I first set myself up for success in terms of resources and
people to ask for help.

Questions:

A) Do you apply a “step back and study” strategy to tackle confusion? Have you
found it successful?

B) Do you have any more detail you could add on how it works?

C) How do you set yourself up for success outside of a work setting? For
instance, I would like to write a server-side debugger for nodejs that is
independent of google chrome and works toward a pry.rb-like developer
experience. However, I haven’t written C since by OS class in uni and I don’t
know the internals of node.js. How would I go about building trustfull
relationships with people who know the internals of node.js so that I can ask
them questions in the style of [https://jvns.ca/blog/good-
questions/](https://jvns.ca/blog/good-questions/)

~~~
dmos62
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.

------
DanielBMarkham
Some of the best experiences I've had programming is when I thought of
something I'd like to make, but it seemed impossible. Then I went and made it.

You do that enough times and coding becomes like real-world magic. You know
you can do it, you don't know how yet.

Yes, there are places you can get stuck. Rules-processing, unstructured data,
Markov Chains, ML, and so forth. But even that's a win. You start
understanding the various classes of problems to be solved and how best to
approach each one of them. That kind of meta-knowledge is really difficult to
get without wading into things.

At the end of the day, you realize that there's no such thing as _impossible
problems_ in coding. There's just problems that people can't figure out how to
produce optimum results. A lot of the ML stuff we're seeing now is more like
"make the best of things" and less like math.

Programming is a hoot.

~~~
z3phyr
It's rosy, but there are actual theoretical limits (like the halting problem)
which act as a bedrock in that magic. Eventually we might find a way around,
but we cant be sure of it now.

~~~
phaedrus
Even something like the Halting Problem does not rule out as much as people
impute it to. It just proves you can't write a program that can analyze _all_
programs, but doesn't mean you can't analyze _some_ programs. However I
disagree with your concluding sentence - the whole point of a proof is that we
_are_ sure of it now, there is no way around. I would instead phrase it as, we
may in the future find that the things we're interested in doing need not run
into this barrier, because we refine the notion of what we actually want to
accomplish.

~~~
DanielBMarkham
Yep. Want a program to halt? Put a timer on it.

I thought the comment was both interesting and illustrative. Sure, in CS
there's a ton of things still to do. But my comment wasn't about CS, it was
about programming -- making things for people. The programs don't have to be
provably correct or even consistent. That kind of stuff is the science part of
programming which is completely different from the applied philosophy that is
programming computers to make stuff people want.

------
mikekchar
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](https://open.segment.com/fellowship)

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

~~~
albertgoeswoof
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.

~~~
Jyaif
That's also less than what a contractor on say 10000 EUR/day would make.

~~~
eneveu
Of course, but 500€/day is what you'd get in Paris as a Java developer with
3-4 years of experience. Which amounts to 10000€/month (counting 20 days).

------
georgecalm
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 secluding oneself in a room and
coming out of it with a solution).

~~~
stuxnet79
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.

~~~
Serow225
I'm glad she mentioned that too, sometimes it feels like there's cultural
pressure thag if you aren't hacking in every non-work hour then you're a
slacker…

------
afroisalreadyin
This is so inspiring, thanks a lot. It's great to see that there are now
resources going into supporting OSS developers that require only an idea and
pedigree, and not a finished product and a business plan.

~~~
amirouche
At last someone speak up about that very subject "doing impossible things"
without being negative about the fact the community (of haters) forbids that
behavior.

Innovation is NIH somewhat, somehow and that is a Good Thing.

~~~
hinkley
I don’t want to work for a company that only bolts together off the shelf
components, although talking to me a few times you might get the idea that
this is precisely what I want.

I hate working at a place where people are so busy being clever that they
reinvent everything. You steal from the younger devs an opportunity to learn,
and you externalize the cost of your poor documentation and interface
consistency onto your coworkers instead of spreading it out over the entire
industry. This is NIH.

What you should do is pick a segment of your problem space that has mediocre
tools and make something much better. The 80/20 Rule seems to work quite well
here, when I see it applied, which is not often enough.

~~~
amirouche
> The 80/20 Rule seems to work quite well here, when I see it applied, which
> is not often enough.

That is 20% of the effort can deliver 80% of the features?

~~~
hinkley
The other side. We spend 80% of our time on the last 20% of the code. Make it
count for something. Do something that differntiates you from competitors.

------
saagarjha
I do love it when people post their slides for presentations, because this
means I can usually get the gist of it without watching the video. Thanks,
Julia! Though one quick comment: you're drawing your slides by hand, which
unfortunately makes it a bit annoying for other people to consume–copy/paste
doesn't work, and I'd assume people with limited vision might even be
completely out of luck. So a transcript would be really nice.

~~~
tobyjsullivan
The transcript is linked on the page.
[https://www.deconstructconf.com/2018/julia-evans-build-
impos...](https://www.deconstructconf.com/2018/julia-evans-build-impossible-
programs)

~~~
saagarjha
Thanks, I must have missed that when I glanced through this.

------
speps
Does someone have a direct link to the video? The iframe Vimeo player doesn't
work and I can't seem to be able to find the original video on there.

EDIT: M3U8 link:
[https://skyfire.vimeocdn.com/1537357126-0x19388e9cb2a5d6095b...](https://skyfire.vimeocdn.com/1537357126-0x19388e9cb2a5d6095b66b7f25139c7e6b7668931/290376045/video/1100074443/playlist.m3u8)

~~~
xaranke
[https://player.vimeo.com/video/290376045](https://player.vimeo.com/video/290376045)

~~~
speps
Thanks but that doesn't work for me, I can't figure which extension is
blocking me.

I get this when opening that link:

TypeError: "play" is read-only player.js:2:3975

VimeoPlayer<
[https://f.vimeocdn.com/p/3.3.17/js/player.js:2:3975](https://f.vimeocdn.com/p/3.3.17/js/player.js:2:3975)
<anonymous>

[https://f.vimeocdn.com/p/3.3.17/js/player.js:2:260](https://f.vimeocdn.com/p/3.3.17/js/player.js:2:260)

TypeError: VimeoPlayer is not a constructor 290376045:1:9150 <anonymous>

[https://player.vimeo.com/video/290376045:1:9150](https://player.vimeo.com/video/290376045:1:9150)

~~~
xaranke
Putting the link in youtube-dl and watching offline works for me.

~~~
speps
Thanks I got this, playable with VLC for example:
[https://skyfire.vimeocdn.com/1537357126-0x19388e9cb2a5d6095b...](https://skyfire.vimeocdn.com/1537357126-0x19388e9cb2a5d6095b66b7f25139c7e6b7668931/290376045/video/1100074443/playlist.m3u8)

------
gorpomon
This is really cool inspiring work. Julia Evans makes the world a better
place.

------
lprd
I'm really enjoying the content that Julia Evans is releasing these days!

------
cattlefarmer
I can't tell if she's nervous or awkward or excited but it reminds me of
myself when giving talks, even to small groups. I get so flustered that my
mind races and then the rest of my body tries to catch up so I'm now talking
really fast and moving and jumping all over and being very fidgety with
things. Anyway the difference is that she managed to get her points through
while mine often gets lost.

I still don't know how to fix that except to practise and memorise what I'm
going to say, and then just read it. But then it just becomes very monotone-y.

~~~
jen729w
Whenever I have to speak publicly, I try to channel Barack Obama. He talks so
... slowly. He pauses so ... ... long between sentences. It feels like agony
when you’re doing it, but it works. In reality the pauses are never as long as
you imagine, and it gives the audience time to absorb what you’re saying.

~~~
Arnt
Can you suggest a video with a good example?

~~~
xaranke
Obama's final State of the Union is a good start:
[https://www.youtube.com/watch?v=rlLSBTAg0aM](https://www.youtube.com/watch?v=rlLSBTAg0aM).

More archived videos are available here:
[https://www.youtube.com/channel/UCDGknzyQfNiThyt4vg4MlTQ/vid...](https://www.youtube.com/channel/UCDGknzyQfNiThyt4vg4MlTQ/videos).

------
NotUsingLinux
What about thinking impossible thoughts?

[https://gist.github.com/AndreasS2501/2dc6c5813f5fd8abc79aad4...](https://gist.github.com/AndreasS2501/2dc6c5813f5fd8abc79aad44479843be)

Philosophy is pretty cool?

~~~
thecatspaw
So I admit that I didnt read the whole thing, but this seems more like yet
another push for bitcoin, and not actually about philosophy?

> So lets focus on that, the impossible thought: How can we live together in
> peace and prosperity with each other and nature?

By fixing ethical misstandings, improving laws and destroying borders where
none need be.

> So again, blockchains and ethereum are software and you can do any thing
> with them.

You cannot fight racism with it. You cannot fight prejudice with it.

If all you have is a hammer, lots of things start to look like nails. Sure,
you might be able to hit your girlfriend with the hammer, but the relationship
would probably improve more if you talked about the problem.

~~~
CiPHPerCoder
"Sure, you might be able to hit your girlfriend with the hammer, but the
relationship would probably improve more if you talked about the problem."

Or, rather, if the relationship ceased before violence entered the equation.

(In case anyone complains about pessimism, a friend of mine says often:
"Relationships can only end in one of two ways: death or breakup." I'd rather
think of it as a stoic position.)

~~~
thecatspaw
well yeah, I didnt mean it that literally

------
tomerbd
there is nothing like jvns I wish I had more spare time to read her content.
:/

------
AJRF
Anyone know what Julia is using for those handwritten slides?

I absolutely love everything Julia writes. She writes in a way that makes
absolutely zero assumptions about your level of technical competence. You
could be a junior, mid, senior and still get _something_ from most of her
articles.

Anecdotally; Almost every female engineer I work with writes and communicates
in this fashion and I really bloody wish more of my male counterparts would
speak with less jargon/acronyms for the sake of new starts/non-engineers.

~~~
albertgoeswoof
> Anecdotally; Almost every female engineer I work with writes and
> communicates in this fashion and I really bloody wish more of my male
> counterparts would speak with less jargon/acronyms for the sake of new
> starts/non-engineers.

It’s not a good idea to generalise and push gender stereotypes in this way.
You’re saying that female engineers have better communication skills than male
ones, setting the bar higher for female engineers.

You might think you’re improving gender equality with statements like this but
really you’re setting a different bar of basic competencies for males vs
females.

~~~
AJRF
Honestly couldn’t be further from the truth. I’m not trying to improve
anything, I’m stating experience. The clues in the word anecdotally. It’s a
shame HN always devolves into contrarian and counter-contrarian tit for tats
like this

~~~
albertgoeswoof
Yes but if you said the same about a race or other marginalised group it would
get called out on and you would probably agree. It’s not tit for tat, it’s
sexism and it’s important we address it collectively.

~~~
splatzone
The poster above clearly didn't mean what they said as an attack or an attempt
to set unfair standards for women, I don't think what you're saying makes any
sense.

I work with a lot of gay men and I notice that they can often be more empathic
and sensitive than straight men. Different groups behave differently and
individuals can act however they like.

It's not sexist or homophobic to notice trends. We stand to gain a lot from
noticing how people behave and reflecting on how we act ourselves.

~~~
albertgoeswoof
The intentions are not the issue. The problem is demonstrated in your comment
- the poster has presented an anecdote and you have interpreted it as trend.

You can’t just say women are like X and men are like Y unless you actually
have reasonable evidence to back it up. Prefixing it with the word it’s an
anecdote is just a get out clause that makes it seem ok. In the end the effect
is negative on both men and women, even if it’s a positive trait.

You probably aren’t noticing actual trends, you’re just reaffirming thoughts
you already have by picking specifics traits out. It’s perfectly natural and
normal behaviour, but it’s still not right and we should avoid it where
possible.

------
yuanotes
How do you make those lovely slides?

~~~
suprfnk
From the article:

"As usual these days I drew the slides by hand. It’s way easier/faster, and
it’s more fun."

------
hatchback176
Just be an ENTP
[https://legacy.keirsey.com/4temps/inventor.asp](https://legacy.keirsey.com/4temps/inventor.asp)

------
ensiferum
But if it can be built.. then it's not impossible.

Hence the topic should be "Build possible programs".

~~~
Senderman
I'm pretty sure the implied sentiment is "Build programs that look impossible
because they might turn out to be possible."

