2,975 reputation
1116
bio website jelv.is
location Berkeley, CA
age 21
visits member for 4 years
seen Dec 16 at 21:04

I am a software engineer primarily interested in programming languages, functional programming, program synthesis, type theory, universal algebra and startups (not necessarily in that order!). In the near future, I want to combine as many of these as possible.

Right now I'm an engineer at Esper, an early stage startup in Palo Alto. We use OCaml on the backend, which is pretty neat.

I am always happy to chat: my email is tikhon@jelv.is.

I am especially interested in questions and projects involving Haskell or interesting PL issues.

GitHub: http://github.com/TikhonJelvis

Website: http://jelv.is


Jun
17
comment Programming Language, Turing Completeness and Turing Machine
Yes, the lambda calculus is the genesis of functional programming. However, even Turing machines are naturally expressed in terms of functions; the formal definition of a Turing machine is just a tuple of some sets, symbols and a transition function.
Jun
11
comment How do I completely-self-study Computer Science?
I'm doing EECS at Berkeley right now. If the MIT EECS program is structured anything like Berkeley's, then you won't get much guidance there: we have a short intro sequence and then it's literally do whatever you want in whatever order you want as long as you do a minimum number of advanced courses. I think it's awesome, but it probably won't help you figure out which courses to take: I had to make the same decisions myself. (I had help from my faculty advisor, but in a complete coincidence his advice was to take his graduate seminar :)).
Jun
10
answered Why don't browsers support haml and sass?
Jun
10
comment How do you stay in touch with a programming language?
People with lives, spouses, kids and so on manage to (for example) watch TV just fine. If you really enjoy programming, you could just spend equivalent time on your side project instead.
Jun
3
comment Programming languages, positional languages and natural languages
Sort of. Particularly, I'm thinking of languages where you represent computation primarily using mathematical ideas. Mostly functional programming languages like Haskell. So it doesn't just express mathematical concepts, it actually uses them for everything like representing state and IO. It's also closer to mathematical notation than a natural language.
Jun
3
comment Programming languages, positional languages and natural languages
@JarrodRoberson: While you are right, I don't think Turing completeness is a useful criteria to define a "programming language". Particularly, there are some very nice total functional languages that are not Turing complete but are still useful for writing programs (e.g. Epigram or Agda).
Jun
3
comment Programming languages, positional languages and natural languages
You should also note programming languages that are primarily inspired by math. At least in PL research, these are fairly common.
Jun
3
comment Is musical notation Turing-Complete?
What you listed is not necessary for a Turing complete language. Lambda calculus only has applications, variables and lambdas (e.g. no loops, states or commands) but is Turing complete. The same goes for a bunch of other models of computation like SKI combinators.
Jun
3
comment Is musical notation Turing-Complete?
Building a Turing machine is the standard way to prove something is Turing complete, but the converse is not true--simply because you cannot figure out how to build a Turing machine does not mean something is not Turing complete. A Turing machine (with a tape and all) is just an arbitrary abstraction that has enough computing power; there are other abstractions just as powerful with no notion of tapes. Take a look at lambda calculus, SKI calculus or some esoteric languages (Fractran is cool).
Jun
2
comment What's the difference between computer science and programming?
That's a little bit narrow. At the very least, the "Algorithms, Machines and People" lab at my university would like to disagree :). And that lab contains some of the top CS researchers, period. Also all the HCI people everywhere. I'm being a little facetious, but CS is really more broad than just algorithms and math.
Jun
2
comment What's the difference between computer science and programming?
Also, most of the people I know working as programmers don't do it for the money (although the money certainly doesn't hurt!): they do it because they love programming and they love making stuff and they love solving hard problems. Some of the smartest people I know could be making far more money in finance or the like, but instead they work for a startup or Google or Facebook just because they really love it. (Of course the salaries there aren't shabby either.)
Jun
2
comment What's the difference between computer science and programming?
Except it's not really a "science" in the same way as physics or chemistry: we don't even pretend to follow the scientific method. Even the "soft" sciences do experiments with control groups and the like; CS has more in common with engineering and math than actual science.
Jun
2
comment What's the difference between computer science and programming?
I don't think you should tie CS (despite the name) too closely to computers: first and foremost, it is the study of information. It just happens that the term "computer" encompasses most of the different physical tools we use to work with information, so almost any study of information is going to involve programming a computer.
May
31
awarded  Nice Answer
May
30
comment Maybe monad vs exceptions
Also, regarding (1): you could easily write a monad that can carry error information (e.g. Either) that behaves just like Maybe. Switching between the two is actually rather simple because Maybe is really just a special case of Either. (In Haskell, you could think of Maybe as Either ().)
May
30
answered Maybe monad vs exceptions
May
30
comment Maybe monad vs exceptions
@Oak: that's true, but that wasn't really my point. What I'm saying is that you get null checking exactly like that (e.g. if Nothing then Nothing) for free because Maybe is a monad. It's encoded in the definition of bind (>>=) for Maybe.
May
30
comment Maybe monad vs exceptions
@Oak: Regarding (3), the whole point of treating Maybe as a monad is to make the propagating None implicit. This means that if you want to return None given None, you do not have to write any special code at all. The only time you need to match is if you want to do something special on None. You never need if None then None sort of statements.
May
30
comment Why is the “kill” command called so?
To be entirely fair, the difference between moving and renaming a file is rather arbitrary. "Renaming" a file is just moving it to a different location which happens to be in the same directory.
May
19
revised Why isn't rich code formatting more common?
edited body