Abstract
John Grundy, Tanjila Kanij, Jennifer McIntosh, Hourieh Khalajzadeh, and Ingo Mueller
You have full access to this open access chapter, Download chapter PDF
Software is designed and developed primarily to serve human needs. However, many software systems continue to fail to take into account diverse end users’ characteristics, causing frustration, errors, and even potentially life-threatening situations. These end user human-centric aspects include, but are not limited to, age, ethnicity, gender, personality, cognitive style, language, culture, physical and mental challenges, emotional reactions, socio-economic status, etc. Software applications need to cover many if not all of these end user human-centric aspects in order to provide a suitable interface, workflow, and solution for diverse end users.
There may be a number of reasons software engineers do not sufficiently take their end user human-centric aspects into account. This includes poor understanding of user needs, inappropriate designs, and time pressures [3, 9, 12, 28]. Some larger organizations have dedicated UX/UI and/or customer experience teams that separate developers from end users [5]. Many companies are very small, and developers need to do all such work themselves, but lack sufficient training in UX, participatory design, or other human-centric design methods [16, 19, 22]. Software developers are generally well-educated, relatively young, mostly male, most well-conversant in English, of high socio-economic status, and very comfortable with technology. Because of this, they may find it difficult to empathize, understand, and subsequently incorporate diverse human-centric aspects during the software engineering (SE) process [9, 11, 15, 24].
As part of our larger research effort to improve support for diverse end user human-centric aspects during software development, we wanted to better understand how developers currently go about addressing these challenging human-centric aspects of their end users in contemporary software development projects. We wanted to find out which are the key end user human-centric aspects that software developers currently find challenging to address and how they currently go about trying to address diverse end user human-centric aspects. We wanted to find out what sorts of end user human-centric aspects they tend to encounter, which ones they view as more important and which more challenging to address, what techniques (if any) they currently use to address (some of) them, and where they perceive further research in this area could be done to provide them practical support. To this end we carried out a detailed online survey of developers and development team managers, receiving 60 usable responses. We interviewed 12 developers and managers from a range of different practice domains, role specializations, and experience levels to explore further details about issues.
Human Aspects of Users
In the following are some of the end user human-centric aspects that software teams need to consider:
Gender: Several prominent mainstream articles and books have highlighted gender bias in various technologies, including apps and smart living technologies [20, 25]. Recent work has investigated how software and other systems are gender biased in various ways [1].
Age: Many smart living systems focus on supporting aging people. Many educational software systems are targeted to children [10, 17]. Different ages may have different expectations, challenges, and reactions to the same software that need to be addressed [14, 26].
Ethnicity and culture: Software that fails to take into account or is biased in terms of ethnicity of people is highly problematic, especially for many emerging smart city applications, for example, policing and surveillance [8].
Physical/mental challenges: Many people live with mental health challenges, cognitive impairment, and a wide variety of physical challenges, for example, impaired mobility, sight, hearing, and speech [24, 29]. Many software solutions have been developed to assist with these challenges or to take account of them to increase accessibility to software [2, 23].
Language: Different users speak different languages, have different educational attainment levels, have specific colloquialisms and jargon, and have different language competencies. Considering these aspects is particularly important during dialogue design, including multilingual software and software that adapts to different user dialogue preferences [21].
Human values: Values, for example, inclusiveness, equality, privacy, openness, etc., reflect how, why, and to what degree humans value people, objects, and ideas [27]. Many apps conflict with one or more human values, causing expectation mismatches and reducing app usage, take-up, and acceptance [18].
Emotions: Different people react differently to technology solutions emotionally. This includes positive reactions, for example, to a smart home solution providing a feeling of safety, and negative reactions to the same software, for example, feeling lack of control or being monitored intrusively [4].
Engagement and entertainment: Some people are highly driven by enjoyment, entertainment, and “fun” aspects of using software – computer games and gamification. Developers need to be aware of how to best design such solutions to achieve high levels of engagement and enjoyment [7, 13].
Study Design
We formulated the following research questions to guide our study:
RQ1: What are the range and nature of end user human-centric aspects that have to be addressed by software developers?
RQ2: How are different human-centric aspects addressed at different phases of software development?
RQ3: What current support is available to developers and what improvement is needed?
Survey and Interviews
We designed an online survey targeted at a broad range of software developers to provide us with a big picture view of current practices, challenges, and approaches to address key end user human-centric aspects. The survey was composed of three sections: demographic questions, participant views on end user human-centric aspects, and particular techniques – guidelines, practices, and tools to address diverse end user human aspects. To complement this online survey, we developed an interview protocol allowing us to drill down to more detailed information in one-on-one interviews. The research is approved by the Monash University Human Research Ethics Subcommittee.
Recruitment and Data Collection
We ran our developer survey from July 2020 to March 2021. We recruited participants from personal networks, by advertising on LinkedIn and Twitter, and through snowballing. We were particularly interested in surveying those developing software applications where (some of) their end users have particular “challenges,” for example, physical and mental, those developing with consideration for some of the end user aspects, such as age (very young or aging), language proficiency, low socio-economic status, low access to technology, and/or technology skills. We recruited for the interviews from our own professional software developer networks but also asked survey respondents to volunteer to be interviewed. We then selected a representative range of interviewees (domain of work, role, experience, etc.). Originally we planned to conduct face-to-face interviews, but due to COVID-19 restrictions, all were done via Zoom, allowing us to interview participants from other countries and time zones.
Data Analysis
Analysis of the quantitative data is mainly descriptive and explores common and uncommon aspects and key associations. Qualitative analysis included content analysis and thematic analysis [6]. We identified key themes via open coding and grouped common themes and responses. We used closed coding for further analysis and found key themes.
Results
Participants
We had over 130 online survey responses, but only 60 were usable; the rest were removed from the final analysis due to incompleteness and/or poor quality of responses. Poor quality was decided where irrelevant or “throw-away” responses were encountered. Forty-four of these participants were male and twelve female; four did not state their gender. Ages of the participants were 21–30 (23), 31–40 (18), 41–50 (8), 51–60 (6), 61+ (1), and under 20 (1); three did not state their age. Years of experience ranged from 1 to 5 years (22), 6 to 10 years (12), 11 to 15 years (9), 16 to 20 years (6), 21 to 25 years (3), 26 to 30 years (2), 31 to 35 years (1), and 36 to 40 years (1); three did not state their years of experience. Most developers came from a computer science or SE training background – 22 (CompSci), 9 (SoftEng), 9 (IT/InfoSys), and 5 (computer engineering) – and others (one each) were from robotics, physics, forensic computing, AI/ML/Vision, and neuroscience; the rest did not state their background. The current roles of the respondents were programmer (35), software architect (13), user interface designer (10), tester (9), project manager, requirements engineer, operations (6 each), and others (15). The domains they worked in included finance (24), education (23), health (19), transport and logistics (15), government services (13), and social media and insurance (7 each). Nineteen respondents reported other domains.
We also interviewed 12 respondents – 11 were male and 1 female (9 from Australia, 2 from New Zealand, and 1 from the Middle East). Ages ranged from 21 to 30 (1), 31 to 40 (4), 41 to 50 (5), and 51 to 60 (2). Years of experience were 1–5 years (1), 6–10 years (3), 11–15 years (1), 16–20 years (4), and 30+ years (3). The interviewees covered a broad range of roles including project managers (4), requirements engineers (1), software architects (2), user interface designers (2), programmers (2), testers (1), and others (5); many people performed more than one role.
Answers to Our Research Questions
RQ1: What Are the Range and Nature of End User Human-Centric Aspects That Have to Be Addressed by Software Developers?
We asked survey participants to tell us what end user human-centric aspects they have had to address in their software projects, summarized in Figure 7-1. Aging users, users with accessibility needs, those with physical challenges, those with language proficiency issues and uncomfortable with technology, and those with diverse cultural backgrounds were areas more highly reported. Only one participant reported never addressing any of the issues. Interviewees described specific human-centric aspects they had to address and how they managed these challenges. Most common issues included aging users, users who were technologically challenged, those who were from diverse cultural backgrounds and/or spoke languages other than English, specialized groups with unique work contexts, and even personality types. Figures 7-2 and 7-3 demonstrate the human aspects our respondents consider as critical in their work and according to different SE phases, respectively.
Technical proficiency: For example, developers had to adapt software for users with low technological capability: “There’s a lot of [users] that struggle with digital technology, even to the point where we’re actually building a web application that was previously just a mobile application just so that it’s accessible to everyone.”
Age: Some addressed the issue of developing for users of different age groups: “Many ticket officers/operators are middle-aged or even more senior. They’re usually busy, less willing to explore the functionality of our software, and have to multitask.” and “In our health systems, we have a large group of users [who] are ‘elderly.’ They include both clinical service providers (e.g., doctors, nurses and service staff, etc.) and elderly patients.”
Culture: Cultural differences were observed between the developers and the users: “You put the robot into the wild; you discover things you didn’t foresee. We were very conservative, to try not to offend anyone. But you still discover things, like I did not expect this question: Do you believe in God? People were very insistent on getting answers on this topic in this area. I think it is very important to have people who can think in this context in an early phase.”
Some developers suggested that some domains tend to come with more end user human-centric aspects, for example, health, financial, community, social media, and safety-critical systems.
Clinical software: In a clinical setting, to make sure the software was used according to the clinicians’ needs, they used different panels for different parts of input for the clinician to click the panel that was being discussed, and if something else was suddenly being discussed, they could just switch to a different panel without skipping forward and backward to a few screens to get to the right spot. However, they “did not really realize this up until they tried it in the clinics and the first version was trialed.” The developers realized that “it didn’t match up to the way people having conversations with the [doctor].” Another issue they did not realize until it was tested was that they should not present the details related to the user’s cancer prediction in a same way to all the patients. “Because if a person has a risk calculator and their risk comes out to be in a high-risk category, if you just program the tool to present that risk to the person like anyone else, that can really be stressful for the patient and it can induce anxiety, which is all the things we wanted to avoid in the goals of this project.”
Games: It is essential to address user emotions, engagement, age, and language.
Others: In financial, community, and social media application domains, there are very wide range of end users with different expectations and needs. Some developers flagged the issue of end users with multiple, interacting human-centric aspects that are very challenging to address: “It ties in with physical challenges (e.g., screen readability and its impact on deteriorating eyesight) and being comfortable using technology, which many older people are not.” Some developers also noted they had little control over how many end user human-centric aspects were addressed or even if they were addressed. Several organizations had dedicated UX teams and larger ones “customer experience” teams – a development manager noted how their team didn’t have direct access to end users and communication of end user needs or difficulties came through mixed channels.
There are a range of end user human-centric aspects that developers acknowledge need to be better considered by developers, but there are also particular domain-specific challenges for some application domains. We want to investigate these domain-specific challenges in more depth in future work.
RQ2: How Are Different Human-Centric Aspects Addressed at Different Phases of Software Development?
We asked developers about the relative difficulty of addressing these human-centric aspects during one or more phases on a scale from 0 (no challenge) to 100 (most challenging). The survey and interviews reflected similar findings; however, interview participants emphasized that human-centric aspects need to be better considered at all stages of development.
Requirements engineering: Some of the key challenges stated included (1) gathering requirements for these end users (reported for elderly, children, mentally and physically challenged end users), (2) addressing the issues this end user group has (accessibility, physically challenged, cultural differences), (3) lack of sufficient knowledge on how to address these issues (reported for several of these human-centric aspects), (4) ethical issues in gathering these requirements (children), (5) finding and communicating with suitable end users with these challenges (reported for many of these human-centric aspects), (6) a very wide range of issues for end users with this human-centric aspect (accessibility needs and aging users), (7) satisfying all end users with these human-centric aspects (accessibility, culture, language), (8) the issue being very complex (cultural differences), and (9) meeting these requirements with suitable designs (reported for several human-centric aspects). While some developers believed the requirements phase should be the most important, many acknowledged that it was not unusual either for users to expect too much and developers had to manage their expectations or for users to change their mind, making it important to have checks in place throughout the development cycle. One developer put it succinctly saying that even once a prototype was developed, it was still important to evaluate human-centric aspects as “sometimes when we are starting to develop, they are only concepts. We don’t even know what kind of implications the technology may have.”
Design and development: Key difficulty reasons reported for design- and implementation-related tasks included (1) finding balance between designs that met different needs (elderly, children, accessibility), (2) designing solutions (accessibility), (3) including end users in the design process (children), (4) finding suitable design tools (children and accessibility aspects), (5) applying existing standards (accessibility), (6) getting to know characteristics of end users and their preferences (accessibility and gender), and (7) foreseeing the possible range of end user human issues (culture, accessibility, and language aspects).
Testing and maintenance: Key reasons given for difficulty for test- and maintenance-related tasks included (1) finding representative testers (reported for aging users, those with cognitive challenges, different genders, and cultural diversity), (2) the need for extensive testing (accessibility), (3) difficulty of testing and fixing if the developers do not have the challenges themselves (many), (4) difficulty determining who the end users are (for language and socio-economic status), (5) difficulty determining specific actual usage issues (for children, accessibility, culture, language, socio-economic aspects), and (6) potential ethical issues (for recruiting testers with mental health challenges). Testing was seen as a problem if testers were not using the software in the context it was designed for, for example, under stress: “When they’re just doing stuff, they have a very different behavior than when they’re stressed. You have to be much more clear. It’s really important for that testing under that real-life sort of situation, testing under the worst case, because it’s really important that the behavior under all those work conditions is taken into account.”
There was some variation in how hard and long it takes developers to address different human-centric aspects in their software development. However, overall, many are challenging and developers often lack expertise, time, and support to address them all. A lot of software is currently released without testing for how well it supports diverse end user human-centric aspects.
RQ3: What Support Is Available to the Developers and What Improvement Is Needed?
We asked survey respondents to tell us what key techniques and tools, if any, they currently use or have used to address some of these end user human-centric aspects in their project work. Figure 7-4 summarizes key techniques used. Surprisingly few reported using “human-centered” RE and design approaches. Agile and iterative software development methods and usability evaluation techniques were claimed to be beneficial by several. A few reported feedback mechanisms, “best practices” such as applying standards, and including end users in the process were all critical. A few use standards/guidelines for specific human-centric aspects, especially usability and those with physical or cognitive challenges. FIgure 7-5 illustrates tools used by participants. A few use visual design tools to model user human-centric aspects, Jira to track human-centric aspect–related defect fixing, Trello cards to capture human-centric requirements, and accessibility APIs. Interviewed developers reported using tools including Jira, Zendesk, DevOps, Nagios, and Selenium to increase communication between developers, stakeholders, and users. Similarly to the survey results, many talked about successfully using Agile and iterative software development methods, participatory scrum, brainstorming techniques, and methods for increasing rapid feedback to increase capturing and addressing human-centric aspects. One team even trained users to be scrum masters. Smaller teams and solo practitioners employed informal methods for getting feedback and resolving problems, for example, email and spreadsheets.
We asked developers what improved tools and techniques they thought would help them. Key examples given included better development processes to improve target end user collaboration; better guidelines and practices to follow to address diverse end user human-centric aspects in software; better requirements capture and human-centric aspect modeling support that would enable them to identify and better track these end user needs throughout development; AI-based tools to automatically advise on missing end user human-centric aspects, for example, to prompt them to consider certain end user human-centric aspects in different situations; and more “live” or in situ testing with representative end users, to get richer feedback on issues that arise in software from lack of consideration of end user human-centric aspects. A number of other suggestions were given including a need for better education of software engineers about diverse end user human-centric aspects and their impact on software usage; simpler GUIs for many end user populations; better defect reporting to enable diverse end users to more easily identify, describe, and report problems they have with their software; and so on.
Participants also suggested developers try out being “users”: “I think if you take two days out of a development cycle and send half of your developers to be the user for a couple of days, you’ll pay that. You’ll save that in tons later on that project.”
While some development methods and tools are used to help address human-centric aspects, many opportunities exist to improve the use of existing methods and tools and create new ones.
Limitations
Ideally, we would have had a larger number of survey respondents and interviewees. The demographics of the respondents did however give us a reasonable spread of experience, domain, and gender. We purposively chose interviewees from volunteers to give us a broad range of demographics. Our survey questions may have been misinterpreted by some respondents, and some may have not taken due care with the survey. We did our best to use terminology and brief explanations in the survey that developers would correctly interpret based on a pilot.
Summary
We reported results of online survey and interviews of software engineers exploring challenges they face in addressing a range of human-centric aspects of their end users. Most software engineers share few human-centric aspect characteristics with some of their end user groups. Key challenges identified included lack of education, knowledge, experience, guidelines, and tools about ways to best address some end user human-centric aspects; difficulty in recruiting representative end users and working with them throughout development; sheer difficulty in addressing a wide range of sometimes conflicting human-centric aspects; inability to satisfy all potential end users with differing human-centric aspects; and lack of time, budget, and management support in addressing many of the aspects. We want to carry out observational studies with a small number of software teams to observe developers working on software to see how they discuss and address these issues. We also want to survey and selectively interview a range of stakeholders and end users of software applications to better understand their challenges using the software. We want these learnings to help us trial with developers and end users new SE processes, techniques, and tools to address (some of) the challenging, outstanding issues in human-centric aspects in software for end users.
Acknowledgments
All the authors are supported by ARC Laureate Fellowship FL190100035.
Bibliography
Margaret Burnett, Simone Stumpf, Jamie Macbeth, Stephann Makri, Laura Beckwith, Irwin Kwan, Anicia Peters, and William Jernigan. GenderMag: A method for evaluating software’s gender inclusiveness. Interacting with Computers, 28(6):760–787, 2016.
Marta G. Carcedo, Soon Hau Chua, Simon Perrault, Paweł Wozniak, Raj Joshi, Mohammad Obaid, Morten Fjeld, and Shengdong Zhao. HaptiColor: Interpolating color information as haptic feedback to assist the colorblind. In Proceedings of the 2016 CHI Conference on Human Factors in Computing Systems, 3572–3583, 2016.
Enrico Coiera, Jos Aarts, and Casimir Kulikowski. The dangerous decade. Journal of the American Medical Informatics Association, 19:2–5, 2011.
Maheswaree Kissoon Curumsing, Niroshinie Fernando, Mohamed Abdelrazek, Rajesh Vasa, Kon Mouzakis, and John Grundy. Emotion-oriented requirements engineering: A case study in developing a smart home system for the elderly. Journal of Systems and Software, 147:215–229, 2019.
Tiago Silva Da Silva, Milene Selbach Silveira, Claudia de O. Melo, and Luiz Claudio Parzianello. Understanding the UX designers’ role within agile teams. In International Conference of Design, User Experience, and Usability, 599–609, Springer, 2013.
Martin Denscombe. The Good Research Guide: For Small-Scale Social Research Projects. Open University Press, Milton Keynes, 2003.
Anna Fensel, Dana Kathrin Tomic, and Andreas Koller. Contributing to appliances? Energy efficiency with internet of things, smart data and user engagement. Future Generation Computer Systems, 76:329–338, 2017.
Clare Garvie and Jonathan Frankle. Facial-recognition software might have a racial bias problem. The Atlantic, 7, 2016.
John Grundy. Human-centric software engineering for next generation cloud-and edge-based smart living applications. In 2020 20th IEEE/ACM International Symposium on Cluster, Cloud and Internet Computing (CCGRID), 1–10, IEEE, 2020.
John Grundy, Kon Mouzakis, Rajesh Vasa, Andrew Cain, Maheswaree Curumsing, Mohamed Abdelrazek, and Niroshine Fernando. Supporting diverse challenges of ageing with digital enhanced living solutions. In Global Telehealth Conference 2017, 75–90, IOS Press, 2018.
Kathleen Hartzel. How self-efficacy and gender issues affect software adoption and use. Communications of the ACM, 46(9):167–171, 2003.
Alenka Kavcic. Software accessibility: Recommendations and guidelines. In EUROCON 2005 – The International Conference on “Computer as a Tool,” Volume 2, 1024–1027, IEEE, 2005.
Janaki Kumar. Gamification at work: Designing engaging business software. In International Conference of Design, User Experience, and Usability, 528–537, Springer, 2013.
Jennifer McIntosh, Xiaojiao Du, Zexian Wu, Giahuy Truong, Quang Ly, Richard How, Sriram Viswanathan, and Tanjila Kanij. Evaluating age bias in e-commerce. In 2021 IEEE/ACM 13th International Workshop on Cooperative and Human Aspects of Software Engineering (CHASE), 31–40, 2021.
Tim Miller, Sonja Pedell, Antonio A. Lopez-Lorca, Antonette Mendoza, Leon Sterling, and Alen Keirnan. Emotion-led modelling for people-oriented requirements engineering: The case study of emergency systems. Journal of Systems and Software, 105:54–71, 2015.
Jessica Nguyen and Marc Dupuis. Closing the feedback loop between UX design, software development, security engineering, and operations. In Proceedings of the 20th Annual SIG Conference on Information Technology Education, 93–98, 2019.
Marije Nouwen, Maarten Van Mechelen, and Bieke Zaman. A value sensitive design approach to parental software for young children. In Proceedings of the 14th International Conference on Interaction Design and Children, 363–366, 2015.
Humphrey O. Obie, Waqar Hussain, Xin Xia, John Grundy, Li Li, Burak Turhan, Jon Whittle, and Mojtaba Shahin. A first look at human values-violation in app reviews. 2021 International Conference on Software Engineering, 2021.
Tina Øvad, Nis Bornoe, Lars Bo Larsen, and Jan Stage. Teaching software developers to perform UX tasks. In Proceedings of the Annual Meeting of the Australian Special Interest Group for Computer Human Interaction, 397–406, 2015.
Caroline Criado Perez. Invisible Women: Exposing Data Bias in a World Designed for Men. Random House, 2019.
Johann Roturier. Localizing Apps: A Practical Guide for Translators and Translation Students. Routledge, 2015.
Kristen Shinohara, Saba Kawas, Andrew J. Ko, and Richard E. Ladner. Who teaches accessibility? A survey of US computing faculty. In Proceedings of the 49th ACM Technical Symposium on Computer Science Education, 197–202, 2018.
Javier Sánchez Sierra and JS Togores. Designing mobile apps for visually impaired and blind users. In The Fifth international Conference on Advances in Computer-Human Interactions, 47–52, Citeseer, 2012.
Steven E. Stock, Daniel K. Davies, Michael L. Wehmeyer, and Susan B. Palmer. Evaluation of cognitively accessible software to increase independent access to cellphone technology for people with intellectual disability. Journal of Intellectual Disability Research, 52(12):1155–1164, 2008.
Yolande Strengers and Jenny Kennedy. The Smart Wife: Why Siri, Alexa, and Other Smart Home Devices Need a Feminist Reboot. MIT Press, 2020.
Drew Williams, Mohammad Arif Ul Alam, Sheikh Iqbal Ahamed, and William Chu. Considerations in designing human-computer interfaces for elderly people. In 2013 13th International Conference on Quality Software, 372–377, IEEE, 2013.
Emily Winter, Steve Forshaw, and Maria Angela Ferrario. Measuring human values in software engineering. In Proceedings of the 12th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement, 1–4, 2018.
Simone Wirtz, Eva-Maria Jakobs, and Martina Ziefle. Age-specific usability issues of software interfaces. In Proceedings of the IEA, volume 17, 2009.
Dehai Zhao, Zhenchang Xing, Chunyang Chen, Xiwei Xu, Liming Zhu, Guoqiang Li, and Jinshui Wang. Seenomaly: Vision-based linting of GUI animation effects against design-don’t guidelines. In 42nd International Conference on Software Engineering (ICSE20), ACM, New York, NY, 2020.
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Open Access This chapter is licensed under the terms of the Creative Commons Attribution 4.0 International License (http://creativecommons.org/licenses/by/4.0/), which permits use, sharing, adaptation, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons license and indicate if changes were made.
The images or other third party material in this chapter are included in the chapter's Creative Commons license, unless indicated otherwise in a credit line to the material. If material is not included in the chapter's Creative Commons license and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder.
Copyright information
© 2024 The Author(s)
About this chapter
Cite this chapter
Grundy, J., Kanij, T., McIntosh, J., Khalijah, H., Mueller, I. (2024). Developers’ Perspective of Diverse End User Requirements. In: Damian, D., Blincoe, K., Ford, D., Serebrenik, A., Masood, Z. (eds) Equity, Diversity, and Inclusion in Software Engineering. Apress, Berkeley, CA. https://doi.org/10.1007/978-1-4842-9651-6_7
Download citation
DOI: https://doi.org/10.1007/978-1-4842-9651-6_7
Published:
Publisher Name: Apress, Berkeley, CA
Print ISBN: 978-1-4842-9650-9
Online ISBN: 978-1-4842-9651-6
eBook Packages: Professional and Applied ComputingApress Access BooksProfessional and Applied Computing (R0)