5 ms·
Can PL theory make you a better software engineer?
- throwaway81523 4y agoThis is an 84 minute audio file. Direct download link is here: https://www.typetheoryforall.com/episodes/episode29.mp3 https://www.typetheoryforall.com/episodes/episode29.mp3 I didn't listen to it (I prefer reading) but yeah, if you're using typed languages, understanding some PLT can help quite a lot. Harper's PFPL book is a fairly accessible text, somewhere between the Haskell Wikibook and truly pointy headed texts in terms of accessibility: https://www.cs.cmu.edu/~rwh/pfpl/ https://www.cs.cmu.edu/~rwh/pfpl/ The Little Typer is supposed to also be good, but I haven't yet tried it.
- pizlonator 4y agoNo.
- hexo 4y agoI tend to agree as I've seen it many times. It helps only a small minority. But when it does help it is like magic.
- leroy-is-here 4y agoLearning programming language theory and then putting it into practice by writing a compiler will 100%, without a doubt in my mind, make you a better software engineer. This is because you will have to put many complex systems into working and coordinated order to have a working compiler, even if you use something like LLVM. And you will get a better understanding of a fundamental aspect of computer science: modeling ideas into a language and then directly speaking that language.
- discardable_dan 4y agoPL Theory makes you start looking at everything like a PL problem. APIs become little languages, and rich APIs become larger ones. Parsing becomes trivial, lexing even moreso, and everything sort of devolves into thinking about interpreter state. Then it gets frustrating because you can't just pick up the API interactions and rewrite them more-efficiently, and you end up chasing your own tail wishing you could. I think it's made me a better programmer, but it must be tempered by understanding the limitations of how and when languages are worth building.
- parentheses 4y ago++ it’s a god mental workout.
- afr0ck 4y agoI once did a distributed systems internship. I am a very pragmatic low-level kind of person. Abstraction is very hard for me to process if I can't see how it manifests in real life. There was a senior PL guy in the team and he was literally modeling every problem according to PL theories. He sees everythings as algebraic structures and tries to explain everything in terms of state machines, parsing, interpreting,etc. My job was a very low level distributed networking where I need to work on Linux kernel networking stack and virtual networking techniques and software (tap/tun devices, VPNs, etc). I just could not work with that guy. I am thinking in terms of IP addresses, network devices, packets and memory pages over the network, but he was thinking in terms of algebra and parsing. I could not properly communicate with him and I had extremely hard time to translate and map his modeling theory to the actual tools and processes I need to do the job. He was senior and had much more influence than me in the team. I ended up quitting the team because of the huge gap in terms of problem modeling and thinking process.
- JunmingL 4y agoI think it at least helps me to learn new languages faster and with better understanding.
- rsrsrs86 4y agoIt helps learning new languages (but doesn’t help much learning how to use their libraries etc) and forces you to learn a lot of useful techniques. But it can became a rabbit hole if you try to approach everything as a language problem with over general solutions.
- klabb3 4y agoI love myself a good language. But! It’s very, very easy to get pulled into the puzzle solver mindset, I’ve seen people become obsessed and forgetting about balancing the goals of the puzzle solving with the real-world goals. It’s so satisfying to say “look, $bad_thing *cannot even be expressed* in this language!” that it’s easy to forget that there are diminishing returns all while the complexity cost increases exponentially. Personally, I find the sweet spot for most problems somewhere between JavaScript hippie and Rust[1] tyrant. A bit of basic types can go a long way, just some interfaces or struct fields that are guaranteed to exist of a certain type. Helps with autocomplete and typos too! The missing pieces can be annoying to the soul, but rarely constitute a terminal decease in practice. [1]: You can use Rust in different dialects, here I’m talking about the most correct- and performance-obsessed flavor (think no dynamic dispatch, only static borrowing etc).
- jstx1 4y agoMaybe but you can say the same thing about learning almost anything new which is related to software. And since you have limited time and attention, $x making you a better engineer isn’t enough, it has to be better than the alternatives. Or you can do it just because you’re interested but in that case who cares whether it makes you a better engineer at all.
- ipunchghosts 4y agoWhat is pl?
- whatyesaid 4y agoProgramming Languages. But it's an acronym used for a very theoretical community/research that looks at things like category theory, the acronym isn't used for the average engineer discussing Java Vs C#.
- dfgdfg34545456 4y ago[flagged]
- doe88 4y agoBetter understanding of the rules makes you better to the game.