|
Section 1 - Advanced Language / Environment Topics (30%) - Declare and initialize an aggregate correctly (e.g., array of structures or structure of arrays)
- Write code that uses advanced builtin functions. Representative examples:
- Arithmetic functions (MAX, MIN, MOD)
- Array-handling functions (ANY, DIMENSION, LBOUND, HBOUND)
- Buffer-management functions (COMPARE, MEMSEARCH, XMLCHAR)
- Condition-handling functions (ONCHAR, ONCODE, ONKEY, ONWCHAR, ONWSOURCE)
- Date/Time functions (DATE, DATETIME, VALIDDATE)
- Input/Output functions (COUNT, ENDFILE, FILEOPEN, SAMEKEY)
- Miscellaneous functions (HEX, PLIRETV, STRING, SOURCEFILE, VALID)
- Precision-handling functions (BINARY, DECIMAL, UNSIGNED)
- Psedovariables (ONSOURCE, STRING, SUBSTR)
- Storage control functions (ADDR, CHECKSTG, POINTER, POINTERDIFF, POINTERVALUE)
- String-handling functions (BIT, LENGTH, SUBSTR, TRANSLATE, VERIFY, WIDECHAR)
- Subroutines (PLICANC, PLICKPT, PLIDUMP, PLIFILL, PLIMOVE, PLIOVER, PLIREST)
- Evaluate PL/I statements that contain data conversions to determine proper use of direct assignment and GET/PUT STRING statements
- Determine whether programs that incorporate complex flow control work as specified
- Recognize whether CONTROLLED/BASED variables are being handled correctly in a program
- Determine the lifespan and scope of the variable (e.g., in functions, user controlled, ALLOCATE/FREE)
- Describe the difference between usage of heap and stack
- Describe how implementing recursion in a program impacts it
- Describe the use of dummy variables
- Determine whether appropriate condition checking has been applied in a program
- Interpret the output of the linkage editor (e.g. unresolved external references)
- Identify some subsystem dependent specifics (e.g., reentrancy, PCB pointer, CICS-LINK)
- Describe the usage of preprocessor macros
- Maintain programs that use AREA and OFFSET
- Maintain programs that are implemented using list processing
Section 2 - Data Access (10%) - Describe the correct use of file system access (e.g., sequential file, indexed sequential file, fixed vs. variable record formats, KEY, KEYTO and KEYFROM)
- Describe the basic characteristics of the relational/hierarchical data model
- Describe the use of the LUW (logical unit of work)
- Determine logic for commit and rollback
- Determine strategies for avoiding deadlocks and timeouts (e.g., mutual exclusion, hold and wait, no preemption, cycle dependencies)
Section 3 - Technical Leadership (13%) - Mediate design and code review meetings
- Provide feedback to programmers when code is incorrect / inefficient
- Communicate appropriate technical details to stakeholders (e.g. project manager, line manager, requirements engineers, architects)
- Apply appropriate review technique for a given source code review (e.g., walkthrough, formal review, code coverage, utilization of coding standards)
- Determine optimum resource allocation to meet project objectives
- Determine whether the program has good documentation (i.e., inside the program and about the program)
- Maintain the balance among quality, functionality, costs and deadlines
Section 4 - Application Design (13%) - Given a business case, design a new application that meets the requirements using appropriate design and development models
- Reengineer an application to leverage advances in PL/I technology
- Restructure an application to increase maintainability
- Describe how to fulfill non-functional requirements (e.g., maintainability, stability, security) in an application
- Translate given business logic into the appropriate technical design (e.g., use cases)
- Practice defensive programming (e.g., risk analysis) to ensure stability of the program
- Describe commonly known and used principles and techniques of software engineering
- Describe typical program logic for Batch vs online application programs
Section 5 - Performance and Optimization (14%) - Analyze performance and resource utilization
- Rewrite code to remove bottlenecks
- Analyze a program to determine whether parallelization can be applied
- Describe the impact of multithreading (e.g., risk of race conditions, deadlocks)
- Identify techniques that require too much time or memory to execute
- Create a structure and an array of structures with proper alignment and describe the implications of padding
- Describe the usage of performance analyzer tools
- Identify compiler and run-time options with relevance for performance and optimization
Section 6 - Interface (Other Languages or Programs on the Same or Different Platforms) (9%) - Recognize issues associated with PL/I inter-language communication
- Describe the difference between little endian and big endian
- Understand the differences between character representations (e.g., UTF-16, ASCII, EBCDIC)
- Describe the trade-offs between different interface designs (e.g., number of arguments vs. structures vs. use of pointers)
- Describe the proper usage of synchronous and asynchronous interfaces (e.g., asynchronous via messaging)
Section 7 - Problem Determination (11%) - Analyze dumps excluding system dumps (e.g., find last executed statement, identify contents of variables)
- Read code and describe the intended result
- Describe ways to make debugging easier (e.g., use of eyecatchers)
- Test the application to determine whether it meets the specifications
- Describe advantages and disadvantages of using debuggers (including environment considerations - e.g. online vs. batch, test vs. production)
- Describe different debugging techniques (e.g., application traces, debugging options – SUBSCRIPTRANGE)
- Identify compiler messages and compiler options which provide information about code quality
|