Dr. James Fawcett is Teaching Professor Emeritus of Computer Engineering at Syracuse University. He has extensive experience in industry and in academia.
From 1991 to May 2019, Dr. Fawcett taught a sequence of graduate software design courses, focused on methods and strategies for design, development, and management of large and complex distributed software systems. Prior to that, he worked in various roles for General Electric (GE) company, including Advanced Engineering Training assignments, Systems Engineer at the Electronics Laboratory, and Developer and Manager in the Radar Systems Department. He also taught, as an adjunct, a variety of graduate Electrical Engineering courses at Syracuse University.
Currently, Dr. Fawcett is developing a GitHub code repository – a collection of reusable software components with corresponding documentation and blogs. The site also serves as a platform for experimenting with methods for documenting and deploying code.
Podcasts / Webinars
CSIAC Webinars » Publishing Domain Specific Source Code for Reuse and Maintenance
Software reuse of components supplied by language libraries and libraries affiliated with languages are great success stories. However, reuse of domain specific code – that supporting the specific needs of specialized domains like research, teaching, industrial development – has not…
C++ Models » Code Structure – C++ Models Part 1 of 6
Part 1 of this 6-part video series discusses techniques for structuring code to support an effective code management strategy (specifically with regard to readability and maintenance) as software systems become large and difficult to understand. The use of packages with object factories and interfaces is discussed with an example.
C++ Models » Compilation and Execution – C++ Models Part 2 of 6
Part 2 of this 6-part video series discusses the compilation process model, the preprocessor, and operations of the compile-link-load tool chain. The Execution model is described with a focus on function stack frames, memory, and use of streams.
C++ Models » Memory and Class Models – C++ Models Part 3 of 6
Part 3 of this 6-part video series discusses the memory model paradigm, and foundational concepts behind the usage of memory: static, stack, and heap. The Class Model is described using illustrations of the relationships between code residing in static memory, and instances of objects in stack memory.
C++ Models » C++ Object Model – C++ Models Part 4 of 6
Part 4 of this 6-part video series provides a conceptual overview of the C++ object model with description and exemplars that illustrate the layout of code in memory, and how the layout of memory affects object construction.
C++ Models » C++ Polymorphism – C++ Models Part 5 of 6
Part 5 of this 6-part video series discusses methods for building code with the flexibility to support change. Public inheritance coupled with pointers and references, support type substitution and provides one method to enable code to change without breaking existing package dependencies. The virtual function dispatching model is described with an exemplar.
C++ Models » C++ Templates and Conclusions – C++ Models Part 6 of 6
Part 6 of this 6-part video series describes templates with a focus on the code generation model. Template function overloading and template class specialization are discussed. The conclusions section provides information on where to find the models presentation and the example code.
Rust Models » Introduction to the Rust Programming Language – Rust Models Part 1
This video provides an introduction and a brief overview of the Rust Programming Language. It covers the prerequisites required for getting started. This includes: the setup of a development environment using Visual Studio Code, and the Rust package manager and build tool known as “Cargo.”
Rust Models » Ownership Model – Rust Models Part 2
Discusses the Rust Language Ownership model which uses a type safety policy for avoiding undefined program behavior. The Rust type system ensures memory safety and prevents data races in multi-thread programs. The language rules for program variable (data) mutation, and the differences between value copies and moves is discussed in detail. Variable data is, by default, immutable. Variables must be annotated with the “mut” keyword in order to be modified.
Rust Models » Object Model – Rust Models Part 3
This video discusses the Rust Object model and language facilities for representing user-defined types. Rust does not have support for classes, but does provide structs, which are similar to classes used in other object-oriented languages like C++. “Traits” are similar to interfaces or abstract classes and support polymorphic operations. Rust provides encapsulation of data members and access control through the use of the “pub” keyword which specifies whether members of a struct are accessible to clients.
Rust Models » Generic Types – Rust Models Part 4
This video discusses Rust “Generic Types”, a language facility for defining types that depend on a parameter specified at compile time. Rust Generics are similar to generic types used in Java and C#, but unlike C++ templates which support specialization.
Rust Models » Code Structure – Rust Models Part 5
This video discusses structure and organization of Rust projects. Crates and packages (modules) are the building blocks for Rust programs. Programs are composed of sources organized into packages that consist of a directory built with the Cargo build tool.
CSIAC Webinars » Rust Error Handling
Rust is a modern programming language that supports safe system programming with: compiler verified freedom from undefined behavior, support for building race-free multithreaded code, and ability to create abstractions needed for building large maintainable code bases. This presentation begins with…
Rust Models » Rust Programming Language: Addressing Software Development and Program Security Shortfalls
This podcast features a roundtable discussion centered around challenges and benefits of using a new programming language called “Rust,” which can fundamentally improve resilience and survivability of software intensive systems.
Leave a Comment
You must be logged in to post a comment.