After having explored "new technologies" since my graduation in 99, I paused myself and has started moving back in time, discovering things like Lisp, Smalltalk, vim and bash. I picked up Python and rediscovered a beauty of a simple text file without XML garbage. All of that feels very "fresh" to me after years with COM-ActiveX/Win32/XML/XSLT/XPath/.NET and other "ex-new" tech.
Besides, what is "new"? MVC has been something of revelation to most web "engineers".
In fact (or maybe it comes with age) I started to dislike new stuff, like Flash/Flex/Air. I see a great danger of "web runtime" being controlled by a company. If they won't stop, Adobe will soon become "Microsoft of the Web" because they'll be controlling "Web OS". This is why I want AIR to fail and I hope that more web applications stick to HTML/CSS/JavaScript as opposed to moving to Adobe world.
For same reasons I always stayed away from Java. Same applies to Silverlight.
I do like D though (the language). But the author made two crucial mistakes that will inevitably hurt this beautiful systems programming language: he picked a name that does not work with search engines at all, and he decided to control too much - won't even let other people to distribute binaries of his compilers.
I relate to this a lot. It took me a long time to discover Lisp and Smalltalk, and how far superior they are to anything I'd previously seen, because I was so busy with newer, more "advanced" technologies. I simply never imagined that the "industry" could be so massively wrong. But when you factor in economics and psychology this begins to look less strange. The demand for software far exceeds the supply of good programmers, so the industry is overwhelmingly skewed toward the mediocre to begin with. Most decisions about platforms and languages are made by managers, who look for things like "how many programmers can we hire" to maintain the million-dollar messes their large teams build. Then there are the vendors, whose job is to sell tools to those managers (which has little to do with making the best tools or even tools that work). Remember there's a clear precedent for all of this: COBOL, which for decades was by far the most common language.
There's another thing that cuts closer to home. Most programmers, even most /smart/ programmers, are intellectually conservative and reluctant to look beyond what they already know. The smart ones will happily learn something like Java Faces or WPF when it comes out, just like they learned ATL or whatever when it came out; that is, they'll upgrade to the next release of the same old same old. But most will never reflect much on what they're doing and only a handful will ever jump out of the rat's nest. How many of those COBOL programmers ever learned a new language? The vast majority simply retired. Yet I'm sure many of them were smart at what they did.
What all of this amounts to is a vast market inefficiency that will almost certainly be supplanted by ways of building software that aren't insane; it's just a process that takes decades (if not centuries - how long did the industrial revolution take to figure out how to really do manufacturing?) I see YC as a conscious move in this game. Given how soul-destroying most software projects are, that's an inspiring development - to see the balance shifting in favor of the creators.
I'm grateful that I listened to my intuition that there was something wrong with those "new" and "advanced" technologies. For me as well, it is the depth and simplicity of a Lisp, Smalltalk, or APL that is fresh.
"I do like D though (the language). But the author made two crucial mistakes that will inevitably hurt this beautiful systems programming language: he picked a name that does not work with search engines at all, and he decided to control too much - won't even let other people to distribute binaries of his compilers."
As a recovering C++ zealot, I totally agree that D is a cool language. "D language" or "Digital Mars D" does turn up the right hits on google. :)
There are free implementations of the D language, e.g. there's a front-end for GCC. And the source code to the Digital Mars front-end for D is available under a GPL and Artistic License dual-licensing scheme.
I know, but his draconian attitude towards binaries is hurting D. For example (AFAIK) there isn't a single msi-installer for Windows novices.
You may suggest that D isn't for them because "real programmers" use Linux, but I'd argue that "hotness" of a language largely depends on its popularity among youngest and most curious and enthusiastic users.
If a kid who's got a Dell/Vista laptop for Christmas decides to "become a programmer", he won't be doing it in D after visiting digital mars site - I guarantee you that. He's got two weird zip files up there and it took even me a while to figure out what goes where.
I don't think the difficulty of installing a zip file is going to stop many programmers from using D. Anyone who has a real problem with closed binaries will be using gdc on linux. The libraries are open source on any platform, which is really what people care about. D is not targeted at kids, and anyone who wants to learn programming would be well served to start with a different, more powerful language.
It's a little harsh to compare Adobe to Microsoft. They were friendly to the open source community by open sourcing Flex. And as far as controlling the runtime goes, that does have some risks going forward as you say, but it also has the benefit of allowing cross-platform web development largely free of browser-compatibility issues. Which is nice.
At least with Java, you had multiple working implementations of the VM from multiple vendors. With the Flash VM, there's only Adobe's VM, and they've made no indications of opening the code anytime soon.
Large-scale text mining (Google/Wikipedia). There's boatloads of patterns and data latent in an enormous popular text corpus.
For instance, if you have two terms, and you want to see how similar they are, that's P(A|B). So do a search query for A&B and for B, and P(A|B)=P(A&B)/P(B), and that's a first approximation, a Google Distance, for arbitrary terms.
The information silos are only a couple years old, and already they're so valuable. I can't wait until the Internet's a century old.
It's from Cilibrasi and Vitanyi. They have shimming factors, so you take the min of A|B and B|A, then you throw in some logs to not penalize low probabilities.
When I'd stopped independent work on it, and brought it to Songkick, it was coded entirely in Javascript, with a reimplementation in Ruby (to check work). Email me (leebutterman/gmail) if you're interested.
I'm also rediscovering Perl, after a few years of mostly working in C and Python (really, I wasn't doing a lot of development during that time, so I've still done a lot more Perl work than any other language).
MJD's Higher Order Perl is a fantastic resource for "new" techniques as applied to Perl. And, I've read the latest edition of the Camel book and found that I never really understood the language when I was using it three or four years ago (at the time I had read Learning Perl, and Perl in a Nutshell). Perl is so much more powerful, concise, and pretty, than I'd realized.
Perl 5.10 and 6 are really quite nice, as well. Objects are still somewhat quirky in 5.10, but will be fixed beautifully in 6. Likewise for named function arguments. Field Hashes are neat.
Oh, and using JSON with Perl is lovely--since everything we do is passing around references to arrays and hashes and such, converting a traditional HTML UI to an advanced JavaScript one is so much easier than I expected (and because objects are hashes, it'd be possible to do something similar, even if our code were more object oriented). Really quite smooth. JSON::XS is super fast and easy to use.
Which ones? I suppose then there are also 1000 line Perl applications that can be replaced with 15 lines of Java. There are enough bad programmers out there...
Admin wise, I find a lot of 20 line Perl applications can be replaced with bash scripts. Most Perl developers seem to think Bash is Bourne shell, and don't know how to use functions or arrays. It's unfortunately pretty common to see 20 lines of Perl invoked to do things like check a network port is listening, around 2 lines of Bash.
You were probably exaggerating, but for reference:
public class hello {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
Also, I interviewed with a large company that shall remain nameless (probably not who you would expect), and one of the interviewers mentioned that their build system was a MILLION lines of Perl...
Hello world shows how much boilerplate is required before you can print a message to stdout. It's one of several important factors for any language you might use for quick and dirty throwaway programs. You want it to be two tokens only - the name of the print function and the string to be printed.
ah, quick and dirty throw away programs. Personally I think writing output to the console should be harder (but I'll save that for later). I'd like to see more sane comparisons, like: making a TCP connection, making a web request, encrypting and decrypting a string, computing base64, md5, etc.
And in Python, print "hello, world" is bad form. It would be proper to write (news.YC is omitting some newlines below)
I think the reason the LOC count is significant is because it means that there is less code for one to look through to figure out what is going on. Fewer lines imply that the solution has high level abstractions. Each one of the examples you mentioned is one construct in lisp (if you use libraries).
I think thats a bit of a fallacy (and I also think this guys video is a bit of a waste of time...).
More abstractions can be nice, but don't mistake it for less code. Its still code somewhere, and that can lead to much more subtle and hard to find problems if you don't understand exactly what's going on. Of course, some environments are bigger culprits than others, but its something to keep in mind.
well, a big difference in total LOC might be significant, but that's slightly different claim than saying that a difference in LOC for "hello, world" has any importance.
The reason you can get by with a shorter hello world program in most dynamic languages is because you're doing it in the "module" definition, which I think is not proper form in any non trivial programs. So any differences in LOC for hello world really mean nothing over the course of a real application.
I googled for it, but I only found a "Mechanize" library for Ruby. What does it do?
I actually like the way regular expressions are being handled in Java. The only problem is that "\" has to be escaped in Java Strings, so the regex patterns tend to have a lot of slashes.
Screen scraping. I don't have any major problems with Java--it's just that it lends itself to serious over-engineering. Maybe that has more to do with business culture.
Android looks like a lot of fun, and I get a good feeling about it. So I decided to port Hecl to it.
I want to do a web thing in Erlang + javascript, but haven't quite figured out what... although <horn tooting> I actually started using Erlang a number of years ago.
What I'm currently looking into, none of which is too new, is: Scheme (Gambit C), Lisp macros (On Lisp), concurrent-like programming with continuations and epoll, raw X Window protocol (i.e., not using Xlib after initialization), OpenGL/GLX, unconventional text editors (the editor part of Jef Raskin's THE/Archy). In a short term, I'm just scratching an own itch, but some of these technologies I want to learn for longer term projects.
GWT, Android, Ericsson JSF MobileFaces, Metro web services using Glassfish, JPA (mapping to MySQL DBs), and Flash Lite are what I'm dabbling in right now. With the exception of Flash Lite, all of that is Java based... Meh.
I'll admit what everyone else here is apparently afraid to: Flex/ActionScript 3.
I don't really see a future for MXML in it's current form but the rest of the stack--mainly ActionScript 3 / the SVG drawing API, Video/Audio APIs are definitely worth looking at. Some of the highest paying web development gigs are in Flash programming, and it's a lot less painful than browser programming (which isn't saying much).
- Android SDK (though it was kind of surreal to realize that I was coding Python for work and Java for play... @_@)
- Cairo vector graphics (it's not that hard to get Cairo-rendered buffers into OpenGL textures (though you do have to un-premultiply the alpha values :P))
- Working on a lightweight embeddable lisp compiler (currently hosted in Python). Stealing good ideas from Arc, so get coding, Paul! ;-)
- Working on an interesting, erm, "lifestyle-enhancing" webapp in Django [one that already provides value to me just by having it for my own use!]
- Pyglet (python multimedia and windowing lib)
For work:
- Coding web apps in Pylons. (SQLAlchemy is a manly ORM that makes other ORMs look like babies' toys ;-)
- Further investigating haXe and OpenLaszlo (did this for fun on my own a while back, but didn't have time to do much with either of them)
Not really new at all, but the approach is: I started using just javascript to develop web apps - no server - the apps just interface with a server to get and post data.
That's fun, especially with jQuery, which I highly recommend.
We're doing a lot of this, too. Not to say there isn't a vast swath of on-server work being done, but a lot of new features we're developing are using the server just to serve up the JavaScript and collect some data from disparate sources.
Our software is an installable web application for web hosting systems management...so we have a lot of opportunities to do neat stuff--there are so many useful UI elements that could be added that would make the product more useful without requiring any additional information than what we already collect or create. We're currently building a "desktop" with ExtJS that'll have a dozen or so widgets for presenting various bits of information about the running system. The data already exists and is currently, mostly, presented in simple HTML and CSS graphs...but with a little tweaking we can make the backend spit out simple data structures in JSON and then display them in various dynamic ways.
The first one that is almost wholly free of server-side code is a "news" module that pulls a feed from our forums News category on our company website. ExtJS makes this kind of thing trivial (one of their example apps is an RSS feed reader that uses Google Gears). Other short-term bits will be converting all of our graphs to dynamic versions that change every minute or so. Bigger plans include a terminal emulator to replace the Java applet SSH client we currently include. Interactive terminals are trickier, and I'm not sure if we'll end up implementing the actual full terminal emulator in JavaScript or do most of the work server-side and just pass things down to the server (probably the latter at first). But, very short-term (like being released sometime this week) it's all just conversions of existing widgets to present nothing but JSON--it actually makes the server-side code remarkably simpler to not have any UI elements.
The ZUI was the worst idea in Raskin's book. You can't use muscle memory for the system because the target x,y positions and sizes change based on how zoomed in you are. Worse, the ZUI doesn't solve the biggest bottleneck in the existing GUI canon - asking the user to arrange and keep track of his own crap. His ZUI concept is like the mac or windows desktop, except now you get a magnifying glass.
The better method is search, or more accurately, comprehension, but this is a grail quest, and my solution isn't done yet.
Lots of JavaScript, mostly with JQuery. Some Flash. Compilers, interpreters, & language design (which have always been a hobby of mine).
I'll also second what everyone else said about learning Lisp, Smalltalk, early windowing systems, UNIX fundamentals, and other forgotten areas of the history of computing. There're lots of good ideas in there.
It's for a class, but it's consuming most of my free time. The classroom instruction is good but we're largely on our own as far as implementation goes (though it has to be written in C or C++).
We only have to finish a subset of C, and I'm not planning to take it any further.
I think GWT is very cool. I wouldn't attempt to write a big application in Javascript but I would do it in Java. Not only I am more familiar with Java, but I also appreciate having strong typing as a safenet.
The people working on the hottest stuff will not tell you what "new" technologies they are working on. Very little of it is ever "new", just new ways of putting it together.
Please explain why you're excited about being able to use C# instead of Javascript. Personally, if I had to use C# for anything, I'd be very excited by the prospect of replacing it with Javascript.
I would rather work with a more robust and defined language. Certainly having hacked dHtml for so long, javascript has grown a place in our hearts. I have not used it yet, so maybe I won't be impressed with how it works clientside. It's still new to me.
"Robust" seems to me to be a bit of a weasel word - a term that can mean whatever you want it to. What do you mean by "robust"?
Defined is a more meaningful word. I believe both languages have specs that clearly define how the language should behave. I suspect what you mean here is that when doing client-side programming, you'd prefer to only have to worry about one implementation instead of the 4-5 Javascript interpreters we currently need to worry about.
"Rigid" - In the sense that from a readability, reuseability and a more structured manner; C# requires you to maintain a more firm structure and more defined variable declaration. These things from a growing, hacking company hold a huge value to us. I of course just envision this and could be full of crap. But the purpose was what technologies where you excited to try. Could you tell me why C# wouldn't be a better fit than js? Seems to me you might enlighten the community more giving us information than trying to give us lessons on how to answer an open ended question. I apologize if I was weaseling, I'm just excited to try it, I'm not a clientside c# expert. Of course the portability from interpetors is huge too, but that is actually less why I'm excited to try it. That is just a given more.
I asked you to explain yourself because you were expressing a belief - that a statically typed language that uses a lot of boilerplate and doesn't have first class functions is preferable to a dynamically typed language that doesn't require a lot of boilerplate and does have first class language - that is believed to be false by most members of this community. You are, of course free to get excited over anything you want, but expect to be challenged if you make meaningless claims about your favorite technologies.
Jocaml is fascinating. It's a concurrent distributed-programming language & runtime based on the join calculus (which if I had to describe it would be "pattern matching over processes", a pretty nifty idea in itself). I looked at it fairly briefly in college and it seemed really interesting, but wasn't mature enough to really do much with. Given how it's popping up now, that may have changed...
Most people on this post are talking about languages. There could be other things more important, like AJAX (which isn't totally new), Amazon AWS, Google Android, but mostly it would depend on what you are trying to accomplish I guess ?
Besides, what is "new"? MVC has been something of revelation to most web "engineers".
In fact (or maybe it comes with age) I started to dislike new stuff, like Flash/Flex/Air. I see a great danger of "web runtime" being controlled by a company. If they won't stop, Adobe will soon become "Microsoft of the Web" because they'll be controlling "Web OS". This is why I want AIR to fail and I hope that more web applications stick to HTML/CSS/JavaScript as opposed to moving to Adobe world.
For same reasons I always stayed away from Java. Same applies to Silverlight.
I do like D though (the language). But the author made two crucial mistakes that will inevitably hurt this beautiful systems programming language: he picked a name that does not work with search engines at all, and he decided to control too much - won't even let other people to distribute binaries of his compilers.