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
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…
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.
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.
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.
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.
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.
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.
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.”
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.
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.
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.
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.
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.
This discussion between a moderator (Mr. Patch) and two software engineering subject matter experts (Mr. Corley and Dr. Fawcett), walks through a set of common functions, first implemented through C++ and then in Rust, to note initial speed, performance and security of memory access differences. This podcast covers the ground rules for the side-by-side comparison to ensure the methods used are thoroughly understood.
This discussion between a moderator (Mr. Patch) and two software engineering subject matter experts (Mr. Corley and Dr. Fawcett), walks through a set of common functions, first implemented through C++ and then in Rust, to note initial speed, performance and security of memory access differences. This episode describes how the comparison was conducted by using both Rust and C++ to perform the same function under the relatively same conditions.
The series ends by answering key questions and provides advice as to where to get started with this new language that is quickly being adapted by Fortune 500 companies.