https://techcrunch.com/2012/04/27/be-concise-the-top-questions-asked-at-a-y-combinator-interview/
I'm working on a general-purpose programming language, which I call "Flock"
Not at all, I only need enough funding to live at the moment.
Mostly interest in the ideas involved.
Attribution competition.
I lost my job, some weight, and a lot of control over my own life within a week. I literally shit my pants in exitement at one point.
Not any time soon.
Write the paper, which involves a tight-knit network of definitions, proofs, explanations and translations to other languages.
The rocket science is in choosing the definitions. If a single definition clashes, it could bring down the whole language or lead to nuanced bugs down the road. I use category-theory, computer science, discrete mathematics, and a high level of internal organization to help with these decisions.
Because it's awesome to write your own programming language. It requires a well-rounded level of expertise in all of the involved fields while giving me a way to distill many of my favorite techniques into a cohesive whole.
Right now, I'm only beginning to translate and educate others in this language. Many users are intimidated by complex terms or are unwilling to risk time and effort on a language you can't program in today.
I'd hire technical consultants to check and improve upon my work.
- A research assistant (grad-level CS)
- General writing assistants to help write documentation
- Very-high or very-low level developers: Coq, C, Rust, Haskell, etc
- Someone to help me manage effort and time as this project scales
Flock needs friends to acheive its potential. Making, managing, and working with those friends is one of the biggest challenges in my mind.
I am, for the paper and this organization, since I know and understand it better than anyone else I know.
You are, when actually writing in Flock, since it's so versatile.
At the moment, I'm mostly working on the paper and preparing for its release. Once the paper is released, it'll be time scale up connections, implementations, documentation, etc. as quickly as possible.
My biggest obstacle is communication.
I need to communicate with those who would use or be interested in Flock and get enough people excited about the language to create momentum.
(More backend than frontend) Programmers, Software architects, and anyone who's trying to scale patterns in software.
The paper defines a categorical model, which is topologically equivalent to a hypercube. I then translate the categorical model to many other languages:
- Type theory
- Computer science
- Discrete mathematics, including combinatorics and discrete probability
- Statistical thermodynamics, etc
And finally, I define a full set of semantics that allows you to use this model as a programming language.
Scale
I understand very abstract and specific patterns on a variety of levels, and can easily translate both problems and solutions between levels of abstraction and languages in my field.
- SEO work which I've already begun
- My personal network
- The readers of the paper
- And I'm building up the resources required to make it easier, more attractive, and more useful to share information regarding Flock.
It's hard to tell at this point, but I think it can really scale.
Managing what I've scaled and holding momentum after the initial release.
To me? Realizing that the only way I kept working on Flock at the beginning was by fooling myself.
Hmm, there's also the bungee jumping story..
This.
Other languages and their designers.
This sounds really similar to another question, already asked, so I'll expand a little bit.
I'm a bit red-green color-blind. This means that I'm less able to recognize the difference between red and green. My understanding of the evolutionary reason for color-blindness is to tune-out distractions when recognizing camoflage. I like to think of this as pattern-matching, and it's where I've dedicated most of my efforts to understand the world. Flock is my favorite tool for working with patterns.
Fewer than 10
The rocket science mentioned above, the current state of programming language design.
Better explanations and to have seen it scale already.
Extremely low.
- From my programming and mathematics experience
- From my own use of Flock
- From my experience doing back-end programming at Authorea
- From my experience with academia
- From the feedback I've gotten
I'm fluent in Haskell, and close to fluent in Ruby.
I'm fluent in regular expressions, the kind of language, not all of the fancy features such as backreferences.
I can read and write (just not particularly quickly or at a particularly advanced level): C, C++, LaTeX, Bash, Javascript, Python, (Very) basic x86 and ARM assembly.
I'm a proficient Vim user, including efficient (re)organization, bulk text reformatting, simple movement, regular expressions, etc.
I'm proficient in linux dev-ops, including relatively small (100k's of users, 1-10mil DB columns) production-level applications of: Docker, Rails, Haskell, Ruby, Bash, Cron, etc.
- Also: debian package management, monitoring systems, self-maintaining server architectures
Testing/Debugging:
- I'm very good with unit and property-based (e.g. QuickCheck) testing and debugging
- Primarily in Ruby, Haskell, and Python
Profiling/Benchmarking/Optimization:
- I'm proficient in profiling, benchmarking, and optimizing unit and property-based (e.g. Ruby classes, Haskell typeclasses, Lambda patterns) code
- Primarily in Ruby, C, Haskell, and Python
- Including Valgrind, Haskell's criterion, using linear/multiple regression and other statistical models to measure the performance of code.
FFI
- I'm experienced with FFI between, Python-C, Haskell-C, Ruby-C, Bash-C
- Including:
Haskell Pandoc <-> C <-> Ruby
, production-ready bindings
Haskell:
Core, Primitives, Type-checking, much of what's between (e.g. Code -> Types -> Primitives -> Implementation
)
The Haskell language extensions I'm familiar with:
- BangPatterns
- DeriveDataTypeable
- DisambiguateRecordFields
- EmptyDataDecls
- ExistentialQuantification
- ExplicitForALl
- FlexibleContexts
- FlexibleInstances
- ForeignFunctionInterface
- FunctionalDependencies
- GADTs
- GeneralizedNewtypeDeriving
- Generics
- ImplicitParams
- ImpredicativeTypes
- IncoherentInstances
- KindSignatures
- MagicHash
- MultiParamTypeClasses
- OverlappingInstances
- OverloadedStrings
- QuasiQuotes
- Rank2Types
- RankNTypes
- ScopedTypeVariables
- StandaloneDeriving
- TemplateHaskell
- TypeFamilies
- TypeOperators
- TypeSynonymInstances
- UnboxedTuples
- UndecidableInstances
I'm pretty proficient in the category theory that is most often applied to programming, finite discrete algebra, finite digraph theory, finite group theory, and streaming computational methods.
I'm good with software architecture (it's my favorite part of most development), but I have much to learn and Flock is my largest project. I begin to have significant difficulty with solo-developed production-level architecture around the 100k user mark. I can and have done much more with help and feedback from others. I have experience designing, developing, testing, and refining software in small teams up to around 100k users and have been successful.
I'm proficient in basic computer security, including authentication, cryptographic methods, blockchains, and architecture. I'm also good at finding security holes on an architectural level, through fuzzing (both existing tools and custom fuzzers), and when reading code.
I'm a proficient solo traveller, including means of transportation, orientation and communication in an unfamiliar context, safety and security.
I'm a good tutor and teacher of programming and mathematical concepts, techniques, with experience explaining on levels from 1st grade to PhD, and teaching from birth to somewhere in graduate (PhD) school.
I'm proficient in operating with low to mid-level amounts of resources: from broke and alone to small comfortable groups (around 20 or fewer significantly-active members).
I can cold-sell (cold-calling, cold-conversation, etc) and I can warm-sell (friends, family, coworkers, employers, etc).
I'm proficient in utilizing small amounts of rapport to effectively comminucate.
All of the above. Flock is capable of being highly constrained and smoothly relaxed. No other language provides such direct access to so much.
Of course I'm biased, so maybe don't take that at face value: the paper isn't out yet.
Too early.
Not sure what you mean, since I "hack" everything I'm interested in. I hack myself, I hack kiwis, I hack Haskell, what are you looking for?
Hopefully, you.
The paper is the biggest way, this is another way. I'm also:
- Making connections and getting people excited directly
- Making it easier to share
- Making it more attractive to share
- SEO-hacking
Ask my parents.
See above.
Twofold:
- Free, open-source software using git, Github, etc.
- Free, open-source publication(s) using markdown, LaTeX, etc.
- At some point, I'll hand out copies at events, to friends, etc
Every time I explain Flock in-depth to someone, something about how they understand it surprises me. One of the earliest surprises was how many people thought it could be big. I never thought of it as big at the beginning since stuff you're used to seems smaller.
The paper.
The biggest pieces of resistance I've seen so far are:
- It's not proven, complete enough
- It's too good to be true (meaning I'm not clearly communicating the costs involved)
- It doesn't make sense
Talk to people, do research, I'm my biggest customer: repeat, refine, expand
It's the same mistake, over and over again: overestimating my progress.
- That's why I started strict and why I'm starting to share more progress: I'm more confident that it works.
Anyone capbable of designing and implementing a programming language. I'm proof that almost anyone could become a competitor. But that doesn't bother me since Flock is free from the get-go and I believe one of the best ways to compete with Flock is to read and understand Flock. But by the time you've done that, you can pretty much write Flock fluently so why bother with something else?
They're finite but don't want to be limited by being finite when programming. Flock lets you be succinct, correct, and productive in ways that we can measure with counting numbers.
For example, someone may understand "16-strength correctness", just like "16-strength paladin": I have almost no idea what it means, but I'm pretty sure "15-strength" is easier and less powerful than "16-strength". Flock has this type of parameter out-of-the-box.
Too early.
Read the paper.
The first paying customer is my wife, who is spending her time, energy, and money to support this project through supporting and encouraging me.
Off the top of my head:
- More "artsy": Music production and analysis
- More commercial: Hardware design and programming
After success? No idea.
See above.
Sure
See above.
TBD
Forever, but that'd be more work.
Programming, consulting, teaching, etc
I'm my team, so as long as it still looks good to me!
Minutes to months
Hah
I do everything. The nice thing is that all of the work is balanced perfectly between members of the team.
Local meetups, academic conferences, daily life.
Currently expanding though: lambdamichael (at) gmail
Two: me and my wife
See above.
The core, no way. Anything else, sure!
I try to avoid getting hit by vehicles, falling from extreme heights, that sort of thing. So far, it's gone pretty well.
Right now most growth looks like a quick spike followed by a long tail.
If I can get the quick spikes to trigger other quick spikes, the long tails should compound for steady long-term growth.