Live data from Hacker News

What was the last breakthrough in computer programming? (2019)

quora.com

41–50 of 226 posts

Re: What was the last breakthrough in computer programming? (2019)

#41
post #21

There isn't so much in languages features themselves, but in their implementations. GC can be largely pauseless for many practical purposes and a GC language can be within 2x-3x the performance of C-like languages. Also the amount/cost of memory has improved so that we can use immutable datastructures and functional style in many contexts, which definitely feels like a 'level-up'. Concurrency has been getting easier…

>GC can be largely pauseless for many practical purposes and a GC language can be within 2x-3x the performance of C-like languages. To that end, it seems like only recently we've seen automatic reference counting [Obj-C, Rust, Swift] and/or compile-time garbage collection [Mercury] in a non-toy implementation. "Breakthrough" is a difficult word because it refers to discovery and impact, with the latter coming long af…

As far as I understand, the Mercury compiler doesn't do compile-time garbage collection (see the LIMITATIONS file).

Re: What was the last breakthrough in computer programming? (2019)

#42
I feel like Kay has taken a rather too narrow view of what counts as programming. IMO here are the breakthroughs in the last 20 (ish) years:

1. Stack Overflow - search for your problem, copy and paste the answer.

2. git - Revision control that is low enough overhead that you need to have a reason not to use it.

3. Open-source software as a commodity - Unless you've got very specific requirements there's probably a system that can do most of your heavy lifting. (Almost) no-one writes their own JSON parsers or databases or web frameworks. Using open-source software is low overhead and low risk compared to engaging with some vendor for the same.

4. Package managers - By making it easy to include other peoples code we lower the bar to doing so.

The common thread here is code-reuse. None of the above are programming languages, but all have driven productivity in building systems and solving problems.

Re: What was the last breakthrough in computer programming? (2019)

#43
post #25

There isn't so much in languages features themselves, but in their implementations. GC can be largely pauseless for many practical purposes and a GC language can be within 2x-3x the performance of C-like languages. Also the amount/cost of memory has improved so that we can use immutable datastructures and functional style in many contexts, which definitely feels like a 'level-up'. Concurrency has been getting easier…

It's nice to read a positive comment like yours occasionally, because the vast majority of the time, I'm just disappointed in how bad our programming tools (including languages) are. It's become a meme in my office that I'm the guy constantly bitching about how stupid our languages are. This week I was back on my soap box about the fact that almost zero mainstream (statically typed) programming languages can even let…

Mmmh... these are not very convincing examples.

Statically typed languages give you u8/i8 types of numbers.

Maybe having a non empty string, or non empty list, type is useful now and then, but in practice, just have your code work just as well on both empty and non empty values, and you're good to go.

I'm pretty happy with the languages we have today overall (Kotlin and Rust at the top, but C#, Swift, and Java get an honorable mention).

Re: What was the last breakthrough in computer programming? (2019)

#44
post #21

There isn't so much in languages features themselves, but in their implementations. GC can be largely pauseless for many practical purposes and a GC language can be within 2x-3x the performance of C-like languages. Also the amount/cost of memory has improved so that we can use immutable datastructures and functional style in many contexts, which definitely feels like a 'level-up'. Concurrency has been getting easier…

>GC can be largely pauseless for many practical purposes and a GC language can be within 2x-3x the performance of C-like languages. To that end, it seems like only recently we've seen automatic reference counting [Obj-C, Rust, Swift] and/or compile-time garbage collection [Mercury] in a non-toy implementation. "Breakthrough" is a difficult word because it refers to discovery and impact, with the latter coming long af…

For me, Composita https://concurrency.ch/Content/publications/Blaeser_Componen...

and ASAP https://www.semanticscholar.org/paper/ASAP%3A-As-Static-As-P...

Seem like a good way forward wrt memory management and concurrency, using ASAP inside a component, and delegating concurrency and component cleanup to Composita.

Other languages like Maude http://maude.cs.illinois.edu/w/index.php/The_Maude_System

Are pushing in new directions wrt proof checking.

Re: What was the last breakthrough in computer programming? (2019)

#45
post #21

Earlier quoted context omitted.

>GC can be largely pauseless for many practical purposes and a GC language can be within 2x-3x the performance of C-like languages. To that end, it seems like only recently we've seen automatic reference counting [Obj-C, Rust, Swift] and/or compile-time garbage collection [Mercury] in a non-toy implementation. "Breakthrough" is a difficult word because it refers to discovery and impact, with the latter coming long af…

(Rust does not do automatic reference counting)

Sure it does: `Arc::new(thing)`

Re: What was the last breakthrough in computer programming? (2019)

#47
It always feels like Alan Kay is wistfully talking about how there could have been an alternate future where he and his ilk would do programming and computer engineering the "right way" and somehow the world has lost it's path. He waxes eloquent about how he enabled the genius's at Xerox PARC to do deep work and how they changed the world.

I find his talks inspiring but I also find it tone deaf that he doesn't understand the situation he was in nor does he see how the world has changed. Xerox PARC was, in my opinion, a by product of top down "waterfall" like business practices that he happened to be at the apex of. For most of the rest of us, we have to get by with minimal funding and try to push ideas to an over saturated market.

What really irks me is how he still has this view that somehow if all the worlds intellectuals just got together or just got funding, somehow they would come up with the next genius ideas and could deliver it to the rest of the world, like god's messengers.

Here's what he missed:

* Free and Open source. It's not software that's eating the world, it's free and open source software that's eating the world. Most of the worlds infrastructure runs on FOSS and we'd be living in a developer hellscape of choosing between which Apple and Microsoft crippling licensing fees we'd need to pay just to have the privilege of compiling our programs.

* Git. Git has allowed project management and software sharing with ease like nothing before. Even though GitHub is a proprietary enterprise, it's created massive value to the community through it's ease of sharing.

* Javascript. Write once run anywhere? Javascript is the only language that comes even close. Data representation that's portable? JSON is the only one that comes close. Javascript has it's warts but it brings the best of functional languages in a procedural languages skin. Javascript is the only reason I don't dismiss functional languages off hand, because Javascript actually makes those concepts useful.

* Docker (and perhaps some WebAssembly/Javascript environment). I think we're closing in the idea that Linux boxes are the analogues of "cells", where each has their own local environment and can be composed to form larger structures. Linux images may seem bloated now but when space and compute passes a threshold of cheap/fast, it won't matter.

* GPUs. Moores law is alive and well with GPUs. "Out of the box" gets you a 10x-100x speedup on algorithms ported from CPUs. I've heard of 1000x-10000x in some cases. It's not just raw performance, it's also designing data structures that work on GPUs, are more data centric and are designed for small, independent and highly parallel workloads.

And I'm sure there are many more. I would add cryptocurrency but maybe that falls outside of the "programming" scope.

For all his preaching, Alan Kay still doesn't "get it". If there's a billion dollar monopoly that has a small, independent research group that has no ceiling to funding and has Alan Kay as it's head, great, I'm sure they'll come up with some wonderful ideas. We don't live in that world anymore and the playing field has been leveled because of the points above and many more (maybe even more simply just because cheaper compute is available).

It never really occurs to Alan Kay that maybe his type of research is not the only way. Better yet, maybe Alan Kay's style of research is gone because we've discovered better ways.

If Alan Kay really wants to see the worlds next ideas birthed into existence, why isn't he at the forefront of free and open source, championing the software that enables people to his type of fundamental research? If you really want a trillion dollar ROI, invest a few million in FOSS.

Re: What was the last breakthrough in computer programming? (2019)

#48
post #34
post #31

Earlier quoted context omitted.

The implication of the original comment was that any C-style language engineer could learn any C-style language in a day. I'd even argue that point, but it definitely doesn't get you J in a day, except that an supports most C-style syntax. So you can program in J like a C-programmer in a day. You definitely can't program like a J-programmer. And to say a competent engineer would already have array-language experience…

The original comment said nothing about C-style languages. That must be something you read into their comment. Learning J is like learning Perl or regular expressions. Nobody really wants to engage in such an activity, but people do what they need to do. Depending on their level of experience, a person who understands imperative and declarative paradigms along with the language's execution model can absolutely learn…

"This is at least part of the reason that reasonably strong engineers can learn a new programming language in under a day. The paradigms just aren’t that different."

This literally says "the paradigms aren't that different." So if you accept that C and J are different paradigms, then because the paradigms aren't that different, a C programmer could pick up J in a day.

What it doesn't say is that truly different paradigms take more than a day to learn competent programmers already understand all different paradigms.

Perl is C-like. As I said elsewhere, J supports C-style syntax, so sure you can program J in C-style in a day. But that's not J. This is J:

for. }.z do. b=. -. (i.n) e."1 ,. z +"1 _ ((-i.){:$z) */ _1 0 1 z=. ((+/"1 b)#z),.n|I.,b end.

To a J programmer, that's not just clear, it's obvious. I'd like to meet the C-programmer who can learn to write and read that in a day.

And also as I responded elsewhere, this is a blub language discussion: http://www.paulgraham.com/avg.html

Re: What was the last breakthrough in computer programming? (2019)

#49
post #45

Earlier quoted context omitted.

(Rust does not do automatic reference counting)

Sure it does: `Arc::new(thing)`

That is atomic reference counting, not automatic reference counting. With automatic reference counting, you do not need to wrap the variables, and you do not need to increment or decrement the counter. Rust requires that you actively make your values reference counted by wrapping them explicitly, and makes you bump the count explicitly. It uses RAII to decrement the count automatically though.
Post reply on HN