11 ms·
Advanced Programming Languages (2009)
- yewenjie 5y agoPreviosly on HN: [1] https://news.ycombinator.com/item?id=23077992 https://news.ycombinator.com/item?id=23077992 - (May 5, 2020 — 151 points, 133 comments) [2] https://news.ycombinator.com/item?id=11932675 https://news.ycombinator.com/item?id=11932675 - (June 19, 2016 — 219 points, 202 comments) etc.
- codesections 5y agoAnd originally from 2009 (as noted in the previous HN links)
- eternityforest 5y agoHas anyone done a study on startup success vs language choice? I've never done anything commercial outside of being an employee/contractor, but wouldn't a niche language make it harder to find developers, and possibly increase hardware costs if It's not optimized as well as JS?
- AlchemistCamp 5y agohttps://news.ycombinator.com/item?id=26461353 https://news.ycombinator.com/item?id=26461353
- Zak 5y agoOriginal source: https://charliereese.ca/y-combinator-top-50-software-startups/ https://charliereese.ca/y-combinator-top-50-software-startup... Lots of Ruby and Python. What I get from that is that being able to put up a CRUD type app in a hurry is a requirement for most of these companies, and frameworks like Rails and Django make it easy to do so.
- AlchemistCamp 5y agoRuby and Python being used about equally as often, but Ruby (primarily Rails) leading to 3x the market cap in aggregate... It's important to look at both the numerator and the denominator :)
- 7thaccount 5y agoMaybe not much of a study, but there is a lot of examples. Paul Graham developed viaweb using common lisp and ran circles around his competition using C++. I read another one involving APL in the early ~80s for financial reporting uses. Back then with Fortran or C you'd have to have the programmer go back and rewrite chunks of the code if the VP wanted to invert a table, but it's immediate in APL with like a single character change. The programmer would just say "sure", click the key, and print out the answer. So in general, I think dynamic languages are probably better for getting together a prototype for many use cases, but they don't scale as well to a large number of users or high performance uses.
- travisjungroth 5y ago> but wouldn't a niche language make it harder to find developers Maybe? There are less of them, but sometimes there are great people who really want to use a language you’d have a hard time hiring otherwise. But then you have to make sure they’re not just into the language. Some people complain “we’re having a hard time hiring experienced developers in our area at rates we can afford for our weird language.”, but you have to wonder if “for our weird language” is actually the difference maker there. > possibly increase hardware costs if It's not optimized as well as JS? I don’t exactly think of JS as “optimized”. Most languages will be faster. Certainly anything in the APL family if you’re doing that type of work.
- ransom1538 5y ago"According to W3Techs' data, PHP is used by 78.9% of all websites with a known server-side programming language." I am prepared for the downvotes here. But numbers don't lie. PHP is the dominate language of sites that run. If they are up running I would surmise the business is up and running. Facebook is a great example of hacking something together with php. IMHO I think if Facebook started with java it wouldn't exist. It's so fast to just hackup a php script and rsync it.
- Zak 5y agoAccording to the same site, 43.2% of sites surveyed are running Wordpress. That's over half the PHP number, and I suspect much of the rest is running something open source that hasn't been significantly modified by the site operator. I just put up a site running Wordpress. Backend language was not a significant factor in selecting that software. Its ease of deployment on cheap shared hosting was certainly a factor in its initial success.
- deleted 5y ago[deleted]
- account-5 5y agoI'm wanting to learn APL (I'm leaning towards J or BQN) and Lisp as two languages/paradigms. APL for is expressivity and Lisp for its ML background. More mainstream I'm wanting to learn TCL and lua. I don't program professionally so don't need to learn anything to get a job.
- hoosieree 5y agoJ or BQN are both fine choices for an array language. I prefer J's ascii-based syntax, but it has some rough edges (e.g. namespaces) that BQN seems to have solved more elegantly.
- nesarkvechnep 5y agoAs a disclaimer, Lisp's ML background is different ML than what's mainstream today.
- seanmcdirmid 5y agoSymbolic reasoning AI is mainstream, it was just never related to ML. The debate was between symbolic reasoning and machine learning in achieving AI. Somehow AI and ML eventually got equated in the last decade (in that ML became the dominant AI approach). Symbolic reasoning lives well enough in things like business rules, we just don’t associate it so much with AI anymore, nor is it done with LISP.
- lispm 5y agoI thought that "Machine Learning" was also a topic for Symbolic AI.
- seanmcdirmid 5y agoThey are generally posited as in opposition, though there is some research in trying to combine them.
- 5y ago
- hoosieree 5y agoI agree wholeheartedly with the premise here - learn different languages to expand your mind - but some details have not aged well. In particular, today I would strongly recommend Python over Haskell for machine learning or natural language processing tasks. Not because Python is a better base language for these sorts of things (it isn't) but because the library ecosystem that surrounds it is so much larger. Python is basically batteries-included for ML/NLP these days.
- iratewizard 5y agoHe has a better list in an equally old post where he basically just says "learn lots of different programming paradigms." https://matt.might.net/articles/what-cs-majors-should-know/ https://matt.might.net/articles/what-cs-majors-should-know/
- seanmcdirmid 5y agoHe meant ML as in Standard ML and other variants, ML here means modular language or something else, and isn’t related to machine learning at all. Suffice it to say no one has really explored doing ML in an ML. :)
- deleted 5y ago[deleted]
- oriolid 5y agoThe article says "I don't do a lot of artificial intelligence, natural-language processing or machine-learning research, but if I did, Haskell would be my first pick there too." No explanation, the article goes on to explain purity and lazy evaluation that as far as I understand don't have any connection to machine learning.
- coldtea 5y ago>No explanation To be fair, the precedeeing sentence doesn't read like the author is about to give an argument about why Haskell is good for "artificial intelligence, natural-language processing or machine-learning research". It just reads like he merely expands his preference of Haskell for what he does, and just mention in passing how he thinks it suit him also in those other domains.
- t43562 5y agoI seem to be monad proof - cannot understand them from any explanation whatsoever. If I'm not alone then it's going to be hard to hire people that get it - on top of how hard it is to hire skilled people at all.
- askonomm 5y agoI, too, have tried to figure out what exactly are monads, and have come away even more confused than I was before.
- tester756 5y agoI've heard that dividing e.g 1 by 0 in Excel feels like a monad it's either value or dividing by 0 error :)
- exdsq 5y agoYou know how some functions return a value or an error? Imagine trying to compose several of those functions, passing the value into the next function or handling it’s error. That ends up with a lot of boilerplate. The first time I wrote a Monad was because of this issue. Wrapping this series of function calls in a Monad allows you to write something that reduces that boilerplate by handling the errors of any functions within it, so you can compose them like you’d want How do you handle state in a language like Haskell that doesn’t have mutable state? You pass a data value between functions keeping track of everything, as an extra argument. Imagine the boilerplate of that! Every function suddenly needs an extra argument for Data, regardless of if it needs it, to keep it around. The State Monad deals with that boilerplate.
- benreesman 5y agoThis an analogy, not a definition. But imagine a pointer to a struct that could only be dereferenced by passing it to another function.
- triska 5y agoPersonally, I think monads are hard to understand in Haskell mostly due to its quite complex and comparatively ad hoc type system. Let's remove all the complexities that are introduced by the static type system for a moment, and focus on the essence. To illustrate the key point, let's use a dynamically typed logic programming language such as Prolog, where we think in terms of relations instead of functions. Suppose we have a predicate definition of this shape: pred(S0, S) :- goal_1(S0, S1), goal_2(S1, S2), goal_3(S2, S3), ..., goal_N(SN1, S). In this case, the arguments clearly follow a pattern: They are "threaded through", starting from S0, and ending with S, in a sequence of the form S0 → S1 → S2 → ⋯ → S. This shape of argument passing is common, for example if you want to describe successive "modifications" of a data structure in the form of relations between an initial state S0 of the data, several intermediary states (S1, S2, ...), and a final state S. Or successive applications of side-effects: Think of sending packets over a network, or writing a sequence of strings to a file, where each such relation affects the state of a socket or other entity. Or when describing strings, where the string becomes successively "more known" in the form of further and further instantiation of a list of characters. You can think of monads as mechanism to make this cumbersome explicit passing of arguments implicit. For example, since the arguments that are passed around follow such a clear pattern, we could write the example above equivalently as: pred --> goal_1, goal_2, goal_3, ..., goal_N. and let the compiler do the necessary transformation for us. In fact, that's exactly what also happens in Prolog, using definite clause grammars (DCGs), which you can think of as a mechanism to implicitly describe such a passing of arguments, so that you do not have to write them yourself.
- ed25519FUUU 5y agoAh yes Haskell, the language that everybody loves and nobody uses.
- yakshaving_jgt 5y agoMy team uses it. ¯\_(ツ)_/¯
- ParetoOptimal 5y agoI'll let my teammates at standup tomorrow know we are fake!
- jackblemming 5y ago>If you're looking for a job in industry, my reply is to learn whatever is hot right now: C++, Java and C#--and probably Python, Ruby, PHP and Perl too. If, on the other hand, you're interested in enlightenment, academic research or a start-up, the criterion by which you should choose your next language is not employability, but expressiveness. In academic research and in entrepreneurship, you need to multiply your effectiveness as a programmer Great, I'd love to see the studies on how much of a "multiplier" these leet languages give me. Hopefully I too can ascend to the mythical x10er because I use Lisp and Haskell.
- deleted 5y ago[deleted]
- hota_mazi 5y agoIt's interesting to observe that in the couple of years that followed this article (published in 2009), three of today's most influential and arguably, best designed languages, were born: Kotlin, Swift, and Rust.
- YeGoblynQueenne 5y agoAll five recommended languages are functional languages very similar to each other. Why not recommend a language outside the functional paradigm, such as a logic programming language (Prolog, ASP, Mercury, etc), or, I don't know, an esoteric language like Brainfuck or Modrian? We're trying to teach programmers to think outside the box, correct?
- dwohnitmok 5y agoThis list is pretty FP-biased (even Scala, despite being a hybrid language, is mainly well-known for the FP bits it brings to the table rather than any new innovations on the OO side). There's a lot of other mind-expanding non-FP programming languages. Here are some ones I'd suggest. For new high-level ideas of programming semantics: 1. Prolog: This teaches you how to program without the notion of "execution" at all. Even in pure FP languages, there is still the notion of "calling" a function which roughly corresponds to a notion of "execution." (yes eventually execution creeps in as you start working with IO, but unification is still a very different way of thinking about programming than function/procedure calls) 2. Forth: RPN on steroids. The semantic foundation of a lot of other esolangs. For lower-level ideas of how computers work and how programming relates to that (but that don't introduce very different programming semantics): 1. Smalltalk: The usual exemplar of image-based programming. Even if the actual programming model is not terribly esoteric, the way of interacting with the machine being programmed is a very different way of programming than the usual batch-oriented programming model that occurs with a compiler or interpreter constantly being spun up and spun down. 2. Assembly: Again, not terribly esoteric, and not all that interesting from a CS perspective, but it's extremely useful for a working programmer to understand what things compile to. 3. Racket (a modification of Scheme I suppose and not fully outside of FP as a result): You'll never be afraid of creating a DSL again (whether you should of course is a different manner).
- dgb23 5y agoYou used quotes around "execution" a lot. I think a better term would be control. SQL, regex literals and so on work similarly, they are declarative while avoiding explicit control. An opposite would be something like an FSM, or one of these DAGs that people do visual scripting with. These are declarative ways to describe very explicit control.
- dwohnitmok 5y agoI initially wrote the word "declarative" but I don't really like it. It implies an objectivity and absoluteness that doesn't align with the subjectivity inherent in trying to tie code to a programmer's intentions. That is what is declarative for one developer or one set of circumstances may smack of being overly procedural for another (see e.g. what opinions you'll get if you tell a population of programmers that regexes are declarative). To be more specific, SQL and regex literals still don't really capture the magic of Prolog which is unification. It's a heady thing to realize that telling a machine facts and asking it for information is fundamentally the same thing! Just a matter of whether you pass a constant or a variable. To compare with SQL, it would be as if you did away altogether with the notion of separate `SELECT` and `INSERT` statements and the same prepared SQL statement could be used to mutate the DB or return data just based on what you pass to the `?` parameter.
- fungiblecog 5y agoscheme is not "untyped"
- eole666 5y ago> I encourage my students to never stop learning niche languages. Well, speaking for most mortals doing programming : once you'll find a job, you'll mostly learn languages and tech usefull for your job, not niche languages. And not everyone like programming enough to keep learning niche languages outside of work hours. And once looking for another job, you'll mostly learn languages and stuff usefull to find an interesting new job. If you have the time and interest to learn a ton of niche languages, good for you. And maybe you'll be able to create a start-up with your epic Haskell skills, the "enlightenment" you got from learning niche languages and the golden spoon you were born with.
- spdegabrielle 5y ago“ I encourage my students to never stop learning niche languages. They expand your modes of thinking, the kinds of problems you solve quickly and your appreciation for the meaning of computation.” Timeless advice.