Abstract:
A network-based software-learning system operates independently of a user&#39;s computer by providing a protected learning environment. The learning environment, integrated into a backend server, includes user interface, software interface and communication interface. The software-learning system provides a system and methods that facilitates a user&#39;s acquiring “hands on” experience of any software-learning module without risking damage to either server or client machines.  
     A virtual workspace allows readers of technology books, in print or electronic format to execute sample code from the books, viewing the result instantly. Users write, compile and run real code as they acquire knowledge from the book. The software-learning system is enabled for learning compiled programming languages as well as interpreted languages, possessing a streaming capability that allows the user to view any type of output.

Description:
BACKGROUND OF THE INVENTION  
         [0001]    1. Field of the Invention  
           [0002]    The present invention relates generally to the field of computer-based learning. More particularly, the present invention relates to a system and method for learning software that provides a programming environment for learning programming without requiring specific essential software installed on a user&#39;s machine.  
           [0003]    2. Description of the Prior Art  
           [0004]    Computer programming is generally learned on desktop computers that are equipped with the complete programming software, including compilers for converting the source code into executable code. For a novice user, installing all the required software, keeping track of all the various versions, updates and bug fixes, is a tedious, difficult and error-prone task. Additionally, the expense of acquiring multiple software licenses is considerable.  
           [0005]    As Internet technologies proliferate, web-based software learning sites are emerging as an alternative to the conventional standalone desktop model of software learning. Typically, such web-based services rely on the entire software-learning program being stored on a server, which is then accessed by the user over a network connection, a conventional web browser serving as the client application. Often, the web-based services are free or very low cost. What&#39;s more, they eliminate the necessity and expense of acquiring the programming software and compilers.  
           [0006]    An example of such a web-based service is found at “www.w3schools.com.” This site is devoted to learning web-based technologies such as HTML and JAVASCRIPT. The user selects from provided code snippets, which are run and the output displayed to the user. Additionally, the user may edit the code snippets and run the edited snippets. Such a site is limited, however to learning of web-based technologies; because it does not stream graphical objects to the client, such as user interface elements and bitmaps, the system is not extensible to learning of programs that create such elements. Additionally, it does not support the learning of compiled programming languages such as C or C++. Also, the system provides only limited source material; there is no way of providing instructional material from a variety of sources, such as a library of books on various software related subjects.  
           [0007]    www.useractive.com provides a software-learning site, also devoted to learning various web-based technologies, such as JAVA and XML. Additionally, the capability of learning compiled languages is provided. To use the site, at the beginning of each session, the user downloads a browser application created with DHTML and JAVASCRIPT. The browser application calls a variety of server-side programs using CGI-scripting. While capability is expanded somewhat beyond the previous example, the use of browser-based technologies also limits the extensibility of this site. Streaming capability is limited only to text; it does not provide a facility to stream graphical objects from the server, preventing graphical interface elements from being displayed to the user. Additionally, as in the previous example, instructional material is limited; there is no capability of displaying material from a library of external resources, such as books.  
           [0008]    Accordingly, it would be a great advantage to provide a network-based means for learning software that enables provision of a library of instructional resources, such as books and articles. It would be a great advantage if the code examples in these sources could be invoked at the click of a button within a secure working environment where they can be safely viewed, edited, compiled and run. It would be a further advantage if this secure working environment protected both the server and the client from damage due to user error. It would be advantageous to relieve a user, particularly a novice user, the inconvenience and expense of acquiring, installing and maintaining a number of different programming environments in different versions and releases. It would be desirable to provide the ability to stream both text and graphics from server to client, allowing the user to view graphical output, such as graphical user-interface elements and bitmaps. It would be useful to provide a system architecture that minimized delays due to network bottlenecks and server latency.  
         SUMMARY OF THE INVENTION  
         [0009]    In recognition of such needs, a preferred embodiment of the invention provides a network-based system and method for enabling rapid, intuitive software learning that operates independently of a user&#39;s computer by providing a protected learning environment. The learning environment, integrated into a backend server, includes a user interface, a software interface and a communication interface. The invented software-learning system provides a program and process that facilitates a user&#39;s acquiring “hands on” experience of any software-learning module without risking damage to either the server or the client machines.  
           [0010]    Additionally, the invention provides a digital workspace that allows readers of technology books and articles, in either print or electronic format to execute sample code in the books and view the result instantly. In addition, users can write, compile and run real code as they acquire knowledge from the book. The invention is fully enabled for learning compiled programming languages as well as interpreted languages, database applications and client-server applications, possessing a streaming capability that allows the user to view both textual and graphical output. Both the server applications and the client applications employ a modular architecture, rendering the invention easily extensible.  
           [0011]    The invention includes both ‘Learning’ and ‘Quiz’ modes. In the ‘Learning’ mode, a user can learn various technologies; in the ‘Quiz’ mode, users can take programming tests, where they can write, run, test and finally, submit programs that they have written for evaluation to the system. Additionally, the invention provides a debugging capability where they can analyze a program&#39;s working as it executes. An alternate embodiment provides an accompanying knowledge database and a standalone version of the invention provides an embodiment wherein all components of the system are installed on a freestanding computer.  
       
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0012]    [0012]FIG. 1 provides a top-level block diagram of a software-learning system, according to the invention;  
         [0013]    [0013]FIG. 2 diagrams a server-side execution environment for an individual user in the software-learning system of FIG. 1, according to the invention;  
         [0014]    [0014]FIG. 3 diagrams streaming of text-based and graphical output from the server to the client in the software-learning system of FIG. 1, according to the invention;  
         [0015]    [0015]FIG. 4 provides a detailed block diagram of client-side components in the software-learning system of FIG. 1, according to the invention;  
         [0016]    [0016]FIG. 5 provides a detailed block diagram of server-side components in the software-learning system of FIG. 1, according to the invention;  
         [0017]    [0017]FIG. 6 diagrams a typical operational flow between client and server in the software-learning system of FIG. 1, according to the invention;  
         [0018]    [0018]FIG. 7 provides a library view in a client-side user interface in the software-learning system of FIG. 1, according to the invention;  
         [0019]    [0019]FIG. 8 shows a book view in the user interface of FIG. 7, according to the invention;  
         [0020]    [0020]FIG. 9 illustrates a file view in the user interface of FIG. 7, according to the invention;  
         [0021]    [0021]FIG. 10 shows the interface of FIG. 7 with the ‘File’ menu selected, according to the invention;  
         [0022]    [0022]FIG. 11 shows the interface of FIG. 7 with the ‘Edit’ menu selected, according to the invention;  
         [0023]    [0023]FIG. 12 shows the interface of FIG. 7 with the ‘View’ menu selected, according to the invention;  
         [0024]    [0024]FIG. 13 shows the interface of FIG. 7 with the ‘Program’ menu selected, according to the invention;  
         [0025]    [0025]FIG. 14 shows the interface of FIG. 7 in ‘Run’ mode with server output shown in a separate output window, according to the invention;  
         [0026]    [0026]FIG. 15 shows the interface of FIG. 7 with the ‘Window’ menu selected, according to the invention;  
         [0027]    [0027]FIG. 16 shows the interface of FIG. 7 with the ‘Help’ menu selected, according to the invention;  
         [0028]    [0028]FIG. 17 shows a tool bar from the interface of FIG. 7, according to the invention;  
         [0029]    [0029]FIG. 18 shows a ‘Debug’ menu, according to the invention; and  
         [0030]    [0030]FIG. 19 shows the user interface of FIG. 7 with a ‘Quiz’ mode selected, according to the invention. 
     
    
     DETAILED DESCRIPTION  
       [0031]    The present invention provides a system and method for software learning that includes a virtual workspace integrated with a backend server, in which the workspace includes a user interface, a software interface and a communication interface. The virtual workspace consists of a programming environment on the user&#39;s computer that provides a look and feel that is an easy-to-use, simplified version of the actual programming environment in the context of any given programming language, but which does not permit alteration of important system files or other critical components of the user&#39;s computer&#39;s functioning, thus ensuring that files essential to the working of the user&#39;s computer are not damaged. The computer programs that the user writes execute on the backend server within a safe, protected environment, referred to herein as a sandbox, which ensures that the system files and other critical components on the server are not damaged as well.  
         [0032]    Books for learning computer programming generally include examples of program code to illustrate the concepts and principles taught by the book. A single book may include hundreds of these “code snippets.” The invention allows a user to view all of the code examples provided in an external electronic learning module. The learning module may be an electronic or printed copy of a programming text, or a portion of a text, an article, or some other unit of instruction. Subsequently, the user may compile and run selected code snippets, and view the output. Thus, instead of confining a user&#39;s interaction with the text to passively perusing the text and studying the examples, the invention brings a programming text to life, facilitating rapid and intuitive software learning. In addition, users can write, compile and run their own code (or modified versions of existing code) as they acquire knowledge from the books. Furthermore, by placing all the required environments for each book on the server, it is ensured that the correct version of each software program is used (as required by that book), saving the user the trouble of acquiring, installing and maintaining different versions of the software. For example, one Java book may require JDK 1.2 while another may require JDK 1.3. Expecting the user to install both on his or her machine is time-consuming and error-prone.  
         [0033]    Turning now to the Figures, FIG. 1 provides a diagram of a client-server architecture of a network-based software-learning system  100 , according to the invention. Generally, the invention includes a client  101  in communication with a server  102 . The current embodiment of the invention requires only a minimal client-side installation. The client  101  includes a conventional web browser such as EXPLORER, supplied by Microsoft Corporation, or NAVIGATOR, supplied by America Online, Inc. of Mountain View Calif. USA. In addition to the browser, a helper application  600 , including a number of separate components described in detail further below, provides a user interface for viewing code examples and interacting with the server  102 . Finally, the client includes an applet, stored on the server  102  and downloaded to the client  101  as needed, that creates an output window  301 , that allows a user to view the server output when the user compiles and runs a code snippet. The code snippets are selected from an external learning module such as an electronic version of a programming text that has been enabled for use with the invented software learning system. As described below, the selected code snippet is compiled and run on the server, and the server output is displayed on the client. Because code snippets are compiled and run on the server, the user is spared the difficulty and expense of having to acquire and install development environments on their own computer. As shown, a variety of hardware and operating system platforms are supported. On the client-side, compatible hardware platforms include, but are not limited to INTEL, manufactured by Intel Corporation of Santa Clara Calif. USA, SUN SPARC, manufactured by Sun Microsystems, Inc. of Palo Alto Calif. USA, and MAC, manufactured by Apple Computer, Inc. of Cupertino Calif. USA. Compatible operating systems include, but are not limited to WINDOWS provided by Microsoft Corporation of Redmond Wash. USA, the MAC OS, provided by Apple Computers, Inc., and UNIX.  
         [0034]    On the server-side, hardware platforms include, but are not limited to SUN SPARC and INTEL. Compatible operating systems include, but are not limited to SOLARIS, provided by Sun Microsystems, Inc. and LINUX. The server stores XML descriptor files for each book, and the actual code snippets that are associated with the respective books. As previously described, the server contains execution environments for the various computing technologies; for example, C++ compilers, the JAVA Development Kit (JDK), database applications such as ORACLE, provided by Oracle Corporation of Foster City Calif. USA; interpreters for languages such as PERL, PYTHON and RUBY and web browsers for rendering HTML, XML, and JAVASCRIPT. Furthermore, server-side software includes a variety of JAVA servlets for communicating with the client. The current embodiment of the invention is implemented across a publicly accessible telecommunication network such as the Internet. However, other networked environments, such as local area networks (LAN&#39;s), wide area networks (WAN&#39;s) or virtual private networks (VPN&#39;s) are suitable as well.  
         [0035]    The communications interface  103  between the client  101  and the server  102  may be by way of a conventional dial-up connection involving a modem. Additionally, other types of connections, such as DSL, ISDN, cable modem, satellite, or wireless are also suitable for the invention. The client and the server exchange HTTP data across the communications interface  103 , including files, XML data, user inputs and server output. As mentioned above, the client includes a conventional web browser in concert with a second application  600 , registered as a helper application. Book files sent to the client from the server are assigned a distinctive MIME type, for example ‘application/x-codesaw.’ When a user requests a book from the server, the server sends the MIME type  104 , whereupon the browser invokes the helper application  600 .  
         [0036]    [0036]FIG. 2 shows another view of the server side, including an operating system layer  200  and an application layer  201 . User programs  203  running on the server machine  102  run in a protected environment  202 , referred to herein as a sandbox, that ensures the program uses system resources such as CPU, memory and disk in a tightly controlled manner. The sandbox also ensures the program does not violate security constraints defined on the server. For example, the program cannot start a virus or assume super-user (System Administrator) privileges or delete system files or files of other users, either intentionally or by mistake.  
         [0037]    As shown in FIG. 3, server output is displayed on an output screen  300  on the server. As needed, an applet is downloaded from the server and run on the client to provide an output window  301  on top of the user interface  700  for viewing output streamed to the client from the server.  
         [0038]    [0038]FIG. 4 provides a more detailed diagram of the various client-side software components:  
         [0039]    XML Parser ( 400 ): Parses the XML descriptor file for each book and extracts the snippet-specific information;  
         [0040]    HTTP Interface ( 401 ): mediates communication between client and server using HTTP protocol;  
         [0041]    Helper application invocation component ( 402 ): loads the helper application upon receipt of the MIME type;  
         [0042]    Quiz System Interaction component ( 403 ): Handles user submissions when the invention is being used in ‘Quiz’ mode (described further below);  
         [0043]    UI Manager ( 404 ): Manages all UI components included tabbed panes, menu bars, file rendering, etc. (UI described below); and  
         [0044]    File Manager ( 405 ): Handles uploads and downloads of files to and from the server, using the HTTP interface.  
         [0045]    [0045]FIG. 5 provides a more detailed diagram of the various server-side components:  
         [0046]    File Manager ( 500 ): Handles upload and download of files to and from the client;  
         [0047]    Helper application invocation: ( 501 ) Sends file with MIME type (e.g. application/x-codesaw) to the client browser which in turn starts the helper application on the client machine;  
         [0048]    User/Session Management ( 502 ): Whenever a client comes up, this component creates a session per invocation and manages all user files on the server; also manages timeouts;  
         [0049]    Text Streaming ( 503 ): This component sends as text any compile time errors that may occur on the server.  
         [0050]    Output Streaming ( 504 ): Gathers all application outputs (text and graphics) and streams it across to the client&#39;s output window.  
         [0051]    Quiz Manager ( 505 ): Allows a user to take a test on the server, collects all answer submissions from the user and evaluates the answers and assigns scores based on expected outputs of each answer.  
         [0052]    [0052]FIG. 6 provides a diagram of a typical operational flow between server and client during a user session. From the browser  101 , a user activates a link  601 . Typically, the link is an HTTP link associated with a file for a particular software text that has been enabled for use with the invention. In response to the HTTP request, the server sends the file&#39;s MIME type  602 . Upon recognizing the MIME type, the browser invokes  603  the application  600 . After being launched, the application  600  initiates a user session  604  on the server. In addition, the application provides a user interface, described in detail below, for viewing books and code examples, editing and writing code, and interacting with the server. After the user session is initiated, the server sends a XML descriptor file  605  for the book originally requested. After parsing of the XML file, a menu of code snippets available from that book is displayed to the user.  
         [0053]    Clicking a link for a specific code snippet  606  causes a request for that snippet to be sent to the server. In response, the server sends the snippet file(s)  607 . After the user views and studies the code snippet, the user sends a command to the server to compile the code snippet  608 , whereupon the appropriate compiler is invoked  609  to compile the example code. When the compile operation is complete, confirmation is sent to the browser  610 . At this point, the user sends a command to run the snippet executable  611 , and the server executes the program  612 . As the program executes, an output window  301  is created  613  on the client by means of an applet downloaded from the server. Additionally, other means of streaming output to the client may be employed. The program output, both textual and graphical, is streamed  614  from the server and displayed in the output window  301 .  
         [0054]    In the event that the displayed program requires user inputs, the user inputs are sent to the server  615 .  
         [0055]    The user&#39;s interaction is not limited to viewing of the code snippets provided. The user may edit the snippets, and view the edited snippets to see the effects of their edits. As the user&#39;s skills develop, he or she may also write their own code and compile and run it.  
         [0056]    The invention also provides support for the development of client-server applications, i.e. applications that have separately executed client and server components. Using the invention, it is possible to compile and run the separate client and server components of the application on the server, and view the outputs of both programs at the same time on the client. For example, a user may be writing a Java RMI (remote method invocation) application that includes three different programs, one server and two clients.  
         [0057]    The user first brings up the source code for the server, compiles it and runs it. Thus, the server code is being executed as a distinct program on the backend server, and its output window is created on the client machine. The user next brings up the source code for the first client, compiles and then runs it. It also begins execution as a distinct program on the same backend server, and a second output window is created on the client machine. Finally, the user brings up the source code for the second client, compiles it and then runs it. It also begins execution as a separate program on the same backend server, and a third output window is created on the client machine.  
         [0058]    In this way, even though the three programs are running on the same backend server rather than separate client and server machines, they are still three distinct programs, each with their own flow of execution; and the three programs can communicate with each other in the manner specified by their respective source codes.  
         [0059]    As mentioned above, the application  600  provides a user interface whereby the user peruses books and views code samples selected from those provided in the book. The user interface intentionally employs a simple design in order to allow users to familiarize themselves with the software learning system in a short time. Thus, by allowing users to concentrate on learning programming, rather than on learning how to use the system, they are able to progress in a rapid, intuitive manner from running simple programs to compiling, running and even debugging several client and server programs simultaneously, as described above, all from within the same interface.  
         [0060]    [0060]FIG. 7 provides a screenshot of the user interface. In general, the user interface includes a window having at least the following panes: a navigation pane  701 , an editing pane  702  and a message page  703 . The user interface further includes a menu bar  704  and a toolbar  705 . As earlier described, the invention provides users with the opportunity to work interactively with an extensive library of texts dealing with a range of software related topics. The library typically is typically provided from a web site offering software texts that have been enabled for use with the software-learning system.  
         [0061]    Different usage scenarios are possible. A user may have acquired a license to a single title in the collection by purchasing a hard copy. Other users may be subscribers who have paid a fee for access to the entire collection, or portions of the collection. In any case, before a user can access any of the books from the site, they must be running a JAVA-enabled browser on their computer and they must have previously installed the client software.  
         [0062]    The user interface  700  provides different views, indicated by tabs  706 ,  707 ,  708  positioned below the navigation pane  701 . FIG. 7 shows a ‘Library’ view, with the ‘Library’ tab  706  topmost. Each time a user downloads a book, it is registered on the user&#39;s machine, and it is listed in the navigation pane when the application is in ‘Library’ view. In ‘Library’ view, the complete menu of books downloaded by the user is displayed. It will be noted that, in ‘Library’ view, the editing pane  702  and the message pane are blank. As described above, the application  600  is invoked by the user requesting a book by clicking a hyperlink. Once the user has downloaded at least one book, the application may also be invoked by the user in a conventional manner, for example by clicking a desktop icon or selecting the application from a ‘Start’ menu. To select a book previously downloaded, the user opens the application from the desktop icon or the ‘Start’ menu and selects the book from the list displayed in ‘Library view.  
         [0063]    When a book is selected, the Editor pane  702  displays a “blurb” providing a brief description of the book. The book icon in the ‘Navigator’ pane  701  changes to ‘Open’ when a book is selected. After a book is selected, details of the book, i.e., chapter titles, section titles, and example titles are displayed in the navigator pane in ‘Book’ view, as shown in FIG. 8. In ‘Book’ view, the ‘Book’ view tab  707  is topmost. The display in the navigator pane takes the form of a conventional expandable hierarchy, with the actual code examples  800  being denoted by a distinctive icon  801 . To view a code example, the user clicks the icon adjacent to the title of the code example, whereupon the user interface changes to ‘File’ view (FIG. 9).  
         [0064]    In ‘File’ view, the ‘File’ view tab  708  is topmost. When the icon  801  is clicked, a file representing that code example is downloaded from the server, and the complete, ready-to-run code snippet is loaded and displayed in the ‘Editor’ pane. The program can then be compiled by clicking the ‘Compile’ button  705   a , at which point the code is compiled on the server as previously described. If the compile operation completes without errors, a ‘compile successful’ message appears in the message pane  703 , as shown in FIG. 10. After compiling, the user runs the compiled code by clicking the ‘Execute’ button  705   b , at which point the code executes on the server as previously described. As FIG. 14 shows, the resulting output is displayed in a separate output window  301 , generated in the manner described above. In the event that either a ‘compile’ or ‘run’ operation is unsuccessful, error messages are also displayed in the message pane. It will be appreciated that the user is not confined to compiling and running the examples supplied with the book. As skills develop, the examples can be edited, and eventually the user is able to code real working programs using the programming environment provided by the invention.  
         [0065]    [0065]FIG. 10 provides a view of the user interface  700  with the ‘File’ menu  704   a  selected.  
         [0066]    Table 1 describes the functions of the various ‘File’ menu commands.  
                         TABLE 1                       File Menu Commands                                Save   Saves the active document using the current file name.           Changes that are saved using either the Save icon or           the Save option in the File menu, are available for the           current session only       Save As   Saves the active document using a specified file name           and location. Allows the user to save a personal copy           of the displayed selection.       Close All   Closes all opened files belonging to the example.       Print   Prints the active file. On the File menu click Print to           specify print options.       Print Preview   Displays the document on the screen, as it would           appear when printed.       Recent Examples   Lists all the most recently opened files. To quickly           open a file, simply click the file name in the list           provided.       Exit   Closes the application window and exits the           application.                  
 
         [0067]    [0067]FIG. 11 shows a view of the user interface  700  with the ‘Edit’ menu  704   b  selected. The ‘Edit’ menu facilitates editing of programs loaded in the ‘Editor’ pane. The ‘Edit’ menu commands are summarized in Table 2, below.  
                         TABLE 2                       Edit Menu Commands                                Undo   Reverses the last action.       Redo   Reverses the action of the Undo command. To redo more           than one action at a time, click the arrow next to the Redo           command on the toolbar, and then select the actions that           you want to redo.       Cut   Deletes data from the document and moves it to the           Clipboard.       Copy   Copies data from the document to the Clipboard.       Paste   Inserts the contents of the Clipboard at the insertion point,           and replaces any selection. This command is available only           if you have cut or copied an object or text.       Find   Searches for the specified text or format.       Replace   Searches for and replaces the specified text or format.       Delete Book   Erases all information related to the specific book.       Preferences   Sets log in and proxy information.                  
 
         [0068]    [0068]FIG. 12, shows a view of the user interface  700  with the ‘View’ menu  704   c  selected. Table 3, below, summarizes ‘View’ menu commands.  
                             TABLE 3                       View Menu Commands                                    Toolbar   Shows or hides the toolbar.           Status Bar   Shows or hides the Status bar.                      
 
         [0069]    [0069]FIG. 13 provides a view of the user interface  700  with the ‘Program menu’  704   d  selected. Table 4, below, summarizes ‘Program’ menu commands.  
                             TABLE 4                       Program Menu Commands                                    Compile   Compiles active program file.           Run   Runs active program file.           Debug   Enables users to debug their programs by               using the debug option.           Settings   Specifies settings for program.                      
 
         [0070]    As previously described, FIG. 14 shows a view of the user interface  700  with the output of an executable program displayed in a separate output window  301 . The output window is generated in the manner previously described.  
         [0071]    [0071]FIG. 15 shows a view of the user interface  700  with the ‘Window’ menu  704   e  selected. Table 5, below summarizes the ‘Window’ menu commands.  
                             TABLE 5                       Window Menu Commands                                    Cascade   Arranges windows in an overlapped fashion.           Tile   Arranges windows in non-overlapped tiles.           Open Examples list   Displays list of all open examples.                      
 
         [0072]    [0072]FIG. 16 shows a view of the user interface  700  with the ‘Help’ menu  704   f  selected. Table 6, below summarizes the ‘Help’ menu commands.  
                         TABLE 6                       Help Menu Commands                                CodeSaw Help   Provides information to help you accomplish           your tasks.       What&#39;s This?   Provides context sensitive help. Click this icon to           get help on specific tasks, functions, icons or           buttons on CodeSaw.       CodeSaw on the Web   Displays list of all currently open examples.       About CodeSaw   Displays version number of CodeSaw, copyright           and legal notices, the user and organization           name.                  
 
         [0073]    [0073]FIG. 17 shows a view of the toolbar  705  from the user interface  700 . The toolbar allows the user to quickly perform important functions by clicking the appropriate icon in the toolbar. The toolbar has icons for ‘Cut’  705   c , ‘Copy’  705   d , ‘Paste’  705   e , ‘Compile’  705   a , and ‘Run’  705   b . A ‘Connect’ icon  705   f  toggles between connect/disconnect depending on the status of the network connection. A ‘Launch’ icon  705   g  starts the library in a default browser window. The ‘Help’ icon  705   h  gives rapid access to ‘Help’ topics; and finally the ‘Page number’ text box  705   i  allows a user to load the code examples that are present on the specified page in a book, if any.  
         [0074]    As shown in FIG. 13, the ‘Program’ menu includes a ‘Debug’ option, which allows users to debug programs they have written. Here the user can run the program line-by-line, set breakpoints, step into or over a line or function, examine variable values as the program executes, animate the program, etc. Selection of the ‘Debug’ option from the ‘Program’ menu causes creation of a ‘Debug’ menu  704   g  in the Menu bar  704 , as shown in FIG. 18. Table 7, below summarizes ‘Debug’ menu commands. Additionally, an icon corresponding to each ‘Debug’ menu option appears on the toolbar  705 , when the ‘Debug’ option is selected. The ‘Variable watch’ option generates a variable watch window  1800  as described in Table 7.  
                         TABLE 7                       Debug Menu Commands                                Step Into   Allows a user to debug a function by “going into” its           lines of code and then debugging it line by line.       Step Over   Allows a user to debug a function in its entirety by           “going over” it.       Continue   Allows a user to continue execution from at point at           which it is currently stopped       Break   Allows a user to set a breakpoint at a given line in the           code. When the program reaches that line, it pauses           execution.       Animate   Allows a user to execute the program line by line without           user intervention.       Stop   Allows the user to stop the execution of the program.       Variable Watch   Pops up the Variable Watch window which shows the           values of all variables that the user is interested in.                  
 
         [0075]    As shown in FIG. 19, the invention further provides a ‘Quiz’ mode. The application is provided with a quiz engine designed to operate using inbuilt program templates. This mode is used when the user is taking a quiz on programming concepts, in which they are expected to write, compile, run and finally submit for evaluation a fully working program, as part of the quiz question. The user uses the programming environment provided by the invention to do all of this. The server-side quiz interaction component  403  automatically evaluates the submitted program for correctness and grading.  
         [0076]    While the invention has been described in a network context, employing a client-server architecture, the principles of the invention are applicable to other settings.  
         [0077]    For example an alternative embodiment of the invention provides a standalone embodiment in which all components of the software learning system are installed on a freestanding computer. In such an embodiment, the software learning system may be provided on CD-ROM to a purchaser of a hard copy book, or an individual may purchase a suite of learning modules on a computer-readable medium that includes the standalone version of the software learning system. Thus, the entire environment is loaded on the freestanding machine including: all required development software i.e. compilers, databases, and so on. The content and code snippets of each module are available in HTML or XML on the freestanding machine and the user invokes the application by clicking on an icon embedded in the document. ‘Compile’ and ‘Run’ of each program occurs on the freestanding machine. In this embodiment, no server is involved. However, there may be instances where large-scale environments such as databases (e.g. Oracle) may still be required to be accessed on the server.  
         [0078]    The invention is implemented using conventional methods of computer programming and programming languages known to those skilled in the arts of computer programming and software engineering. It should be noted that the invention has been described as having one server while, in fact, the server side may actually involve a number of different servers, for example, application servers, content servers, web servers, and database servers.  
         [0079]    Although the invention has been described herein with reference to certain preferred embodiments, one skilled in the art will readily appreciate that other applications may be substituted for those set forth herein without departing from the spirit and scope of the present invention. For example, the invented system may be provided with a knowledge database, such as a digital library. Additionally, a facility may be provided for mailing selected files of a learning module to selected recipients, or to a newsgroup, listserv or bulletin board, or for interacting with a virtual community of users in other ways. Accordingly, the invention should only be limited by the claims included below.