I feel that it is important for University Professors and Researchers to
provide opportunities to practitioners to enable them to learn emerging
technologies. I have (and continue to do so) designed several modules/courses
for this purpose. These have ranged from custom non-credit non-degree
continuing education courses, academic short courses, seminars, workshops, and
symposiums ranging from one day to 16 weeks in length providing working
professionals with technical updates in key areas related to their strategic
skills.
Some of these courses are listed below. Please contact me if you want to
enroll in any of these courses. Or if you want me to develop and deliver
customized
content for your company.
Introduction to Linux OS for MS Windows Users (17 lectures 1.5 hrs each)
The purpose of this course is to introduce the Linux OS to Microsoft Windows
users/programmers. The course has a steep learning curve, starting with basic
concepts of Linux usage, and then rapidly moving towards advanced programming
concepts of multi-threading, concurrency, semaphores, interfacing with hardware
devices, and real-time programming. To facilitate such a steep learning curve,
the course is designed to be goal-oriented and top-down. That is, the
participants will work on six practical programming projects of increasing
complexity. All six projects will be described during the first lecture –
participants will know exactly what they will achieve during each module
(roughly a two-lecture period), which is the time-window of each project.
Lecture content of the first four modules will be geared towards their
corresponding projects. Towards the end of the course, all participants will be
familiar with the Linux OS. They will have
developed, in Project 5, the basic infrastructure needed for cloud computing
(with a registration node, and multiple computing and job management nodes
utilizing features of inter-networking, multi-threading, locking, etc.), which
they will customize for a distributed computation task of their choice in
Project 6. The programming language used throughout the course is C.
One-day Workshop on Software Testing
The purpose of this one-day workshop is to introduce the participants to
fundamentals of software testing, such as category-partitioning, test oracles,
test coverage including MC/DC coverage, code instrumentation, unit testing,
acceptance testing, user stories, and regression testing. Lectures on these
fundamentals are supported by hands-on exercises in which participants use unit
testing tools to develop a few test cases, instrument the code of the
application under test to collect data to be used for code coverage analysis,
and execute the tests. The workshop covers advanced topics in test automation
as well, including pair-wise testing, AI planning, iterative relaxation
event-flow graphs, GUI testing, predicate & heuristic based testing,
"daily/nightly" builds and smoke tests, network protocol and web testing, and
performance testing. In order to provide a holistic treatment of the topic, the
workshop discusses testing broadly within the context of Software Engineering
Requirements (UML), Design, Sequence Diagrams, Use Cases, and component-based
software engineering.