Historic 'Summit' with the Creators of Python, Java, TypeScript, and Perl (packtpub.com) 84
"At the first annual charity event conducted by Puget Sound Programming Python on April 2, four legendary language creators came together to discuss the past and future of language design," reports PacktPub.
- Guido van Rossum, the creator of Python
- James Gosling, the founder, and lead designer behind the Java programming language
- Anders Hejlsberg, the original author of Turbo Pascal who has also worked on the development of C# and TypeScript
- Larry Wall, the creator of Perl
You can watch the video here -- the speaker introductions start about 50 minutes into the video-- or read PacktPub's summary of the event: Guido van Rossum said designing a programming language is very similar to the way JK Rowling writes her books, the Harry Potter series... He says JK Rowling is a genius in the way that some details that she mentioned in her first Harry Potter book ended up playing an important plot point in part six and seven... When designing a language we start with committing to certain details like the keywords we want to use, the style of coding we want to follow, etc. But, whatever we decide on we are stuck with them and in the future, we need to find new ways to use those details, just like Rowling...
When James Gosling was asked how Java came into existence and what were the design principles he abided by, he simply said, "it didn't come out of like a personal passion project or something. It was actually from trying to build a prototype.... It started out as kind of doing better C and then it got out of control that the rest of the project really ended up just providing the context." In the end, the only thing out of that project survived was Java...
Larry Wall wanted to create a language that was more like a natural language. Explaining through an example, he said, "Instead of putting people in a university campus and deciding where they go we're just gonna see where people want to walk and then put shortcuts in all those places." A basic principle behind creating Perl was to provide APIs to everything. It was aimed to be both a good text processing language linguistically but also a glue language....
Similar to the views of Guido van Rossum, Anders Hejlsberg adds that any decision that you make when designing a language you have to live with it. When designing a language you need to be very careful about reasoning over what "not" to introduce in the language.
There was also some discussion of types -- Gosling believes they help improve performance, while Hejlsberg said types are also useful when building coding tools. "It turns out that you can actually be more productive by adding types if you do it in a non-intrusive manner and if you work hard on doing good type inference and so forth." In fact, Hejlsberg told the audience that the TypeScript project was inspired by massive "write-only" JavaScript code bases, while a semantic understanding (including a type system) makes refactoring easier.
Guido van Rossum acknowledged that TypeScript "is actually incredibly useful and so we're adding a very similar idea to Python. We are adding it in a slightly different way because we have a different context.... I've learned a painful lesson, that for small programs dynamic typing is great. For large programs, you have to have a more disciplined approach. And it helps if the language actually gives you that discipline, rather than telling you, 'Well, you can do whatever you want.'"
In the video Larry Wall says the Perl 6 team had also noticed the limitations of loose typing, and added a robust type system to Perl 6 to "help with programming in the large."
This was the first annual benefit for CSforALL, a group promoting high-quality computer science classes at every grade level.
- Guido van Rossum, the creator of Python
- James Gosling, the founder, and lead designer behind the Java programming language
- Anders Hejlsberg, the original author of Turbo Pascal who has also worked on the development of C# and TypeScript
- Larry Wall, the creator of Perl
You can watch the video here -- the speaker introductions start about 50 minutes into the video-- or read PacktPub's summary of the event: Guido van Rossum said designing a programming language is very similar to the way JK Rowling writes her books, the Harry Potter series... He says JK Rowling is a genius in the way that some details that she mentioned in her first Harry Potter book ended up playing an important plot point in part six and seven... When designing a language we start with committing to certain details like the keywords we want to use, the style of coding we want to follow, etc. But, whatever we decide on we are stuck with them and in the future, we need to find new ways to use those details, just like Rowling...
When James Gosling was asked how Java came into existence and what were the design principles he abided by, he simply said, "it didn't come out of like a personal passion project or something. It was actually from trying to build a prototype.... It started out as kind of doing better C and then it got out of control that the rest of the project really ended up just providing the context." In the end, the only thing out of that project survived was Java...
Larry Wall wanted to create a language that was more like a natural language. Explaining through an example, he said, "Instead of putting people in a university campus and deciding where they go we're just gonna see where people want to walk and then put shortcuts in all those places." A basic principle behind creating Perl was to provide APIs to everything. It was aimed to be both a good text processing language linguistically but also a glue language....
Similar to the views of Guido van Rossum, Anders Hejlsberg adds that any decision that you make when designing a language you have to live with it. When designing a language you need to be very careful about reasoning over what "not" to introduce in the language.
There was also some discussion of types -- Gosling believes they help improve performance, while Hejlsberg said types are also useful when building coding tools. "It turns out that you can actually be more productive by adding types if you do it in a non-intrusive manner and if you work hard on doing good type inference and so forth." In fact, Hejlsberg told the audience that the TypeScript project was inspired by massive "write-only" JavaScript code bases, while a semantic understanding (including a type system) makes refactoring easier.
Guido van Rossum acknowledged that TypeScript "is actually incredibly useful and so we're adding a very similar idea to Python. We are adding it in a slightly different way because we have a different context.... I've learned a painful lesson, that for small programs dynamic typing is great. For large programs, you have to have a more disciplined approach. And it helps if the language actually gives you that discipline, rather than telling you, 'Well, you can do whatever you want.'"
In the video Larry Wall says the Perl 6 team had also noticed the limitations of loose typing, and added a robust type system to Perl 6 to "help with programming in the large."
This was the first annual benefit for CSforALL, a group promoting high-quality computer science classes at every grade level.
In before (Score:2)
The mind-numbing language snobbery and Trump spam.
To properly block out the commentary ... (Score:4, Funny)
Re: (Score:2)
Did they hold a minute of silence to remember Erlang creator Jim Armstrong
No. This summit was only for languages that are actually used.
Quote of Python creator (Score:4, Interesting)
Re: Quote of Python creator (Score:2, Informative)
This isn't anything real programmers didn't already know.
Re: And Rust still gets it all wrong. (Score:2)
I see you have never before worked on a large codebase written by several teams over several years.
What people like about Python's type system is duck typing (https://en.m.wikipedia.org/wiki/Duck_typing). Dynamic typing, on the other hand, is a clusterfuck and the cause of the considerable majority of bugs in Python programs.
Re: (Score:1)
Re: and Larry Wall more or less concurred... (Score:1)
The beauty of using a strict or warning pragmatic is that, if you are stuck integrating a script that doesnâ(TM)t use it, you can add them and start rebuilding from there. By the time you get to the bottom of the script, you can be fairly sure youâ(TM)ve eliminated most of the structural flaws. And it will help you debug most of the logical ones once you have running code. Itâ(TM)s the way Iâ(TM)ve done it in the past, and itâ(TM)s saved me quite a bit of time sanitizing this way si
Re: Quote of Python creator (Score:2)
Just to be clear, he isn't FOR static typing. He still leans dynamic & duck typing. But he does recognize the importance of type coordination and standards; especially in big projects.
He actually considered the idea of type validation back in 2.x of Python. But the community didn't have good ideas on implementation. Back in late 2014, type annotations were introduced to the 3.x branch.
These annotations are like JavaDocs and allow a pre-processor, validator, or IDE to pre-validate your code. Similar to
Re: (Score:2)
Hi. That works, but I have found that when I use a statically typed language, I don't need to have many - if any - unit tests. (Note that I perform careful design of my algorithms, in pseudocode, and they pretty much always work the first time.) I generally only have behavioral tests, which I write as I code. I have found that when using Java or Go, type safety seems to prevent any errors from being introduced during refactoring, even for very large codebases. But when I use a language such as Ruby or Pytho
Re: (Score:2)
I have never worked on a medium or large project in C, C++, Java, nor Erlang that didn't have a barrage of testing. All had entire teams dedicated to doing testing. The Perl (yes Perl) and Python projects actually has smaller test teams (more was automated; due to the quacks like a duck concept).
I have never asked a co-worker if their function always returns XXX. What the hell is documentation for if not _atleast_ that? The dev can write & debug hundreds of lines of code, but can't update 2-3 lines
Re: (Score:2)
Depends how your team is organized. "car" might be a conceptual bundle of capabilities that everyone on the team uses to reason of what operations are legal or not legal.
That's what you think. But the next piece of code also depends upon headlights, and you didn't get the post-war memo. And the next piece of code a
Re: (Score:2)
The "conceptual bundle of capabilities" is the core problem I have with static typing. This is assumed, demanded, and enforced by the dev chain. The last two bits are the problem. Because everyone has basically agreed on the whole, any minor change is a bureaucratic nightmare, only alleviated by the type safe checking tools _after_ the decision has been made. That first part is GRRR. On the dynamic side, we have more flexibility to change parts independently as long as the returned interfaces don't chang
Re: (Score:2)
Yes, a-lot of the Java frameworks are a big tax. Spring for example. But that is the fault of the framework. Also, I don't claim that Java is a great language. Scala dispenses with a-lot of the verbosity of Java, but preserves its type safety.
I did not say that testing is not necessary. I said that the safety net of unit tests is unnecessary with typesafe languages: when refactoring, the safety net of type safety is so powerful, IME, that unit tests are not needed as a safety net. (You might write unit te
Re: (Score:2)
Yes, our experiences are different; but probably similar on Ruby. They went far too with "turtles all the way down" and you end up coding while balancing 8 turtles up. I have had too many "you didn't have to do this; you did just because you could!" moments in that world.
I like C. I honestly can't see it in a non-static context. The whole header file concept just feels simplistic and lean enough to provide a good balance on flexibility & rigidness. Java, & C++ seem to have piled on too much mid
Re: (Score:2)
Yes, C++ is a complex pile-on. I agree about C. A few years ago I had written something in Ruby, and then discovered that it could not be made to work (I forget why), and so I re-coded it in C. It was about 300 lines, and it took me half an hour to code it. Note that I had not yet achieved a running program in Ruby or C. The C program worked the first time - the first time. Its function was to parse the output of tcpdump. I only used the standard C libraries. And - get this - I had not written a C program i
Re: (Score:2)
But the community didn't have good ideas
Excellent summary.
Well... they both made billions. (Score:3)
Guido van Rossum said designing a programming language is very similar to the way JK Rowling writes her books, the Harry Potter series...
One made a billion dollars, the other a billion Tabs. :-)
Re: (Score:2)
And also tells you you're gay.
James Gosling, fuck yeah (Score:2, Insightful)
This guy single-handedly brought all computers the world over to their knees for 20 years until they finally got fast enough to feel usable again, and also turned CS universities into manufactures of talentless line pissers.
Re: James Gosling, fuck yeah (Score:1)
I agree, JavaScript has been much worse for our industry than Java ever was. At least Java has some basis in proper programming language design. JavaScript, on the other hand, is an inherently flawed and broken language on so many ways. Java made us more productive; JavaScript made us less productive.
Re: James Gosling, fuck yeah (Score:5, Interesting)
I agree, JavaScript has been much worse for our industry than Java ever was. At least Java has some basis in proper programming language design. JavaScript, on the other hand, is an inherently flawed and broken language on so many ways. Java made us more productive; JavaScript made us less productive.
For those of you not old enough to remember the software industry before Java, you have no idea how much of a breath of fresh air Java was at the time. Before Java, C++ (without smart references), C, or Perl were the dominate way to write most software. The reason Java became so popular so quickly was that it allowed you to be so much more productive for most tasks than how you had to do it pre Java. Searching for weird memory errors which was the most common and time consuming part of debugging instantly became something you almost never had to do. The difference in the clearness of the code, the portability (which wasn't perfect but was 100x better than before), and better tools for avoiding dependency hell were so apparent and game changing that unless you lived through it, you can't possibly understand the magnitude of the impact it had. Even to this day, the JVM (and hotspot) are still the best trade-off between speed and coding productivity.
That being said, Java is very much a victim of its own success. It allowed for larger teams of programmers to be productive and with larger groups of humans comes bureaucracy which most programmers very much hate. Overly complex designs supporting the inner platform effect became the norm as teams grew larger. Mostly because the mangers had no idea how to code and the engineers want to build the most impressive design they can instead of the simplest design that accomplishes their goal. Plus, all the FP folks were very much left out in the cold by Java. But that's not Java's fault, FP had lost to OO years before Java was created and Java was just continuing that. When I hear programmers hating on Java the way the GP does, it says more about them as a human being than Java. I understand the loathing of bureaucracy and have seen my fair share of enterprise architects who couldn't code their way out of a wet paper sack but you are still putting politics and fashion above basic engineering. The JVM might not be the best platform for your specific problem or domain of programming but it is still the best platform for most projects. Until an interpreted language's performance can come even close to the JVM, you can't say one of those languages is better for general purpose coding than one of the JVM languages. And until C++ has the same level of maintainability as Java and the same level of modern libraries and dependency tools as you can find in the maven repos you can't say that's better for most applications either. So you are basically saying that you put fashion and culture ahead of basic engineering. But the rest of your teammates might not be so ideologically minded and just want to use the right tool for the job. We want to do this because to do anything else makes us have to do more work and perform (and look) worse. Perhaps keep that in mind when spouting your ideological issues with Java.
Re: (Score:2)
Mostly because the mangers had no idea how to code
Yes, the mythical man month is ignored, and management wants to 'speed things up' by piling on more people. Then gets upset if they don't see everyone utilized so they pressure teams to hoplessly delegate to the nth degree. The work of trying to bring together the effort of a team of 100 developers for a relatively small project dwarfs the effort of actually doing the work.
Until an interpreted language's performance can come even close to the JVM, you can't say one of those languages is better for general purpose coding than one of the JVM languages
I would say this ignores the arrival of Go and Rust, that also both address some of the biggest tedium that plagues C and incurs risk
Re: (Score:2)
Until an interpreted language's performance can come even close to the JVM, you can't say one of those languages is better for general purpose coding than one of the JVM languages
I would say this ignores the arrival of Go and Rust, that also both address some of the biggest tedium that plagues C and incurs risk of memory mismanagement, but without as expensive of a runtime. It also presumes the only metric is how fast code runs in production and/or that performance is solely the result of the the implementation performance and not making faster algorithms easier to implement by mere mortals. High performance applications are frequently some interpreted language serving as orchestration of high performance code, usually still written in C, and the speed of the developer to connect those building blocks trumps the trivial gains that could be had from a better optimization of the very little code they actually write.
You have a point about performance. Those languages still suffer from a smaller set of libraries but they do have potential. It would be interesting to see more drivers written in Rust. It would be nice for Scala to improve the quality of their compiler (on the JVM side). But all of these are issues of development resources. With so many languages competing its difficult for any one language to have enough developers to real support a stable, general purpose coding platform. I could be wrong but some
Re: (Score:3)
You forget:
* multithreading
* class libraries for
- networking (including APIs for mail, web etc.)
- file system
- gui (AWT was probably a bad idea, but everyone (except the haters) love Swing, and now JavaFX)
- string manipulation
- database access
- and many more
* reflection
* serialization
Re: (Score:2)
Wow, no language ever had that functionality before! /sarcasm
Re: (Score:2)
The problem with write once one anywhere is that the APIs have to be lowest common denominator. The java threading functionality for example is severely limited compared to posix pthreads. Ditto the GUI APIs compared to native win32, OpenGL or various X windows libraries.
Re: (Score:2)
The java threading functionality for example is severely limited compared to posix pthreads.
No idea.
pthreads are used via a library. Neither C nor C++ has build in MT support.
In old Java you had language feature to use MZ (synchronized keyword). BIG DIFFERENCE.
Modern Java has an excellent MT library, I doubt pthreads comes in anyway close.
Re: (Score:2)
Re: (Score:2)
"Neither C nor C++ has build in MT support."
C++ does now, but so what anyway? Whether its built in or used via a library is irrelevant - its the ultimate functionality that matters.
Re: (Score:2)
Ditto the GUI APIs compared to native win32, OpenGL or various X windows libraries.
No idea to what you refer, while AWT had its drawbacks, Swing and now JavaFX are excellent GUI libraries. win32 never had one (unless you count Zapp and Qt).
Visual C++ (Score:5, Insightful)
Java was Sun's effort to fight off Microsoft's domination of software development with Visual C++
The effort was fairly successful, partly because C++ at the time was a real stinker of a language, Ada had already failed, and because Sun threw all the resources it had available into making it succeed. It wasn't enough to keep Sun afloat though.
Re: (Score:2)
"Plus, all the FP folks were very much left out in the cold by Java. But that's not Java's fault, FP had lost to OO years before Java was created and Java was just continuing that."
You mean Haskell etc? Can you elaborate on how or why FP had lost to OO well before Java? Thanks.
I mean LISP. LISP was very popular in the 70s and competed with C until the mid 80's or so. Famously some FP advocate said, "Programmers love a challenge" (or something like that) and LISP code wasn't very maintainable and it was harder to coordinate larger teams when using LISP. C won in a rout. I suppose that C is procedural and not OO but OO replaced procedural very quickly afterwards so its wasn't a necessary distinction to make. FP was relegated to mostly only AI usages for several decades. This
Re: (Score:2)
turned CS universities into manufactures of talentless line pissers.
Nope, that would be the effect of people deciding that programmer was a relatively way to get ta a six-figure salary. The resultant gold rush combined with the happy accident that Java has been the language of choice for CS curriculum when the rush hit has to some extent unfairly made Java look worse.
I'm not a fan of Java, but the vast majority of end-user problems would have come from any language in Java's position given the circumstances.
Apalachin Meeting (Score:2)
https://en.wikipedia.org/wiki/... [wikipedia.org]
I think a better metaphor is the infamous meeting of top-level organized crime bosses. The fictional version of this event in The Godfather was the negotiation of a peace treaty among warring crime "families"? Putting the word "organized" back into organized crime?
Here, the computer-language bosses got together to say nice things and complete each other's sentences?
Re:Id love to love perl (Score:5, Interesting)
There being more than one way to do it means you can do it right, too.
#
Not putting python down, though I don't like the whitespace syntax issue one bit. It's just that the easier you make a language, and the more freshly popular it becomes (like python...there are other examples of course) - the more code you get from beginners who inevitably make beginner mistakes - like using a micro sleep vs checking a busy bit, not knowing how to wait on a done condition without tying up the entire computer etc. That's not really python's fault, but when you start hanging stuff on raspberry pies, for example, you run into the fact that python compiled into perl runs faster than natively and things crash...which I find at least somewhat funny. I'm not convinced that there is a way to fix the "monkey coder" issue with a language...we'll have to address that some other way.
#
The problem with duck typing of course is that no two languages do it identically. This means that it's way non-trivial to translate some odd bit fiddling someone did in python to use a sensor into any other language...it's easier to find it somewhere in C to translate from or go from scratch than to learn the little quirks of every language's internal typing on demand.
There's 2c you didn't pay for, and you gets what you pay for.
Re: (Score:3)
Re:python doing a typescript? (Score:4, Interesting)
Fortran 90 discarded whitespace significance. Guido brought that monster back to life.
Re: (Score:2)
ummmm yeah. worked fine for me until I tried to port it between platforms and/or editors. Then I had to continually clean shit up. Nope, a big step backwards.
Re: (Score:2)
When I first heard about Python and its significant whitespace, it indeed reminded me of the horrors of Fortran 77's fixed-column layout. It's what kept me, initially, from taking a better look at it.
But after a while I did take a better look at Python and the way whitespace works there, and let me tell you: it has absolutely nothing to do with Fortran 77's fixed-column layout. Well-written code in C/C++/Java/Perl/C#/JavaScript/Pascal/... is already indented to show the code structure. Add a tiny bit more d
Re: (Score:3)
That's the point. In those other languages you can structure it so it is readable without affecting anything. Markers clearly show the logical structure of the code. I think you are suffering from Stockholm Syndrome.
Re: (Score:2)
Just start by telling yourself it's OK to enjoy being able to use bazillions of lines of really poorly written code to get the job done quickly without actually thinking the language was any better designed than Visual Basic.
Re: (Score:3)
Fortran 90 still has a level of whitespace significance, as it uses line breaks in place of C-style semicolon. It also uses the end statement instead of C's { and }. IMHO, it strikes a great balance between Python and C styles: it avoids the line noise of extraneous punctuation, while also avoiding indentation issues.
Julia is the only modern language I know that has adopted this format, presumably as it aims to be the modern replacement for Fortran.
What?! (Score:2)
No Admiral Grace Hopper?
I know. She's dead. But that's not stopping Ruth Bader Ginsburg from showing up for work.
JK Rowling? (Score:2)
I'm sorry, but comparing the design of a software language to the "design" of Harry Potter is a poor comparison. The Harry Potter books, from an overall plot and design perspective, are not written very well. The magic / magical devices that are introduced as the series progresses would have been extremely useful for resolving the plots in earlier books, and vice versa. For example, the ability to perform time travel is introduced a few books in, but then that can of worms had to be done away with so tha
Re: (Score:2)
I could go on an on giving examples of things and people invented out of thin air that were never even alluded to that are suddenly important (and should have been important in the previous books too) that were then forgotten about.
Yep. Maybe he meant to say that Harry Potter is like JavaScript in the days when Microsoft would just add whatever they felt like to it in order to make the web only compatible with IE while making JS about as inconsistent and tedious as possible. Of course it does seem that much of what they did contributed positively in the long run--I don't dispute that possibility--but it does seem somewhat emblematic of something constructed piecemeal in order to move a plot along rather than something thoroughly desig
Re: (Score:2)
JK Rowling as a language developer (Score:2)
And your point about the combination of bolted-on, deprecated and defect-prone wizardry features in the Harry Potter novels in relation to computer languages is what, again?
DOn't know why, but... (Score:2)
Re: (Score:2)
Java? Because C++ is a legitimately fucking hard language to master, and performance isn't everything.
Perl? Because Larry Wall wanted to empower muggles to do wizardry. That and he wanted to build a language that had the power to be expressive and elegant.
Typescript? Because JavaScript was being used in projects large enough that it was getting in its own way without declarative structure.