Architect Center
A Community for IT Architects
A Tribute to Bob Fry

I spoke at TechEd2009 several times this week and after an intense day of architectural sessions, some industry and Microsoft speakers for the architect track had dinner together. This was really cool because I was able to listen to some of the best and most influential minds of our time.

Through our conversations I mentioned one of the most influential professors I ever had probably lost his position based on my blistering review after completing his class only in later years to see the brilliance of his genius.  My colleagues encouraged me to blog about this, so, I resurrected an old paper where I pay him  tribute.

My tribute to Bob Fry is embedded below in a paper I wrote in November 2004 which, while somewhat dated, can offer itself as a catalyst for further investigation. Sorry about the goofy formatting. It originated in Word and translating it to HTML that works across all browsers is... well... actually a topic in the paper! (in other words, if it doesn't look proper in your browser, try another, it most certainly will look different)

 

Sobering* Words for Computer Science Academia

a white-paper by Jim Wilt, November 2004

*marked by temperance, moderation, or seriousness;  showing no excessive or extreme qualities of fancy, emotion, or prejudice – Merriam-Webster

 

Sobering Words for Computer Science Academia – Overview 

This paper is being addressed to higher education institutions and those organizations that set curriculums for Computer Science degrees. It is intended to offer suggestions towards the better education of students bound for Computer Science development careers -- from an industry point of view. It is a culmination of experience and interactions with industry and candidates entering the Computer Science Workforce. 

Innovations in current curriculums are identified and some alternative approaches in the education model are suggested. There are many influences that direct the manner in which education is approached that are too numerous to enumerate here. The approach in which I propose to respond to these influences comes from a sign found years ago in my daughter’s 7th grade science class:

 


Don't make Excuses,

Make Improvements.

 

Opportunities to work and collaborate with many individuals in an intensive software development setting have identified that many professionals are coming out of our educational institutions with Computer Science degrees having an inaccurate perception of industry while lacking necessary attributes to achieve key skills. 

Industry needs (from this author's point of view) are being used to provide feedback to the academic institution for the betterment of the Computer Science student. They can be summed up with the following observations: 

  1. Listening, Verbal Communication/Presentation, and Problem Solving Skills will take you much further than training of any specific operating system, language, or piece of hardware.
       
  2. In the ever changing world of Computer Science, the student must learn to learn new technologies, adapt to ever changing languages & operating systems, and mostly, learn to use/adapt proven modern techniques of development methodology in an industry that sometimes frowns on them.
     
  3. The Experience Paradox can be alleviated by an Off-Shore On-Campus working model.
       
  4. Finally, the business model used by most higher education institutions, as well as many public education systems, needs an overhaul. The model where the student and their parents are the customer pushing universities to provide a student-centric environment is in need of change.    

A New Business Model 

To maintain a much needed cash flow, many higher education institutions have adopted a business model where the student is the customer, requiring faculty to cater to student wants and needs. This is ever evident when you walk on the campus of a major university on a Friday morning or afternoon and find less than 25% of the classrooms in use. 

Administration must deal with funding cutbacks, passing tighter budgets to their various colleges and departments. College/department budgets key performance indicators are being directly tied to: 

  • The number of students enrolled in each college/department.
  • The evaluations filled out by students on their professors.
  • The number of students graduating from their undergraduate programs.  

The following are flaws in this model: 

  • Not all departments can compete with the numbers of others due to the nature of education involved. Physics major numbers, for instance, their will never match that of those in the Business programs. Just the same, it may be more expensive to teach a Physics major due to the expense of equipment in labs, etc. compared to other departments.
       
  • Sometimes, it hurts to learn. Many students will produce a negative evaluation of a professor with whom they were frustrated or feel did not do justice to the material --- until after a few years in industry they find that that professor taught them more than they ever could realize.  Many Professors feel stifled due to the fact that their livelihood is directly tied to student evaluations. 


    Note
    :

    One innovative department in the College of Science and Technology at a major university has better addressed the effectiveness of evaluations by taking them 3 times: (1) at the time of the class, (2) one year after graduation, and (3) three years after graduation. This provides a more true measure of the class’ effectiveness.

  • The counting of students graduating from a given program is a most unfortunate metric. It encourages pushing students through a program that otherwise should be filtered out. This adversely affects industry because it is inundated with a pool of both genuinely capable candidates and those who will ultimately render themselves as incapable.

When quality is measured by quantity, quality is the first thing to suffer

A replacement model being suggested is as follows:

A New Higher Education Business Model:

  • Science & Industry are the customer.
       
  • The Student is the product.
       
  • The Faculty is the developer.
       
  • The Administration is the project management

 Under this business model, Industry has some sobering words for academia:

  • Industry is disappointed with the quality of your product (students).
       
  • Industry would like to see management (administration) take more responsibility about this. Industry would like better access to management. Management rarely, if ever, calls the customer (industry) to find out how their product suffices Industry needs.
       
  • The only way your development staff (faculty) can hope to produce a better product is to give them more freedom in their domain to develop with proven methods and further to encourage them to learn new development methods and technologies involved with producing a better product.
       
  • Finally, management appears to be focused on short-term gains. Industry would rather the focus be a long-term investment towards a better product-line by increased interactions with Industry.

In a sense, the quality of students today can be related to that of late 70's automobiles, an era where the product suffered from rust, pealing paint, and mechanical problems. Management and development blamed each other for their failing product. The threat of a higher quality, lower cost overseas products loomed over the viability of their product.  

Higher Education may find the key to producing a better product is putting development staffs armed with more applicable curriculums back in charge of the product supported by enabling management that better directs from more frequent communication with its customer

Putting Science back into Computer Science 

Most technological/scientific fields find their pure roots back at the university where absolute objectivity, truth in reporting, and meticulous measures of detail oriented research are taught and religiously followed. 

It appears to be a polar opposite when the field of Computer Science is discussed. Opinions (sometimes religious) about platforms, languages, and sloppy practices abound. Attention to detail and objectivity sometimes appear non-existent. How can this happen? 

Perhaps it is due to the field of Computer Science being such a young field. Maybe staffs many times do not come from backgrounds as disciplined as the mainstream sciences. Could it be that classroom projects focus on the deadline and not the technology, methodology, or architecture?  

One must question that as less-than-objective/scientific practices work their way into industry, is it any wonder that projects suffer from cost, time line, and quality issues? The only group in industry actively pursuing the use of Business Intelligence and detailed analysis of metrics tend to be those from financial disciplines (Accounting departments are using more technology to measure their effectiveness than IT departments). Without accurate metrics for the science of this industry, it will continue to be led by cowboy development methodology and shoot-from-the-hip management practices. 

We need to bring Science back into the field of Computer Science. 

Problem Solving Skills - Where Are They Taught? 

Most Computer Science programs are related to the specifics of the computer, its architecture, and some exposure to software methodologies. Where is the development of Problem Solving Skills

At the undergraduate level, there are few if any courses tailored to the art of solving problems. Where and how can a student expect to become a developer without proper training in the art of solving problems? 

One answer typically offered by educational institutions is that it is found in required courses from other departments (typically Mathematics). While these classes are beneficial, the required supporting classes often do not venture deep enough. I will illustrate this by example:

Advanced classes equate to better problem solving futures:

Calculus III (not typically required by a CS major curriculum) is more applicable to a developer even if he never uses it directly in his career.  

How is this?  

Simply, Calculus I and II are pretty much limited to two dimensions with most problems requiring several minutes to complete.  

Calculus III takes the attributes of Calculus I and II to three dimensions adding partial differential equations. These problems may take many minutes to hours to complete. 

What's the benefit? The benefits are threefold.  

  1. The student is forced to push their thinking process beyond the obviously tangible into more abstract thinking. 
       
  2. They are taught to persevere when attacking a problem and find that all problems do not have a simple answer. (These are the problems with which industry deals )

  3. They learn to sometimes work a problem backwards, sideways, and from other angles to identify the correct forward algorithm.

Calculus I and II challenges prepare a programmer to write an application involving a 2 dimensional array.

Calculus III challenges prepare a developer to design a system around a 64-dimension OLAP Cube.


This problem permeates well beyond the first few years after graduation. I have been exposed to some brilliant minds in this industry – many with 5 plus years experience. My interactions with them have been (carrying the example metaphorically) to mentor them into 3 dimensional problem spaces from their historically 2 dimensional problem spaces. When discussing our solution scenarios (which are significantly more complicated in 3 dimensions than in 2) they follow along and even are capable of grasping the base concepts throughout the engagement.  

However, after the dust settles and they are left to continue on their own, they are convinced that there is a far easier solution for the 3 dimensional problem spaces if they were to stick to their 2 dimensional techniques often abandoning the more appropriate 3 dimensional solutions.

Calculating the first derivative vector of a 2D quadratic equation in two dimensions yields a tangent line at a given point on a continuous curve.

Calculating the first derivate vector of a 3D quadratic equation using only two dimensions will also yield a tangent line at a given point on a continuous surface, however, there are an infinite number of other tangent lines in the same plane that are being ignored.

A developer not challenged or pushed into a more difficult problem space will fall-back and resort to their comfort zone – unknowingly placing their employer into higher risk and cost by creating limited scope solutions that may ignore an infinite number of more appropriate solutions in the real problem space. 

The art of learning Problem Solving Skills and abstract thinking is undoubtedly a difficult one, but the individuals who delve into the advanced courses are certainly more prepared to take on the challenges that industry and the sciences have to offer.  

One solution some universities currently offer in this area is that of the Interdepartmental and Interdisciplinary Majors and Minors. This is not a trivial task. It means significantly more work from both departments as each department is involved in the assignments of the student from different vantage points. These programs are most certainly a major step in the right direction. 

I would urge any student that is serious about becoming a leading industry developer to make their Computer Science major a Computer Science-Mathematics, Computer-Integrated Manufacturing, or any of the other interdisciplinary majors. 

Double-Up with Sister Departments 

If an interdisciplinary program is not offered, or there is not one to a student’s liking, Industry finds that graduates with co-majors/minors in the main-stream sciences will often offer deeper problem solving skills. Additionally, these candidates often exhibit higher levels of objectivity, attention to detail, and effectiveness in their work.

I would ask Computer Science department student advisors to encourage their students to expand their educational focus to consider a second major or minor in one of the main-stream sciences including (but not limited to): 

·         Biology

·         Chemistry

·         Geography

·         Geology

·         Physics

·         Engineering

·         Mathematics

Problem solving skills are already embedded into the curriculums of these sciences – and problem solving skills most certainly are transferable outside their domain. 

A Mathematics minor should be a requirement as it facilitates the beginnings for true abstract thinking and problem solving. 

The Ability to Learn a Technology is better than Learning a Specific Technology  

Computer Science and software development often lend themselves to the adoption of marriages. Marriages are often to a given operating system, language, or developmental methodology. While it is good for a developer to be excited about a given technology, it can often be harmful to a company's future growth if their development staff cannot adapt to new and emerging technologies. After all, how many of us can safely find an interesting career programming in PL/I today?  

In these marriages, Hardware Platforms, Operating Systems, and Languages seem to be the technologies that have the largest romances. Over many years, a developer can become very comfortable with a given technology such that the thought of changing it is like that of getting a divorce from something that has been your tried and true friend over time. Sure there were ups and downs during that relationship, but overall, a given technology may become a true part of a developer's existence. Everybody knows Stan, he's that LISP expert. You can ask him any question about LISP or CICS and he's got the answer. But wait, we quit using LISP 4 years ago! 

The point is that computer technologies change, many times from project to project. New technologies are introduced each year. Industry is fickle. Some industries are early adopters of new technologies and others are not (like the one who employed Stan above).  

In other sciences, industry looks to the educational institutions to objectively evaluate new ideas and technologies, many times from graduate study programs. For some reason, Computer Science claims to be more of a victim of the ever changing technologies – not being able to keep up due to costs, equipment changes, education, etc. I should think that Computer Science departments would embrace these continuing changes as they provide an ever fresh pool of graduate independent study topics. Unfortunately, some of the largest push-back to new technologies comes from the educational sector. 

Learning a specific technology is a beginning. The act of learning a technology is far more important than any specific technology learned. A software developer who adapts to the real-world environment of technological flux is far ahead of those who stagnate in a specific technology.  

Current curriculums often are set for a specific technology and rarely support changes of technology mid-stream. Perhaps it’s time to modify class definitions from specific technologies and start including multiple competing technologies in the delivery.  

Some might argue that this causes unnecessary confusion for the student. I would argue that this takes the student closer to reality, and further builds up a resistance and skill before it happens in industry.

Science is a Creative Art 

I am a firm believer that one must learn the basics in any profession, pursuit, or venture. Having a solid backbone understanding of the qualities behind Computer Science you may better recognize when it’s applicable to apply a proven pattern for a solution and when its time to invent a new solution. 

On occasion, a more difficult a problem will sometimes fail to resolve as a more logical approach yields no progress.  

No matter how hard you try, a physical connection will have a bandwidth maximum. If your problem solution requires you to significantly exceed that maximum, by 10 fold for instance, then a logical approach may lead you to the use of some form of data compression. Now, if the information you need to transport is already compressed, logic begins to leave you feeling a bit stale. 

A more creative approach is an elixir to the software designer. The greatest discoveries have come in the form of a creative approach. Taking a problem, turning it upside down and inside out often releases a solution that deviates far from the norm but delivers knowledge to a new level.

One might attempt to argue that creativity cannot be taught. Either you have an affinity for the arts or you don’t. I am one to argue that it is an essential required quality of the Computer Science profession.  

Close examination of a musical score identifies that it is truly the first ever programming language. 

·         It supports looping with conditional branching.

·         If supports goto and subroutines (refrains).

·         It is exact and repeatable. Programs (Songs) sound the same when replayed. 

It is only natural to draw the conclusion that the basics in the art of music parallel the basics of Computer Science. Imagine what happens if we attempt to apply harmonics and rhythm. 

Just as I’d hope a Computer Science curriculum would require a Speech class (taught by the Theater dept.) reinforced by regular oral and written presentation, I would argue equal merit to the requirement for a form of art, humanities, or music likewise reinforced by creative solution exercises.

When in High School Physics, my class was given the exercise of finding the acceleration of the elevator in the courthouse. Did you get that? The elevator (small town). Pairs of students would be seen taking a bathroom scale into the elevator to measure their difference in weight as the elevator rises and falls to calculate the elevator’s acceleration. My lab partner and I decided on a different approach. We used a Tennis Ball and a Stopwatch. Even having a measurement that was no where near the actual acceleration, we acquired 15 points on a 10 point assignment because our approach, although yielding a far from perfect answer, had never been tried and theoretically offered as accurate a measurement under tighter tolerances. 

Creative solutions are identified by example, nurtured by discounting the obvious, and established by attempting to solve the impossible.

Look for Partnerships to Augment New Technology Education 

Not just students, but Industry also needs classes developed that relate to the new, emerging technologies - many of which are not yet fully developed. This poses many problems for higher education's faculty:

·         How do they teach a technology that is in its infancy?   

·         Where do they obtain the education required to become knowledgeable enough to teach a given technology?

·         Where do the materials come from which they can teach these new technologies?

Many professional education organizations for industry are developing courses and materials for new technologies as they are being developed through partnerships with the publishers/vendors of the technology. Seek partnerships with these organizations and include their training courses as part of your curriculum offerings. Further, these courses will bring in industry revenue as professionals in industry also seek training. Many times, travel is required. Having the technological training available at a local university makes it much more attractive. 

Additionally, I recommend that teaching staffs regularly attend training opportunities whenever possible. It offers not only benefits from learning a new technology, but also exposure to industry professionals that attend these classes. Positive exposure to industry often comes in the form of networking at these classes.  

Methodologies, “Process vs. Results”, Reviews, & Testing

Methodologies  

Jumping in and coding before business processes are defined, documented, or understood seems to be a common theme in education and industry. Technology providers too often are no help here. In their one-day seminars introducing a new technology, they show you how to put a complete solution together through drag-n-drop in 5 minutes with no code that used to take “hours and thousands of lines to develop.” It makes for a great demo, but obfuscates building a solution around demonstrated user needs. 

This is where a Computer Scientist needs to realize that immediate attention to detail backed by following a proven methodology will be the best time saving investment for the duration of a project.

It is so important that architects and developers understand business needs, rules, and value before implementing a given technology. Methodologies allow architects and developers to identify, document, and communicate this with their end users.

Development of systems using a proven methodology, or process as it is often called, results in projects coming in on time and with fewer problems that generally plague the sit-down-and-code method. There are different methodologies in this domain, and none if them is appropriate for every situation. Project duration, customer/internal department end goals, and cost all play in the determination of which is the best fit. Clearly defining the methodology to be used for a given project, and communicating that with the customer/end user is paramount in a successful engagement. 

Just as one language cannot accommodate all software solutions, there is no one single methodology that will work for all development efforts. From waterfall to solution framework based to agile, there is an appropriate methodology to be chosen based on project size, budget, and timeline. It is just as important for students to understand how and when to use each as well as to be able to adapt to the many variants that arise during each organization’s practical use. 

As we continually evolve in industry to more use of software engineering methods and tools, shouldn't students be practicing them from the get-go? It is imperative that students make regular use of, and not simply have exposure to, software engineering tools and techniques. By introducing these concepts prior to the actual language classes (they currently show up at the 400 level) followed by repetitive use in subsequent courses, curriculums can better encourage acceptance and mastering of methodologies. 

As marriages are often to one’s first exposure in Computer Science (Fortran 66 for me), wouldn’t it be better to court a methodology first? This may lessen the tendency to become tied to a given language, OS, or platform.

The Process vs. The Result  

Too often students are more interested in the end result of their assignments than the process used to get there. Why is this? Could it be that the educational evaluation mechanisms place too much importance on the final product, rather than the work done getting there?  

In main-stream sciences, the process to the end solution is scrutinized. One of my Physics tests was to solve the Schrödinger equation for a person walking through a door at a given velocity (it’s normally used for sub-atomic particles). The reason the instructor chose to use macroscopic elements (people – yielding numbers which were unbelievably obscure) was to see that we understood how to solve the equation, not simply get the right answer for an antineutrino.  

The evaluation of a student’s work should not be focused solely on the solution, rather, it must be more so focused on the process used to arrive at that solution.  

Starting a Computer Science Major with courses such as a Principles of Computer Programming which addresses algorithm development and problem solving methods is a bold and well supported move in the right direction.  A repeating theme is that one class is not enough. The concepts and principles must be repeatedly used and reinforced in all courses that follow. 

Reviews

An important aspect of development in industry that appears to be missing in curriculums is the process of proactive Code Reviews. Students need to realize their code will be reviewed by their piers. It is better if they experience this from their course work.  

A code review in industry is not meant to be a judgment of a person's abilities, but rather to be used as an effective tool in spear-heading problematic areas. They also are effective teaching tools as the developer being reviewed can share what new innovations they learned in the process of their development with their peers. 

Testing

Test-Driven Development (as a methodology), Test Plans, and Software Testing are additional tools that appear to be neglected at educational institutions. There is an established science in industry in which products are tested. This involves a methodology for developing test plans and procedures which check for completeness, consistency, usability, repeatability, and other aspects of a product. Automated testing programs and scripts are used for regression validation, stress tests, and identification of load capabilities for a given solution.  

Testing has the highest potential of truly advancing the Science of Computer Science, however, it is probably the least utilized in both education and industry. Very little is known and taught about effective testing practices outside of isolated industry islands.  

Methodologies and Testing also are in a state of continual change as they evolve. Educational institutions may feel that they can’t keep pace, but my question is why aren’t they the leaders here? Shouldn’t our educational institutions be offering new theories of development and testing to industry?

One leading research university has developed a methodology on designing for usability and is using industry leaders to evaluate the effectiveness of their program through evaluation of work from students who have taken the class. This should be a more common norm and not the exception. This is where a university is taking a proactive look at the industry and trying to improve it through better science, but testing its effectiveness with industry evaluators. Awesome. 

It’s all about Communication

There are many aspects of teaching Computer Science related to the ever changing developmental methods, operating systems, and computer languages.  

Many students demonstrate technical skills from a sterile lab environment where they might create a normalized relational database for an imaginary company. While these serve to assist the student in working with and learning the technology involved, they ignore that a large part of the problem in developing a solution is the Needs Analysis and Communication with the end user.

There is a true need for the student to perfect more than just the technology involved in implementing solutions - that which appears to be the main topic of most 100-300 level courses. There needs to be sufficient training in analysis of user needs, communication techniques to identify these needs, and documentation skills to recap these determined needs back to the customer/end user. 

It's a rare situation that a customer or internal end user department provides a sheet of paper with instructions to develop a solution for them using a star or snowflake schema to track all grocery stores and their products with no more than 10 balanced and normalized relational tables. Rather, they say they've got a lot of stores - more stores than anybody else (in their opinion) and they carry more products than you can imagine - finally they want to know which store has how many of each product at any given moment in time.   

This is where Listening Skills come into play. End user needs presented over a white-board session given verbally, and inconsistently, relate more to the Real-World. In 4 years of Computer Science classes (from 1978-1982), only one professor, Robert Fry, gave his assignments orally. He would change his mind mid-way through, and often be inconsistent. Not until a few of years after graduation did I realize the true wisdom of his ways.  

What Bob Fry would frequently tell his students was that they had to ask him questions to get details that he might leave out. A skill required by a developer is that of asking the right questions, in different ways so that you obtain all the facts. While hashing through a problem with the end user they will often change their mind as they are forced to look at their problem from multiple perspectives. 

Sound Verbal Communication and Presentation Skills are the foundations required to effectively present ideas in a group setting. In the presentation of architectures and implementation plans, a student must communicate their solution is based on a sound understanding of the business needs. They must also be prepared to interactively take challenges of their logic - and learn to adapt to those challenges.  

Do Computer Science departments think a general education speech class will fulfill mastering of communication skills? These fundamentals must be reinforced by continually exposing students to oral examination of their ideas with interactive discussions examining their solution proposals. Only through repetition will students overcome their natural fear of speaking and refine this much needed skill. 

Communication in all its forms is an important part of the Science in Computer Science. 

Instill Discipline

What I would venture to say is non-existent in curriculums is that of Development Discipline. Why instill a discipline? It is one of the fundamentals of our science. The definitions of coding standards, methodologies, and practices alone only have value when they are used. Consistent use of sound practices results in higher quality output, in less time. 

5 Coding Myths: 

  1. I can save time if I take a short-cut now.

  2. I’ll go back and clean it up it later.

  3. If I do it the right way right now, I’ll fall behind schedule.

  4. This code will never be used again.

  5. I don’t need to learn another language/framework/OS. The one I know will be around for ever.

Development Discipline is not about coding standards, it’s about applying coding standards. It’s not about design methodology, it’s about consistently implementing a good design. It’s not about setting up test plans, it’s about using test processes from the start. 

Development Disciplines can be summarized into three major categories.

·         Syntactical Discipline centers on making and consistently following coding practices that are sensible and promote the effective development and readability of code.

·         Architectural Discipline centers on the design of an evolving framework to eliminate code duplication by utilizing language technologies (e.g., Objected Oriented Inheritance) and patterns. It’s a practice of understanding the design and identifying queues during development for an architectural iteration that will extend a framework as required.

·         Testing Discipline centers on utilizing your development platform’s monitoring, debugging, and test capabilities to thoroughly validate code by scientific evaluation of execution flow, exception handling, memory utilization, and performance metrics. 

Development Discipline could become a new course offering where these core values are established and practiced repetitively through a series of assignments.

Industry Requirements: Professional, Responsible, Accountable 

While message boards and journal article quotes touting subjective opinions related to various technologies (platform, OS, and language choices) are sometimes entertaining, architects and developers are expected to exhibit behavior that is:

  • Professional.
  • Responsible.
  • Accountable.  

Period

Credibility in industry can only spiral downward when one starts letting their marriages surface as they start making subjective remarks about products, processes, and technologies. 

Likewise, the educational institution must uphold to higher standards of objectivity. Naturally, teaching staffs will have their own preferences and biases toward one technology over another. The classroom, however, is not the place for these preferences to surface. One might argue that even during office hours, a higher level of objective professionalism could be obtained. 

Back to a Physics analogy: Some of the best professors I’ve had, when pushed to take a stand on a given philosophical or technological debate, would throw the question back to me with, “what do you think; how would you test your theory?” Once again, science is used to establish credibility and personal opinion/bias carries no weight. 

One of the areas where professionalism, responsibility, and accountability are challenged is that of Operating Systems and the Open Source movement. If one can move beyond their internal biases, there is ample opportunity for universities to take full advantage of the political, even religious, environment and start applying science to the debates. 

I would hope to find more educational intuitions creating objective research publications on performance comparisons, total cost of ownership evaluations, extensibility and compatibility of solutions, etc. for the proliferation of platforms, operating systems, and products at large. Their objectivity will come under certain fire when they publish their results, but that’s exactly how you ensure objective scientific process are used. Further, the practice of defending their findings will create a most valuable skill when entering industry. 

The real challenge here, however, is beyond that of objectivity. It moves into the realm of industrial appropriateness. You see, most academic institutions are under license agreements that differ drastically from Industry. While Red-Hat may be free to a student, there are real license and support costs to industry for the same product. This is where Responsible and Accountable come into play. Research must take into account burdens from an industry perspective as well.  

Real-World Open-Source vs. Platform Portability 

While in a strategy meeting with a CIO and executive management staff of a Fortune 500 firm, it was identified that all future endeavors were to be of open-source. I asked the question as to what this meant, and there was a strong assurance that open source was going to ensure a higher level of security/comfort. I pursued this further by asking if they ever changed the source of their open-source providers. The response was an overwhelming, “no” as that would change their license agreements and force them to have to support OS source in addition to their application source, requiring additional maintenance for OS upgrades. The real issue, from further discussion, was that they were under the perception that open-source was analogous to platform portability

An invalid assumption from academia is that a class taught on a specific open-source OS and platform will be seamlessly portable to other open-source operating systems and platforms. 

The reality here is that any change of platform and even from one version of an OS to the next is subject to incompatibilities. For many years I made a career making POSIX compliant operating systems compatible with each other at the POSIX API level. Similarly, SQL on Oracle is not necessarily the same as SQL on MySQL, SQL Server, or Informix. Each product vendor (open source or shared source) offers value-add for their product which might limit portability of solutions – unless – you code specifically for all platforms. 

Coding for portability on multiple platforms is a most frustrating experience, and it is missing in academia. This is vital in that every developer is eventually forced into a new platform, OS, or language over time. The push-back I receive from universities is that they do not have the financial resources required to create a course around platform portability. I struggle with this argument because of the discounts that universities have available to them from technology providers. Isn’t open-source supposed to make products more available?  

The damage to industry is that developers have a rude awakening when they are placed in a situation where portability is required. It can take 2 to 3 times the original development time allotment to make a solution work on multiple platforms. Porting solutions to multiple platforms soon becomes the sole focus and the actual purpose of the given solution is often lost in the busywork of making it portable. 

After burying oneself in the portability battle, eyes are often opened to the idea that maybe some solutions are best left to a specific platform as they can be better optimized with significantly reduced development lifecycle times. This allows for energies to be focused on making the solution best address the business needs. 

Bottom line – promote portability for what it is. Difficult, time consuming, frustrating, and done only when necessary. 

Open-Source vs. Open-Framework/Architecture 

The Open-Source movement has become more of a religious battle of ideals and has left the architect and developer behind in terms of true value.  

Some technology providers have better interpreted the pain developers experience that open-source, in part, has sought to alleviate. They are now providing open-framework architectures in the form of application blocks of code. These are complete source code solution frameworks that developers can immediately use and extend in their solutions. Application blocks provide extensible interfaces to various critical functions of an application such as caching, configuration management, exception management, data access, and even client user interfaces. 

A built-in flaw of a developer is the need to create everything from scratch for each solution. User authentication, error logging, data accessibility, etc. are all too often duplicated from project to project. The idea of reusable frameworks makes the most logical sense and is the goal of most development environments, but will go against the native grain of the developer.  

It is especially difficult for academia to address this as very little code can be easily moved from the completion of one class into another. So, how can an educational institution promote the best practice of reusable frameworks? 

A solution might be to set up a class around the implementation of solutions using several application blocks or frameworks developed at the university. Developing from a framework and not from scratch may be among the most valuable time saving learned-skills available to industry. 

Teaching Real-World Programming  

Discussed so far have been various aspects in support of Real-World development:

  • Software engineering techniques and developmental methodologies.
  • Listening, verbal communication/presentation, and problem solving skills.
  • Supporting multiple platforms only when necessary.
  • Utilizing frameworks.

A paradox that plagues college students looking to find gainful employment in industry is that of needing practical experience. But how do you get practical experience if you’ve been taking 20 credit hours of classes for the past 4 years?  

What if there was a course (geared toward undergraduate seniors) titled, "Real World Programming" that brought all these aspects together?                                                                                                                            

The book, "The Deadline" by Tom Demarco could serve as the base for one of the most effective classes higher education could offer its senior level undergraduate students. 

In this fiction, the author takes you through the development of large scale systems with different types of development staffs. 

It accurately depicts many of the Project Management issues that are raised during the development of a project. There are personality issues with developers, unrealistic requirements from management, and unthinkable deadlines. 

The following summary outline for a real-world programming class is offered:

Real World Programming 

            based on the book "The Deadline" by Tom Demarco. 

  • The first 2 weeks are spent reading and discussing the book, "The Deadline" by Tom Demarco. Project life-cycle best-practices should be covered during this time.
       
  • Students are placed into 4-5 person development teams - pitted to bid on a project against each other.
       
  • Students development teems will individually meet with the Customer (faculty) who requests an application to be developed via a white-board discussion.
    • Questions and answers from the development teams will be required to obtain all the requirement facts needed to develop the application.
    • Student development teams may schedule follow-up meetings with the Customer to refine the details (more points if they do this).
         
  • Students are given one week to put together a proposal to sell their solution to the Customer.
    • Effective communication with the Customer is encouraged and should be rewarded with more points in their favor.
    • Wireframes & prototypes are beneficial during this time.
    • User analysis and business processes documented/modeled with CASE tools are also effective.


  • Each team is given a 2 hour period to privately present and defend their design. In this session, they must:
    • Identify platforms being supported and their choice of development tools.
    • Present applicable algorithms and technologies to be used.
    • Demonstrate any applicable prototypes.
    • Negotiate a timescale in which the student development team can develop their solution.
    • Define any Penalty Clauses for failure to deliver on time (e.g., loss of points).
    • Negotiate a means of payment from the Customer
      • Student Advantage:
        • Payment by each member by the hour.
        • Paid incrementally with incremental deliverables.
      • Customer Advantage:
        • Fixed bid.
        • Paid at delivery of final product.
    • Final grade will be affected by cost overruns.
    • The Customer (faculty) will schedule weekly review meetings to obtain progress reports from each team.
         
  • After a set time schedule and price is established, the student development team sets out to develop the product (over the next 6 weeks).
    • Use of software engineering tools and development methodologies will be a key part of this phase.
    • Use of Peer Code Reviews will add points to their project.
    • Use of a Test Plan, iterative development, and unit testing of completed modules will add points to their project
         
  • During the development, the process is interrupted by the Customer with a CRISIS (approximately 2 weeks into the development phase).
    • The Customer will add scope to the project. Additional features are required or the whole deal is off.
    • The team will be forced to accept the scope-creep.
      • If they negotiate added hours and/or additional payment for the scope-creep, then points are added.
      • If they fail to get compensation for their additional needed efforts, they lose points.
           
  • Further down the development cycle, the Customer will call another crisis meeting (approximately 1 week after the previous crisis).
    • The Customer will make a minor change a portion of the design based on newly discovered needs they have.
    • Additionally the Customer will pull in the deadline by one week (they have a trade show and must have the product for live demos).
    • The student development team must, again, be forced to accept the added requirements.
      • They now must gain or lose points based on how they handle this added scope creep.
      • Give them points if they attempt to phase in their delivery such that they deliver minimal requirements by the new deadline, but extend their original deadline for a later release of the final product.
      • Subtract points if they just buy into your demands (unless of course, they deliver with the changes on time - which may result from excessive padding).   


  • Upon the deadline, see how each student development team pans out.
    • Evaluate effectiveness of their choice and use of development methodology.
    • Evaluate effectiveness of their listening communication skills.
    • Evaluate effectiveness and quality of their presentation and verbal communication skills.
    • Evaluate their use of Peer Code Reviews, iterative development, and utilization of unit and final test plans.
    • Evaluate how their product turns out.
      • Does it meet Customer expectations?
      • Is it robust?
    • Did they come in under, at, or over their budget?
    • Did they meet (or exceed) user negotiated requirements?


While this class would be most painful to take, it will offer a sense of realism related to the actual development process. 

Fully realize, the benefit of this class is not the final product produced by the team. Rather, it benefits from the following:

  • Students are exposed to the many real non-programming administrative tasks related to the development of a product.
       
  • The brick walls they are forced to run into and the related pressures associated are real.
       
  • They will learn that not all team members will hold up their end of the work, and others may have to step in and do additional work.
       
  • It allows the faculty to experiment with different situations over the course of teaching the class many times.

The Experience Paradox

Every senior undergraduate has experienced the Experience Paradox. The most disappointing words on a rejection letter from an employer are, “…unfortunately, the position you interviewed for requires a candidate with 2-3 years experience.” What normally follows are shouts from students of, “How can I get experience if I can’t get a job to gain experience because I have no prior experience?!!”.

One of the most common pursuits of students to alleviate this problem is that of summer internships. Many of these work themselves into permanent positions. I would surmise that this is more of an exception based on the number of students applying for internship positions vs. those that actually get them. 

There has been another deterrent to students in the form of the threat of Off-Shore programming resources cutting into their potential positions as entry level developers in industry.   

Off-Shore On-Campus Working Model

Students are hungry for experience. Industry is hungry for commodity priced programming. Universities are looking to gain better industry exposure and recognition. 

For me, this adds to a tremendous opportunity for what I term Off-Shore On-Campus programs that supply commodity level programming skills to industry while giving students that highly craved experience. An outline of this concept follows: 

o    The program must be offered to industry at the college or university level. That is to say, industry contracts Off-Shore On-Campus programs with the institution, not individual students. This means the university carries risk for delivery and quality.

o    Academia might find it best to partner/sub-contract with consulting originations that can act as agents for their services to industry customers.

o    The Off-Shore On-Campus program must be offered at the graduate level (3 credit-hour 500 or higher level course) as a paid class by the student.

o    Senior level undergraduate students would be welcome to participate under recommendation from an advisor – remember, the university is carrying any risk in this type of engagement with industry.

o    All fees acquired by the program and collected by student enrollment would serve to support costs associated with the Off-Shore On-Campus program.

o    By students paying for this experience, you’ll have more assurance that the motivation for getting into the program is to gain experience, prove themselves, and make it not about the money.

o    Students should expect to expend 16 or more hours a week for this class.

o    Commodity work most likely will not be glamorous, but it is the experience and exposure that you must focus on. Set expectations with students appropriately identifying this is the first stepping stone onto the more advanced work that waits beyond graduation.

o    Anonymity is required – students engaged should be working on “projects” with actual customer interfaces being managed and closely monitored by faculty. Part of gaining experience is the ability to protect industry intellectual property (IP) and protect corporate confidential information. Academia must respect non-disclosure agreements (NDA) made with their engaging customers.

o    Whether contracted or not, students must be immediately engaged into a project – Repeat past engagements when not actively engaged with a customer – repeating appropriate twists and pressures. The students need not know whether theirs is an active or repeated engagement.

o    Students are graded on their performance of delivery, quality, and adherence to best practices.

o    Accurate records of engagements can serve multiple purposes from more accurately repeating engagements to reporting metrics of cost and scope-creep back to organizations.

o    Be responsible and incorporate all development best practices:

o    Assign an appropriate methodology for the project.

o    Best practices and discipline for development (code-review, incorporate unit testing into work, source management, etc.)

o    Have students to present their solution approaches and work prior to implementation.

o    Supply internal project management from faculty. Even if the engaging customer has their own project management, an internal faculty project manager should closely monitor student’s activity and progress.

o    Be price-competitive. Between engagement fees and student enrollment, the cost of running the program should be well taken care of. Be as cost competitive with off-shore competition as possible.

o    Encourage/sponsor government legislation to promote the use of Off-Shore On-Campus programs in the form of tax-breaks to organizations engaging in this form of resource utilization over off-shore. It certainly will help the university win in competitive contracts.

o    The quality of the program will be measured by industry by the results obtained, how the program is managed by faculty, and repeat business.

Intermix with Industry

Most academic institutions make use of industry professionals on advisory boards. These are most certainly effective. While advisory boards serve a valuable purpose in exposing the institution to industry trends and needs, there is an element that can be further pursued.

When an advisory board meets, set aside time for the industry representatives to individually meet directly with students. This can be in the form of an informal doughnuts or pizza get-together or place the industry professional in a given classroom lecture to speak with the students and answer questions.

The value here is enormous. Students get opportunity to talk with future employers gaining first-hand direction and insights. Industry professionals can instill the values, expectations and industry needs. 

Likewise, many European universities require their faculty to engage with industry – mainly on a consulting basis. This keeps them first-hand in touch with how industry operates and the demands and expectations are being placed on resources. 

Faculty either participating with industry directly or perhaps in the form of Off-Shore On-Campus will carry a better connection with industry. 

Industry/Vendor Taught Seminars

Industry developers are often encouraged by their employers to attend several seminars each year relating to the technologies with which they are involved. Both faculty and students can benefit from this type of exposure.  

One Music class I took required attendance at 6 external musical performances in addition to normal coursework to pass the class. The same benefits of external exposure to technology await a student of Computer Science.  

Technology providers often provide free seminars on the technologies they offer. Request technology providers to bring seminars into your institution. Many organizations and companies have requirements for their employees to teach seminars – seek these out and utilize them. Technological user groups often bring in guest speakers. 

The purpose is beyond exposure to industry and new technologies, it also promotes the fact that after graduation, learning never stops.   

Bi-Weekly Internal Seminars Encouraged

A bi-weekly series of internally led seminars will benefit both faculty and students from various perspectives. Faculty can present research and findings. Senior level students should be strongly encouraged to present at least once a year either individually or as part of a team. This will further enhance presentation skills and expose them to defending their ideas.

Invite industry professionals to participate in these sessions as they can be utilized as a sounding board.  

Note:

Many students today will be the industry innovators of tomorrow. It is these very students that you'll want to return to lead these seminars.

Stay Visible in Industry

Many product manufacturers and corporations welcome advice from academia. Make sure you are visible to them by attending their seminars and inviting them to present at your offerings. Encourage faculty to acquire time with industry in the form of consulting or assisting in research.  

Making industry involvement a Key Performance Indicator (KPI) for faculty will benefit both the university and the individual – although you may run into some initial push-back. One university I am aware of is lowering the number of required teaching credit hours for incoming faculty making it a requirement that they either apply for a grant or participate in some form of industry engagement exposure with the additional time. I applaud this. 

Managing an Off-Shore On-Campus project team offers great involvement with industry while promoting student involvement.

Final Thoughts

Why be so passionate about our education of future developers?   

The answer comes from an industry expert, Keith Brophy, who states, "The ability of the well-educated, leading edge technology savvy fresh graduate to contribute is immense, and such a person can dive right into the fray, whereas the less well educated counterpart is rendered obsolete before the starting gate and may never catch up.

The appeal is simple – Focus on and bring science ideals into Computer Science. Utilize a new model with education being accountable to industry. Instill and nurture greater communications skills from the start. 

It's not about the challenging task to move educational practices at the pace of technology. That would only turn educational institutions into skill-schools. Rather, it’s about modifying the educational model to supersede industry. Putting education at the forefront of technology is only possible by placing science into the equation and operating it as a science. 

Utilizing industry professionals to supplement your efforts may be the key to accomplishing these goals. Exposing both the academic institution and its students to industry using the Off-Shore On-Campus model is a win-win situation for everyone involved.



Posted 05-11-2009 8:10 AM by Jim Wilt
Filed under: , ,

Add a Comment

(required)  
(optional)
(required)  
Remember Me?
© 2008 Microsoft Corporation. All Rights Reserved. Contact Us | Terms of Use | Trademarks | Privacy Statement

SSL is currently unavailable