NYU flag

New York University
Courant Institute of Mathematical Sciences
Computer Science Department

Arthur Goldberg
Visiting Academic and former Clinical Associate Professor
Last updated in March 2009
Photo of Arthur Goldberg


Arthur Goldberg's Courses Taught in the Computer Science Department at New York University





Information Technology Projects

In this course I hope you will learn some of the skills required to participate in and run IT projects that succeed. You will simultaneously learn skills in the classroom and apply the skills in a small, real-world project at a local 'client'. Our clients are typically firms, but occasionally we serve non-profits or government agencies.

What are these projects like? I select projects that teach you about technologically important systems. I seek problems that involve widely used technologies of growing influence. These technologies include the Internet, the World Wide Web, Intranets, Java, and databases. However, I do consider projects involving other important technical areas of mutual interest to you and our clients. To increase the resources available to you, I try to obtain projects that use technologies that are available in our campus computing environment.

I recruit projects that conduct a variety of types of tasks:

Software development: A client needs some software to solve a particular business problem. The team quickly works its way through the software development life cycle – including requirements gathering, architecture, design, development and testing – to produce a prototype system that addresses the business problem. The deliverables are the prototype code and a report. The report should document advice and knowledge gained during the project that might be useful to the staff at the client who will build a production system based on the prototype. About ¾ of our projects involve software development.

Software purchase evaluation: In this type of project a client also needs some software to solve a particular business problem. However, suppose it makes more sense to address this problem by purchasing, rather than building, the software. Further assume that the client agrees with this assessment. In this case, the team begins by analyzing the business problem and gathering requirements. It then designs an architecture that would connect the new system with existing systems. In the project's second half the team evaluates commercial products that might meet the requirements. The deliverables are a report that compares that several best products for the purpose, and, perhaps, demonstrations of the functionality of one or more of the products.

Software tool evaluation: In this type of project a client needs to obtain some software tools which they will employ to help develop software that will solve a set of business problems. As in the previous evaluation, the team begins by analyzing the business problem and gathering requirements. Typically there are at most a few tools that are viable candidates. In the project's second half, the team usually evaluates the candidate tool or tools by designing and building a prototype. The deliverables are the prototype code and a report that documents the tool's strengths and weaknesses.

I seek projects early in their development, so you can experience the full software project life cycle.

I organize you into teams of about four students. Your team will undertake one project that lasts the semester. Note that as a team you devote about 3 person-months of effort to the project.

The readings, classroom lectures, discussions and activities will teach skills that help implement projects of this size. I attempt to convey skills that are pragmatic, simple and efficient:

  • Gather requirements

  • Specify goals and deliverables

  • Quickly choose a development approach

  • Estimate effort

  • Allocate tasks among team members

  • Evaluate and enhance code quality with testing and reviews

  • Communicate to 'management' (the client and me), including communications that range from brief status reports to prepared presentations

  • Communicate within the team

Concurrently with lectures, you'll practice these skills in your project and/or observe your fellow students doing so. (Not all projects require all skills.)

You'll also obtain feedback from me based on close observation of your work.

Classroom lectures will discuss cover software engineering (SE) skills and issues relevant to larger projects and the development and maintenance of good SE cultures. These include SE culture improvement such as the CMM and Weinberg's work, software standardization, and technology trends.

2007: Spring

2006: Spring, Fall

2005: Spring, Fall

2004: Spring, Fall

2003: Spring, Fall

2002: Spring, Fall

2001: Fall

2000: Spring, Fall

1999: Spring, Fall

1998: Spring, Fall

1997: Spring, Summer, Fall

1996: Spring

Internet and Intranet Protocols and Applications

Former students of this course have built production Internet or intranet programs for GIST, Citigroup, Morgan Stanley, Deutsche Bank, mail.com, Interworld – a major early Internet startup, and other firms.

To follow in their footsteps, in this course you’ll learn how to write reliable, high-performance, maintainable Internet programs in Java. We'll design and implement the programs on top of the primary Internet programming interfaces in Java's networking package, mainly the socket interfaces. You'll learn how to implement servers, clients and caching proxies (a proxy is simultaneously both a server and a client). We'll also explore peer-to-peer systems.

You'll learn how to read and understand the primary specifications of Internet protocols in the sometimes arcane Requests for Comment (RFC) documents. Your programs that implement part of an RFC will interoperate with standards-compliant production systems.

You'll learn how – and when – to employ the major network communications technologies: packet-based UDP, stream-based TCP, and multicast. Your servers will support multiple concurrent clients via threading, non-blocking IO or a combination of these techniques. Given the importance of network program performance, I'll teach you about tuning network applications.

We'll explore a significant subset of these widely used Internet protocols: the Web's HTTP and HTTPS, email's SMTP, IMAP and POP3, peer-to-peer's Gnutella, and some real-time protocols such as VOIP, etc.

In addition, I'll encourage you to practice skills for writing good code, including the concepts of OO design, and testing TCP programs without a network.

2006: Spring

2005: Spring

2004: Spring

2003: Spring

2000: Spring

1999: Spring

1998: Spring

1997: Spring

Producing Production Quality Software

Consider these two cases:

In the late 1980s software problems in a computerized radiation therapy machine called the Therac-25 caused it to irradiate 6 patients with massive overdoses of radiation. Four patients died, while the others were seriously injured. Careful investigation points to an absence of concurrency control as the cause of the problem (Leveson and Turner, An Investigation of the Therac-25 Accidents).

After years of touting its Virtual Case File system as the pinnacle of case management software, in February 2005 the FBI informed a Senate Appropriations subcommittee that the project failed at a waste of $104 million. Thus, almost 4 years after 9/11 FBI agents still cannot use a modern computer system to manage information about terrorist and traditional cases (Wilson P. Dizard, Senators fume as FBI admits Trilogy foul-ups). The IT mismanagement problems that lead to this disaster are well documented and avoidable: US Department of Justice, Inspector General Audit Report, The Federal Bureau of Investigation's Management of the Trilogy Information Technology Modernization Project, and McGroddy and Lin, Editors, Committee on the FBI's Trilogy Information Technology Modernization Program, National Research Council, A Review of the FBI's Trilogy Information Technology Modernization Program (free pdf).

In this course you'll learn how to design and write software that won't accidentally kill people or waste millions of dollars and anger US senators.

Producing quality production software involves many crucial steps. These include requirements gathering, specification, effort estimation, design, implementation, testing and deployment. All software development models, from waterfall to iterative to agile, involve each of these steps to some degree. In this course you'll learn how to succeed in all of these steps, and acquire deep expertise and experience in design, implementation and testing.

This course will use Java. We will read a lot of code in class, and you'll implement your assignments in Java. The professor (and/or trained TAs) will read the code you write for assignments and propose improvements where applicable.

If you want to learn how to write great code, take this course.

2005: Fall

2004: Fall

2003: Fall

System Quality

A high quality product is a good product. System Quality examines common problems with computer systems, and presents techniques to develop and maintain high quality systems. We subdivide quality into software quality and data quality.
The quality of software is measured in several ways, including functionality, suitability for the specified task, reliability, usability, efficiency, and maintainability (ISO standard 9126). We discuss the best software development practices. We explore techniques that efficiently reduce defect rates, such as peer reviews, 'extreme programming' and careful testing. We investigate approaches that can improve the quality of an organization's management of software development processes.
The quality of data is also measured in several ways, including completeness, accuracy, and absence of duplication. We investigate the cost of poor data quality. Following the work of Loshin, we discuss how poor quality data can be cleaned, and how data collection can be designed to ensure high quality.
Throughout the course we try to focus on small-scale techniques that students can implement individually or in small teams in their IT workplace, with or without management support.

2002: Fall

Telecommunications and Coordination Technologies

This course surveys the major components and functions of electronic communications systems, focusing on computer networks and reviewing telephone and cable television networks. It discusses the major trends and issues relating to network technologies. Among the specific topics covered are principles and standards of computer communication, the underlying technologies for communication systems, network protocols and network software.

2000: Spring, Fall

1999: Fall