OK, I'm hooked. I was trying to avoid learning another new language-- especially since I was in the middle of trying to systematize my haphazard knowledge of C. But I find Factor ... strangely compelling.
Anyway, thought I should briefly introduce myself. I've been around open source development since the end of the last millennium; worked in "the industry" for a couple of years--I was an XML consultant, but later realized I didn't like XML much--or at least not the kinds of XML applications that were getting most of the attention at that time. Recently I've been making my living in other (mostly unpleasant) ways, but have continued to program open-source software, though I haven't worked on anything mainstream ... mainly, I suppose, because I vehemently disagree with most mainstream thinking about how software, and particularly user interfaces, should be designed. I've done substantial work in (chronologically) Python, Java <ugh> (yeah, sorry Slava, I loved jEdit, which is one of the reasons I was willing to try Factor, but I detest Java, and that's all I will say about it unless somebody deliberately provokes me :-), and OCaml. Done a bit of work w/ Tcl, Ruby, Chicken Scheme, and C; played around w/ Haskell, Prolog, Eiffel, and a few others. Sounds like I'm a language junkie, huh? Anyway, my first thoughts when I encountered factorcode.org were, "Hmm, this is weird," and "'Practical'? Yeah, right!" And having tried in the past to understand bits of PostScript (gulp!) and having read part of an introduction to Joy, which I found utterly incomprehensible, I really had doubts about a stack-based language. But I could see that Factor at least had an extensive library and lots of documentation, so I guess that was enough that I decided to come back and try it. I've been learning Factor for 3 or 4 days, and it is gradually starting to make sense. Here, for what they're worth, are a few random observations from a newcomer: * Most open-source languages I've seen are just languages, and their developers often seem to have a cavalier attitude toward the numerous challenges of developing and deploying real-world applications. Factor is a (nearly) complete development toolkit; I think that if people can overcome their initial fear of the unfamiliar syntax, that fact alone will go far toward persuading them to adopt Factor for their projects. * The workspace is awesome--IMHO the approach of providing an interpreter, debugging and build tools, and documentation all in one place, while allowing people to use their favorite editors, is just what we need. The only thing I can see that's really lacking (or maybe I just haven't discovered it yet) is an interface to version control systems. Does anybody do serious development without some form of version control? * While the easy access to documentation is great, and the reference material appears to be very good, I think there is room for a lot of improvement in the tutorial content. Now, I'm not sure who the intended audience is--it seems unlikely at this stage that many brand-new programmers will encounter Factor, and I imagine most newcomers are something like me: with or without CompSci degrees (I am without), but with significant programming experience and an interest in learning new languages and approaches. People like me don't need a *lot* of help, but we might need some--more on that below. What concerns me here is the hypothetical newbie whose background is entirely with mainstream procedural/OO languages. I think their brains will hurt and they will run away. And maybe that's okay. There is something to be said for an elitist, sink-or-swim approach--keeps the mailing list from getting clogged up with dumb questions. But I get the impression that this community intends to welcome anybody who wants to learn--in which case I have some suggestions: - Consider renaming and restructuring the Cookbook. Every other programming "Cookbook" I have seen is a collection of realistic examples intended for programmers with some experience--what you might call "journeymen"--trying to solve real-world problems; usually each "recipe" stands on its own. Beginners, IMHO, tend to do better with a sequence of chapters, each building on the previous ones. Not that there is any single correct sequence for learning a programming language or anything else. But any structure provided by a knowledgeable writer is likely to be better than no structure at all. - Try to provide series of related examples, gradually increasing in complexity/difficulty. I think the book _Practical Common Lisp_ does this very well. - Although stack manipulation is a fairly simple concept (compared to, say, monads in Haskell or call/cc in Scheme), real programs are composed of many stack operations, and it can be hard to follow. In the early stages of learning, step-by-step explanations and/or diagrams would be very helpful. - I think experts in any given language tend to underestimate the difficulty of syntactic details. For example, what are the rules for using semicolons? It is confusing that a USES: declaration ends with a semicolon, but not an IN: declaration. If I stick with Factor--and I think at this point I probably will-- when I gain enough understanding of the language I might be able to help improve the beginners' documentation. I have done some technical (and other) writing in the past. * Learners with more experience and/or a more adventurous spirit might not need a complete tutorial, but might need concise statements of rules and definitions. For example, I'm trying to understand how to do macros in Factor. It appears that the concept of a static stack effect is important in relation to macros, but I can't find a definition for that concept anywhere. I imagine it is roughly equivalent to referential transparency in a functional language, but even if that guess is correct, it is imprecise, and furthermore I have no idea how to recognize whether a word has a static stack effect or not (BTW I will ask this question shortly in a separate post, so no need to provide an answer here). * One thing I really like about Factor is a quality that some might call "expressiveness" ... but that's not exactly what I mean. I would say, rather, that it enables a high degree of *fluency*. It gets out of the way and lets you write your ideas into code. The feeling is something like using a good chef's knife--as you gain mastery, the tool becomes a barely-noticeable extension of your hand. I think the last time I had that feeling to the extent I do with Factor was when I started using Vim after 5 years with Emacs. I am still using Vim today, and while I can imagine there being a better editor, I haven't found one. * The optimizing compiler (v. 0.92) is *horrendously* slow on my machine. I didn't time it, but I think it took about 15 minutes to compile the Tetris demo. A comparable program in OCaml would compile in less than 30 seconds. That's probably an unfair comparison, but still ... So, are there any plans to speed up the compiler? Or are there ways to compile faster with the current compiler? -- Matt Gushee : Bantam - lightweight file manager : matt.gushee.net/software/bantam/ : : RASCL's A Simple Configuration Language : matt.gushee.net/rascl/ : ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk