Programming language authors really need to learn how to make a website. Look at Ruby's: http://www.ruby-lang.org/en/
No long explanations about what it means for Ruby to be a dynamic, object-oriented language. I don't have to read its author's paper or book to get it. Just a short code snippet to show me what it looks like and several links so I can learn more.
Only a small number of the language websites listed on the emerging langs camp site have any code on them, and that includes those with maybe just a couple of lines for an edge case scenario.
I guess a bunch of those languages are highly academic and the meat is in the implementation as opposed to the syntax. But language developers need to start putting some effort into the non-code parts of their projects. I'm not going to get inspired to pick up a new language by bullet points. At the same time, I'm working on my own language project so I know it can be challenging to use just the right code to give the best first impression.
Although true, many of those authors are too busy with improving/fixing their compilers.
E.g. the D language doesn't have a very modern looking website atm., but someone has took the task to update it recently. It's not up yet since the community is trying it out.
Multi-multi paradigm language, includes constraint based programming.
Some of them are not necessarily up-and-coming but rather out-and-going. Oz is interesting, but it seems to be dying. Some like Reia are making slow progress. Curry is more of an academic language. io is probably the most up-and-coming so to speak.
Cobra (http://cobra-language.com/), a python derivative that also an up and coming language. Love the syntax refinements, the built in unit-testing, contracts, etc... all around a great language.
Reia is currently my wet dream language, similar to Ruby, and does concurrency(buit on top of BEAM for Christs sakes). And then you read the small print and learn that it's not available as a download. :<
In that list, Clojure is the language that excites me the most. It's a modern, pragmatic Lisp ready for the multiprocessor world. You can do a lot worse than trying it out if you haven't already.
Lot of people claim that STM in Clojure is the big reason to use it. To me it's been a lot simpler:
a) I want some macros to use for JVM-based projects
b) I like using Emacs + SLIME (it's the best development environment, period).
Unfortunately the noise of Rails fanboys migrating to it with their usual laundry list of complaints ("no IDE support", "no good web framework") is annoying. I have nothing against Ruby in general (in fact I really like the language) and Rails in specific (I know people who love it), but the whole reduction of programming languages to merely web frameworks is a setback for software engineering. That mindset has now been spreading: not only is it impossible to hear about Ruby without "Rails" mentioned next to it, it's now common to hear "Python/Django" and "Scala/Lift".
Web is just a UI layer, a fairly mundane and boring part of an application. Lisp has very little to show for these sorts of applications, but has a lot to show for more science/engineering intensive ones. You hear all the time about webapps being re-written into PHP and other blub languages, but the community is interpreting it as a setback for the languages (and an argument in favour of using blub from the start) rather than the fact that advanced language features make really little difference for web development.
Are "Rails fanboys" really complaining about lack of IDE support? I was under the impression that IDEs weren't especially popular among Rails programmers (as compared to Vim and TextMate).
Yeah, I should probably have been less vitriolic and more refined. The IDE complaints mostly come from Java migrants and people who are looking out for the newbies. Honestly, using an IDE (or at the other extreme, vi) for a Lisp is like using Latin to write in Russian: you can do it, but you're better off if you take some time initially to learn Cyrillics.
(Doug Hoyte disagrees with me on the vi point, arguing in his book that Lisp is expressive enough not to require any editor support. I respectfully disagree.)
I don't think strlen is being accurate by saying its "Ruby fanboys" who are the source of a lot of criticism. Clojure does have a lot of former Java developers who aren't used to non-IDE development on the JVM. Others don't like the apparent complexity Emacs comes with (Emacs, Slime, Swank, Paredit? All I want to do is enter some ascii characters and run a compiler!) That said, I think Clojure is improving in those fronts with broader editor support, guides to getting Emacs set up, and a growing list of libraries.
I think there's at least one clojure plug-in for each of the main Java IDEs:
Enclojure (NetBeans)
Counterclockwise (Eclipse)
La Clojure (JetBrains)
The other thing that has really improved immensely is "project management" (right term?) provided by Leiningen. Now you can basically do "lein new proj_name", then edit a simple config file in the created directory and do "lein deps" to get all the packages that you referenced.
Plus "lein swank," which once you've got slime set up is an absolute godsend. The two things I do first on a new machine are install clbuild to get slime and the emacs config, then leiningen to get clojure working. It does make things nice and simple.
I was playing with Clojure this last weekend, and so far have enjoyed it. I ran through a dozen or so project euler problems, but am now looking for something that takes longer than 10 lines of code to complete.
HN, what other projects do you do to familiarize yourself with a new language?
Write a game. ASCII Tetris or Pac Man or Space Invaders would be fine. Whether that is a simple afternoon activity or a somewhat epic undertaking might tell you something about the language.
I've been writing a couple of small games with Clojure + Swing as a way of learning Clojure, and it's been very smooth so far. I haven't even touched concurrency or macros yet but the basic language feels even more consistent and logical than Ruby.
Rob Pike and Robert Griesemer – Go
Steve Dekorte – Io
Charles Nutter – Duby
Matt MacLaurin – Kodu
Gilad Bracha – Newspeak
Jeremy Ashkenas – CoffeeScript
Adam Chlipala – Ur
Francisco Tolmasky – Objective-J
Jonathan Shapiro – BitC
Luke Hoban – F#
Tav – PyPy
Rich Hickey – Clojure
Christopher Bertels – Fancy
Jonathan Edwards – Coherence/Subtext
Alex Eagle – Noop
Slava Pestov – Factor
Erik Meijer – C#
Mark S Miller – E, Caja
Brian Rice – Slate
Walter Bright – D
Wolfgang De Meuter and Tom Van Cutsem – AmbientTalk
Phil Mercurio – Thyrd
Melvin Smith – Cola
Carson Gross – Gosu
Alexander Fritze – Stratified JavaScript
Alan Eliasen – Frink
Dan Bornstein – Dalvik
Steve Folta – Trylon
Ola Bini – Ioke
Amos Wenger - ooc
The dynamic/compiled distinction needs to go away. Combine a simple syntax with very rapid compilation with LLVM, Type Inference, and very advanced emulator-based debugging, and there would be no need to have anything like Smalltalk/Perl/Python/Ruby any more. Instead of dynamic Duck Typing, you'd have Go's version, with auto-magic help from type inference. The emulator-based debugger could subsume many of the capabilities granted by a VM and enable the freewheeling runtime monkey-patching that can be leveraged for the same jaw-dropping ingenious debugging available in many current dynamic langs. This last component would be the hardest to implement.
(Cue the Haskell guys so they can point out how they're most of the way there already.)
Pretty much the same with Smalltalk, but people still make this distinction in their minds. That's part of my point. The distinction no longer even has so much basis in the actual organization of code and runtimes!
Concurrency should really be the number one issue for any new programming language. To my knowledge, none of the popular languages out there today are really able to handle concurrency in a seamless way which doesn't generate headaches for the developer. Distributing computation over threads and machines needs to be easier.
I found Kodu very interesting. It's a graphical programming language by Microsoft Labs, that allows kids to create games. It runs on the XBox and uses only the XBox controller.
The XBox part turned me off right away, because that's the last thing I need in my house while we're homeschooling our children, however, I found a free academic version that runs on the PC: http://fuse.microsoft.com/projects-kodu.html
Out of curiosity, why would having an XBox in your home be a problem? I was homeschooled (though only in high school) with several consoles in our house, and it doesn't seem to have been a problem. I wasn't allowed to goof off school time on video games any more than I could have played my Game Boy in a public school classroom.
edit:
I suppose a more clear question would be: What is it specific to homeschooling that you don't like about the XBox? Or am I reading too much into your comment?
I'm trying to avoid constructing the school-time/video-game-time dichotomy because to do so would just mean I was a missionary for consumerism. Think about it: Why should I reinforce to my children, from an early age, that videos and such are fun and learning is not fun; consuming entertainment is what you want to do, and productive work is what you don't want to do, but rather have to do so you then can consume entertainment. That's just the type of people who the captains of industry hope I will introduce into the world: people who will obediently go work for them, only to turn around and consume their products.
Maybe I misunderstand, but surely Kodu is a fantastic advert for your ideas, and you should be welcoming it? Here's a fun thing to do that is learning and on a platform with which your kids' friends will be familiar.
I can understand that the balance between Halo 3 app types and Kodu app types is the wrong way around from your perspective, but the XBox does make it fairly cheap and simple to understand how the games are written and provides you with the chance to show your kids how the magic tricks are done, so to speak. I'd have thought that was a good thing :-)
Kudos on educating your kids on what you think is important though; I think it's great when people really think through education and put a lot of effort into it.
"Why should I reinforce to my children, from an early age, that videos and such are fun and learning is not fun; ..."
That's my question. By banning something with an iron fist, that is exactly the lesson you are teaching. You are putting video games into the same category as drain opener and power tools.
The lesson needed is that there is a time and place for everything, and that deliberate control and planning of activity is valuable. Self-control is learned by practice, not by having a helicopter parent prevent the opportunity to make the choice.
And anyway, planning and self-control are mainly driven by the maturation schedule of the brain. Before age 11 or so (in Caucasians), the frontal lobes simply are not active enough to accept much logic. After that age, the ability to plan and focus concentration develops almost automatically. (One school even did an experiment where math was not taught until that age. There did not appear to be significant bad effects.)
"These days, media is designed to be sticky and most media is driven by advertisements, ..."
You have confused cause with effect. Most content is appealing because people who make unappealing content go broke and stop making it. Survivor bias means that those who sing for their supper have a tendency to create content based on emotional appeal rather than abstract notions of value, and this is equally true for textbook authors, architects, and medieval bards.
Hey thanks for your comments. I though of the backlash that comes from denying something, as you say, with an iron fist. I intend to shape a culture in my home by addition of a bunch of activities which I feel will be beneficial, rather than simply subtracting video games and such.
As to me confusing cause with effect, I though of that too, and I think that the purveyors of media entertainment aren't simply providing what people want. Why do your crops die on Farmville if you don't log in for a few days? Is that what users want, for their crops to die?
I have a suspicion that "screen time" whether it be TV, videos or games, has a detrimental affect on: attention span, tranquility and susceptibility to advertisements and psychological mass-manipulation in general.
I suspect it matters very much what is on that screen. Music videos and action movies are practically designed for people with ADHD. Many video games are the same way.
On the other hand, there are some high quality documentaries and prerecorded college lecturers will not hav ethe issues you describe and as an avid (though very bad) GO player I personally feel that there is very little difference between playing on a screen and playing in front of a board.
Let's stop throwing around the word ADHD. It encourages people who just don't have the discipline to focus to give themselves an excuse, while lessening the perception of the problems for people who are actually debilitated by it.
There's no media-driven conspiracy to alter your mind. There has been an evolutionary trend to favor the animal who could quickly notice the approaching bear versus the animal too intent on its task. Conversely, human evolution has needed intense concentration to drive innovation in things like tool development, construction, and art.
There's media that caters to both. WIth action-packed movies and games thriving on quick attention-shifting, and grinding-based MMO's relying on the ability of players to do repetitive tasks for hours on end.
One could give the same attention-reducing arguments against books and for oral stories. That said, you shouldn't just make a blanket statement against all screen media. Teach your kids how to discriminate between what's good for them and what's not.
"There's no media-driven conspiracy to alter your mind."
I think that's wrong. Forget whether it's a conspiracy or not; many things are effective conspiracies. These days, media is designed to be sticky and most media is driven by advertisements, the goal of which are to make you think you're not good enough unless you buy certian things.
Video is a think pipe directly into your brain, and I believe there is evidence to suggest that "screen time" does alter the way your mind functions.
Meanwhile, back in reality, my wife complains when I ask her to mute the booming commercials in the latest USA Network cop show.
Sadly, legislators are not specialized enough to grasp the notions of loudness and compression in commercials so they could be legislated out of existence.
I don't know how you're using the word "concentration" here, but playing an FPS (for example) usually demands that you pay attention to something new every few seconds, and definitely does not encourage lengthy focus or sustained thought. I think tends to be even more true for console games than games in general.
In any case, I doubt it's so much that video games are detrimental and more that you ought to have a hobby which actively cultivates concentration.
Maybe something like UT or CS, where it's all over in 3 minutes, that's true.
I remember being a kid and playing games like Tomb Raider where you would have to really think and work hard to unlock puzzles. Even games that offered you the opportunity to just fly through them usually had some form of deeper gameplay. For instance, SF Rush was all about things flashing by really fast, but the real challenge was to collect all the keys in the game, which often required a lot of innovative thinking about finding things to jump off.
The main difference here is between action and puzzle games. I personally disliked the pure puzzles because they felt too restrictive. Large-scale strategy games like simcity were a better fit for me. The same pattern shows up in my coding. I really don't like simple puzzles, but love challenges where I feel like I'm building something, not just solving it.
You know, that's a pretty good point. Most console games have some "completionist" aspects that usually encourage some degree of cleverness and persistence, if nothing else. I know that I always enjoyed that aspect when I was a kid, although I don't know if it's the prevailing mindset.
I hate to be critical, but I really wish programming languages would show code samples more prominently. I like how factor does it: http://factorcode.org/
Don't downvote him. He is absolutely right. The picture on that page is a major WTF and it doesn't offer a great first impression to the visitor interested in the language.
You just made me look at that page. I was about to email it to a friend when I realized that newspeak's real home page doesn't have any dead chicken pictures:
http://newspeaklanguage.org/
I'm genuinely curious: what advantage accrues to a programming language designed for concurrency that you can't get with a good concurrency library for an existing language?
Syntactic support, immutability semantics, and compile-time limitations on side-effects.
Of course, it's POSSIBLE to do everything with a library + discipline. For example, I can import the Clojure jar and use Clojure's data structures and STM in a Java program. But it is _very_ verbose, and you have to know that certain variables are immutable, or that certain operations are illegal in certain places, etc, rather than having that information encoded into the language.
Safety. You can do anything in C, but the language/compiler can't help you at all. So languages with support for a feature can help you perform that task more easily and catch some errors for you. That applies to GC, concurrency, distribution, failure handling, and on and on.
Not much, really, the benefits of intrinsic support for concurrency in languages are very overhyped.
Java is a great illustration: it has syntactically close to no support for concurrency (synchronized, pretty much) but it has been able to keep up with today's concurrency challenges by the simple virtue of its libraries (java.util.concurrent is very, very powerful) and ingenuity of its developers.
The amount of concurrent Java that powers major web sites and other places that we don't even know of is simply staggering.
Clojure and D are the two languages of the newer wave that I'm most likely to end up using. They each have a combination of elegance and practicality which are pretty rare among new languages I think.
No long explanations about what it means for Ruby to be a dynamic, object-oriented language. I don't have to read its author's paper or book to get it. Just a short code snippet to show me what it looks like and several links so I can learn more.