4 ms·
I'd think about what your goals are. I'm not aware of a Rust from First Principles book or whether Rust is based on an underlying denotational or formal semant
by agentultra 8y ago
I'd think about what your goals are.
I'm not aware of a Rust from First Principles book or whether Rust is based on an underlying denotational or formal semantics.
However a good bet is mathematics. And you'd be best served by the typed lambda calculus, predicate calculus, and type theory. If there's one thing I've lamented it was missing out on learning early on in my career it was how to structure computer programs as mathematical objects. I've spent much of my life using the wrong metaphors.
- kjeetgill 8y agoI have to disagree a bit. The point is that rust already feels like being thrown into the deep end of the pool, and all the lambda calc is as deep if not deeper. My 2 cents: start shallow. The hard part of learning the right stuff from a language is picking a project that let's you run into those aha moments. I like to cut my teeth on a basic Sudoku solver and maybe a small web service for the younger languages. I picked two languages that are relatively simple to pick up, let you get to the meat quickly, and are popular and familiar. If you don't get pointers yet, learn C. Something with arrays of arrays can be good here. If you want a taste of some functional idioms without feeling drowned by them, learn Python. Use list comprehensions and filter and reduce a lot to warm up with them. You can get exposed to a lot of paradigms in Python without committing to anything. Classes/oop, first class functions etc. C++ is harder than those two because the learning resources are less consistent. Too many idioms have changed over and the last decade. I think jumping straight into rust after that won't be quite so intimidating. Rust itself has a lot of new things to think about but some are unique enough that there's no good warmup language.
- agentultra 8y ago> The point is that rust already feels like being thrown into the deep end of the pool, and all the lambda calc is as deep if not deeper. I don't think you need an undergraduate degree to understand the un-typed lambda calculus. You can build an intuition for it with syntactic substitution at first. For such a big idea it's really quite simple in practice. That makes it quite beautiful. Moving to the typed lambda calculus is the next step and builds upon the prior knowledge. The reason I think it's useful is that it allows you to reason about abstractions -- even complicated ones -- in a manner that reduces the cognitive burden on us. It's also not tied to any single programming language: they can all be modeled with mathematics. Proofs are programs and programs are proofs. I do agree that a hefty does of practical application helps to solidify theoretical understanding. I see them as informing one another.