Print this page Print this page

Bridging the Gap between Software and Non-Software Engineers

Tracy P. Jong, Esq., Patent and Trademark Attorney
Cheng-Ning Jong, P.E., B.S., M.S., Registered Patent Agent

Course Outline

This course presents the process by which a line of code translates into machine action. It will introduce basic concepts utilized in software design, including a brief comparison between object oriented programming and non-object oriented programming. Common hardware and software issues that create inefficiencies or machine failures will be introduced, including sampling frequency and real time control systems.  The schematic expression of software design and operation will be discussed, including Unified Modeling Language. Widely used software applications are introduced, including Computer Aided Design and Finite Element Analysis. These software packages assist in simulating and testing software and hardware applications during the design and development processes. Understanding the basic approaches of the applications, such as parametrics and modeling will better enable the engineer to maximize their utility and productivity.

This course includes a multiple choice quiz at the end, which is designed to enhance the understanding of the course materials.

Learning Objective

This course will provide the following specific knowledge and skills

Intended Audience

This course is intended for practicing engineers of any industries whose daily work involves interactions with software engineers or professionals but have little or no practical experience in software design and implementation.

Benefit to Attendees

Attendees of this course will learn how to become an effective member of a multi-discipline project team by (1) actively participating in a project’s early concept and design stages, (2) designing hardware that is best suited for particular software applications and (3) writing better engineering requirements for software implementers.  Attendee will learn about various software design aspects that can be implemented and exploited, as well as pitfalls to avoid in order to create reliable software that can be efficiently upgraded and expanded to meet future demands.

Course Introduction

The days of pure mechanical devices are quickly fading. When you look around, every device seems to be automated in some fashion. Even the old fashioned hammer and screwdriver have popular electric versions! You probably own one yourself.

The simplest of devices often interfaces with systems running on software or contains microcontrollers which have software running on them.  As computer use has become widespread, the cost of incorporating software into control systems, analysis, project tracking and management systems continues to decrease.  Software has become more complex, however and user interfaces have become increasingly user-friendly as computing power increases. 
Every product that we use began its life in a manufacturing environment. Let’s look at the dynamics involved in manufacturing a simple electronic device.  No man is an island.  Today, a typical product project team comprises

  1. mechanical/structural/hardware engineers and designers who design the physical components that make up the product;
  2. electrical engineers who design the controller/s and write firmware that control the individual physical components;
  3. software engineers who design and write software to synchronize, schedule and control the components as a system; and
  4. System engineers who work closely with all parties to design and solve problems arising from interactions between components.

The addition of software component in a product requires a team approach to product development and production. There must be effective communication between software engineers and hardware, electrical and other non-software engineers.  The hardware, electrical and other non-software engineers generally provide the “requirements” to the software engineers. Only with effective communication between these parties will software engineers be able to develop and implement reliable software.


Good software engineers focus on the opportunity to minimize “rework” in future product iterations and upgrades.  Well-written software code often contains generic features and maximizes opportunities to reuse and re-factor without complete redevelopment of the code content and algorithms. However, some applications do not lend themselves to generic coding and requirement owners should not be easily swayed when confronted by the pressure to conform to such generic coding. Understanding the basics of software will enable the software developers and requirement owners to effectively develop coding applications.

Course Content

In this lesson, you are required to download and study the following course content in PDF format:

Bridging the Gap between Software and Non-Software Engineers

Please click on the above underlined hypertext to view, download or print the document for your study. Because of the large file size, we recommend that you first save the file to your computer by right clicking the mouse and choosing "Save Target As ...", and then open the file in Adobe Acrobat Reader. If you still experience any difficulty in downloading or opening this file, you may need to close some applications or reboot your computer to free up some memory.

Course Summary

To produce reliable software, it is critical to design the application rather than to conglomerate a group of ad hoc subsystem modules with no inherent interrelationship. Without a design, one module may have unintended or unrecognized effects on other parts of the system, creating unreliability and system problems that can take time to detect and resolve.
The following design issues should be considered in the design of control system software:

  1. Sampling frequency
  2. Real Time concerns

Software can be written and implemented via object oriented programming or non-object oriented programming. Several distinct benefits of an object oriented programming are:

  1. Inheritance
  2. Encapsulation
  3. Polymorphism

Software design and operation may be schematically expressed via a variety of Unified Modeling Language diagrams to enhance communication between software engineers and non-software engineers.

Computer Aided Design and Finite Element Analysis assist in simulating and testing software and hardware applications during the design and development processes.  In considering modeling software, the user should consider whether the software contains parametric capability.  In considering numerical analysis software, the user should consider whether a numerical solution is required.


Once you finish studying the above course content, you need to take a quiz to obtain the PDH credits.

Take a Quiz

DISCLAIMER: The materials contained in the online course are not intended as a representation or warranty on the part of PDH Center or any other person/organization named herein. The materials are for general information only. They are not a substitute for competent professional advice. Application of this information to a specific project should be reviewed by a registered architect and/or professional engineer/surveyor. Anyone making use of the information set forth herein does so at their own risk and assumes any and all resulting liability arising therefrom.