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

科技回声

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

GitHubTwitter

首页

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

资源链接

HackerNews API原版 HackerNewsNext.js

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

Programming languages worth checking out

197 点作者 bleakgadfly超过 13 年前

15 条评论

hanskuder超过 13 年前
In my first job out of college, I worked for a company that built industrial test equipment (machines that snapped airplane wings in half, shook cars around like they were driving down a bumpy road, that sort of thing).<p>The tool we used to write the supervisor code and GUIs for machine operators was a language called Alltalk. It was inspired by Smalltalk and developed by an old graybeard at the company. Reading the description of Squeak/Smalltalk brought back some fun memories. A few interesting highlights:<p>- Alltalk ran in its own VM. You could create objects, change their state, and save the entire stack/image back to the original VM. Running the VM again would pick up execution right where it left off. This let someone do crazy things like email an Alltalk image to another engineer and say, "Here's the machine state halfway through an emergency shutdown. The actuators all came to rest in 10ms, but it's taking way too long to shut down the hydraulic pumps. Any ideas?" and the engineer could run the VM and debug away.<p>- The Alltalk VM had its own object inspector and terminal/interpreter. So you could walk up to an Alltalk instance connected to a live machine with motors spinning at 20krpm, for example, open up the inspector, and code away. Realize you need a low-pass filter on the motor speed feedback sensor? Create the object, tweak the parameters, and wire it into the signal chain live.<p>Cowboy coding at its absolute finest.
jules超过 13 年前
Another avenue for learning is to start from hard problems. A hard problem is a problem that is very hard without using a known technique or solution. Somebody who's unfamiliar with it has no clue on how to even start solving it. Solving such a problem will add new techniques to your tool-belt for solving a whole class of problems.<p>Problems that I've found worth studying:<p>- Parsing. This is hard if you don't know the standard techniques: mostly recursive descent parsing with precedence -- or a parser generator, but that won't teach you much unless you write the generator yourself. Moreover I've found that you quickly run into limitations with parser generators and they don't make parsing easier in the long run, that's probably why most real world parsers are hand written (e.g. gcc, llvm). You can probably hack something together that sorta works, but knowing the right techniques makes writing an efficient parser that you have high confidence in a breeze. I've seen many ad-hoc parsers that would have benefited greatly from proper parsing.<p>- Constraint solving. Examples are solving sudoku, the zebra puzzle, SAT solving, optimal register allocation and many others. The three most important techniques are backtracking, constraint propagation and conflict learning. Even professional programmers can't do this if they don't know these techniques (e.g. <a href="http://xprogramming.com/articles/oksudoku/" rel="nofollow">http://xprogramming.com/articles/oksudoku/</a>).<p>- Interpretation/Compilation. In addition to being a hard problem, writing an interpreter and a compiler makes you understand how programming languages work. This is sometimes seen as a black art, but it is quite easy once you got the pattern.<p>- Numerical algorithms. The speed and the simplicity of numerical algorithms is astonishing. Newton's method is particularly amazing. In about 10 lines of code you can solve equations, do state of the art numerical optimization or solve differential equations. It can even handle problems that are usually considered to require specialized algorithms, like max flow and linear programming. It can also perform arithmetic operations, like division and square root.<p>- Machine learning. This gives you a different perspective on problem solving. Many people when presented with the task of spam filtering or determining the language a snippet of text is written in will respond with a hard coded scheme based on a lot of rules. A much better approach is to take a data set of known text and analyze the statistics of the data set and compare that with the snippet of task text. The same applies to many other problems.<p>What should be added to this list?
评论 #3086007 未加载
评论 #3086272 未加载
评论 #3083996 未加载
majika超过 13 年前
Most languages are "worth checking out." Every language offers something unique, by definition. The question is: which languages are "worthier" than others? Or, rather: how should you prioritise your learning queue?<p>I don't think the author's list provides much variation. They're all important languages, to be sure, but I believe you can get better mileage for your time.<p>My ten recommedations, in recommended order, are:<p><pre><code> - Racket (nee Scheme - why did they have to change the name!?) - Haskell - Java (reading the GoF) - C, and the POSIX libraries and system calls - Go - Javascript or Lua - Smalltalk or Squeak - Erlang - Forth - Prolog</code></pre>
评论 #3084566 未加载
评论 #3083716 未加载
marcelcor超过 13 年前
This is from end of 2008. It would be great to see an article like that for today. Or maybe things didn't change?
评论 #3083815 未加载
评论 #3083685 未加载
评论 #3083561 未加载
评论 #3083453 未加载
评论 #3083552 未加载
cppsnob超过 13 年前
The thing I never understand about these articles: why aren't C, Java, C++, C#, Ruby, Python and other mundane languages "worth checking out?"<p>I don't think you should assume people have used all of these, and they're all worth "checking out". Millions of people use these languages every day to create 99% of the software you're using right now. Maybe it's worth a shot if you don't know one of them to learn one and maybe even get a job with it. There's a lot more opportunity to learn Ruby and get a job in it than there is for Scala.
评论 #3085322 未加载
评论 #3086805 未加载
评论 #3086953 未加载
vilya超过 13 年前
There are a couple of languages I'd add to the list:<p><pre><code> * Mozart/Oz - will (probably) change your thinking about concurrency. * Clay - really pushes the idea of generic programming. * Rust - typestate makes assertions part of the type system. * Cilk - concurrency again. </code></pre> BitC was looking quite interesting too, but I haven't heard anything about it for some time now; I hope the project hasn't died off.
评论 #3086751 未加载
Dn_Ab超过 13 年前
fogus links to his list <a href="http://news.ycombinator.com/item?id=3083561" rel="nofollow">http://news.ycombinator.com/item?id=3083561</a> which I think is one of the better lists of this type since it covers the paradigm space more thoroughly than most such lists.<p>The only type of language I rarely seen mentioned are dependently typed languages like agda or epigram. maybe it is because they are not yet practical. They are an interesting directions things could take though. Fortress is another interesting one.<p>Another interesting language is Aldor. It's unique in that it has a weak form of dependent types and is a statically typed Computer Algebra/general programming language. Going through the types of the language is an education itself and a reasoning helper. While some take issue to the hierarchy it defines, it is the only one I know that has tried and is useful. The type provide some scaffolding for reinforcing the novice math person trying stuff out.
ElliotH超过 13 年前
Haskell at the top of the list was one that I really enjoyed. It has a pretty scary learning curve but its wonderful having a language that feels so consistent.
评论 #3084024 未加载
natural219超过 13 年前
If you're interested in actually checking these out, 7 Languages in 7 Weeks (<a href="http://pragprog.com/book/btlang/seven-languages-in-seven-weeks" rel="nofollow">http://pragprog.com/book/btlang/seven-languages-in-seven-wee...</a>) covers five of these (Haskell, Scala, Io, Clojure, Erlang) as well as Ruby and Prolog (Prolog is my favorite language from the book, oddly missing from this list). Apart from being a very good introduction to syntax, it teaches you the unique features of each language and why you should care about it. Highly recommended.
raminf超过 13 年前
I would add Falcon (<a href="http://falconpl.org/" rel="nofollow">http://falconpl.org/</a>) to the list. It's a pretty capable language, but for some reason nobody's heard of it.
评论 #3084903 未加载
fletcher超过 13 年前
"Io" sounds like "the next SELF". I'll try it out for sure.
评论 #3085406 未加载
hugh3超过 13 年前
I skimmed the headings and was briefly interested in reading about this "Epilogue" language that I hadn't heard of before, but it turns out it was actually just an epilogue.
SoftwarePatent超过 13 年前
On an iPad 2, the text appears, and then dissapesrs. I can read the comments only.
whatgoodisaroad超过 13 年前
I totally expected the section titled "Epilogue" to be about a Prolog variant.
dextorious超过 13 年前
The aricle is OK, but I had to laugh with this starting quote:<p>"“The most obvious common ‘personality’ characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are ‘neophiles’, stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist.” – Eric S. Raymond, The Jargon File"<p>Which reminds me of that immortal Reservoir Dogs line: "let's not start sucking each other's dicks quite yet"...
评论 #3083619 未加载
评论 #3084339 未加载
评论 #3085150 未加载
评论 #3083544 未加载
评论 #3085335 未加载