Live data from Hacker News

How knowing Lisp destroyed my programming career (2006)

coding.derkeiler.com

381–390 of 433 posts

Re: How knowing Lisp destroyed my programming career (2006)

#381
post #289

Oh wow, I was first introduced to Java in my undergrad and somehow I had some serious issues with the whole OOP stuff. Thankfully, I took some AI courses, which came with LISP and I was so excited to use it everywhere. Unfortunately, however, doing basic I/O, networking (this is around 2006) and testing was too complicated for me so I dropped it again in favor of C++ in grad school (performance was also an issue, we…

Practical Common Lisp[0] remains the near-standard text, I believe. It's amazingly good, and shows how useful it can be to develop one's own syntactic abstractions with the practical example of an MP3 ID3 parsing system. I can't recommend it highly enough. Peter Seibel's second book Coders at Work is also excellent. 0: http://www.gigamonkeys.com/book/

I agree about both. What I liked about Coders at Work are some of the questions he asked the folks. 1) Do you like/program in C++ 2) Have you read TAoCP?

Knuth (interviewed last) claimed that he hadn't really read it. And only one person interviewed did. Oh, also, there seemed to be a general disdain for IDEs.

Re: How knowing Lisp destroyed my programming career (2006)

#382

Earlier quoted context omitted.

Yeah, I remember very little about it except a _lot_ of parentheses. Interesting to hear it is a lot more "real world" than I thought - seems my understanding is flawed... but equally interesting that I was unaware of it, having never once encountered it in my entire career.

The average engineer has some dozen things they encountered in their career, and everything else is something that they haven't encountered once. Off the top of my head, I've never encountered such tools as: Visual Basic, PowerShell, VHDL, and IBM 370 assembly language.

Ah, but think of what you are missing!

Re: How knowing Lisp destroyed my programming career (2006)

#383
post #69
post #40

For a while now I've had a feeling that all the comments about lack of engineers(especially in software) are vastly underestimated. Probably around 10% of us is capable of doing actual software development. The rest writes plumbing and can handle the project for only as long as abstractions available through libraries can hold the complexity. If we assume most of us don't really know what we're doing, that totally ex…

Maintaining a distinction between "actual software development" and "plumbing" is elitist, even if you're placing yourself on the downside of that comparison and setting yourself up for imposter syndrome. You can get an awful lot done by "plumbing". Entire businesses like SAP are built on it. It can also be mission critical; in SpaceX, is the literal plumbing of hydraulic fluid and fuel flow unimportant? No.

I don't consider it elitist at all. Someone with a solid knowledge of fundamentals can often accomplish more, faster, and more maintainably in vanilla Go (for example) than an engineer who is trained in frameworks. The former can write a pretty solid pubsub/distributed queue/disruptor/stream parser/load balancer/etc. that will outperform most off-the-shelf solutions, cost very little to host, and be tailored to a specific application. The latter generally cannot.

Don't get me wrong - I run a very small programming shop and I make judgment calls every day about whether to borrow or build. My operating system, hardware drivers, compiler, dependency manager, email server (etc.) I borrow these because it seems obviously practical and I have an appreciation for the complexity underneath (although I have some unkind things to say about hosting tiny apps on full-blown linux virts, the waste is unbelievable). I use Unity for client side development for games, which is probably the decision I'm least happy about, but I simply don't have the bandwidth to deal with the monstrous complexity of client-side programming (especially in a gaming context).

Frameworks are generally bloated monstrosities that conceal performance problems behind walls of configuration and impenetrable cruft that has developed over decades of trying to make the "out of the box" experience configurable while pleasing myriad experts. They do more than one thing relatively badly, and the engineers who work with them often haven't developed the ability to deep dive into them to solve real scaling problems.

You don't get simplicity, you never get zero-touch, and your learning when working with a framework often doesn't generalize, so you're basically renting a knowledge black-hole rather than paying down a mortgage on a knowledge library.

Anyway, that's my two cents on why I think having solid fundamentals is important, at least in my line of work.

Re: How knowing Lisp destroyed my programming career (2006)

#384
post #133

Horses for courses, surely? I've never coded in Lisp except for one undergrad assignment in the early 90s... but I know it's good for functional, heavily recursive, algorithmic type problems. But the world is far messier than that and if, like me, you come from a systems or real-time programming background then Lisp basically did not exist and you were using C-based languages (or even assembler) that were close to th…

Sounds like you coded in Scheme, not Lisp. ( https://news.ycombinator.com/item?id=16584082 ) Common Lisp was designed for the messy real world, it's a workhorse, even at the cost of 'prettiness' that Scheme fans like to point out as a benefit for Scheme. So it's been used (either directly or to output a lower level machine code) for all sorts of real world things like OSes (see the Lisp Machines), video games, CAD sy…

[deleted]

Re: How knowing Lisp destroyed my programming career (2006)

#385
post #86

Earlier quoted context omitted.

What made it click for me is the nature of scheme: a few, very well thought out abstractions, that compose well to build a really neat language. I never really made friends with other languages. Where scheme composes the primitives for problem solving, I find that languages like python or ruby provide either one way for each different thing, or a very large hammer for every problem you might find, be it list comprehe…

> a very large hammer for every problem you might find, be it list comprehensions or generators or whatever OO voodoo you can come up with. List comprehensions, to me, are what makes Python a productive (or the most productive) prototyping language. It allows me to think and program in mathematical relations without much fuss. Add to that nice sets and dicts (needed for asymptotic efficiency), and I can easily forgiv…

> I much more need a syntax that does not hide what happens

Yes sir!

> (procedure call,

   80febf0:	08 
   80febf1:	c7 44 24 04 01 00 00 	movl   $0x1,0x4(%esp)
   80febf8:	00 
   80febf9:	89 3c 24             	mov    %edi,(%esp)
   80febfc:	89 44 24 0c          	mov    %eax,0xc(%esp)
   80fec00:	e8 cb c8 f4 ff       	call   804b4d0 
> list indexing or at least "indexing").

Gotcha covered there too!

    80fd7eb:	8d 7c 0e ff          	lea    -0x1(%esi,%ecx,1),%edi

Re: How knowing Lisp destroyed my programming career (2006)

#386
post #98

Earlier quoted context omitted.

The OP lists several features Lisp had decades before they were common to find in more widely used languages, so some of it is for historical reasons. There are two things lisps, including Scheme and Clojure have that are weak or absent in most popular languages: One is macros. Being able to transform code before it is run using the language's built-in data structures provides a solution when the language just doesn'…

> Why is my editor on my PC not talking to the app running on my Android phone and letting me see its state and make changes in real time? All my opinion, of course: The time (cost) required to create such easily available introspection is too high for the comparatively small gains. REPLs in modern languages (when even implemented) are just so often a completely separate mode of operation.

I should point out that clojure-android provides exactly that. The tools are not currently maintained and it is quite difficult to get a development environment set up these days, but once running, it works very well.

It's strange from my perspective to see REPLs as a separate mode of operation. Yes, there's a little overhead, and it's something you might want to strip or disable from a production build, but the overhead is small in the context of a modern application language. Contrast with something like Electron.

This style of development makes the feedback loop between the programmer's mental model of how things work and a reality check extremely tight. It's one of those things like TDD that often changes what kind of programs you write.

Re: How knowing Lisp destroyed my programming career (2006)

#387

On a tangential topic : I am intimidated by how myriad experiences with programming languages HN commentators on this thread have. I have been in this industry for about 8 years and am considered an above average developer in my current company. I have primarily worked with Java, while fiddling with others here and there. No experience with pure functional languages such as Lisp or Haskell. Am I missing out some impo…

I like to think of each programming language as a separate musical instrument. If Java is a tuba, then maybe Python is a trumpet. They're two very different instruments, but they share a lot of the same underlying intuitions. In fact, I would say that C-style languages are probably equivalent to the collection of brass instruments. There are major variations from trombones to trumpets to french-horns, but not as larg…

I would add tcl to the stringy list.

Re: How knowing Lisp destroyed my programming career (2006)

#388
post #40

For a while now I've had a feeling that all the comments about lack of engineers(especially in software) are vastly underestimated. Probably around 10% of us is capable of doing actual software development. The rest writes plumbing and can handle the project for only as long as abstractions available through libraries can hold the complexity. If we assume most of us don't really know what we're doing, that totally ex…

The real problem is that the majority of us probably are actually capable of doing actual software development right when we come out of school. Most of us get slotted into crappy plumbing and middleware jobs, and after 5-10 years those skills get rusty. They can come back; but if you end up out on the job market, being asked some of the advanced questions in interviews. . . well good luck. That situation exposes one fairly quickly.

Re: How knowing Lisp destroyed my programming career (2006)

#389

Earlier quoted context omitted.

> a very large hammer for every problem you might find, be it list comprehensions or generators or whatever OO voodoo you can come up with. List comprehensions, to me, are what makes Python a productive (or the most productive) prototyping language. It allows me to think and program in mathematical relations without much fuss. Add to that nice sets and dicts (needed for asymptotic efficiency), and I can easily forgiv…

> I much more need a syntax that does not hide what happens Yes sir! > (procedure call, 80febf0: 08 80febf1: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp) 80febf8: 00 80febf9: 89 3c 24 mov %edi,(%esp) 80febfc: 89 44 24 0c mov %eax,0xc(%esp) 80fec00: e8 cb c8 f4 ff call 804b4d0 > list indexing or at least "indexing"). Gotcha covered there too! 80fd7eb: 8d 7c 0e ff lea -0x1(%esi,%ecx,1),%edi

You won't be indexing sizes >8 bytes with your lea. Super annoying with 128-bit SSE arrays - which is pretty much the only reason I write any assembler anymore.

Re: How knowing Lisp destroyed my programming career (2006)

#390

Earlier quoted context omitted.

> a very large hammer for every problem you might find, be it list comprehensions or generators or whatever OO voodoo you can come up with. List comprehensions, to me, are what makes Python a productive (or the most productive) prototyping language. It allows me to think and program in mathematical relations without much fuss. Add to that nice sets and dicts (needed for asymptotic efficiency), and I can easily forgiv…

> I much more need a syntax that does not hide what happens Yes sir! > (procedure call, 80febf0: 08 80febf1: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp) 80febf8: 00 80febf9: 89 3c 24 mov %edi,(%esp) 80febfc: 89 44 24 0c mov %eax,0xc(%esp) 80fec00: e8 cb c8 f4 ff call 804b4d0 > list indexing or at least "indexing"). Gotcha covered there too! 80fd7eb: 8d 7c 0e ff lea -0x1(%esi,%ecx,1),%edi

What's special about that? I can't see anything unexpected. Do I miss something here? I don't know (any) assembler well.
Post reply on HN