TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Weird Languages

472 pointsby razinover 3 years ago

71 comments

mr_lucover 3 years ago
This is a line that resonates with me, and the one which some negative comments might overlook (3 hours in, at least):<p><pre><code> &quot;What can you say in this language that would be impossibly inconvenient to say in others? In the process of learning how to say things you couldn&#x27;t previously say, you&#x27;ll probably be learning how to think things you couldn&#x27;t previously think.&quot; </code></pre> This is one of the value propositions of language. It&#x27;s one of the ways we learn new things, and thus become more capable of doing valuable work as people.<p>Criticisms of this essay in comments so far have seemed to fall into these buckets:<p><pre><code> 1. Lisp? Macros? Boo. (Not novel&#x2F;too weird&#x2F;etc) 2. Languages are solved, not important; I build systems. 3. I don&#x27;t like the tone of this essay. </code></pre> (1) and (3) are side points, unrelated to thesis. (2) is the interesting one, and at the heart of what the essay talks about.<p>I&#x27;ve always been in the pg camp on this one. Sure, systems are the thing, we can&#x27;t be purists, etc -- but saying that languages don&#x27;t matter, for us, would be like rocket engineers saying that materials don&#x27;t matter.<p>If you&#x27;re building a table, you can make it out of almost anything; a table is a solved problem. Wood, carbon fiber, steel.<p>But at the limits of what&#x27;s possible, like a rocket, the material&#x27;s properties, limitations, and weaknesses in extreme circumstances matter.<p>You can definitely imagine that important things are happening, in the maker&#x27;s mind, when they start working with a new material, seeing what others are able to do with it, seeing how the making process is easier, or what steps are unimportant&#x2F;unnecessary now vs. in their usual materials. And that informs their thinking, going forward, about what&#x27;s possible in systems they might build.
评论 #28340312 未加载
评论 #28338398 未加载
评论 #28338366 未加载
评论 #28342451 未加载
评论 #28338703 未加载
评论 #28338311 未加载
评论 #28339363 未加载
评论 #28340198 未加载
评论 #28339347 未加载
评论 #28338702 未加载
评论 #28339844 未加载
评论 #28340659 未加载
评论 #28340777 未加载
评论 #28344740 未加载
评论 #28342397 未加载
评论 #28344894 未加载
评论 #28339686 未加载
评论 #28338593 未加载
评论 #28341905 未加载
lisperover 3 years ago
&gt; Pick a language that most programmers consider weird but whose median user is smart<p>I think this heuristic fails, with my poster-child counter-example being Nock and Hoon, the languages used to implement Urbit. Those languages are unquestionably weird, and I think their median user is pretty smart -- you <i>have</i> to be pretty smart to use those languages because they are intentionally designed to be difficult to use. But I don&#x27;t see any merit whatsoever in Nock and Hoon, at least not with respect to giving you any leverage in programming. C++ is another example. It&#x27;s not considered weird, but I think it would be if it were not so widely used. Again, to use C++ you have to be smart because you have to know the locations of a zillion and one hidden land mines. But the appeal of these languages is not the leverage they give you, it&#x27;s the barrier to entry. Once you invest the time to learn them you become a member of an exclusive club. In the case of C++ at least, being a member of the club gives you leverage and opens up employment opportunities. But that doesn&#x27;t make C++ a good language.
评论 #28338911 未加载
评论 #28341999 未加载
评论 #28338824 未加载
kaycebasquesover 3 years ago
Putting aside the other controversial things that Graham says in this post, I think we could find common ground and have some fun technical discussion by focusing on this angle:<p>&gt; What can you say in this language that would be impossibly inconvenient to say in others?<p>The first experience that comes to mind for me was XSLT. Early on in my technical writing career, I needed to convert the Doxygen output of a C library to a more barebones HTML output (so that the reference docs would have the same branding as the rest of our site). I used XSLT to extract only the bits of HTML that I needed and I transformed them into nice, straightforward, semantic HTML. It took me a while to wrap my head around XSLT&#x27;s flow but I was amazed to find that a task that would have taken probably 50-100 lines of looping and condition checking could be accomplished in literally 1-3 lines of XSLT.<p>Would love to hear other&#x27;s experiences along these lines (i.e. concrete examples).
评论 #28338712 未加载
评论 #28341123 未加载
评论 #28340864 未加载
评论 #28338789 未加载
评论 #28341682 未加载
评论 #28339451 未加载
评论 #28341273 未加载
aaronibaover 3 years ago
Yes lots of programming consists of gluing together libraries, but in my experience languages vary dramatically at how well they do even this.<p>For example, consider logging libraries. It&#x27;s useful to have statements like log.debug(someSlowFunction()) in your code. In LISPs it&#x27;s really easy to create a (debug) macro that generates empty code when you don&#x27;t want debug logging turned on. In other languages, you have to wrap the arguments in a function to avoid extra runtime costs, and even then you can&#x27;t avoid the &quot;if debug&quot; conditional at runtime. All those anonymous function wraps add clutter, and that clutter accumulates. There are many other cases where having advanced language features greatly helps gluing together libraries.<p>Another aspect is the tooling. When I am considering a new library, I like to try it out in the REPL. In Clojure I can quickly start calling library functions, and use the (time) macro to get a sense of how long they take to evaluate. Not all popular languages are amenable to this kind of REPL-driven experimentation with libraries.<p>Not only does the language impact how you use libraries, but it also impacts what libraries may exist. Some libraries are simply not possible to write in less powerful programming languages. In LISP this would include any library that uses a macro. For example, Clojure was able to introduce core.async as a library, providing an async facility similar to what golang offers. But in most languages you wouldn&#x27;t be able to implement that as a library.<p>Another major example is reagent vs. react. The concise hiccup representation supported by Reagent is only possible because of design decisions that went into Clojure. JavaScript users are stuck with JSX, which is less concise, and in my opinion far less good.<p>Another issue that arises when using libraries is whether or not the language has a static type system. Without getting into the age-old flamewar about static vs dynamic typing, I&#x27;ll just note that popular languages differ in this dimension, and this has a big impact on what it&#x27;s like to glue together libraries.<p>So overall, I think this essay undersells the benefits of LISP. Even if you spend all day gluing together libraries, LISP makes that much better by improving how you can call libraries, how you can quickly experiment with them, and even what kinds of libraries can exist.
评论 #28339630 未加载
评论 #28343945 未加载
评论 #28344711 未加载
评论 #28340117 未加载
jrockwayover 3 years ago
&gt; 99.5% of programming consists of gluing together calls to library functions.<p>A common complaint at Google was &quot;all I do is copy one protobuf to another&quot;. And I think that sums up programming -- that really is all we think we do. For example, a triple-A game just reads a stream of keyboard events, mouse events, and network packets, and emits streams of video frames, sound samples, and network packets. The rest is just details!<p>That is obviously not true, of course. We find the interfacing the most tedious, annoying, and painful part and overestimate how much time we spend doing it. Interfacing with anything is painful -- I had the idea for this comment in an instant, but I&#x27;m spending 5 minutes thinking of words and sentences, figuring out what order they should be in, and commanding my fingers to press keys on my keyboard to get it to you. But it would be incorrect to say that &quot;99.5% of human cognition is convincing your fingers to press keys&quot;, even if that&#x27;s a strict blocker to disseminating your idea on the Internet.<p>What that means is that tools can help us eliminate the tedious parts. The fact that tedious parts haven&#x27;t gone away just means that there is more work to do. When the tools start doing what we need, you&#x27;ll stop seeing the complaint that all programming is is moving data from one library to another. You&#x27;ll start seeing the complaint &quot;all I do is stare at the screen figuring out what to build.&quot;
评论 #28343152 未加载
loup-vaillantover 3 years ago
&gt; <i>99.5% of programming consists of gluing together calls to library functions.</i><p>First, my own career was not as pathologically skewed as this. I <i>did</i> mostly glued together calls to library functions, but I have done a fair share of algorithmic work, such as parsing and image processing. (And cryptography, though that was mostly done on my free time so I’m not sure that counts). Maybe web dev is like that, but I didn’t do web dev.<p>Second, this is a huge problem. This means that very few of us actually know how to program. And the problem feeds on itself: if one doesn’t know how to program, it will be easier, more tempting, to take on some significant dependency instead of just implementing the part you need, while tailoring it to your use case. Eventually knowledge is lost.
评论 #28340052 未加载
评论 #28337949 未加载
aserafiniover 3 years ago
But a meta-smart engineer that wants to maximise real world impact through a software project would realise that not all ‘smart’ people agree about what smart ‘IS’.<p>So for engineering efforts that require large amounts of people to contribute, a more restrictive, less flexible language can yield better overall productivity by expanding the pool of potential contributors and reducing friction arising from pointless differences and ‘smart’ programming (like macros).<p>In other words, removing ‘smart’ programming features like macros probably turns out to be (weirdly) smart in the real world.
评论 #28337025 未加载
评论 #28337034 未加载
评论 #28340401 未加载
ducktectiveover 3 years ago
I don&#x27;t have a background on theory of programming languages or history of CS (I&#x27;m EE), correct me if I&#x27;m wrong but:<p>1- I have never seen a language that made me wow. Like, to me, this whole concept of making a digital logic architecture do a task should be &quot;solved&quot; in a systematic&#x2F;mathematical sense. Yet, whenever I read on criticisms of languages, people always talk about stuff like &quot;Go doesn&#x27;t have generators&quot;, &quot;Rust macro is a mistake&quot;, &quot;I don&#x27;t <i>like</i> python&#x27;s async story&quot;, &quot;C&#x27;s way of things is <i>outdated</i>&quot; etc...<p>As an analogy, this whole discussion of PLs in CS circles is like complaining about whether we should use `dot` notation or `d&#x2F;d(t)` notation or whether we should use `t` or `x` in solving a differential equation. Like, we are not solving the actual DE, but complaining about issues irrelevant to the big picture.<p>2- I have a <i>feeling</i> that <a href="https:&#x2F;&#x2F;www.red-lang.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.red-lang.org&#x2F;</a> is something completely new and innovative.<p>3- I think concepts like formal-proofs and RTOSes are under-rated.
评论 #28337328 未加载
评论 #28338324 未加载
评论 #28337656 未加载
评论 #28337179 未加载
评论 #28339111 未加载
评论 #28342982 未加载
评论 #28337098 未加载
评论 #28340153 未加载
评论 #28339768 未加载
评论 #28337645 未加载
评论 #28376395 未加载
评论 #28340687 未加载
评论 #28339971 未加载
评论 #28337113 未加载
评论 #28342958 未加载
hota_maziover 3 years ago
&gt; A concrete example: Lisp macros.<p>Who didn&#x27;t see this coming?<p>For someone who&#x27;s constantly extolling the importance of other languages and flexible thinking, Paul doesn&#x27;t seem to ever be able to get his mind out of Lisp.<p>&gt; [Lisp macros] by their nature would be hard to implement properly in a language without turning it into a dialect of Lisp.<p>There are numerous counter examples to this claim, the most obvious one being Rust.<p>How do you call someone who only knows one language and refuses to learn new ones? Oh right, a blub programmer.
评论 #28340872 未加载
评论 #28344541 未加载
评论 #28343803 未加载
评论 #28340565 未加载
quickthrower2over 3 years ago
The problem I had is I learned a bit of LISP - just the basics and then thought “hey this is super powerful - I bet it can elegantly solve some great problems” but then I was stuck! I had no idea what sorts of problems or how to go about it. I guess I’d need to see some motivating examples. The tutorial had a very cool test framework in like 5 or 6 lines of macros so I got a feel for the power but I’d need to see more.<p>My fear with lisp is that if you use macros it can become obscure what is really going on. Even in C# when I’ve seen metaprogramming done it can kill the discoverability of an app, meaning you have to talk to people who have talked to the person who left the company who knows the mental model. Searching code for keywords no longer helps, or you read the entire codebase to figure out how it works. It was a relief to get off that and work with more familiar CRUD like code. If someone writes a macro, they should write a manual!
评论 #28339614 未加载
MichaelMoser123over 3 years ago
i had the following thought the other day, interesting if it has any validity:<p>The availability of programmers who are proficient in a programming language is the single most important factor in programming language adoption. I think the continued popularity of C++ and Java has much to do with the fact; an enterprise wants to treat programmers as interchangeable screws, and a less widespread programming language would make this practice much more difficult. C++ was designed to be easier to learn by means of backward compatibility with C; This decision was good for programming language adoption; it was a good trade off, even at the expense of being a source of many issues with the language.<p>Interesting implication: I think that an enterprise with a less common programming language (like Scala or Rust), would have to treat its programmers much better than a competing shop that is using a commonly used platform like Java or C++; they have a greater investment in their workforce, due to the language&#x2F;platform issue, are probably more likely to raise salaries every now and then and would be less likely to &#x27;hire and fire&#x27;...<p>So adopting a less common programming language might have some non trivial implications on the culture and governance of an enterprise.<p>On the other hand there would be a lot of pressure to switch back to a more common programming language, in the event that the shop needs to grow significantly, these shops would then be inclined to port their systems back to a more common language...
评论 #28340880 未加载
zvrbaover 3 years ago
Ah, this reminds me of the days I spent writing RPL programs for solving electric circuits on my trusty old HP48 calculator. (It is said but nowhere officially confirmed that RPL stands for &quot;reverse-polish lisp&quot;.) It was quite enjoyable _then_ and for _that_ purpose (programs designed to run in a specific UI environment) but today I wouldn&#x27;t even consider starting a &quot;serious&quot; project in a postfix language. EDIT: <a href="https:&#x2F;&#x2F;factorcode.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;factorcode.org&#x2F;</a> is a modern postfix language.<p>Using weird languages DOES have one merit though: it opens your horizons. It teaches you to see a &quot;conventional&quot; programming language as a collection of mechanisms at your disposal instead of something &quot;intended to be used to do X&quot;.<p>More to the point, I think that there are two types of languages: 1) those that encourage top-down design (that&#x27;s how I learned programming with Pascal) and 2) those that encourage bottom-up design (such as RPL, these have often an interactive REPL.)<p>So actively using something like RPL or ML or Scheme (yeah, I&#x27;ve read ca 2&#x2F;3 rds of SICP) allows you to turn C# &quot;inside out&quot;, to apply bottom-up programming techniques. You don&#x27;t create a class because &quot;some OO principles tell you to do so&quot; or because it came as godsend from some &quot;architect&quot;, but because you understand workings of classes and a class is the right tool for the task at hand.<p>Also, there&#x27;s no programming in the large without some mechanisms to control accessibility.
throwaway34241over 3 years ago
&gt; Nor is this all you can do with macros; it&#x27;s just one region in a space of program-manipulating techniques that even now is far from fully explored.<p>I like macros. I find myself, not infrequently, thinking about where they would be convenient despite using a language without them.<p>Nevertheless none of the languages that include them (that I’m aware of) seem very appealing.<p>Part of this is “program-manipulating techniques”. Less powerful languages are easier for programs to reason statically about, and so usually have great editor refactoring &#x2F; navigation &#x2F; static analysis already available. This makes the 99.5% of programming that is mundane more pleasant, and it’s hard to imagine special programs that don’t involve at least a good chunk of this.<p>The alternative to macros is not never doing metaprogramming, you can do code generation, parse and process the AST, or have program behavior be data-directed at runtime up to including an embedded interpreter. These things are surely less convenient than macros, but it’s a trade off against making all the other parts of the program less convenient to write.<p>Another issue is most languages with macros are Lisp&#x2F;Scheme types, and having linked-lists-of-boxed-objects be the default representation for everything often isn’t great for domains that are performance-sensitive (this probably wouldn’t apply to some languages like Nim).<p>Of course there are the other downsides of using uncommon languages, like often less mature runtimes &#x2F; library ecosystems.<p>It seems technically feasible for a language with macros to address all these issues (and maybe Rust does if you’re willing to give up GC). If I was writing a new language I would probably start by compiling to either the JVM&#x2F;.NET&#x2F;Go to get a runtime and libraries, and focus on the problem of incremental language extension while maintaining good editor and static analysis support (I think there are some promising approaches for that but this comment is already pretty long).
评论 #28337998 未加载
评论 #28338383 未加载
评论 #28340497 未加载
lexicalityover 3 years ago
&gt; 99.5% of programming consists of gluing together calls to library functions. All popular languages are equally good at this.<p>This seems to be true in the same way that &quot;99.5% of cooking consists of making food hot. All popular kitchen appliances are equally good at this.&quot; is &quot;true&quot;.<p>Technically you can fry bacon in a pressure cooker, but you shouldn&#x27;t because we have frying pans.
lordnachoover 3 years ago
&gt; 99.5% of programming consists of gluing together calls to library functions. All popular languages are equally good at this.<p>I&#x27;m not sure this is so true. I&#x27;ve glued stuff together in a bunch of languages, and some are easier than others. Particularly in how the package manager works. I&#x27;d say c++ throws the weirdest integration issues out of the ones I&#x27;ve used. Rust seems pleasant, nothing too odd thus far for me. Python, super easy so long as you got Anaconda for all the math stuff. JS&#x2F;npm maybe too easy. Swift&#x2F;Cocoapods smooth sailing.<p>But also the languages themselves can make it easier or harder to glue stuff together. If you need to play with pointers and allocators, there&#x27;s more work to do.<p>&gt; Weird languages aren&#x27;t weird by accident. Not the good ones, at least.<p>No true Scotsman? I&#x27;m sure once a language gets more than the initial attention, it can end up a strange mess, just like anything that has a bunch of people tugging at it.<p>&gt; So if you want to expand your concept of what programming can be, one way to do it is by learning weird languages. Pick a language that most programmers consider weird but whose median user is smart, and then focus on the differences between this language and the intersection of popular languages.<p>I think this is selection at work. Yes, I do consider some coders better than others. But often it&#x27;s because the kind of person who is good at coding is often the kind who gets to the bottom of things, and part of that is cave diving in weird languages. Probably I rate people higher as coders just from telling me they know Haskell or Lisp, which I perhaps shouldn&#x27;t (?). But it does appear to me like some of the sharper coders I&#x27;ve met have for some reason been down the Haskell cave, perhaps investigating something to do with the type system.
cpachover 3 years ago
<i>“Pick a language that most programmers consider weird but whose median user is smart, and then focus on the differences between this language and the intersection of popular languages.”</i><p>Any suggestions on which languages could fit this criteria?
评论 #28336964 未加载
评论 #28336960 未加载
评论 #28336948 未加载
评论 #28337351 未加载
评论 #28337138 未加载
评论 #28338737 未加载
评论 #28336938 未加载
评论 #28338614 未加载
评论 #28336998 未加载
评论 #28337048 未加载
评论 #28337015 未加载
评论 #28337040 未加载
hsn915over 3 years ago
I disagree with this at a very fundamental level. I&#x27;m not sure how to express my disagreement.<p>I&#x27;ll pick a seemingly random point:<p>&gt; Pick a language that most programmers consider weird but whose median user is smart, and then focus on the differences between this language and the intersection of popular languages.<p>This heuristic used to apply to Python, but it no longer does. (Partly thanks to the the &quot;Python Paradox&quot; essay I suppose; most people now think learning Python will give you a nice career path).<p>All this heuristic says is that this language has some novelty that attracts people who are interested in novelty. People who are interested in novelty in the field of computers tend to be smart people, but they are not reprsentative of the &quot;population of smart people working with computers&quot;; they are just a small slice of it.<p>I might even go so far as to say, it&#x27;s a slice of people who are just interested in things but not particularly interested in making finished products.<p>Most of the people who work with or on various linux distributions also fall in this category: they are smart, but they are not interested in building a solid working desktop environment as much as they are interested in just playing around with things for fun.<p>For them, their subject of interest is like a puzzle game that they spend their time exploring. There&#x27;s no specific end goal. No specific product to be built. Nothin to be delivered to end users.<p>That&#x27;s also the appeal of weird languages: the novelty itself.<p>This might be a matter of definitions, but to me a good language is one that allows you to deliver a solid reliable end product.<p>Maybe something you write in 5 lines of lisp will take 30 lines in Go. But this is not an issue at all.<p>The mental energy it takes to write the 30 lines of Go is probably lower than the mental energy is takes to write those 5 lines of lisp.
评论 #28343328 未加载
germandiagoover 3 years ago
That is the number one reason why I have tried languages like Lisp, Haskell or Smalltalk. Even Prolog.<p>You change your mindset in different ways in each of them. When you come back to your usual tool you expanded your thinking to what you could not conceive previously.
pphyschover 3 years ago
Is there an &quot;academic&quot; subculture of, say, wood- or metalworking that derides craftspeople and engineers as &quot;just glueing stuff together&quot; or is this unique to programming?
评论 #28339356 未加载
评论 #28341332 未加载
评论 #28343359 未加载
MrPowersover 3 years ago
Scala is a good example of a weird programming language with smart users. The book Hands on Scala Programming is a great way to learn how to express code and think in new ways.<p>Paul Graham also talks about the power of different programming languages in Beating the Averages, see The Blub Paradox: <a href="http:&#x2F;&#x2F;www.paulgraham.com&#x2F;avg.html" rel="nofollow">http:&#x2F;&#x2F;www.paulgraham.com&#x2F;avg.html</a><p>Powerful &#x2F; weird languages usually aren&#x27;t the productivity hack you&#x27;d hope. A few team members might be more productive with a weird language, but other folks will have trouble understanding their code, so they&#x27;ll be less productive.<p>Weird programming languages also require different types of library support (programmers that are passionate about immutability can&#x27;t use a JSON library that mutates stuff). So they&#x27;ll build a separate JSON library, but that fractures communities.<p>It&#x27;s great to learn about different languages, but programmers seem susceptible to the allure of extra productivity from weird languages and that&#x27;s not what I&#x27;ve seen.
评论 #28340500 未加载
ChrisMarshallNYover 3 years ago
...and, then, there are the languages that we need to use, in order to accomplish our tasks.<p>Most <i>engineers</i> (as opposed to <i>coders</i>) are fairly results-oriented. We may have our differences about how to get the results, or even, what the desired results are; but we always have a deliverable in sight.<p>It&#x27;s all about getting satisfactorily-functioning software into the hands of end-users. Put a bow on it. Stick a fork in it. It&#x27;s <i>done</i>.<p>Speaking for myself, I write native Apple code (iOS&#x2F;iPadOS, MacOS, WatchOS, and TVOS). I need to use Swift. I could use ObjC, but Swift is really where it&#x27;s at, unless I&#x27;m doing really low-level stuff. Others may use JavaScript, or even C#, to write Apple software; using hybrid systems.<p>It is, indeed, mostly &quot;gluing together calls to library functions,&quot; but there&#x27;s a bit of algorithm, mixed in there, as well (not much. Many library functions provide better algorithm support than hand-rolled).<p>Other platforms have their most effective languages.<p>I probably could write Apple apps in FORTRAN. I think that there are FORTRAN compilers for Apple systems. I can use existing C or C++ code, to provide &quot;business logic&quot; (I used to run a shop that did just that), so I guess there&#x27;s a lot of languages that I could use in the backend, and, maybe, some might be better choices, for certain tasks. Again, it needs to be results-driven. If a certain kind of algorithm is most effectively implemented in Lisp, wrapped in system calls, I could embed that in a Swift wrapper.<p>There&#x27;s also something to be said for becoming a &quot;native speaker&quot; of a language. That means using it fairly exclusively, over and over again. Step and repeat. I have been writing Swift, almost daily, since the day it was announced, and I still discover new things, almost every day. I think that&#x27;s pretty cool.<p>This is stuff that I would <i>never</i> have discovered on a &quot;context switch.&quot; I&#x27;ve usually been fairly good at picking up new languages, but I am happy to be sticking with this one, for a while. In the past, I&#x27;ve had to know Pascal, Object Pascal, 68K Assembly, C, C++ (and simplified variants, thereof), and Objective-C, in order to program for Apple (yeah, I&#x27;ve been at it a while).
评论 #28340557 未加载
评论 #28339632 未加载
dfrankeover 3 years ago
&gt; [Lisp macros] by their nature would be hard to implement properly in a language without turning it into a dialect of Lisp.<p>Camlp4, Template Haskell, and Rust procedural macros all serve as counterexamples to this claim.
评论 #28342393 未加载
评论 #28340340 未加载
评论 #28340129 未加载
Zababaover 3 years ago
&gt; And macros are definitely evidence of techniques that go beyond glue programming. For example, solving problems by first writing a language for problems of that type, and then writing your specific application in it.<p>Is this fundamentally different from &quot;writing your own library to solve a problem, and then using it&quot;?<p>&gt; So if you want to expand your concept of what programming can be, one way to do it is by learning weird languages.<p>Isn&#x27;t the conclusion here &quot;contribute to&#x2F;write your own libraries&quot; rather than &quot;pick a weird language&quot;? Or &quot;solve problems from scratch instead of relying on libraries when learning&quot;? I feel like the &quot;weird languages&quot; are shoehorned into a discussion about glue programming vs library programming.
评论 #28338414 未加载
评论 #28337149 未加载
davnicwilover 3 years ago
In my experience of programming so far, the 0.5% thing is signal in 2 basic directions.<p>It is either that the problem is really hard and so most popular languages haven&#x27;t attempted a solution and just make do with what they have.<p>Or, the problem just isn&#x27;t that interesting. Like, the solution is cool, but applies very rarely and even then doesn&#x27;t matter all that much. Popular languages could easily implement it, but choose not to.
pharmakomover 3 years ago
I use ML-family languages for most of my work and I simply can’t express my code in mainstream languages in a reasonable way. I could solve the same problems in a different way, but it would be a lot more code and a lot less robust. People I talk to who don’t use these languages aren’t convinced by this claim; they seem to think I’ve joined a cult! Have I? It’s difficult to judge from the inside looking in.
评论 #28339857 未加载
nathellover 3 years ago
&gt; 99.5% of programming<p>Pulling numbers out of thin air like this to support an argument is counterproductive. This should read “Most of programming”, unless there’s research that can corroborate the number.
评论 #28337785 未加载
rdiddlyover 3 years ago
It&#x27;s worse than just stringing together library calls: Life seems to be 98% just CRUD apps. What new thoughts do I need for that, and who even has the time? An analogy: There seem to be a lot of smart Russian writers, and there&#x27;s no question it&#x27;s a weird language, at least to an English speaker (the alphabet! cases&#x2F;declensions! idioms!) and furthermore I don&#x27;t even doubt that I would think new things or in new ways if I learned it. And yet here I am using good old English, because of its popularity and (mostly) because I already know it and I can use it to get stuff done.
emodendroketover 3 years ago
I don&#x27;t want to knock Lisp, or any other exotic language choices. They have their benefits, people have built successful things with them, and learning a different way of doing things can expand your thinking as a developer.<p>On the other hand, most of the world&#x27;s most complex systems are built in boring choices like C, C++, Java, or Python. The claim that this or that can only have been built or get to market fast enough if it&#x27;s in Lisp doesn&#x27;t pass the smell test for me.
评论 #28339669 未加载
评论 #28341541 未加载
sbochinsover 3 years ago
I don’t really see anything new in this essay. I read Beating the Averages a while back and it was pretty eye opening to me at the time. If this post struck you, it’s probably worth reading that essay, since it expands more on your Lisp Macros and the ideas being introduced here.
Bostonianover 3 years ago
I know Fortran well and Python and R somewhat. Some &quot;weird&quot; languages I have thought about learning are APL and similar languages (J, K, kdb, Q) and Haskell. What else? Matlabe&#x2F;Octave is widely-used but is not &quot;weird&quot; compared to what I know.
评论 #28339376 未加载
JulianMorrisonover 3 years ago
Things worth looking at can be weird in various ways. APL and J show interesting ways of using layout to bind together capable and compact primitives, in a way that avoids naming intermediates. Forth shows another interesting way to connect together primitives and calls, but it also shows how simple a powerful language can be to implement. Haskell shows you how the structures of higher mathematics can be directly used in programming. Clojure shows you how a language can embed the concept of time in distributed systems, and how immutability is compatible with change. Lisp shows you how a program can comprehend its own representation.
GeorgeTirebiterover 3 years ago
You have your programming language. Now, you design a special-purpose DSL (using macros or whatever) in which to express solutions to your problem. Now you have two languages. (apologies to Jamie Zawinski)<p>The issue is: Management of Complexity, not how to efficiently express complexity. This is why we have layers - layers <i>are</i> a kind of DSL; and this is where most complexity lies. Clear layering -- including defining the functions of each layer -- is how Complexity is tamed. (And this can be successfully done in assembly language, if you want.)<p>The main reason to master weird languages is: Fun.
syncurrentover 3 years ago
I find synchronous languages like Esterel, Céu, or Blech both weird and eye opening. I created a DSL for Swift (called Pappe) to bring some of the ideas to a more mainstream language.
jstx1over 3 years ago
&gt; Pick a language that most programmers consider weird but whose median user is smart<p>This just comes across as arrogant. You can neither know how smart the median user is, nor does it say much about the merits of the tool. It encourages some weird sense of superiority by putting yourself in a group that&#x27;s exclusive and think they&#x27;re smarter than everyone else. There are better ways to pick programming languages than trying to maximise your own pretentiousness.
评论 #28337087 未加载
评论 #28337973 未加载
评论 #28338511 未加载
评论 #28337012 未加载
评论 #28337183 未加载
评论 #28338470 未加载
评论 #28337212 未加载
评论 #28337821 未加载
评论 #28339070 未加载
评论 #28337016 未加载
评论 #28339359 未加载
评论 #28338778 未加载
评论 #28340368 未加载
评论 #28338594 未加载
评论 #28339959 未加载
评论 #28337095 未加载
评论 #28339876 未加载
评论 #28339762 未加载
评论 #28338782 未加载
评论 #28336982 未加载
评论 #28337908 未加载
klelattiover 3 years ago
&gt; So if you want to expand your concept of what programming can be, one way to do it is by learning weird languages.<p>This is surely the key line here - and the stuff about glue code and median users etc frankly just detracts from it.<p>It&#x27;s true in any field. If you want to expand your ways of thinking look for stuff that has been reasonably successful but is outside the mainstream. Put it that way it&#x27;s sort of obvious but probably easy to forget.
评论 #28337317 未加载
b_emeryover 3 years ago
For the non-lisp programmer, can someone explain how the Macro differs from a library call, or other function? If you&#x27;re building the language, vs building your code, is this really that different?<p>Having read about this, the best analogy I can think of is that macros are like engineered wood. If you&#x27;re building a structure, you can build bigger ones with engineered wood, than with run of the mill (literally) stuff.
评论 #28338942 未加载
评论 #28339560 未加载
评论 #28338799 未加载
skadamatover 3 years ago
Most programmers STILL haven&#x27;t experienced the absolute JOY of live coding languages.<p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=28274069" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=28274069</a><p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Live_coding" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Live_coding</a>
codesectionsover 3 years ago
I am extremely disappointed that the only example of a &quot;weird language&quot; is Lisp. These days — with Clojure, Common Lisp, Racket, Guile, Emacs Lisp, Chez Scheme, Fennel, etc. etc. — Lisp is hardly weird.<p>I&#x27;d love to see an expanded version of this article written by someone less focused on Lisp advocacy than Paul Graham seems to be.
评论 #28338168 未加载
评论 #28339590 未加载
rlagover 3 years ago
Apart from the technical benefits of languages like Lisp, OCaml, Haskell, these days one also needs to consider social aspects before one invests too much into a single language.<p>In terms of influence and earning potential, parochial and closed languages like Python are kind of a pyramid scheme:<p>The people who were there first occupy many of the top positions in industry, regardless of their contributions or competence. They actively harm and intrigue against dissenters, so be prepared to chant the religion of the day (which the powerful change from time to time).<p>This sort of thing cannot happen in languages with a standard and multiple implementations like Lisp or C++. Haskell and OCaml seem to be isolated from the most petty forms of intrigue because the average contributors are way smarter and care more about actual technology.
mark-rover 3 years ago
He&#x27;s made this point before, more than once I think. But never so succinctly - well done.<p>The only thing his less succinct essays give you is his motivation for liking Lisp and macros in particular - it allowed him to build a successful business that gave him his big break in life.
tester756over 3 years ago
&gt;So if you want to expand your concept of what programming can be, one way to do it is by learning weird languages. Pick a language that most programmers consider weird but whose median user is smart, and then focus on the differences between this language and the intersection of popular languages. What can you say in this language that would be impossibly inconvenient to say in others? In the process of learning how to say things you couldn&#x27;t previously say, you&#x27;ll probably be learning how to think things you couldn&#x27;t previously think.<p>or write compiler and experience the freedom
xtatover 3 years ago
Counterpoint is when you&#x27;re spending cycles thinking about the weird language you&#x27;re not spending cycles on creative programming, however adding chaos and restraint is a time-tested path to innovation.
dnauticsover 3 years ago
Wouldn&#x27;t you want a pl that makes that makes your 95% glue code easy to write, easy to code review, easy to debug in anger?<p>Stuff like &quot;make this gql query, but with account spelled &#x27;akkounte&#x27; b&#x2F;c it&#x27;s in language X, compute and add tax, then depending on the associated customer&#x27;s SAAS, maybe stuff it into a REST call that has the account and tax as a CSV.<p>Or: convert this list of integers into f64, take the running average with a window of 5 entries (unless there&#x27;s a holiday that week) then shove it into this C function that someone else wrote
jmuganover 3 years ago
I don&#x27;t get it. Lisp has been around for like 60 years. If these macros were an objectively better way to write code, why have they not taken over by now?
评论 #28340522 未加载
mcguireover 3 years ago
&quot;<i>99.5% of programming consists of gluing together calls to library functions.</i>&quot;<p>This is also a statement about what kind of programming the speaker has done.
mark_l_watsonover 3 years ago
I have a funny relationship with Common Lisp macros: I love the great book Let Over Lambdas, and also Paul Graham&#x27;s coverage of this topic, yet, I hardly ever write macros myself.<p>For me, using different languages is a statement that I enjoy programming in different languages, and not a value judgement. There are so many great languages and I think some new languages like Swift and Rust are especially fun and useful.
itsmefazover 3 years ago
We are moving towards a time where the entire notion of programming languages would be nothing more than compiling a proper dataset.<p>Programming languages will not become irrelevant but would be more akin to the fate of humanities, likely a personal passion. The economic value of learning programming languages in the distant future would be close to none.<p>Programmers should view languages as nothing more than a tool to perform some tasks.
评论 #28338741 未加载
greggman3over 3 years ago
languages come with environments and libraries. Some environments are easier to use than others. For me, C&#x2F;C++ is always painful because there is no standard build system or package manager and certainly nothing cross platform so integrating any random library is always work.<p>Conversely, I guess ruby, node, python, perl? all have fairly standard package managers so it&#x27;s generally? easy to grab a library and it just works, no having to learn how to integrate it into your build system, only having to learn how to use its API<p>I do agree there are big things to learn from different languages. I haven&#x27;t actually used F# but I did learn from this article (<a href="https:&#x2F;&#x2F;fsharpforfunandprofit.com&#x2F;posts&#x2F;designing-for-correctness&#x2F;" rel="nofollow">https:&#x2F;&#x2F;fsharpforfunandprofit.com&#x2F;posts&#x2F;designing-for-correc...</a>), that I&#x27;m missing out on saving myself a ton of work by not using a better language that (a) builds new types for me easily (b) lets me switch on types easily.<p>I&#x27;m also mixed on lisp&#x27;s macros. What I&#x27;d like is a language that can use itself at compile time. I hate that nearly every large C++ project integrates other languages (make, cmake, gn, python) somewhere in the build process. With a language that can run itself at compile time like lisp the build tools themselves can also easily be in lisp. I don&#x27;t thing C&#x2F;C++ though is particular good at simple string manipulation so using it to build itself sounds like it wouldn&#x27;t be so nice. That might be another example where some languages excel over others in certain domains.<p>The downside to lisp macros is everyone builds their own DSLs and so I have to learn those DSLs. Of course maybe that&#x27;s just the same as learning some C++ class hierarchy I&#x27;m unfamiliar or some template magic so possibly not a valid complaint. It&#x27;s just a feeling from the lisp I&#x27;ve worked with.
martininmelbover 3 years ago
As a corollary:<p>“A language that doesn&#x27;t affect the way you think about programming, is not worth knowing.” - Alan Perlis
amznbyebyebyeover 3 years ago
Why do people idolize this guy so much?
评论 #28340512 未加载
svilen_dobrevover 3 years ago
Languages are (just) tools.<p>Pick and combine and switch as you go, tweak and create new ones if the availables aren&#x27;t sufficient or are inaccessible. Worshipping and mantras are dead end.<p>It&#x27;s that simple. (btw, a house is a tool to live inside it.. there was some Peter-Gabriel-wrote-music movie around this)<p>have fun
评论 #28345198 未加载
Abhinav2000over 3 years ago
For those who want to try out a quote unquote weird language, here is a cheat sheet I found helpful for Lisp: <a href="https:&#x2F;&#x2F;github.com&#x2F;ashok-khanna&#x2F;lisp-notes" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ashok-khanna&#x2F;lisp-notes</a>
jeffreyrogersover 3 years ago
So the Sapir-Whorf hypothesis[0] appears true for programming languages.<p>[0]: <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Linguistic_relativity" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Linguistic_relativity</a>
Ontolover 3 years ago
Russian translation: <a href="https:&#x2F;&#x2F;habr.com&#x2F;ru&#x2F;company&#x2F;itelma&#x2F;blog&#x2F;575128&#x2F;" rel="nofollow">https:&#x2F;&#x2F;habr.com&#x2F;ru&#x2F;company&#x2F;itelma&#x2F;blog&#x2F;575128&#x2F;</a>
HighCoover 3 years ago
If you think that 99.5% of programming consists of gluing together calls to library functions, you&#x27;re also not making a statement about programming, but about the kind of programming you&#x27;ve done.
ronenlhover 3 years ago
I new to this opinion, but I think more people should try to write non-trivial things in the Hindley-Milner family of languages. Just to get out of the rut.
0xDEEPFACover 3 years ago
Would Ada++ be considered weird xD?<p><a href="http:&#x2F;&#x2F;www.adapplang.com&#x2F;tutorial.html" rel="nofollow">http:&#x2F;&#x2F;www.adapplang.com&#x2F;tutorial.html</a>
codingdaveover 3 years ago
99.5% of programming isn&#x27;t actually about the coding at all. It is about breaking down a process to steps small enough to express in code. It is about figuring out what you want the app to do in the first place, and making it meets the goals of the end users. Or, to be more realistic, making it meet the goals that product owners have handed to you on behalf of the end users.<p>This whole article just feels like it is talking about code for its own sake, which I admit may be intellectually interesting, but has little to do with what we actually do day-to-day when building software.<p>Maybe that was really the point he was trying to get to - that building software is not the same thing as doing &quot;interesting&quot; code.
评论 #28337322 未加载
评论 #28337254 未加载
评论 #28338033 未加载
h2odragonover 3 years ago
Or just normal languages, used oddly: <a href="http:&#x2F;&#x2F;www.ioccc.org&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.ioccc.org&#x2F;</a>
systemvoltageover 3 years ago
I think this applies to weird people as well. Some of the most interesting conversations I&#x27;ve had was with people that were misfits.
mikewarotover 3 years ago
Languages to a programmer are like tools to a machinist. There&#x27;s always some new goofy situation that requires yet another tool.
Lamad123over 3 years ago
I heard this dude once claimed that lisp could&#x27;ve prevented 9&#x2F;11. This seems like an elaboration on that claim! Javascript is kinda Lisp already and your glue languages do have their fair share of weirdness. Every industry and everything humans do is gluing crap together. The carpenter doesn&#x27;t create his own synthetic wood or dig iron ore to make his own needles. He glues crap that was dug and cut with glued stuff.
jumellesover 3 years ago
This whole article is so short and generally vague as to be useless.
xiaodaiover 3 years ago
Does Paul Graham know Prolog or Wolfram or SAS?<p>If not then... isn&#x27;t it ironic?
yumaikasover 3 years ago
Nim, Elixir, Rust, Zig, D and Jai would all like a word.
Ericson2314over 3 years ago
&gt; 99.5% of programming consists of gluing together calls to library functions.<p>Actually, different languages <i>do</i> make this part different. Because you might glue together something other than &quot;call&quot;, i.e. good functional languages have abstractions that blur the code and data boundary.<p>If all interesting ideas were at the expense of code reuse, learning new programming languages would be a fools errand. Improving the last mile of whatever you are doing is an O(1) improvement of total cost — it doesn&#x27;t even show up in productivity expressed as a <i>rate</i>.<p>The real compelling belief behind programming languages is much more exciting, namely that we can express better ideas together in reusable ways, invest that productivity into better languages and rolls, and repeat that process ad infinitum. This is a crazy railgun of a concept.<p>Incidentally, this is why startups as PG likes are a failed way to advance technology. Startups, focused on a limited 5 year window and that last mile, are structurally incapable of working on generalized infrastructure. The proliferation of b2b over b2c on recent years belies that, but replacing the current ossified FOSS Monopoly (our commons) with b2b bulkanization could restore competition in the means of production, but that bulkanization will also prevent the code reuse that create enough payoff to power the continued reinvestmemt.<p>Tl;Dr PG sees good languages as a way to do one-off great man history-style heroic inventions, I see good languages as a way to unlock factorio-style continuous high capital investment.
ekampf1over 3 years ago
TL;DR - I only ever used LISP and nowadays I spend my time writing LISP dialects literally no one cares about but me.
kizerover 3 years ago
&quot;lisp...&quot;<p>here we go again
forgotmypw17over 3 years ago
I prefer to use languages which have been stable for 20+ years.
评论 #28337781 未加载
评论 #28337207 未加载
评论 #28337203 未加载
slimover 3 years ago
Disappointed. I thought it was about languages such as Lojban &#x2F;s
评论 #28338391 未加载
sysadm1nover 3 years ago
Strange that PG&#x27;s site is served over port 80. Isn&#x27;t he technical enough to have HTTPS on his site, surely? Anyway here&#x27;s an Outline of it served over a secure channel:<p><a href="https:&#x2F;&#x2F;outline.com&#x2F;HY6aeR" rel="nofollow">https:&#x2F;&#x2F;outline.com&#x2F;HY6aeR</a>
评论 #28345203 未加载