Explore an idea that reinforces sound development practices and is intended to improve the integrity of your code.
This is the thirty-ninth installment in a series of articles about fundamental object-oriented (O-O) concepts and related object-oriented technologies. The material presented in these articles is based on material from the second edition of my book, The Object-Oriented Thought Process, 2nd edition. The Object-Oriented Thought Process is intended for anyone who needs to understand basic object-oriented concepts and technologies before jumping directly into the code. Click here to start at the beginning of the series.
In keeping with the code examples used in the previous articles, Java will be the language used to implement the concepts in code. One of the reasons that I like to use Java is because you can download the Java compiler for personal use at the Sun Microsystems Web site http://java.sun.com/. You can download the standard edition, J2SE 5.0, at http://java.sun.com/j2se/1.5.0/download.jsp to compile and execute these applications. I often reference the Java J2SE 5.0 API documentation and I recommend that you explore the Java API further. Code listings are provided for all examples in this article as well as figures and output (when appropriate). See the first article in this series for detailed descriptions for compiling and running all the code examples (http://www.developer.com/design/article.php/3304881).
The code examples in this series are meant to be a hands-on experience. There are many code listings and figures of the output produced from these code examples. Please boot up your computer and run these exercises as you read through the text.
For the past several months, you have been exploring various issues regarding object integrity, security, and performance. Although many of the issues pertaining to object integrity, security and performance revolve around actual code; one area that is often shortchanged is the process itself.
Although taking shortcuts to circumvent the process is all too evident in the work environment, it is perhaps even more evident in the learning process. When learning new concepts, whether in a professional or academic environment, it is all too easy to ignore the fundamental process in the desire to get right to the hands-on experience—which, in most cases, is more fun.
In this month's article, I change directions a bit and, rather than tackling a new coding concept, you will explore an idea that reinforces sound development practices and is intended to improve the integrity of your code.
It is often interesting, as well as informative, to delve into some of the historical aspects of topics that we use on a daily basis. For example, most people use a calculator on a regular basis. However, some people may not be aware of the specific technologies that were used prior to the more familiar ones that we use today. Whereas many of us may know what a slide rule is, many others have never even held one in their hands.
You can extend this thread to software development. In my programming classes, I often bring 'props' to class for the students to view—such as punch cards, flowchart templates, and so forth. This provides a good historical context for the students who can perhaps better appreciate the advantages of the more recent technological developments. Although newer technologies often supplant older ones, it is often the case that the underlying concepts of older technologies are directly incorporated into the newer ones.
This scenario applies to the learning process as well. Although many programming students, whether in corporate training or in the academic environment, focus primarily on the electronic nature of code and other business information, they often do not realize that they should be organizing their personal information in the same way.
From Hardware to Software
One of the most interesting, as well as most challenging, aspects of being a software developer is that you never really know what type of industry you will be working in from job to job. After spending my entire career writing software, I joined an engineering company that manufactured electronic equipment. Moving from a purely software shop to a mostly hardware environment was, to say the least, an education. I use the term 'mostly hardware shop' because at this time (the early 90s) software was beginning to permeate all industries. The days of hardware and software being totally separate were in the past.
However, for many of the engineers (mechanical, electrical, or software), their careers were often based solely on one of these disciplines. In fact, I was the first software engineer hired into a very large department of mechanical and electrical engineers. I was immediately fascinated by the work culture of my new colleagues.
One of the first things I noticed was that most of the engineers carried around oversized notebooks. In fact, these notebooks were strewn across their desks as well as their lab workspaces. I saw them constantly scribbling in these notebooks while referencing them continuously. The engineers simply called them Engineering Notebooks.
These oversized notebooks were not easy to purchase. In fact, the only way to get one was to order it through a catalog—the Internet was not yet an option. Figure 1 shows what one of these notebooks looks like—this is just one incarnation of the Engineering Notebook; there are, no doubt, many others.
Figure 1: Engineering Notebook.
The concept of the Engineering Notebook is pretty straightforward; however, I had never seen the concept being implemented in such a professional and elegant manner. That said, as a software developer, I was able to bring a new perspective that could, perhaps, improve upon the concept. Primarily, the idea of moving the notebook from a collection of physical pages, as seen in Figure 2, to an electronic format, made much sense.
Figure 2: Engineering Notebook Page.
Evolution of a Process
The usage of the Engineering Notebook is a powerful technique. The engineers essentially entered everything they did into these notebooks. This was important for many reasons, the least of which was the need to reproduce tests and trials in the course of the product development process. Their pages were dated, and logged with any and all work information deemed important (and even unimportant). Who was to say what might turn out to be important when something unanticipated occurred?
The inherent weaknesses of these notebooks apply equally to any paper-based system. Some of the problems include, but are not limited to:
- Possible loss of the notebook(s) itself
- Damage to the notebook(s)
- Storage of multiple notebooks(s)
- Organization of the notebook(s)
- Retrieval of information from the notebook(s)
You may have guessed where all of this is going. Although these Engineering Notebooks are a wonderful and very powerful tool, there is a major improvement ready to be incorporated. These notebooks needed to evolve from a solely hardware-based system (paper and pencil) to a realm where hardware and software coexist. In short, the Engineering Notebook needed to evolve into an Electronic Engineering Notebook.
Electronic Engineering Notebook
Migrating the Engineering Notebooks from paper and pencil to an electronic-based system makes sense on many levels. In fact, the concept is so obvious that the idea itself is nothing new. The issue is that, in so many cases, people do not take advantage of this concept. Everyone knows that computers can store and organize information; however, most people use software systems to organize their work only if their employer provides the system. In short, whereas many people use PDAs in a work environment to store work-related information, they might not think of using it in their home or their classroom. This became evident to me when I moved from the business world to an academic environment.
Using Web Technology
Although I do see many people using PDAs and calendar software, such as Outlook, there is one simple way for people to organize any information that is important to them, whether professional or personal. This is to learn a bit of programming—especially HTML. Just as people learn basic skills in math and reading, a basic understanding of how to organize information electronically, using simple information technology skills, is fast becoming a required industry skill.
It is not surprising that the business community today expects their employees to understand how to use applications such as word processors, spreadsheets, and so forth. As businesses migrate further to the Internet, it will also be very helpful for employees to be able to make simple changes to web pages. While I am not advocating that everyone should be able, or allowed, to make major changes to a company's web site, understanding how to organize information with HTML is a very important skill.
As a new professor, my intent was to integrate some of the industry practices I had utilized directly into the classroom. One of my most important goals was to get all of my students to learn and actively use Hypertext Manipulation Language (HTML). In short, I wanted all of my students to create a web page to organize their classroom information.
An Electronic Engineering Notebook (EEN), which can be implemented as a simple web page, allows students and educators to electronically organize their notes, document their ideas, store clipped newspaper articles and photos, and so on. Although the EEN can apply to basically anything, from a collection of recipes to the stats from your softball team, I will concentrate on how to use it in the context of a classroom.
Creating an Electronic Engineering Notebook serves two purposes. The primary purpose is to reinforce the importance of organizing information. A secondary, but no less important purpose, is to develop rudimentary computer skills. I believe that creating a simple web page is soon to be held at the same skill level as word processing and using spreadsheets. A job seeker who does not know how to organize information electronically will be at a major disadvantage in the marketplace, regardless of whether the job pertains to Information Technology or not.
The Electronic Engineering Notebook is not only important for students, but educators as well. I create an EEN for each class to organize my lectures, notes, labs, assignments, supplemental materials, links to other sites, and the like. When I need to find course materials, I do not have to riffle through file cabinets or the loose materials on my bookshelves.
I also can make incremental changes and/or corrections to my materials in an organized and safe manner. As an added benefit, the material in the Electronic Engineering Notebook is easily transferable to an actual course web site. Perhaps most importantly, I can easily create and maintain backups of all my material.
As Simple and Elegant as Necessary
The beauty of this idea is that the user can implement the Electronic Engineering Notebook at a variety of levels—either quite simply or in a very comprehensive manner.
For example, suppose that a student is taking a programming class, although this technique is applicable to all disciplines. Suppose that in this class the work consists of the following categories:
- Vocabulary Lists
To implement an Electronic Engineering Notebook, the simplest thing to do is to create a directory called notebook as seen in Figure 3.
Click here for a larger image.
Figure 3: Engineering Notebook Directory.
Whereas this is obviously a simple task to complete, the power of storing everything in an electronic medium has many advantages. And, while this example illustrates an academic scenario, the fundamental concepts are applicable to a business process as well as personal activities—the first time I used this technique was to help administer a fantasy football league.
One of the problems with the physical notebooks is the fact that eventually each notebook will be filled. This means that multiple notebooks must be used. It is inevitable that at some point you will not have access to one or more of these notebooks. Even if you do have physical access to all the notebooks, it may be next to impossible to locate the one you actually need at a specific time. By migrating the physical notebooks to an electronic format, you will never have the problem of not knowing which notebook you need to reference.
As an added advantage, you can apply this across multiple disciplines. For example, as a student, you can combine all of your classes in a single place as seen in Figure 4. As a professional, you could have separate directories for each customer.
Click here for a larger image.
Figure 4: Engineering Notebook Directory—multiple classes.
To expand upon the work example, you can take all of your material to a customer site as a single entity (in other words: CD or memory stick). Rather than carry multiple physical notebooks or electronic media, you need only carry a single storage device—with backups available, of course.
A major advantage to this practice is that you can conveniently accumulate your material over several years as seen in Figure 5.
Click here for a larger image.
Figure 5: Engineering Notebook Directory—Several Years.
There are many benefits that come with the centralization of your notes in a electronic format; I discuss several of them in the next section.
As you just saw, using an Electronic Notebook is a great way to organize information. One of the primary concepts that I teach in my classes concerns the ability to process information, which includes the following organizational skills:
- Identify what information is required.
- Locate that information.
- Store that information.
- Retrieve that information when needed.
One of the major problems with the paper-based notebook system was that the information was only organized by time. Once a notebook was full, it was hard to include more information in it—you went on to the next notebook. If items in one notebook related to items in another notebook, the only way to truly relate then was via reference notes. And this was only possible if you could actually find the item that you were interested in from an earlier notebook. With an Electronic Notebook, you can always update and refine your notes.
One of the problems with an Electronic Notebook is that there are still some things that are not electronic. For example, what if you are taking a class, or are in a meeting, without your computer? In this case you, will need to take notes the old-fashioned way.
I often have students tell me that they learn better by writing out their notes. I also have students whose primary language is not English, and they like to hand-write their notes in their native language. This is where a scanner comes in.
Writing out notes is great; however, you still have the possibility of losing those notes. Even if you take all of your notes by hand, it is still a very good idea to scan your notes into an electronic format and insert them in your Electronic Notebook—which provides the ability to recover the information if lost. You can even use OCR to create documents that are in word processing format.
This works great for high-school students as well. How many times do high-school students leave their notebooks at home when needed at school or leave their notebooks at school when they are needed at home? If you make it a routine to scan your notes into your Electronic Notebook, the problem is minimized. And if you email yourself the notes (or place them on a server), you can always retrieve them anywhere there is an Internet connection.
This practice has saved me in a work environment on several occasions. For example, once I traveled out of town to a customer site for a meeting that required several documents. When I got to the meeting, the overnight package containing the documents had not arrived and the CD I had brought as a backup would not work. I was able to get the documents from my server via an Internet connection.
Tools and Downloads
Another advantage of the Electronic Notebook is that you can literally keep your toolkit with you at all times. This is important in an academic environment as well as a professional one.
There were times when I visited a customer site to debug code. It is always helpful to have specific tools that I prefer for the debugging activities. For example, you may prefer to use a specific editor or communication tool. You may also require certain tools for the debugging process that the customer does not have on their systems.
As seen in Figure 6, I create a directory in my notebook called downloads, and I keep all of my software tools in this directory. In this way, I have constant access to these tools (I know where they are and they are safely backed up).
Click here for a larger image.
Figure 6: Engineering Notebook Directory—toolkit.
Perhaps the most important advantage is the simple fact that an electronic notebook provides the ability to backup your data in the event that the primary source is lost.
This may seem obvious; however, you would be surprised how many people don't back everything up. I see this all the time in the classroom. Surprisingly, it happens even more in the work environment. People are fired over loss of data.
This brings up a vital point—make sure that you test your backups to ensure that they are backing up properly. I call these fire drills. I have witnessed situations where backups were being done regularly for months and then, when desperately needed, it was discovered that the backups were flawed and useless.
Although software developers are very cognizant of backing-up code (using configuration management and so forth), they often don't bother to backup their own work-related data, like notes, ideas, and so on.
If you create a directory in your Electronic Notebook called notes, place all of your notes in this directory, and do regular backups, you will always have access to your notes—no matter what happens.
Even when you do not have direct access to the computer with the original Electronic Notebook, there is a simple way to back up some of your important documents; simply email them to yourself. As long as you have access to an Internet connection, this provides a great way to save important documents easily. After each class, I have my students email themselves documents that they have worked on in class—again, this assumes that they have computers and access to the Internet in class.
Finally, the elegance of this system is evident when it comes to backing everything up—all you have to do is copy the single directory called notebook.
Besides the backup functionality, perhaps the most important advantage of the Electronic Notebook is the ability to search the complete notebook.
This is a major drawback of the paper-based notebook system. As mentioned earlier, referencing needed information is only possible if you know where to look. This is extremely difficult when you have dozens of paper-based notebooks.
Although people are often used to searching through a single electronic document, many people do not realize that you can search through entire directories.
For example, if you are searching for a text document with the word 'compiler' in it, you can right-click on the notebook directory and then search the entire directory structure for all text documents with the word 'compiler' embedded in it as seen in Figure 7.
Click here for a larger image.
Figure 7: Engineering Notebook Directory—Searching.
As you can see in Figure 8, the search located the file with the desired word. This process is extremely helpful in retrieving appropriate information in a timely fashion. You can take all the notes you want; however, if you can't retrieve the information you need, they are virtually worthless.
Click here for a larger image.
Figure 8: Engineering Notebook Directory—Searching.
You have touched on a few things that can be included in an Electronic Notebook; however, the sky is truly the limit when it comes to actually designing the structure of a specific Electronic Notebook. One of the directories that I include is called links. I am constantly searching for relevant and current articles to use in the classroom or in a professional capacity. When I find articles of interest, I store the links in the links directory.
There are a large variety of implementations of this concept. I have seen several variants of this idea called names like Electronic Journal. There are also several commercial packages that provide much of the same functionality and, in some cases, much more. However, the point of this article was to present something very simple, yet useful.
Whereas the concept presented here is indeed simple, there are other steps to be taken that can greatly increase the utility of the Electronic Notebook. Although certainly not required, the migration of an Electronic Notebook to a server, or even a web page, can make the organization and retrieval of your information even more efficient. Next month, you will explore this track and create a simple web site for the Electronic Notebook.
About the Author
Matt Weisfeld is a faculty member at Cuyahoga Community College (Tri-C) in Cleveland, Ohio. Matt is a member of the Information Technology department, teaching programming languages such as C++, Java, C#, and .NET, as well as various web technologies. Prior to joining Tri-C, Matt spent 20 years in the information technology industry, gaining experience in software development, project management, business development, corporate training, and part-time teaching. Matt holds an MS in computer science and an MBA in project management. Besides The Object-Oriented Thought Process, which is now in its second edition, Matt has published two other computer books, and more than a dozen articles in magazines and journals such as Dr. Dobb's Journal, The C/C++ Users Journal, Software Development Magazine, Java Report, and the international journal Project Management. Matt has presented at conferences throughout the United States and Canada.