Food for Thought-An e-newsletter published by Software Quality Consulting, Inc. October 2006, Vol. 3 No. 8 - What’s In a Title? What topics would you like to see in this newsletter? Each month, this newsletter tries to provide you with useful information. This is a two-way street and your feedback is important. Please send your thoughts and comments to steve@swqual.com. -------------------------------------------------------------------------------- Welcome to Food for Thought(TM), an e-newsletter from Software Quality Consulting (http://www.swqual.com/index.html?Intro). I've created free subscriptions for my valued business contacts. If you find this newsletter informative, I encourage you to continue reading. Feel free to pass this newsletter along to colleagues by clicking this Forward Email link (http://ui.constantcontact.com/roving/sa/fp.jsp?plat=i&p=f&m=sctz69n6). If you’ve received this newsletter from a colleague and would like to subscribe, please click this Enter New Subscription link (http://www.swqual.com/newsletter/Subscribe.htm?Newsletter). If you don't wish to receive this newsletter, click the SafeUnSubscribe(TM) link at the bottom of this newsletter, and you won’t be bothered again. Your continued feedback on this newsletter is most welcome. Please send your comments and suggestions to info@swqual.com. -------------------------------------------------------------------------------- *** In This Issue *** In This Months’ Topic, I discuss the difference between a software engineer and a programmer... Regular features to look for each month are: - Monthly Morsels Hints, tips, techniques and reference info related to this month’s topic - Calendar Conferences, workshops, and meetings of interest to software engineers, QA engineers and anyone interested in software development -------------------------------------------------------------------------------- *** This Month’s Topic *** What’s In a Title? And then there’s this from the New York Times: “Have you ever wanted to be a ‘group idea management director’? Now you can. How about a ‘chief transformation officer’? There are several of those. Does the title ‘marketing evangelist’ suit you? Or perhaps ‘chief consumer officer’? What about ‘vice president for stakeholder relations’? Executives have been appointed recently to all those titles. For example, [the PR firm] Initiative named a ‘chief activation officer’ last week. Last month, [the PR firm] Arnold Worldwide promoted an executive to ‘director for the department of human nature’. And Yahoo named an executive to serve as ‘chief of insights’.” [1] Do these titles mean anything? I don’t know but I believe the problem of meaningless titles extends well beyond the companies mentioned above... These days, many job titles seem to have the “engineer” designation attached to them. For example, we now have: - Domestic engineers (stay-at-home parents) - Sanitation engineers (trash collectors) - Railroad engineers (people who drive locomotives) As you might expect, the software industry uses the title engineer very loosely as well. Job titles at software companies often include: - User interface engineer (does windows) - Database engineer (schemas, tables, and queries, oh my!) - Requirements engineer (makes English make sense) - Test engineer (tests, what else?) - SQA engineer (a fancy title for a test engineer) - Release engineer (Bob the Builder) - Software engineer (?) - Programmer (?) I want to focus on two of these titles for now - software engineer and programmer. Specifically, I want to discuss... What is a software engineer? What is a programmer? Before examining these questions, we need to understand a bit about engineering professions. ENGINEERING PROFESSIONS Engineering professions generally have five characteristics [2]: 1 A professional education from an accredited institution 2 Registration of fitness to practice via voluntary certification or mandatory licensing 3 Specialized skill development and continuing professional education 4 Communal support via professional societies 5 A commitment to norms of conduct often prescribed in a code of ethics Does the software engineering profession have all five of these characteristics? Let’s see: 1 We don’t have this. Even today, very few universities offer undergraduate degrees in software engineering. Most schools offer degrees in Computer Science. As part of that curriculum, students may take some software engineering courses but the focus is on computer science not software engineering. David Parnas explains why a degree in Computer Science is not sufficient training for software engineers. He says: “The increasing importance of software, combined with our increased knowledge about how to build it, has resulted in a need for graduates who, like other engineers, have received an education that focuses on how to design and manufacture reliable products, but who specialize in designing, building, testing, and ‘maintaining’ software products. We can no longer squeeze what we know into a few courses in traditional engineering or computer science programs.” [3] Most people who call themselves “software engineers” (myself included) probably have an undergraduate degree in Computer Science (or if you are my age, it is probably in EE, Math or Physics). 2 Registration of fitness to practice via voluntary certification or mandatory licensing We do have this. Voluntary certification programs that assess “fitness to practice” are offered by: - IEEE-Computer Society - Certified Software Development Professional. (http://www.computer.org/portal/site/ieeecs/menuitem.c5efb9b8ade9096b8a9ca0108bcd45f3/index.jsp?&pName=ieeecs_level1&path=ieeecs/education/certification&file=index.xml&xsl=generic.xsl&) - ASQ-Software Division - Certified Software Quality Engineer. (http://www.asq.org/softwareforum/getcertified/index.html) Currently, Texas requires that people who use the title software engineer be licensed in a manner similar to professional engineers. (Note: there are currently only 65 licensed software engineers in Texas). Canada and a few European countries also require software engineers to be licensed in a manner similar to professional engineers. Read more... - IEEE – Computer Society’s position on licensing software engineers (http://www.ieeeusa.org/policy/positions/licensure.html) - Association for Computing Machinery’s (ACM) position on licensing software engineers (http://www.acm.org/serving/se_policy/selep_main.html) 3 Specialized skill development and continuing professional education We do have this. There are thousands of specialized courses available in highly specific areas that provide engineers with skills in .net, C#, Java, use case modeling, etc. The Software Engineering Institute (http://www.sei.cmu.edu/products/courses/courses.html) offers education and training courses in many relevant software engineering topic areas. The SEI sponsors local chapters (called Software Process Improvement Network or SPINs) that hold frequent meetings with guest lecturers speaking on many current topics... - Find a SPIN in your area... (http://www.sei.cmu.edu/collaborating/spins/calendar.html#states) The IEEE-Computer Society (http://www.computer.org/portal/site/ieeecs/index.jsp) also offer many short courses on software engineering related topics and sponsors many software engineering conferences. The IEEE also sponsors local chapters, many of which provide continuing professional education courses. - Find an IEEE Chapter in your area... (http://www.ieee.org/web/geo_activities/home/index.html) Communal support via professional societies We do have this. Several professional societies support the software engineering profession. The most well-known include: - IEEE-Computer Society (http://www.computer.org/portal/site/ieeecs/index.jsp) - Association for Computing Machinery (ACM) (http://www.acm.org/) - ASQ-Software Division (http://www.asq.org/softwareforum/index.html) 5 A commitment to norms of conduct often prescribed in a code of ethics We do have this. The IEEE-CS and ACM have jointly developed a Software Engineering Code of Ethics and Professional Practices (http://www.acm.org/serving/se/code.htm). However, not many people are aware that it exists. You might think that four out of five isn’t too bad. But the one we don’t have is the most critical. Parnas says that: “Engineers are professionals whose education prepares them to use mathematics, science, and the technology of the day to build products that are important to the safety and well-being of the public.” [3] The National Society for Professional Engineers (http://www.nspe.org/) defines engineering as: “... the creative application of scientific principles used to plan, build, direct, guide, manage, or work on systems to maintain and improve our daily lives.” These definitions paint an interesting picture of what engineers do. While we are probably very familiar with what software engineers presently do, we really need to understand what software engineers should do... WHAT SOFTWARE ENGINEERS SHOULD DO Steve McConnell observed: “The most common approach to software development today is code-and-fix programming – or hacking. In this approach, a development team begins with a general idea of what they want to build. They might have a formal specification, but probably not. They use whatever combination of informal design, code, debug, and test methodologies suits them. Programmers write a little code and run it to see whether it works. If it doesn’t work, they change it until it does. The code-and-fix approach is far from the state of the art in software development. It costs more, takes longer, and produces lower-quality software than other approaches; its main advantage is that it requires little technical or managerial training. Leading organizations have known and used effective software development practices for decades, but the gap between average practice and best practice in software is enormous.” [4] The IEEE Glossary of Software Engineering Terminology defines software engineering as: “the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software.” [5] Software engineering as defined above represents one end of the spectrum. The other end of this spectrum is the code-and-fix hacking approach described by Steve McConnell. Given all of this, in my opinion, a software engineer should be directly involved in a variety of tasks that may include: - Understanding problem domains - Establishing effective dialogues with end users or their proxies - Performing system analyses - Performing system safety and risk analyses - Performing requirements analyses - Designing user interfaces - Estimating and scheduling software tasks - Leading and participating in Peer Reviews - Evaluating existing architectures, components, and tools - Establishing standards - Developing overall system architectures - Developing high level designs - Developing detailed designs - Coding high-risk, critical components - Unit and integration testing - Supporting system testing - Defect resolution and tracking - Change Management - Release Planning - Creating system documentation - Interacting with other groups on tasks such as Triage, Root Cause Analysis, Risk Management, Project Management, etc. - Mentoring and leadership In my view, the role of a software engineer should be very broad and should require education and skills in many areas. For those of you with undergraduate degrees in Computer Science, which of the skills listed above did you learn in college? Very few I would guess. An undergrad degree in Software Engineering would focus on many of these topics. Read more...2004 IEEE-ACM Joint Task Force Report on Curriculum for Undergraduate Degree in Software Engineering (http://sites.computer.org/ccse/SE2004Volume.pdf) WHAT PROGRAMMERS SHOULD DO In every engineering discipline, there exists a natural hierarchy based on education, skills, and demonstrated mastery of basic engineering principles. For example, electrical engineers (EEs) often work with engineering technicians. Engineering technicians are trained to perform specific tasks under the direction of an EE. Some engineering technicians are pursuing an EE degree or are in an Engineer-in-training program. In the EE profession, the responsibilities of the EE and the engineering technician are well-established and the results of this working relationship have proven to be very effective. In the software engineering profession, this natural hierarchy doesn’t exist. As a result, we lack an environment for apprenticeship and mentoring. In my opinion, these are tasks that programmers should be involved in: - Reviewing requirements - Reviewing proposed architectures and high level designs - Estimating coding and unit and integration testing tasks - Participating in Peer Reviews - Developing detailed designs - Coding of selected components - Unit and integration testing - Bug fixing - Source code control - Build control - Documentation By having programmers focused on these tasks, software engineers can spend more of their time on the tasks identified above, especially mentoring, coaching, and leadership. I believe that programmers are to software engineers like technicians are to EEs. They fill a very important role. Like technicians, programmers need a subset of the training and skills required of software engineers. Like technicians, programmers need coaching, mentoring, and formal training before they should become software engineers. Like technicians, programmers should have at a minimum, a two year Associates Degree in Computer Programming – offered at many community colleges and technical schools. SUMMARY Years ago we recognized the need to separate Computer Science from other departments (such as Electrical Engineering and Physics). Unfortunately, the recognition that Software Engineering needs to be separated from Computer Science has been painfully slow in coming. As a result, the formal training of people with the title “software engineer” has been focused primarily on computer science not software engineering. The natural hierarchy that exists in other engineering professions doesn’t exist in the software engineering profession. Software engineering lacks apprentice and mentoring relationships common in most every engineering profession. Such relationships are critical if software engineering is ever to become a true engineering profession. And on a lighter note... if you like crossword puzzles, try this one (http://www.swqual.com/newsletter/vol3/no8/Oct%202006%20puzzle.pdf). Send me an e-mail (info@swqual.com) if you would like the answers. Until next time... -------------------------------------------------------------------------------- *** Monthly Morsels *** Every month in this space you’ll find additional information related to this month’s topic. - References: [1] Ellis. S., “Wanted: Experience Officer. Some Necessary”, NY Times, Sept 13, 2006. [2] G. Ford and N.E. Gibbs, A Mature Profession of Software Engineering , Software Engineering Institute, Carnegie Mellon University, Pittsburgh, Pa., tech. report CMU/SEI-96-TR-004, Jan. 1996. [3] Parnas, D. L., “Software Engineering Programs are not Computer Science Programs”, IEEE Software, Nov/Dec 1999. (http://www.swqual.com/newsletter/vol3/no8/Parnas.pdf) [4] McConnell, S. and Tripp, L., “Professional Software Engineering – Fact or Fiction”, IEEE Software, Nov/Dec 1999. (http://www.swqual.com/newsletter/vol3/no8/McConnell.pdf) [5] IEEE Glossary of Software Engineering Terminology, IEEE Standard 610.12 . - On-line Resources Krill, P., “Are developers programmers or engineers? Software project management pondered”, Infoworld.com, Feb 12, 2003 (http://www.infoworld.com/article/03/02/12/HNproject_1.html) -------------------------------------------------------------------------------- *** Calendar *** Every month you’ll find news here about local and national events that are of interest to the software community ... - Software Quality Calendar There are many organizations that sponsor monthly meetings, workshops, and conferences of interest to software professionals. Find out what’s happening... (http://www.swqual.com/links/upcoming.html) - Workshops Offered by Software Quality Consulting Software Quality Consulting offers workshops in many topics related to software process improvement. Get more info... (http://www.swqual.com/seminars/courses.html) -------------------------------------------------------------------------------- *** About SQC *** Software Quality Consulting provides consulting, training, and auditing services tailored to meet the specific needs of clients. We help clients fine-tune their software development processes and improve the quality of their software products. The overall goal is to help clients achieve Predictable Software Development(TM) – so that organizations can consistently deliver quality software with promised features in the promised timeframe. To learn more about how we can help your organization, visit our web site (http://www.swqual.com/index.html?AboutSQC) or send us an email (info@swqual.com). -------------------------------------------------------------------------------- I hope this newsletter has been informative and helpful. Your comments and feedback are most welcome. Send me your feedback (info@swqual.com)... Thanks, Steve Rakitin info@swqual.com Food for Thought, Predictable Software Development, Act Like a Customer, and ALAC are trademarks of Software Quality Consulting, Inc. Copyright 2006. Software Quality Consulting, Inc. All rights reserved. Graphic design by Sage Studio