A Brief History of Programming Languages?
Aviancer asks: "French computer historian Éric Lévénez has compiled a family tree of programming languages that I found quite interesting. This prompted me to wonder if there was any controversy on the issue of language lineage and my searches found another page on the same topic. I thought I'd pull an 'ask the audience' to see if there were any corrections on either (both?) pages to be made." What other computing language origins are you aware of that may not be mentioned in either page?
It is (a) percursor to object-oriented languages such as Smalltalk and C++, and was the first strongly-typed language (Python being the most recent.)
Try not. Do or do not, there is no try.
-- Dr. Spock, stardate 2822-3.
Might have been updated lately, though. Always interesting, though. There's one for UNIX, too.
"These people look deep within my soul and assign me a number based on the order in which I joined" --Homer re:
here, maybe?
Where's the equal time for creationism? I don't believe in this "evolution" stuff. I think God created .NET (cough, cough) and then rested on the seventh day.
And it was good.
Then, root created 1.
And that, too, was good.
Then, root created assembly.
And that totally rocked.
Then root created HCF.
And it was very, very bad.
Obliteracy: Words with explosions
I don't see INTERCAL on there anywhere. Of course since it was written to be different from all existing languages, it can be kinda hard to fit in a language tree.
The most significant programming language of them all is not even listed.
They have transparantly missed out BBC BASIC. A BASIC language, which included some of the better programming constructs of Pascal.
Half of the UK's current programmers cut their teeth on the BBC Micro/Archimedes BASIC implementations.
I learned to program with GWBasic, QBasic, TurboPascal, Modula-3 - none of which made it into the chart...
Oh maybe that's why they called it a "Brief History".
An Indian-American Hindu committed to non-violent thought/speech/action alarmed by the global explosion of radical Islam
They misspelled:
The Devil -> Fortran I
I think they forgot Movie++, which of course, runs on MovieOS. It's a great programming language, you navigate classes and objects in full blown 3d floating experiences!
Every video can be programmed to zoom up until you can see microscopic particles WITHOUT any loss of resolution!
My personal favorite is when hackers run virus attacks against giant "Gibson" computers. See, you just don't get a BSOD, you get an awesome 3d graphic eating your desktop!
IGB: More fun than eating oatmeal!
Look harder.
Nice... but is it really neccessary to list tiny little update releases for current languages? And what precisely "defines" a language here-- should we treat SML/NJ as a different language than SML, because it supports continuations? Or current GHC as something other than Haskell98 because of its rank-n polymorphism and built-in support for arbitrary Arrows? And if drafts are in there (Fortran 2000), what about other drafts (ML 2000)?
And, finally, where's Scala (http://scala.epfl.ch/) on that graph?
Assembly Coders - these are extinct group of primitive form of life
before the advent of culture and civilisation, althought without access
to any formal human-recognizable language structure they were amazingly
versatile in their skills to construct reality by pushing and popping strings of
little pebbles from holes dug in the ground. Ancient arcade machines
sometimes found in desolate pubs testify to their once glorious existance.
C - C Programmers are more like highly evolved alien beings from outer space
who spoke purely in binary and pointers. They often take the disguise as
unsightly middle aged man with beard and glasses amongst earthlings.
They do not care for the artifacts of language or culture, they only care
for the semantics. Their job is to construct and engineer the roads,
the transportation, the network lines, the infrasture that our civilazation
have come to depend very much on. They are very hard to communicate with as
intepreting their language requires unusually greater IQ than most of
our earthlings can aspire to.
C++ - C++ Programmers are born again C programmers who realised their
folly of seeing the world in pure binary and pointers. They want to see
reality more concretely thus they talk in objects and classes.
More often than not, C++ Programmers are still attached to their
old ways and their attempts to communicate with others often result
in abstrated hodgepodge just as complicated as the C
language. Most C++ Programmers feel they may have had a
deprived childhood.
Java - Java Programmers are like C++ programmers except they were
brought up in aristrocat families. Their manners in their language
are refined and elegant althought at times may appear slightly
pretentious and artificial. They are very socially closed and
mix with their own kind only, basically they dont like outsiders
playing in their upper-middle class private school sandbox.
Being economically previliged means they have ample access to inheritance
like network libraries, etc. Although their reputation is good amongst
corporate circles, they are rumoured to be impotent when it comes to GUI.
Visual Basic - Visual Basic programmers are perceived to be like your
every day a dime a dozen computer science graduates. They
are naive, confident and sometimes a little brash in their perceived
ability to deal with the real world. Their language developed from high school
jargons and street slang though highly vulgar in the eyes of other programmers,
were often effective (or adequate) in solving a lot of every day
ordinary kitchen and sink problems. Often the case, a job completed
by a Visual Basic programmer, thought cheap and fast leaves little to be desired,
tales of half patched pipes leaking from under kitchen sink are
well known in the industry.
C# - C# Programmers are Java programmers wannabes wanting to achieve the same
social status and previledge that Java programmers have, C# programmers
lacks the authentic social grace and ethics that could help them rise above the
Visual Basic suburbia coarse mentality that tends to predominate them. C# Programmers
also tends to like screen widgets that are glitzy. They are the type of people
that the marketing department love to target in their product focus group.
COBOL - Cobol Programmers are not really people, they were actually mutated
from hole-punch card readers. they have no human affectations
and thus are very capable of churning out millions of incredibly mundane and
humanly degrading pages and pages of printed accounts reconciliation codes.
although they were disbanded by the human rights organisation, Cobol
programmers were actively recruited just before the millineum to solve the Y2k bug
which they were originally responsible for.
Fabled Programmers - the are many species of programmers that claim
to exist but no one have ever met any of these illusive creatures in
Really
;)
"It is a greater offense to steal men's labor, than their clothes"
Python is a strongly typed language. It is in the class of strongly- and dynamically-typed languages. Read this article on Python's type system for a good overview and a little information on "type" terminology.
the growth in cynicism and rebellion has not been without cause
Same site
"These people look deep within my soul and assign me a number based on the order in which I joined" --Homer re:
I've had the O'Reilly poster on my wall since they released it. So when I saw the graphic on this guy's site, with a January 16, 2005 copyright, and no reference of O'Reilly's poster, I thought it smelled fishy.
g _lang_pos ter.pdfh tml#02
Just take a look at the two images:
http://www.oreilly.com/news/graphics/pro
vs
http://www.levenez.com/lang/history.
and tell me you don't see the similarities.
Anyway, so I thought this guy ripped off O'Reilly's poster, but, as it turns out, if you look in the small print on O'Reilly's poster, you'll see that he was the legitimate creator of the image. I even realized that it's been updated a little bit since O'Reilly released it.
So, yeah, we've seen this story before, however, the link provided in the summary above is new and newsworthy, becuase it gives more links to learn about each individual and family of languages and updated the previous graph.
She loves me: 09F911029D74E35BD84156C5635688C0 She loves me not: 09F911029D74E35BD84156C5635688BF
Dynamic vs. static (or runtime vs. compiletime) and strong vs. weak. Dynamic/static typing is determined by when the type requirements are detected and enforced. C is statically typed - there's no runtime manipulation (or even concept of) types at all. C++ is mostly statically typed but has some runtime typing capabilities. Java is largely statically typed but also checks types at runtime. Python is entirely dynamically typed.
Strong vs. weak affects what kind of type operations are allowed. Typeless (or single-type) languages like TCL are the weakest type, because they allow any operation on any type. Perl has multiple types but does lots of implicit conversions, making it weakly typed. Python performs very few implicit conversions (mostly between different representations of float) and therefore is strongly typed. Pascal doesn't even allow type conversion between pointers or different sizes of arrays and is therefore *really* strongly typed.
There's also some other characteristics of typing, like whether it's class based (C++), does or does not allow user defined types, distinction between UDTs and primitive types, Objects vs primitives, duck typing, etc.
...though I feel you are rather lucky having the last entry fall off the edge of the post and thus reduce significantly the flameage you may get.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
For those, like me, who have no idea what this guy is talking about, see this.
Sadly, my university moved away from teaching Pascal (at 100-level) in 2000 and started teaching Java instead. Has caused headaches for the teaching staff and tutors ever since ever since:
And here I was thinking it was just the students getting dummer...
Fortran is always shown as having come from a vacuum, but surely it was inspired by the various "Autocode" languages, of which "Mercury Autocode" is the most famous. (Note: this was all before my time.)
:= ("x", 42);
Smalltalk is derived from Alan Kay's earlier language, Flex, which in turn stole heavily from Euler (Kay confirms this), which was the language Wirth designed before he did Pascal.
Euler was an early example of a dynamically typed, garbage collected language with an algol-like syntax. Now we have python, javascript, and so on.
Python is heavily based on ABC.
Euler must have been a primary influence on Setl, which in turn influenced other languages. Setl was a dynamically typed, garbage collected language with an algol-ish syntax, with arrays (called tuples) and sets as first class values. The List comprehensions of Haskell (and more recently Python) come from Setl. Setl is the first language I know to have the 'slice' notation for extracting subranges from a list:
list(i:j)
list(i:)
Although, i was 1 based, not 0 based, and j was a length, not an index. This slice notation was picked up by Icon, which changed j from a length to an index, and introduced negative indexes. From Icon, slice notation migrated into Python, presumably via ABC (I have no ABC documentation to check), where indexing changed from 1 based to 0 based.
The type names in C all seem to come from Algol 68. They couldn't have come from B or BCPL, which do not have types. Examples of C/Algol 68 type names include "int", "char", "long int" and "void", as well as "struct". This is C:
struct {char c; int x;} s = {'x', 42};
This is Algol 68:
struct (char c, int x) s
Algol 68 has a +:= operator, but I think that comes from C. This is speculation, based on the observation that C's += operator was originally spelled =+, then changed due to the ambiguity of parsing x=+y.
The second link shows Javascript decended from Java, which is surely wrong. Javascript was developed with no knowledge of Java. It was originally called LiveScript, then changed to Javascript for marketing reasons. I'm pretty sure that Javascript/Livescript got its object system from Self, the first prototype-based object oriented language. Self descends from Smalltalk.
I have written a truly remarkable program which this sig is too small to contain.
Pascal is dead. Object Pascal with various other extensions lives on. It's called Delphi.
What do schools use now as the teaching language? Surely not C. I have nothing against it but it isn't for beginners.
They use Java. Or maybe soon C#
Plankalkül was developed in the first half of the 1940ies by Konrad Zuse.
Wikipedia has(as usual) for more information.
Maybe it's just me, but I think C is a excellent language for beginners. The year after I finished undergrad (about 3 years ago now, so not too long out) they started using Java as the first language you learn, and I personally think it's a terrible mistake. Now, I am in no way saying I'm some superb programmer, but I definitely think I know my stuff more that the students coming after me who began their base of knowledge with Java.
Don't get me wrong, it can be a tough one to start out with, especially if you've never programmed before. But the learning curve is steep, and in the end you come out with a much better understanding of very crucial stuff; data manipulation, memory, pointers, bits/bytes, and simply when the heck is going on internally with a program, because of everything C lets you muck with (and true, perhaps screw up). And so maybe it's just due to my personal experience, but learning Java after drove me nuts. I just felt like there was whole additional level of abstraction because of all the stuff that I feel java does/hides for you. Not to mention that I think Java came easier, having the more low-level (admittedly not super-low) understanding that C gives you.
Anyway, I'll come down off my soapbox now...
4 out of 3 people have trouble with fractions
It's true on both time and causality.
Alan says so himself here
Read more of this story at Slashdot.Read more of this story at Slashdot.Read more of this story at Slashdot.
There is no line from SCO unixware to linux
Common Lisp is strongly, dynamically typed. It has been for a long time. There are, of course, other language attributes than strength and time of datatyping, but those are what you're talking about.
Common Lisp is also object-oriented and beats every other language I know in that arena.
On top of that, with a good Lisp compiler (such as SBCL, CMUCL, or even GNU Clisp, just to name a few free compilers), it is as fast as any other language, even statically typed languages such as C; but particularly faster than other dynamically typed languages.
Currently still being developed and used globally, with at least 750,000 + users all around the world.
Currently offered by multiple vendors, runs on all Unix, Linux, M$ systems, except maybe on the 'big iron' IBM boxes. Current vendors with products that are supported are Thoroughbred, Basis, and Providex.
BZZZZZZT. Wrong. C is an awful language for beginners, just as BASIC, FORTRAN, APL, ALGOL60, and so forth were, and Java, Pascal, and so forth continue to be because it is mired in syntax.
Software Engineering has absolutely nothing to do with syntax. Nothing. Would you ever consider that philosophy is the study of spelling? No, so why would you think that forcing a naive user to stumble hither and yon against arcane syntax is a good way of teaching programming concepts? You want to start --START-- with a language that has incredibly simple syntax. Like Lisp, Scheme, and the like. Then you can spend time worrying about things like data structures, lexical and dynamic scoping, control structures, etc. Once these fundamental notions are understood, then you can spend time with syntax.
Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
LISP is an awful language to learn as a first language, not because of it's syntax (which is bad enough) but...
BECAUSE IT USES A COMPLETELY DIFFERENT THEORY OF COMPUTABILITY THAN EVERYTHING ELSE.
Most other languages use turing machines as their basic computability theory.
LISP uses micro recursive functions
Each is as strong as the other - but involved radically different thought processes.