CFC (Comment-First-Coding)--A Simple yet Effective Method for Teaching Programming to Information Systems Students

1. INTRODUCTION Building information systems is a significant component of any Information Systems curriculum. There are two aspects of building information systems--(a) design and (b) development. Most Information Systems curricula include a Systems Analysis and Design course, with potential follow up courses such as Object-Oriented Design, Database Design, etc. While colleges of business do not aim to produce programmers, the knowledge of programming provides business analysts with a better insight towards the actual efforts needed for developing an information system solution. Besides, the accrediting bodies for the colleges of business realize the necessity for application development knowledge in an Information Systems curriculum. Specifically, the ABET Information Systems accreditation requirements include the knowledge of at least one programming language in the Information Systems programs (ABET, 2008). The IS2009 curriculum, a joint venture between the Association of Computing Machinery and Association of Information Systems also recommend one or more application development courses, and even an application development track in the IS curriculum (Topi, et al., 2009), demonstrating clearly the importance for IS faculty to teach application development topics in courses. One of the most difficult aspects in teaching application development strategies to students is to help them move from a problem description to logic, and finally from logic to programming code. To reduce the complexity of the programming structure, different types of design methodologies have been introduced, such as the Object-Oriented Design (OOD) and Aspect-Oriented Design (AOD). A number of visual tools exist that help application developers build the skeletal structures of their applications, (e.g., Rational Rose Data Modeler (http://www-01.ibm.com/ software/awdtools/developer/datamodeler/). Many diagramming tools such as DIA (http://live.gnome.org/Dia) and Microsoft Visio (http://office.microsoft.com/en-us/visio/) also include similar capability. While these tools can be used to create the object structure, they do not help with the final phase of translating specification into logic and then into code. Application designers use logic design methods such as Flow charts (IBM, 1969) that to capture program structure, including loops, decisions, procedures and branches. However, a flow chart for even a moderately complex program can become exceedingly complex. Tools such as FlowC (Gill, 2004) help reduce some complexity by reducing the drawing overhead of flow charts. Nassi and Shneiderman (1973) developed the Nassi-Shneiderman diagram (NSD) that allowed program structures to be represented in a more compact form. Scandura (1990) generalized and extended NSD using Flowforms, and enabled visual programming by allowing the development of programs via a semi-textual interface. Stone (1987) proposed various instructional techniques for using Flowforms in introductory Computer Science instruction. Visual and guided programming has shown to improve programming efficiency and code performance, while preserving program comprehension (Naharro-Berrocal, Pareja-Flores, Urquiza-Fuentes, & Velazquez-Iturbide, 2002). Visualizations are especially useful for the purposes of debugging (Baecker, DiGiano, & Marcus, 1997) and other post-development tasks. While several design tools that provide visual methods to complex development tasks are in existence, most of these tools require additional costs or learning time that adds to the difficulty of designing courses with a significant development component. While there are many tools that help programmers design and create applications, students learning the concept of programming need a technique that help in the process of gradually move from specification into logic, and finally from logic into actual code. This is the motivation for the teaching tip presented in this paper, which we introduce next. …