Incoming Students for the OO Specialty Track
-
Groups of Incoming Students
-
Overview of Skills and Competencies
-
Detailed Skills Lists
1. Groups of Incoming Students
Job function:
We divided our intended audience within Lucent into three groups:
-
Designer/Developers
-
Systems Engineers and Product Planners
-
Managers
The team has focused most of its discussion so far on the first group:
Designer/Developers.
Within the broad category of designer/developer, we find considerable
variability in specific job function.
-
applications developer
-
framework/support developer
-
architect
-
integrator/tester
-
build administrator
Different students with different job functions will need some or all of
the skills and competencies taught in the OO curriculum.
Project Size:
Students come from project teams of widely varying size. Teams may
be small (2-10 developers, including all design and test responsibility),
mid-sized (10-50 developers, broken into small sub-teams), or large (more
than 50 developers, sometimes as many as 250 developers within a single
project).
During their career at Lucent, students can expect to fit into a variety
of projects, with potentially different sized teams.
Target Technology:
Projects within Lucent are implemented with a broad spectrum of target
technology, including:
-
single PCs
-
PC-based LANs
-
Unix-based applications
-
Real-time control and call-processing, using one or more RTOSs
-
embedded systems targetted at small microprocessors
Education:
There are two general educational profiles within Lucent:
Experienced Lucent employees:
This student population can be assumed to have experience in some vertical
domain within telecommunications. In general, students have graduate
degrees, but not necessarily in computer science or electrical engineering.
Students have not necessarily been exposed to OO concepts in an academic
setting.
New hires:
Students generally have advanced degrees in computer science or electrical
engineering. They have most likely been exposed to OO concepts in
school, although they may have misconceptions about appropriate use of
object technology. They may have little or no domain experience in
telecommunications.
From a curriculum standpoint, the challenge is to present information that
fills the gaps for eachgroup of students, while challenging and engaging
the other group.
1.2 Systems Engineers and Product Planners
1.3 Managers
2. Skills and Competencies
Taught
2.1 Overview
Software developers need three things from training in object oriented
technology:
-
an opportunity to learn and practice "object oriented
thinking"
-
a degree of competence in the programming languages
that they will use to create new software
-
a set of tactics, techniques, and tools for
them to use in solving software design and coding problems
Software developers can get assistance in all three of these basic areas
from training courses. Training can provide a developer with basic
vocabulary, some guidance on techniques that have worked well in the past,
and some rules and heuristics to fall back on when confronted with new
design situations. But software developers will only attain mastery
of object oriented technology with time and experience.
The goal, as in most technical training, is to "teach a person to
fish" rather than just to "give a person a fish". Some
of the specific skills that software developers will need a year from now
are in brand new areas of technology, so software developers will need
to be able to read and learn some things on their own.
2.2. The top skills and competencies
for software developers
2.2.1 Object oriented thinking
The most important skills that a software developer needs in order to exploit
object oriented technology is a set of "object oriented thinking" skills.
This set of skills includes:
1. the basic principles of abstraction: how to make software
modules that have small, well-defined public interfaces and well-encapsulated
internal implementation details
2. the object oriented way of distributing responsibilities across
a set of classes in a software system
3. the proper application of standard patterns in design and
implementation
4. ability to recognize good and bad OO designs
Abstraction is a concept that is already familiar to good designers.
Good object oriented thinking will lead developers to create modular designs
that follow the "open-closed principle" and other principles that permit
the creation of flexible, extensible software systems.
2.2.2 Language technology
Software developers need to have competence in programming languages technology.
The areas that are most important to cover in the OO curriculum are:
5. knowledge of at least two programming languages that support
OO
6. practice at using standard programming idioms
7. skills in using distributed object technology such as CORBA
and DCOM
There is a relationship between the success of the use of object oriented
techniques by software professionals and the number of programming languages
that they know (cite the paper by IBM folks in OOPSLA '94). Software
developers need a deeper understanding of the proper use of programming
languages, beyond the syntax rules of the language. As distributed
systems become more prevalent, developers need more experience working
with standard frameworks for making objects work well in a distributed
programming environment.
2.2.3 Tactics, Tools, and
Techniques
Software developers need tools to help them communicate with others.
8. how to use OO techniques to enable teamwork -- to improve
communication among team members through the use of standard modeling notations
(such as UML), CRC cards, use cases, and patterns
9. the proper use of iterative development techniques and prototypes
10. strategies for applying OO appropriately to each development job
Developers rarely work alone -- they must be able to communicate with their
peers in a development project. They need to be able to read standard
analysis and design notations, and they should at least be able to use
techniques such as CRC cards for doing design-level
brainstorming. Developers on an object oriented development project
must understand the benefits and problems of working in an iterative and
incremental software development lifecycle.
2.3. Cross-reference between
existing courses and skills list
Course
|
Skills
|
OO Analysis and Design (Mancl) |
1, 2, 8, (9), 10 |
CRC/CRH (Cope) |
1, 2, 4, 8, (9), 10 |
Basic C++ |
1, (2), (5) |
Advanced C++ |
1, 3, 4, (5), 6, 10 |
Proposed GOF/POSA |
1, 3, 8, 10 |
1-day CORBA |
1, 6 |
2.4. Topics not fully
covered in the current curriculum
There are three items that are only "partially" covered in existing courses:
5. Competency in 2 or more OO languages
8. How to use OO techniques to enable teamwork
9. Iterative development
3. Detailed Skills Lists
The OO Specialty Track team is developing detailed skills lists for each
group of incoming students: