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

Reply via email to