First, due to what journalists call "full disclosure", I should mention that I make a living as a consultant who uses Racket almost exclusively now, and will probably write a Racket software engineering book soon, and so I have a conflict of interest in encouraging new projects to use Racket. :)

gonzalo diethelm wrote at 08/19/2011 06:07 PM:
So let me get to my point before I bore everyone here to death: can my desire be realistically fulfilled? Can Scheme (Racket) be used for a more "enterprise-y" project (console app, GUI app, web app, whatever, accessing data from any RDBMS in transactional ways) where I will have a team of developers working on separate parts of the system at the same time?

Yes. One of my consulting clients has a large code base (order of magnitude larger than the Racket/DrRacket distribution and its standard libraries), in production for years, making heavy use of PostgreSQL.

Regarding project management, most of the usual practices apply, and there are only a few differences with Racket that I see, and you can predict what I'll say, but I will spell out for the larger audience here:

* The first biggest difference with Racket that you *must* consider is what, at least in the US, industry used to call "nobody ever got fired for buying IBM": any time you use something that not everyone considers a "safe" choice, that is a political vulnerability, so you need to have the political power to choose. (This is not exclusive to Racket. Separate from any technical considerations, choosing Python is politically risky in some environments, and even Java can be politically risky unless you're doing a routine intranet Java enterprise app and using a "safe" framework. I think the difference here is "Why are you using Java/Python when I think it is unsuitable for this purpose," vs. "Why are you using something on which I do not already have an opinion?" :)

* The second biggest difference with Racket that you *must* consider is simply that usually project team members will not come to the project knowing Racket like they "know" Java. This can be mitigated, and the learning cure might well be "in the noise" if you need and have smart developers on a substantial project.

* Then, as you know, there are advantages of Racket that you *may* consider, which are linguistic, like the productivity and maintainability leaps you might get when a team member makes DSLs that are used by multiple other team members.

* You might also find sometimes that there's a library for Java that does something you need, but you can't find a similar library for Racket. This situation has improved a lot in the last few years, plus there is now an FFI for easily calling C libraries. But eventually you will encounter this situation, so be prepared to bang out that bit of functionality (perhaps much better than the Java library does) after first asking on the Racket email list to see if anyone else has such code or knows an easy and good way to do it. This downside to this situation might be more political than practical, if it's easy for you to get the same functionality, but you'll have to explain to management that the project is still winning with Racket, even if in this case you did not have a library that a Java programmer would've.

Which brings me to my second question: can Scheme (Racket) be used to develop all these different kinds of applications (console, GUI, etc.)? Can anybody point me to real life examples of each type of application developed with Scheme (Racket)?


DrRacket is a good example of a complicated GUI app that is used in production.

Racket ships with a few console apps that are implemented in Racket. Close to 10 years ago, I had a long-running console app in Racket that was a specialized Web spider, and I also occasionally write utility scripts as console apps. I think people write console apps frequently, without considering them noteworthy.

The server apps in Racket tend to be non-public, because they are for internal use of an enterprise, or for competitive or other reasons. I believe that the PLaneT server is implemented in Racket, and it is public.

[In fact, I specifically came to Racket after having had a grand vision of being able to develop all the components for a web app (SQL to access the DB, business logic, HTML for presentation, CSS for styling, JS for interactivity, even XML for configuration) using a single unified language (or many small separate DSLs based on a single language) and I have been kind of surprised at not finding this idea fleshed out anywhere as a framework, library, module, etc.]


Yes, I have a client who has credited Racket's utility for SXML processing and dynamic programming with being a strategic advantage.

There is another company down the street from me here that Google bought, after they used another Lisp dialect to implement what in the past had only been done with mainframes (and to interoperate with the very complicated legacy mainframe network). They credit the DSL capabilities of Lisps with being crucial to being able to do this at all in a timely manner. (They also credit using a Lisp with being able to attract a much better talent pool than they would've otherwise.)

if Scheme is the be-all and end-all of programming languages,


Before we go further, Racket is Racket, not Scheme. As soon as we start saying Scheme, people start getting confused. :)

When people start talking about why does industry currently use the technologies it does, people identify and speculate on many reasons. Some of the reasons concern pragmatism and accidents of history, and sometimes people are very critical about the state of current practice.

I think you'll find with Racket is that it's been a well-kept secret for a decade, up until this last year, around the time when the name was changed and it started to get noticed by more people. Many of the people who stumbled upon Racket earlier ended up doing industrial-strength app development in Racket, but on apps for use by university students and schoolchildren, which is why I suggest looking at DrRacket as a good example of an app developed in Racket. I think we'll start seeing more publicly-accessible projects using Racket now.

FWIW, I have a background in mission-critical software engineering and methodology, and, like you, did real development in C, then C++, then Java, and various other languages in there (Perl, Smalltalk, Python, Common Lisp, 4GLs, more obscure ones...), until I gravitated towards Racket. I decided on Racket for the greater agility and sophistication of the core language, and for the smart developer community.

Since you asked, I don't think anyone has yet invented the be-all and end-all of programming language platforms, but Racket is the current all-around best I can think of for most modern app development purposes that are not externally constrained to use Java. (There is even a project to adapt it for embedded systems.) The other platform that came close for me, linguistically, is Haskell, but I think Racket wins for DSLs and a few other reasons.

Another, smaller, advantage over Haskell: I can take an industry programmer who used Pascal once in school, sit them in front of Racket and have them ready to start being productive with other people's libraries by the end of the day, treating Racket as only "a better Pascal, with parentheses, plus some code patterns I've I'm using without fully understanding". They can then learn idiomatic Racket, how to make their own DSLs, and functional programming precepts incrementally as they work, over the course of months. But sitting that same programmer in front of Haskell... would be much more difficult.

--
http://www.neilvandyke.org/
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to