Courses Offered

105. An Introduction to Computers and their Applications (3). A computer literacy course designed to give students an introduction to the historical development of the computer; uses of the computer in business, industry, government, education, and the home; hardware components of a computer system; data representation, system analysis and design; issues of ethics posed by technology, and indication of future trends for computers. The laboratory section includes hands-on experience with a microcomputer and standard commercial software packages including word processing, spreadsheet, databases, and some acquaintance with BASIC language.

201. FORTRAN Programming (3). Fundamentals of computer programming in FORTRAN and their application to problems.

205. COBOL Programming (3). Fundamentals of computer programming in COBOL and their applications to problems.

206. BASIC Programming (3). Fundamentals of computer programming in BASIC and their application to problems.

207. C Programming (3). Fundamentals of computer programming in C and their application to problems.

210. Introduction to Computer Science (3). This course is a broad introduction to the discipline of computer science. The topics covered include algorithms, computer hardware, operating systems, introduction to high-level language programming, databases, artificial intelligence and other applications, and social issues.

211. Problem Solving and Programming in C (3). A first course in programming in a high level language. The course will emphasize analyzing problems, designing solutions and expressing them in the form of a well-structured program in the high level language C.

217. C++ Programming (3). Fundamentals of object-oriented programming in C++ with applications to problems.

300. Data Structures and Algorithms I (4). Basic data structures and associated algorithms. Includes stacks, queues, linked lists, trees and graphs. Algorithms are analyzed for efficiency and correctness.

312. Assembly Language and Systems Programming (3). Fundamentals of assembly language programming. Includes assembler, text editor, arithmetic, machine instructions, macros, code view debugging and memory segments. Programming assignments reinforce textbook knowledge.

320. Discrete Structures in Computer Science (3). Deals with discrete structures relevant to computer science, including propositional and predicate logic, proof technique, recursion, introduction, and analysis of algorithms; sets and combinatorics: counting principles, permutations and combinations, the binomial theorem; partially ordered relations, equivalence relations; functions: one-to-one functions; matrices; graphs and trees.

365. Introduction to Computer Graphics (3). An introduction to interactive computer graphics which presents the basic concepts of the field. Includes geometry of computer graphics, primitives, two- and three- dimensional representation, transformation, data structures, windowing, and clipping, hidden lines and surfaces and shading. Extensive use of computers provides practical experience.

410. Programming Paradigms (2). Exposure to computer programming in various styles of languages. Emphasizes programming rather than theory.

420. Automata and Formal Languages (3). Finite automata, regular expressions, pushdown automata, context-free languages, Turing machines, and formal grammars.

440. Computer Organization and Architecture (4). A study of basic computer hardware, organization, and architecture. Includes number representation, arithmetic, binary logic, circuit design, communication between major computer components, instruction processing cycle, system design, addressing techniques and the concepts of microprogramming. Hardware laboratory demonstrates the concepts.

481. Cooperative Education in Computer Science (1-3). Provides a field placement that integrates theory with a planned and supervised professional experience designed to complement and enhance the student's academic program.

501. Numerical Programming Techniques (3). A study of the programming techniques used to solve nonlinear equations, interpolate, integrate and solve systems of linear equations. Discusses the implications of finite precision floating point arithmetic. Also covers techniques for initial and boundary value problems in ordinary differential equations. Selected algorithms are implemented on the computer.

510. Programming Language Concepts (3). Theoretical concepts in the design and use of programming languages, including scope of declarations, storage allocation, subroutines, modules, formal methods for the description of syntax semantics. Introduction to the concepts of different styles of languages -- imperative languages, functional languages, logic languages, object-oriented languages, etc.

540. Operating Systems (3). Covers the fundamental principles of operating systems: process synchronization, scheduling, resource allocation, deadlocks, memory management, and file systems. Studies a specific operating system in depth. Programming assignments consist of modifications and enhancements to the operating system studied.

560. Data Structures and Algorithms II (3). Design and analysis of algorithms. Techniques for design and analysis of algorithms and proof of correctness. Analysis of space and time complexities of various algorithms including several sorting algorithms. Hashing, binary search trees and height balanced trees. Algorithm design techniques including divide and conquer, greedy strategies, and dynamic programming. Elementary graph algorithms.

612. Systems Programming (3). A study of system software including assemblers, disassemblers, macro processors, linkers, loaders, language translators and debuggers. Practical experience in building system software through programming laboratory exercises.

615. Compiler Construction (3). A first compiler course for students with a good background in programming languages and sufficient programming experience. The topics covered in the course include overall design and organization of compilers and interpreters, lexical and syntax analysis, construction of symbol tables, scope analysis, type checking, error recovery, run-time organization, intermediate code and its interpretation, code generation and optimization. The course is project-oriented. The main emphasis is on practical experience gained through the design and implementation of a simplified but non-trivial compiler for a strongly typed, procedural language. The implementation is carried out in a modern systems programming environment.

632. Symbolic Computation with LISP (3). An in-depth study of LISP as a functional programming language with its application to artificial intelligence, polynomial computation and theorem proving. Complete substantial programming projects in LISP.

665. Introduction to Database Systems (3). An introduction to the fundamental aspects of database systems. Topics include: conceptual database design, entity- relationship modeling, and object-oriented modeling; the relational data model and its foundations, relational languages, and SQL (Structured Query Language); logical database design, dependency theory, and normal forms; physical database design, file structures, indices, and decomposition; integrity, security, concurrency control, recovery techniques, and optimization of relational queries.

674. Artificial Intelligence and Philosophy (3). Cross-listed as Phil 674. Transfer of ideas between artificial intelligence and philosophy: concepts and techniques of artificial intelligence and their application in philosophy (search, heuristic, problem solving, knowledge representation, learning, discovering); sources of insight for artificial intelligence in different branches of philosophy. The analogy between minds and computers "cognition is a computation and the mind is a computer" is contrasted with "there are mental features not accessible to computation." Discusses the relevance of Gödel's theorem and of other results in the domain of computability.

680. Introduction to Software Engineering (3). An introduction to the body of knowledge, presently available tools and current theories and conjectures regarding the process of program development. Studies these topics from several different viewpoints, ranging from the individual program statements to a large programming project.

684. Applications Systems Analysis (3). A study of the methods for analyzing business systems problems and other large-scale applications of the computer. At the crossroads of computer technology, management science and human relations, systems analysis is the keystone in the education of the well-trained computer applications analyst. Includes systems design, cost benefit analysis, data base design, distributed processing, project management and documentation.

690. Information Systems Engineering (3). Study of information systems design techniques, issues of system evolution, project management, engineering design, various views of information systems evolution, project management, engineering design, various views of information systems and software and formal design approaches. Covers structured analysis and design approach, object-oriented approach, software design, database design, rule modeling, user interface design, performance evaluation issues relative to software design, systems evolution aspects from a software maintenance perspective, project management techniques and information systems engineering.

720. Theoretical Foundations of Computer Science (3). Provides an advanced level introduction to the theoretical bases of computer science. Computer science theory includes the various models of finite state machines, both deterministic and nondeterministic, and concepts of decidability, computability and formal language theory.

742. Computer Communication Networks (3). Introduction to network programming for the Internet environment including the basic concepts of TCP/IP, client-server paradigm, programming of clients and various types of servers, remote procedure calls, concurrency management and interconnection techniques. Emphasizes the design principles that underlie implementation of practical applications.

750. Workshop in Computer Science (1-5). Short-term courses with special focus on introducing computer science concepts. Repeatable for credit.

771. Artificial Intelligence (3). Heuristic versus algorithmic methods, principles of heuristic approach and cognitive processes. Also covers objectives and methods of artificial intelligence research and simulation of cognitive behavior. Includes a survey of appropriate examples from various areas of artificial intelligence research.

776. Expert Systems (3). Planning, construction and application of expert systems. Discusses major aspects of expert systems; illustrates with various examples, including data representation, knowledge bases, inference engines, user interfaces, explanatory facilities, metarules and dealing with uncertainty. Introduces basics of a production system language.

798. Individual Projects (1-3). Allows beginning graduate students and mature undergraduate students to pursue individual projects of current interest in computer science. Graded S/U only.

805. Compiler Theory (3). Theory of compilation of programming languages. Finite state machines and lexical analysis. Context-free languages and recognizer. Theory of parsing, including recursive-decent, top-down and bottom-up parsers. Formal description of semantics and code generation. Code optimization. Compiler-compilers.

810. Programming Languages: Advanced Concepts (3). An advanced study of programming language structures and design. Data and control structures and their abstraction. Concurrent programming structures. Formal specifications of syntax and semantics, including models for establishing program correctness. Criteria for language design.

821. Analysis of Algorithms (3). Deals with advanced topics in the design and analysis of algorithms, including sorting networks, algorithms for parallel computers, Strassens algorithm for matrix multiplication, polynomial multiplication and the FFT, number theoretic algorithms (gcd computation), and hard problems and interactibility.

822. Parallel Algorithms (3). Deals with the design and analysis of parallel algorithms for various combinatorial problems in the Parallel Random Access Machine (PRAM) model. Covers models of parallel computation, the PRAM model, basic techniques for designing parallel algorithms, algorithms on lists and trees, and algorithms for selection, merging, sorting, searching, as well as algorithms for graph problems.

841. Advanced Computer Architecture (3). A study of advanced topics in computer architecture like parallel processing, stack architectures, computer performance evaluation and reliability of computing systems. Studies architectures of typical systems belonging to the IBM, CDC and Burroughs families of computers.

842. Operating Systems Concepts (3). A comprehensive treatment of the design of executive software for systems ranging from simple multi programming to multi processor and network environments. Addresses concepts of concurrent and parallel processes, related problems of intra- and inter-system communication, synchronization and integrity. Presents general principles of resource management as related to single processor and multi processor environments.

843. Distributed Computing Systems (3). A study of hardware and software features of online multiple computer systems emphasizing network design and telecommunications. Including distributed data bases, interprocessor communication and centralization versus distribution. Also includes study of the use of microcomputers in representative configurations.

862. Advanced Database Systems (3). This course covers recent developments and advances in database technology. It is designed for students who have had a first database course and have a good background in the related computer science disciplines. Possible topics include: extended relational database management systems, object-oriented database management systems, deductive databases, database type systems and database programming language, persistent languages and systems, distributed databases.

872. Machine Learning and Discovery (3). An advanced study of computer programs that learn, improve performance and make discoveries. Includes objectives, methods and research paradigms for such systems, a survey of existing methods and applications, including the most recent developments; theoretical principles for learning and discovery systems; computational theories of learning processes and cognitive models of human learning; concept and theory formation, and use of analogy in learning. Includes participation in a group project such as developing a computer learning system.

873. Computer Vision (3). An introduction to computing vision, a rapidly growing subfield of artificial intelligence. The basic topic is the understanding or description of images by a computer or robot. Covers two-dimensional Fourier analysis scene matching and understanding, texture, motion, shape recognition, relational image structure and human perception.

874. Simulation and Modeling (3). An up-to-date treatment of important aspects of simulation and modeling, including data collection, input and output data analysis, modeling principles, simulation with general purpose programming languages and special purpose simulation languages. Emphasizes theory, design, and implementation of modeling languages.

881. Software Specification and Design (3). A detailed presentation of the techniques and tools available for the specification of software requirements and their translation into a design. Includes formal specification and design methods such as structured analysis, object-oriented design and JSD.

882. Software Testing and Reliability (3). A study of the ingredients of software quality assurance and their interaction. Characteristics of software quality and methods of measurement, software reliability models and program testing and tools for software development and testing. Methods for proving program correctness and comparison.

886. Software Project Management (3). Presents the knowledge, techniques and tools necessary to manage the development of software products. Topics include the phases and activities involved in building a project, the skills and tools required for estimating and scheduling and the responsibilities of the individuals involved.

889. Topics in Software Engineering (3). An in-depth study of one or more topics in software engineering, such as Configuration Management, Quality Assurance, Formal Specifications, or Real-time Software Development. Actual topics vary with instructor's area of expertise. May be repeated for credit with different topics, but topics taken under previous course numbers may not be repeated.

890. Graduate Seminar (2). A series of seminars on topics of current research interest in computer science. Participants are required to present one or two seminars on topic(s) to be selected with the approval of their graduate advisors. Repeatable up to four credit hours. Graded S/U only.

891. Project (3). An intensive project involving the analysis and solution of a significant practical problem which must be supervised by a CS graduate faculty advisor, and can be job-related. Students must write a report on the project and pass an oral final examination by an ad hoc faculty committee headed by the project advisor. Graded S/U only.

892. Thesis (1-6). May be repeated for up to six hours of credit. Graded S/U only.

893. Individual Reading (1-5). Graded S/U only.

898. Special Topics (2-3). Topics of current interest to advanced students of computer science. Repeatable for credit.

grad@cs.twsu.edu