Introduction to Programming Languages: Programming in C, C++, Scheme, Prolog, C#, and Python
Author(s): Yinong Chen
Edition: 7
Copyright: 2024
Pages: 565
Choose Your Platform | Help Me Choose
Introduction to Programming Languages: Programming in C, C++, Scheme, Prolog, C#, and Python takes a balanced approach to teaching programming paradigms, principles, and the language mechanisms while focusing on language constructs and programming skills. It is intended for a course where students have already completed a basic computer science course and have learned a high-level programming language like C, C++, or Java.
Introduction to Programming Languages:
- covers five languages: imperative C, object-oriented C++, functional Scheme, logic Prolog, and multi-paradigm Python.
- teaches language structures at different layers (lexical, syntactic, contextual, and semantic), the control structures and the execution models of imperative, object-oriented, functional, and logic programming languages.
- explains program processing (compilation vs. interpretation) and preprocessing (macros and inlining).
- describes different aspects of a variable, including its type, scope, name, address, memory location, and value.
- uses program examples to explain the contents and uses memory maps to show the execution process.
- includes assignments, programming exercises, and projects at the end of each chapter.
This is packaged with access to the KHQ, a user-friendly, self-testing application available on the iTunes and Google Play store. It includes questions based on the content in the publication and gives students feedback and explanations on answers.
Preface
Chapter 1 Basic Principles of Programming Languages
1.1 Introduction
1.1.1 Programming concepts and paradigms
1.1.2 Program performance and features of programming languages
1.1.3 Development of programming languages
1.2 Structures of programming languages
1.2.1 Lexical structure
1.2.2 Syntactic structure
1.2.3 Contextual structure
1.2.4 Semantic structure
1.2.5 Error types at different levels
1.2.6 BNF notation
1.2.7 Syntax graph
1.3 Data types and type checking
1.3.1 Data types and type equivalence
1.3.2 Type checking and type conversion
1.3.3 Orthogonality
1.4 Program processing and preprocessing
1.4.1 Interpretation and compilation
1.4.2 Preprocessing: macro and inlining
*1.5 Program development
1.5.1 Program development process
1.5.2 Program testing
1.5.3 Correctness proof
1.6 Summary
1.7 Homework and programming exercises
Chapter 2 The Imperative Programming Languages, C/C++
2.1 Getting started with C/C++
2.1.1 Write your first C/C++ program
2.1.2 Basic input and output functions
2.1.3 Formatted input and output functions
2.2 Control structures in C/C++
2.2.1 Operators and the order of evaluation
2.2.2 Basic selection structures (if-then-else and the conditional expression)
2.2.3 Multiple selection structure (switch)
2.2.4 Iteration structures (while, do-while, and for)
2.3 Data and basic data types in C/C++
2.3.1 Declaration of variables and functions
2.3.2 Scope rule
2.3.3 Basic data types
2.4 Complex types
2.4.1 Array
2.4.2 Pointer
2.4.3 Array and string
2.4.4 Constants
2.4.5 Enumeration type
2.5 Compound data types
2.5.1 Structure types and paddings
2.5.2 Union
2.5.3 Array of structures using static memory allocation
2.5.4 Linked list using dynamic memory allocation
2.5.5 Doubly linked list
2.5.6 Stack
2.6 Standard input and output, files, and file operations
2.6.1 Basic concepts of files and file operations
2.6.2 File operations in C
2.6.3 Flush operation in C
2.7 Functions and parameter passing
2.7.1 Call-by-value
2.7.2 Call-by-address
2.7.3 Call-by-alias
2.7.4 Passing a structure into a function
2.7.5 Passing an array into a function
2.8 Recursive structures and applications
2.8.1 Loop structures versus recursive structures
2.8.2 The fantastic-four abstract approach of writing recursive functions
2.8.3 Hanoi Towers
2.8.4 Insertion sorting
2.8.5 Merge sort algorithm
2.8.6 Quick sort algorithm
2.8.7 Tree operations
2.8.8 Gray code generation
2.9 Modular design
2.10 Case study: putting all together
2.11 Summary
2.12 Homework, programming exercises, and projects
Chapter 3 The Object-Oriented Programming Language, C++
3.1 A long program example: a queue and a priority queue written in C++
3.2 Class definition and composition
3.2.1 Class definition
3.2.2 Scope resolution operator
3.2.3 Objects from a class
3.2.4 Definition of constructor and destructor
3.3 Memory management and garbage collection
3.3.1 Static: global variables and static local variables
3.3.2 Runtime stack for local variables
3.3.3 Heap: dynamic memory allocation
3.3.4 Scope and garbage collection
3.3.5 Memory leak detection
3.4 Inheritance
3.4.1 Class containment and inheritance
3.4.2 Inheritance and virtual function
3.4.3 Inheritance and hierarchy
3.4.4 Inheritance and polymorphism
3.4.5 Polymorphism and type checking
3.4.6 Polymorphism and late binding
3.4.7 Type Casting in C++
3.5 Function and operator overloading
3.5.1 Function overloading
3.5.2 Operator overloading
3.6 File operations in C++
3.6.1 File objects and operations in C++
3.6.2 Ignore operation in C++
3.7 Exception Handling
3.8 Case study: putting all together
3.8.1 Organization of the program
3.8.2 Header files
3.8.3 Source files
*3.9 Parallel computing and multithreading
3.9.1 Basic concepts in parallel computing and multithreading
3.9.2 Generic features in C++
3.9.3 Case study: implementing multithreading in C++
3.10 Summary
3.11 Homework, programming exercises, and projects
Chapter 4 The Functional Programming Language, Scheme
4.1 From imperative programming to functional programming
4.2 Prefix notation
4.3 Basic Scheme terminology
4.4 Basic Scheme data types and functions
4.4.1 Number types
4.4.2 Boolean
4.4.3 Character
4.4.4 String
4.4.5 Symbol
4.4.6 Pair
4.4.7 List
4.4.8 Application of Quotes
4.4.9 Definition of procedure and procedure type
4.4.10 Input/output and nonfunctional features
*4.5 Lambda-calculus
4.5.1 Lambda-expressions
4.5.2 l-procedure and parameter scope
4.5.3 Reduction rules
4.6 Define your Scheme procedures and macros
4.6.1 Unnamed procedures
4.6.2 Named procedures
4.6.3 Scopes of variables and procedures
4.6.4 Let-form and unnamed procedures
4.6.5 Macros
4.6.6 Compare and contrast imperative and functional programming paradigms
4.7 Recursive procedures
4.8 Define recursive procedures on data types
4.8.1 Number manipulations
4.8.2 Character and string manipulations
4.8.3 List manipulations
4.9 Higher-order functions
4.9.1 Mapping
4.9.2 Reduction
4.9.3 Filtering
4.9.4 Application of filtering in query languages
4.10 Summary
4.11 Homework, programming exercises, and projects
Chapter 5 The Logic Programming Language, Prolog
5.1 Basic concepts of logic programming in Prolog
5.1.1 Prolog basics
5.1.2 Structures of Prolog facts, rules, and goals
5.2 The Prolog execution model
5.2.1 Unification of a goal
5.2.2 Example of searching through a database
5.3 Arithmetic operations and database queries
5.3.1 Arithmetic operations and built-in functions
5.3.2 Combining database queries with arithmetic operations
5.4 Prolog functions and recursive rules
5.4.1 Parameter passing in Prolog
5.4.2 Factorial example
5.4.3 Fibonacci numbers example
5.4.4 Hanoi Towers
5.4.5 Graph model and processing
5.4.6 Map representation and coloring
5.5 List and list manipulation
5.5.1 Definition of pairs and lists
5.5.2 Pair simplification rules
5.5.3 List membership and operations
5.5.4 Knapsack problem
5.5.5 Quick sort
5.6 Flow control structures
5.6.1 Cut
5.6.2 Fail
5.6.3 Repeat
*5.7 Prolog application in semantic Web
5.8 Summary
5.9 Homework, programming exercises, and projects
Chapter 6 Fundamentals of the Service-Oriented Computing Paradigm
6.1 Programming in C#
6.1.1 Getting started with C# and Visual Studio
6.1.2 Comparison between C++ and C#
6.1.3 Namespaces and the using directives
6.1.4 The queue example in C#
6.1.5 Class and object in C#
6.1.6 Parameters: passing by reference with ref&out
6.1.7 Base classes and constructors
6.1.8 Constructor, destructor, and garbage collection
6.1.9 Pointers in C#
6.1.10 C# unified type system
6.1.11 Further topics in C#
6.2 Service-oriented computing paradigm
6.2.1 Basic concepts and terminologies
6.2.2 Web services development
6.2.3 Service-oriented system engineering
6.2.4 Web services and enabling technologies
6.3 *Service providers: programming web services in C#
6.3.1 Creating a web service project
6.3.2 Writing the service class
6.3.3 Launch and access your web services
6.3.4 Automatically generating a WSDL file
6.4 Publishing and searching web services using UDDI
6.4.1 UDDI file
6.4.2 ebXML
6.4.3 Ad hoc registry lists
6.5 Building applications using ASP.Net
6.5.1 Creating your own web browser
6.5.2 Creating a Windows application project in ASP.Net
6.5.3 Developing a website application to consume web services
6.6 Cloud computing and big data processing
6.6.1 Cloud computing
6.6.2 Big data
6.7 Summary
6.8 Homework, programming exercises, and projects
Chapter 7 The Multi-Paradigm Programming Language, Python
7.1 Introduction to Python
7.2 A quick start with Python
7.2.1 Install Python and run the first program
7.2.2 Install and use Python IDE
7.2.3 Python programming in Unix/Linux GNU IDE
7.2.4 Python programming in Visual Studio IDE
7.3 Python fundamentals
7.3.1 Variables, basic types, and functions
7.3.2 Control structures: conditional and loop statements
7.3.3 Recursive functions
7.3.4 Lambda expressions and functions
7.3.5 Higher-order functions: map, reduce, and filter
7.4 Python complex types and data structures
7.4.1 String and character
7.4.2 Array and list
7.4.3 Two-dimensional list
7.4.4 Dictionaries, sets, and tuples
7.5 Python class and inheritance
7.5.1 Class and object
7.5.2 Inheritance and case study
7.6 Input, output, and files
7.6.1 Input and output
7.6.2 File operations
7.6.3 Exception handling
7.6.4 Case study: putting all together
7.7 Summary
7.8 Homework and programming exercises
Appendix A Basic Computer Architectures and Assembly Language Programming
A.1 Basic computer components and computer architectures
A.2 Computer architectures and assembly programming
A.3 Subroutines and local variables on stack
Appendix B Programming Environments Supporting C, C++, Scheme, and Prolog
B.1 Introduction to operating systems
B.2 Introduction to Unix and GNU C/C++ programming environments
B.2.1 Unix and Linux operating systems
B.2.2 Unix shell and commands
B.2.3 Unix system calls
B.2.4 Getting started with GNU GCC under the Unix operating system
B.2.5 Debugging your C/C++ programs in GNU GCC
B.2.6 Frequently used GCC compiler options
B.2.7 C/C++ operators
B.2.8 Download programming development environments and tutorials
B.3 Getting started with Visual Studio programming environment
B.3.1 Creating a C/C++ project in Visual Studio
B.3.2 Debugging your C/C++ programs in Visual Studio
B.4 Programming environments supporting Scheme programming
B.4.1 Getting started with DrRacket
B.4.2 Download DrRacket programming environment
B.5 Programming environments supporting Prolog programming
B.5.1 Getting started with the GNU Prolog environment
B.5.2 Getting started with Prolog programming
B.5.3 Download Prolog programming development tools
Appendix C ASCII Character Table
Bibliography
Index
Yinong Chen received his Ph.D. from the Karlsruhe Institute of Technology (KIT), formerly known as the University of Karlsruhe, Germany, in 1993. He did postdoctoral research at KIT and at LAAS-CNRS – France between 1993 and 1995. From 1994 to 2000, he was a faculty member at Wits the University at Johannesburg, South Africa. Dr. Chen joined Arizona State University in 2001 and is a full teaching professor in the School of Computing and Augmented Intelligence and the director of IoT/Robotics Education Lab in the school.
Dr. Chen’s primary research interests are in software engineering, programming languages, service-oriented computing, artificial intelligence, Robot as a Service, Internet of Things, and computer science education (http://www.public.asu.edu/~ychen10/). He is the co-inverter of the VIPLE – Visual IoT/Robotics Programming Language Environment (https://venus.sod.asu.edu/VIPLE/) He (co-) authored a dozen books and over 300 technical papers in these research areas. Dr. Chen is the Editor-in-Chief of Journal of Artificial Intelligence and Technology since 2021, an associate editor of the International Journal of Simulation and Process Modelling (IJSPM) since Jan 2004, an area editor of the Elsevier journal Simulation Modeling Practice and Theory, since Jan 2006, and an editorial board member of the CAAI Transactions on Intelligence Technology, since Jan 2016. Dr. Chen has taught a wide variety of computer science and engineering courses, ranging from freshman, sophomore, junior, and senior, to graduate courses, at Wits University and at Arizona State University. He received two consecutive Teacher of the Year awards in 2008 and in 2009 from the School of Computing and Informatics at Arizona State University.
Introduction to Programming Languages: Programming in C, C++, Scheme, Prolog, C#, and Python takes a balanced approach to teaching programming paradigms, principles, and the language mechanisms while focusing on language constructs and programming skills. It is intended for a course where students have already completed a basic computer science course and have learned a high-level programming language like C, C++, or Java.
Introduction to Programming Languages:
- covers five languages: imperative C, object-oriented C++, functional Scheme, logic Prolog, and multi-paradigm Python.
- teaches language structures at different layers (lexical, syntactic, contextual, and semantic), the control structures and the execution models of imperative, object-oriented, functional, and logic programming languages.
- explains program processing (compilation vs. interpretation) and preprocessing (macros and inlining).
- describes different aspects of a variable, including its type, scope, name, address, memory location, and value.
- uses program examples to explain the contents and uses memory maps to show the execution process.
- includes assignments, programming exercises, and projects at the end of each chapter.
This is packaged with access to the KHQ, a user-friendly, self-testing application available on the iTunes and Google Play store. It includes questions based on the content in the publication and gives students feedback and explanations on answers.
Preface
Chapter 1 Basic Principles of Programming Languages
1.1 Introduction
1.1.1 Programming concepts and paradigms
1.1.2 Program performance and features of programming languages
1.1.3 Development of programming languages
1.2 Structures of programming languages
1.2.1 Lexical structure
1.2.2 Syntactic structure
1.2.3 Contextual structure
1.2.4 Semantic structure
1.2.5 Error types at different levels
1.2.6 BNF notation
1.2.7 Syntax graph
1.3 Data types and type checking
1.3.1 Data types and type equivalence
1.3.2 Type checking and type conversion
1.3.3 Orthogonality
1.4 Program processing and preprocessing
1.4.1 Interpretation and compilation
1.4.2 Preprocessing: macro and inlining
*1.5 Program development
1.5.1 Program development process
1.5.2 Program testing
1.5.3 Correctness proof
1.6 Summary
1.7 Homework and programming exercises
Chapter 2 The Imperative Programming Languages, C/C++
2.1 Getting started with C/C++
2.1.1 Write your first C/C++ program
2.1.2 Basic input and output functions
2.1.3 Formatted input and output functions
2.2 Control structures in C/C++
2.2.1 Operators and the order of evaluation
2.2.2 Basic selection structures (if-then-else and the conditional expression)
2.2.3 Multiple selection structure (switch)
2.2.4 Iteration structures (while, do-while, and for)
2.3 Data and basic data types in C/C++
2.3.1 Declaration of variables and functions
2.3.2 Scope rule
2.3.3 Basic data types
2.4 Complex types
2.4.1 Array
2.4.2 Pointer
2.4.3 Array and string
2.4.4 Constants
2.4.5 Enumeration type
2.5 Compound data types
2.5.1 Structure types and paddings
2.5.2 Union
2.5.3 Array of structures using static memory allocation
2.5.4 Linked list using dynamic memory allocation
2.5.5 Doubly linked list
2.5.6 Stack
2.6 Standard input and output, files, and file operations
2.6.1 Basic concepts of files and file operations
2.6.2 File operations in C
2.6.3 Flush operation in C
2.7 Functions and parameter passing
2.7.1 Call-by-value
2.7.2 Call-by-address
2.7.3 Call-by-alias
2.7.4 Passing a structure into a function
2.7.5 Passing an array into a function
2.8 Recursive structures and applications
2.8.1 Loop structures versus recursive structures
2.8.2 The fantastic-four abstract approach of writing recursive functions
2.8.3 Hanoi Towers
2.8.4 Insertion sorting
2.8.5 Merge sort algorithm
2.8.6 Quick sort algorithm
2.8.7 Tree operations
2.8.8 Gray code generation
2.9 Modular design
2.10 Case study: putting all together
2.11 Summary
2.12 Homework, programming exercises, and projects
Chapter 3 The Object-Oriented Programming Language, C++
3.1 A long program example: a queue and a priority queue written in C++
3.2 Class definition and composition
3.2.1 Class definition
3.2.2 Scope resolution operator
3.2.3 Objects from a class
3.2.4 Definition of constructor and destructor
3.3 Memory management and garbage collection
3.3.1 Static: global variables and static local variables
3.3.2 Runtime stack for local variables
3.3.3 Heap: dynamic memory allocation
3.3.4 Scope and garbage collection
3.3.5 Memory leak detection
3.4 Inheritance
3.4.1 Class containment and inheritance
3.4.2 Inheritance and virtual function
3.4.3 Inheritance and hierarchy
3.4.4 Inheritance and polymorphism
3.4.5 Polymorphism and type checking
3.4.6 Polymorphism and late binding
3.4.7 Type Casting in C++
3.5 Function and operator overloading
3.5.1 Function overloading
3.5.2 Operator overloading
3.6 File operations in C++
3.6.1 File objects and operations in C++
3.6.2 Ignore operation in C++
3.7 Exception Handling
3.8 Case study: putting all together
3.8.1 Organization of the program
3.8.2 Header files
3.8.3 Source files
*3.9 Parallel computing and multithreading
3.9.1 Basic concepts in parallel computing and multithreading
3.9.2 Generic features in C++
3.9.3 Case study: implementing multithreading in C++
3.10 Summary
3.11 Homework, programming exercises, and projects
Chapter 4 The Functional Programming Language, Scheme
4.1 From imperative programming to functional programming
4.2 Prefix notation
4.3 Basic Scheme terminology
4.4 Basic Scheme data types and functions
4.4.1 Number types
4.4.2 Boolean
4.4.3 Character
4.4.4 String
4.4.5 Symbol
4.4.6 Pair
4.4.7 List
4.4.8 Application of Quotes
4.4.9 Definition of procedure and procedure type
4.4.10 Input/output and nonfunctional features
*4.5 Lambda-calculus
4.5.1 Lambda-expressions
4.5.2 l-procedure and parameter scope
4.5.3 Reduction rules
4.6 Define your Scheme procedures and macros
4.6.1 Unnamed procedures
4.6.2 Named procedures
4.6.3 Scopes of variables and procedures
4.6.4 Let-form and unnamed procedures
4.6.5 Macros
4.6.6 Compare and contrast imperative and functional programming paradigms
4.7 Recursive procedures
4.8 Define recursive procedures on data types
4.8.1 Number manipulations
4.8.2 Character and string manipulations
4.8.3 List manipulations
4.9 Higher-order functions
4.9.1 Mapping
4.9.2 Reduction
4.9.3 Filtering
4.9.4 Application of filtering in query languages
4.10 Summary
4.11 Homework, programming exercises, and projects
Chapter 5 The Logic Programming Language, Prolog
5.1 Basic concepts of logic programming in Prolog
5.1.1 Prolog basics
5.1.2 Structures of Prolog facts, rules, and goals
5.2 The Prolog execution model
5.2.1 Unification of a goal
5.2.2 Example of searching through a database
5.3 Arithmetic operations and database queries
5.3.1 Arithmetic operations and built-in functions
5.3.2 Combining database queries with arithmetic operations
5.4 Prolog functions and recursive rules
5.4.1 Parameter passing in Prolog
5.4.2 Factorial example
5.4.3 Fibonacci numbers example
5.4.4 Hanoi Towers
5.4.5 Graph model and processing
5.4.6 Map representation and coloring
5.5 List and list manipulation
5.5.1 Definition of pairs and lists
5.5.2 Pair simplification rules
5.5.3 List membership and operations
5.5.4 Knapsack problem
5.5.5 Quick sort
5.6 Flow control structures
5.6.1 Cut
5.6.2 Fail
5.6.3 Repeat
*5.7 Prolog application in semantic Web
5.8 Summary
5.9 Homework, programming exercises, and projects
Chapter 6 Fundamentals of the Service-Oriented Computing Paradigm
6.1 Programming in C#
6.1.1 Getting started with C# and Visual Studio
6.1.2 Comparison between C++ and C#
6.1.3 Namespaces and the using directives
6.1.4 The queue example in C#
6.1.5 Class and object in C#
6.1.6 Parameters: passing by reference with ref&out
6.1.7 Base classes and constructors
6.1.8 Constructor, destructor, and garbage collection
6.1.9 Pointers in C#
6.1.10 C# unified type system
6.1.11 Further topics in C#
6.2 Service-oriented computing paradigm
6.2.1 Basic concepts and terminologies
6.2.2 Web services development
6.2.3 Service-oriented system engineering
6.2.4 Web services and enabling technologies
6.3 *Service providers: programming web services in C#
6.3.1 Creating a web service project
6.3.2 Writing the service class
6.3.3 Launch and access your web services
6.3.4 Automatically generating a WSDL file
6.4 Publishing and searching web services using UDDI
6.4.1 UDDI file
6.4.2 ebXML
6.4.3 Ad hoc registry lists
6.5 Building applications using ASP.Net
6.5.1 Creating your own web browser
6.5.2 Creating a Windows application project in ASP.Net
6.5.3 Developing a website application to consume web services
6.6 Cloud computing and big data processing
6.6.1 Cloud computing
6.6.2 Big data
6.7 Summary
6.8 Homework, programming exercises, and projects
Chapter 7 The Multi-Paradigm Programming Language, Python
7.1 Introduction to Python
7.2 A quick start with Python
7.2.1 Install Python and run the first program
7.2.2 Install and use Python IDE
7.2.3 Python programming in Unix/Linux GNU IDE
7.2.4 Python programming in Visual Studio IDE
7.3 Python fundamentals
7.3.1 Variables, basic types, and functions
7.3.2 Control structures: conditional and loop statements
7.3.3 Recursive functions
7.3.4 Lambda expressions and functions
7.3.5 Higher-order functions: map, reduce, and filter
7.4 Python complex types and data structures
7.4.1 String and character
7.4.2 Array and list
7.4.3 Two-dimensional list
7.4.4 Dictionaries, sets, and tuples
7.5 Python class and inheritance
7.5.1 Class and object
7.5.2 Inheritance and case study
7.6 Input, output, and files
7.6.1 Input and output
7.6.2 File operations
7.6.3 Exception handling
7.6.4 Case study: putting all together
7.7 Summary
7.8 Homework and programming exercises
Appendix A Basic Computer Architectures and Assembly Language Programming
A.1 Basic computer components and computer architectures
A.2 Computer architectures and assembly programming
A.3 Subroutines and local variables on stack
Appendix B Programming Environments Supporting C, C++, Scheme, and Prolog
B.1 Introduction to operating systems
B.2 Introduction to Unix and GNU C/C++ programming environments
B.2.1 Unix and Linux operating systems
B.2.2 Unix shell and commands
B.2.3 Unix system calls
B.2.4 Getting started with GNU GCC under the Unix operating system
B.2.5 Debugging your C/C++ programs in GNU GCC
B.2.6 Frequently used GCC compiler options
B.2.7 C/C++ operators
B.2.8 Download programming development environments and tutorials
B.3 Getting started with Visual Studio programming environment
B.3.1 Creating a C/C++ project in Visual Studio
B.3.2 Debugging your C/C++ programs in Visual Studio
B.4 Programming environments supporting Scheme programming
B.4.1 Getting started with DrRacket
B.4.2 Download DrRacket programming environment
B.5 Programming environments supporting Prolog programming
B.5.1 Getting started with the GNU Prolog environment
B.5.2 Getting started with Prolog programming
B.5.3 Download Prolog programming development tools
Appendix C ASCII Character Table
Bibliography
Index
Yinong Chen received his Ph.D. from the Karlsruhe Institute of Technology (KIT), formerly known as the University of Karlsruhe, Germany, in 1993. He did postdoctoral research at KIT and at LAAS-CNRS – France between 1993 and 1995. From 1994 to 2000, he was a faculty member at Wits the University at Johannesburg, South Africa. Dr. Chen joined Arizona State University in 2001 and is a full teaching professor in the School of Computing and Augmented Intelligence and the director of IoT/Robotics Education Lab in the school.
Dr. Chen’s primary research interests are in software engineering, programming languages, service-oriented computing, artificial intelligence, Robot as a Service, Internet of Things, and computer science education (http://www.public.asu.edu/~ychen10/). He is the co-inverter of the VIPLE – Visual IoT/Robotics Programming Language Environment (https://venus.sod.asu.edu/VIPLE/) He (co-) authored a dozen books and over 300 technical papers in these research areas. Dr. Chen is the Editor-in-Chief of Journal of Artificial Intelligence and Technology since 2021, an associate editor of the International Journal of Simulation and Process Modelling (IJSPM) since Jan 2004, an area editor of the Elsevier journal Simulation Modeling Practice and Theory, since Jan 2006, and an editorial board member of the CAAI Transactions on Intelligence Technology, since Jan 2016. Dr. Chen has taught a wide variety of computer science and engineering courses, ranging from freshman, sophomore, junior, and senior, to graduate courses, at Wits University and at Arizona State University. He received two consecutive Teacher of the Year awards in 2008 and in 2009 from the School of Computing and Informatics at Arizona State University.