TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Ask HN: How to study programming language theory as a non CS student?

21 点作者 ck_one大约 4 年前
Hi, I would love to understand programming languages on a more abstract level. What do they have in common and why? Why has language A feature A but not feature B?<p>I am an EE&#x2F;Robotics student and program everyday but I feel like am lacking some deeper knowledge about programming languages which holds me back from becoming a better developer.<p>What course&#x2F;book can you recommend?<p>EDIT: I have written quite a bit of code in Python (Pytorch&#x2F;Tensorflow), do my coding interviews in C++, and also have experience in web dev with JavaScript (NextJS). I am looking for a CS50 like course. I was thinking of going through the &quot;Writing an Interpreter in Go&quot; course. But would rather learn something less implementation oriented.

13 条评论

z0k大约 4 年前
The &quot;Programming Languages&quot; three part series by Dan Grossman is excellent.<p><a href="https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages" rel="nofollow">https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages</a> <a href="https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages-part-b" rel="nofollow">https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages-part-b</a> <a href="https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages-part-c" rel="nofollow">https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages-part-c</a>
msiyer大约 4 年前
I am Mechanical Engineering graduate pursuing my Masters in Software Systems after 10+ years of industry experience.<p>Attack the Type System first. Do not read PhD research papers, just the practical aspects of it:<p>- Why is it that integers I am working with are 8-bit (or 16-bit or 32-bit ...)?<p>- What is &quot;int x = 7;&quot; translated into by the compiler?<p>- How is basic arithmetic implemented in the hardware? Integers, floating point etc.<p>- If my system has 16-bit integers, for example, how can I deal with larger numbers than what 16 bits can accommodate? Some SW implementation to hide HW limitations?<p>Then go on to understand how more complex types are implemented etc.<p>From there go on to things like Stack Frames and Heaps and Application Binary Interfaces.<p>From there go on to memory clean up and why we need Garbage Collectors etc.<p>...<p>To me, a Programming Language is a set of rules (enforced by a compiler or interpreter) for deterministic bits manipulation. The Type System is the core set of rules around which everything else revolves. Even lack of a Type System in a language is a Type System.
machiaweliczny大约 4 年前
There&#x27;s not much theory (unless you want to do research). Common practical topics all base on history&#x2F;cruft and &quot;current vector&quot;(like C, JavaScript, C++, Java, Python). In the end ability to solve problem wins and it&#x27;s based on ecosystem size&#x2F;polish mostly.<p>If you want fancier designs then look into less mainstream languages (elixir, pony, haskell, swift, rust, kotlin, ocaml, zig, julia, lobster). All of them have some innovations that try to solve common problems faced in (specific) software development or languages.<p>Generally tradeofs are between speed(runtime, compile), size, correctness and usability.<p>There are kinda two approaches to programming langs, one from CPU perspective(C) and other from math perspective(Haskell, Lisp, Prolog). There are also pragmatic langs for biulding bigger systems where readability and pragmatism is king (Java, Ada, Go) There&#x27;s also handling of async&#x2F;parallel stuff that&#x27;s not well solved yet AFAIK but most developed is BEAM VM and Haskell&#x2F;Pony.<p>To understand CPU perspective I can recommend book &quot;CODE&quot;. Other perspecive probably SICP course.<p>I am average dev so maybe some lang researchers can provide more info.
评论 #26662451 未加载
评论 #26659420 未加载
pansa2大约 4 年前
&gt; <i>How to study programming language theory</i><p>I think the information you&#x27;re looking for would probably come under the umbrella of &quot;Programming Language Design&quot;, not &quot;Programming Language Theory&quot; (PLT). Discussions on language design would include topics such as object-oriented vs functional programming, static vs dynamic typing and, importantly, language usability.<p>However in my experience, PLT is almost entirely concerned with academic research into the properties of highly-advanced type systems. Most of PLT seems to be irrelevant even to the designers of industrial languages, let alone users of them.
评论 #26670110 未加载
评论 #26659405 未加载
ollran大约 4 年前
I personally started with <i>The Seasoned Schemer</i>, but I would recommend starting with SICP instead.<p>The best way to get into programming languages is learning different languages, play with them and write relatively complex applications in them. LISP and C are the most fundamental languages that will give the <i>aha</i> moments. In addition to those, I would learn Haskell and perhaps some object oriented language.
beforeolives大约 4 年前
&gt; I would love to understand programming languages on a more abstract level.<p>Structure and Interpretation of Computer Programs (SICP) - <a href="https:&#x2F;&#x2F;web.mit.edu&#x2F;alexmv&#x2F;6.037&#x2F;sicp.pdf" rel="nofollow">https:&#x2F;&#x2F;web.mit.edu&#x2F;alexmv&#x2F;6.037&#x2F;sicp.pdf</a><p>To find out more about the decisions on language features just read material from the language creators and core contributors.
评论 #26658628 未加载
评论 #26658505 未加载
Pete-Codes大约 4 年前
There is the Harvard CS50 class.<p>There are also millions of pages on things like python vs javascript, react vs angular . Developers have lots of opinions so you shouldn&#x27;t find it too hard to find out why languages have different features.
评论 #26658162 未加载
rramadass大约 4 年前
You might find the following two books helpful;<p>1. <i>Programming Language Pragmatics</i> by Michael Scott.<p>2. <i>Concepts, Techniques and Models of Computer Programming</i> by Peter Van Roy, Seif Haridi.
评论 #26658533 未加载
gkorland大约 4 年前
I would say that the best way to start understanding the different programming languages is not by leaning a generic course about programming languages features, but to pick one read about it and try to write a short project and then switch to another different language.<p>I would start with a low level language like C, then move to a more higher level like Java and finally end with a more &quot;modern&quot; language like Rust or Go.
评论 #26658544 未加载
bjourne大约 4 年前
Read the book Types and Programming Languages by Benjamin C. Pierce: <a href="https:&#x2F;&#x2F;flylib.com&#x2F;books&#x2F;en&#x2F;4.279.1&#x2F;" rel="nofollow">https:&#x2F;&#x2F;flylib.com&#x2F;books&#x2F;en&#x2F;4.279.1&#x2F;</a> Do all the exercises and implement the toy language described in the book.
longm89大约 4 年前
I think maybe the Programming Languages A, B, C on Coursera is what you are looking for. <a href="https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages" rel="nofollow">https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;programming-languages</a>
tartoran大约 4 年前
I would point you towards Racket and <a href="https:&#x2F;&#x2F;beautifulracket.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;beautifulracket.com&#x2F;</a>
brudgers大约 4 年前
The greater Racket ecosystem is a very accessible resource.