Architectural issues in software reuse: it's not just the functionality, it's the packaging
SSR '95 Proceedings of the 1995 Symposium on Software reusability
Bridging the gulf between code and behavior in programming
CHI '95 Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Architectural mismatch or why it's hard to build systems out of existing parts
Proceedings of the 17th international conference on Software engineering
The reuse of uses in Smalltalk programming
ACM Transactions on Computer-Human Interaction (TOCHI)
Ambiguous intentions: a paper-like interface for creative design
Proceedings of the 9th annual ACM symposium on User interface software and technology
Tools for spreadsheet auditing
International Journal of Human-Computer Studies
Does continuous visual feedback aid debugging in direct-manipulation programming systems?
Proceedings of the ACM SIGCHI Conference on Human factors in computing systems
Contextual design: defining customer-centered systems
Contextual design: defining customer-centered systems
What we know about spreadsheet errors
Journal of End User Computing - End User Development
What you see is what you test: a methodology for testing form-based visual programs
Proceedings of the 20th international conference on Software engineering
A catalog of techniques for resolving packaging mismatch
SSR '99 Proceedings of the 1999 symposium on Software reusability
User opinions and rewards in a reuse-based development system
SSR '99 Proceedings of the 1999 symposium on Software reusability
Getting more out of programming-by-demonstration
Proceedings of the SIGCHI conference on Human Factors in Computing Systems
“Let's see your search-tool!”—collaborative use of tailored artifacts in groupware
GROUP '99 Proceedings of the international ACM SIGGROUP conference on Supporting group work
User defined objects are first class citizen
Proceedings of the third international conference on Computer-aided design of user interfaces
Programming by example: novice programming comes of age
Communications of the ACM
Programming by example: programming by analogous examples
Communications of the ACM
WYSIWYT testing in the spreadsheet paradigm: an empirical evaluation
Proceedings of the 22nd international conference on Software engineering
A methodology for testing spreadsheets
ACM Transactions on Software Engineering and Methodology (TOSEM)
Increasing the confidence in off-the-shelf components: a software connector-based approach
SSR '01 Proceedings of the 2001 symposium on Software reusability: putting software reuse in context
Outlier finding: focusing user attention on possible errors
Proceedings of the 14th annual ACM symposium on User interface software and technology
Designing dynamic web pages and persistence in the WYSIWYG interface
Proceedings of the 7th international conference on Intelligent user interfaces
LAPIS: smart editing with text structure
CHI '02 Extended Abstracts on Human Factors in Computing Systems
Practical software reuse
Domain Theory: Patterns for Knowledge and Software Reuse
Domain Theory: Patterns for Knowledge and Software Reuse
Fundamentals of Software Engineering
Fundamentals of Software Engineering
Testing Homogeneous Spreadsheet Grids with the "What You See Is What You Test" Methodology
IEEE Transactions on Software Engineering
Automated test case generation for spreadsheets
Proceedings of the 24th International Conference on Software Engineering
Semantic anomaly detection in online data sources
Proceedings of the 24th International Conference on Software Engineering
Tailoring as Collaboration: The Mediating Role of Multiple Representations and ApplicationUnits
Computer Supported Cooperative Work
Gender differences in computer science students
SIGCSE '03 Proceedings of the 34th SIGCSE technical symposium on Computer science education
Harnessing curiosity to increase correctness in end-user programming
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
PADL '02 Proceedings of the 4th International Symposium on Practical Aspects of Declarative Languages
Interactive Simultaneous Editing of Multiple Text Regions
Proceedings of the General Track: 2002 USENIX Annual Technical Conference
The human-computer interaction handbook
End-user software visualizations for fault localization
Proceedings of the 2003 ACM symposium on Software visualization
End-user software engineering with assertions in the spreadsheet paradigm
Proceedings of the 25th International Conference on Software Engineering
Community design of community simulations
DIS '02 Proceedings of the 4th conference on Designing interactive systems: processes, practices, methods, and techniques
FAR: An End-User Language to Support Cottage E-Services
HCC '01 Proceedings of the IEEE 2001 Symposia on Human Centric Computing Languages and Environments (HCC'01)
AutoHAN: An Architecture for Programming the Home
HCC '01 Proceedings of the IEEE 2001 Symposia on Human Centric Computing Languages and Environments (HCC'01)
Applying Attention Investment to End-User Programming
HCC '02 Proceedings of the IEEE 2002 Symposia on Human Centric Computing Languages and Environments (HCC'02)
A Data-Flow Testing Methodology for a Dataflow Based Visual Programming Language
HCC '02 Proceedings of the IEEE 2002 Symposia on Human Centric Computing Languages and Environments (HCC'02)
First Steps in Programming: A Rationale for Attention Investment Models
HCC '02 Proceedings of the IEEE 2002 Symposia on Human Centric Computing Languages and Environments (HCC'02)
Behavior Processors: Layers between End-Users and Java Virtual Machines
VL '97 Proceedings of the 1997 IEEE Symposium on Visual Languages (VL '97)
Supporting Reuse of Evolving Visual Code
VL '97 Proceedings of the 1997 IEEE Symposium on Visual Languages (VL '97)
Fluid Visualization of Spreadsheet Structures
VL '98 Proceedings of the IEEE Symposium on Visual Languages
ICSM '01 Proceedings of the IEEE International Conference on Software Maintenance (ICSM'01)
Test Reuse in the Spreadsheet Paradigm
ISSRE '02 Proceedings of the 13th International Symposium on Software Reliability Engineering
Spreadsheet visualisation to improve end-user understanding
APVis '03 Proceedings of the Asia-Pacific symposium on Information visualisation - Volume 24
Software reuse strategies and component markets
Communications of the ACM - Program compaction
The Art of Modeling with Spreadsheets
The Art of Modeling with Spreadsheets
About Face 2.0: The Essentials of Interaction Design
About Face 2.0: The Essentials of Interaction Design
Finding High-Level Structures in Spreadsheet Programs
WCRE '02 Proceedings of the Ninth Working Conference on Reverse Engineering (WCRE'02)
Analyzing Large Spreadsheet Programs
WCRE '03 Proceedings of the 10th Working Conference on Reverse Engineering
Forms/3: A first-order visual language to explore the boundaries of the spreadsheet paradigm
Journal of Functional Programming
Designing the whyline: a debugging interface for asking questions about program behavior
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Impact of interruption style on end-user debugging
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Organizational Patterns of Agile Software Development
Organizational Patterns of Agile Software Development
Validating the Unit Correctness of Spreadsheet Programs
Proceedings of the 26th International Conference on Software Engineering
The fuzzy felt ethnography—understanding the programming patterns of domestic appliances
Personal and Ubiquitous Computing
Communications of the ACM - End-user development: tools that empower users to create their own software solutions
Communications of the ACM - End-user development: tools that empower users to create their own software solutions
Citrine: providing intelligent copy-and-paste
Proceedings of the 17th annual ACM symposium on User interface software and technology
Field studies of computer system administrators: analysis of system management tools and practices
CSCW '04 Proceedings of the 2004 ACM conference on Computer supported cooperative work
Gender: An Important Factor in End-User Programming Environments?
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
Rewarding "Good" Behavior: End-User Debugging and Rewards
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
Everyday Programming: Challenges and Opportunities for Informal Web Development
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
Header and Unit Inference for Spreadsheets Through Spatial Analyses
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
Managing Duplicated Code with Linked Editing
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
Six Learning Barriers in End-User Programming Systems
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
Comprehension Strategies of End-User Programmers in an Event-Driven Application
VLHCC '04 Proceedings of the 2004 IEEE Symposium on Visual Languages - Human Centric Computing
How Effective Developers Investigate Source Code: An Exploratory Study
IEEE Transactions on Software Engineering
Effectiveness of end-user debugging software features: are there gender issues?
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Programmatic semantics for natural language interfaces
CHI '05 Extended Abstracts on Human Factors in Computing Systems
The domestic economy: a broader unit of analysis for end user programming
CHI '05 Extended Abstracts on Human Factors in Computing Systems
Reuse-Conducive Development Environments
Automated Software Engineering
Automatic generation and maintenance of correct spreadsheets
Proceedings of the 27th international conference on Software engineering
An empirical study of fault localization for end-user programmers
Proceedings of the 27th international conference on Software engineering
Jungloid mining: helping to navigate the API jungle
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
Leveraging User-Session Data to Support Web Application Testing
IEEE Transactions on Software Engineering
WEUSE I Proceedings of the first workshop on End-user software engineering
ACM Computing Surveys (CSUR)
When Software Engineers Met Research Scientists: A Case Study
Empirical Software Engineering
Garbage in, Garbage out? An Empirical Look at Oracle Mistakes by End-User Programmers
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
How Well Do Professional Developers Test with Code Coverage Visualizations? An Empirical Study
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
Designing Features for Both Genders in End-User Programming Environments
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
Visual Specifications of Correct Spreadsheets
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
Who, What, and How: A Survey of Informal and Professional Web Developers
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
Estimating the Numbers of End Users and End User Programmers
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
Facilitators and Inhibitors of End-User Development by Teachers in a School Environment
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
Using Objects of Measurement to Detect Spreadsheet Errors
VLHCC '05 Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing
Automation and customization of rendered web pages
Proceedings of the 18th annual ACM symposium on User interface software and technology
Tinkering and gender in end-user programmers' debugging
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Answering why and why not questions in user interfaces
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Integrating automated test generation into the WYSIWYT spreadsheet testing methodology
ACM Transactions on Software Engineering and Methodology (TOSEM)
Gencel: a program generator for correct spreadsheets
Journal of Functional Programming
Supporting end-user debugging: what do users want to know?
Proceedings of the working conference on Advanced visual interfaces
Inferring templates from spreadsheets
Proceedings of the 28th international conference on Software engineering
Maintaining mental models: a study of developer work habits
Proceedings of the 28th international conference on Software engineering
Type inference for spreadsheets
Proceedings of the 8th ACM SIGPLAN international conference on Principles and practice of declarative programming
Development and evaluation of a model of programming errors
HCC '03 Proceedings of the 2003 IEEE Symposium on Human Centric Computing Languages and Environments
Strategies and behaviors of end-user programmers with interactive fault localization
HCC '03 Proceedings of the 2003 IEEE Symposium on Human Centric Computing Languages and Environments
Programming at runtime: requirements and paradigms for nonprogrammer web application development
HCC '03 Proceedings of the 2003 IEEE Symposium on Human Centric Computing Languages and Environments
Generalizing WYSIWYT visual testing to screen transition languages
HCC '03 Proceedings of the 2003 IEEE Symposium on Human Centric Computing Languages and Environments
User interfaces for privacy agents
ACM Transactions on Computer-Human Interaction (TOCHI)
Translating keyword commands into executable code
UIST '06 Proceedings of the 19th annual ACM symposium on User interface software and technology
Dimensions Characterizing Programming Feature Usage by Information Workers
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
Sharing reasoning about faults in spreadsheets: An empirical study
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
AutoTest: A Tool for Automatic Test Case Generation in Spreadsheets
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
Work, Play, and In-Between: Exploring the Role of Work Context for Informal Web Developers
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
Mica: A Web-Search Tool for Finding API Components and Examples
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
Pair Collaboration in End-User Debugging
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
Gender Differences in End-User Debugging, Revisited: What the Miners Found
VLHCC '06 Proceedings of the Visual Languages and Human-Centric Computing
Software architects in practice: handling requirements
CASCON '06 Proceedings of the 2006 conference of the Center for Advanced Studies on Collaborative research
Scaling a Dataflow Testing Methodology to the MultiparadigmWorld of Commercial Spreadsheets
ISSRE '06 Proceedings of the 17th International Symposium on Software Reliability Engineering
Learning to Program with Alice, Brief Edition
Learning to Program with Alice, Brief Edition
Implementation Patterns
UCheck: A spreadsheet type checker for end users
Journal of Visual Languages and Computing
Koala: capture, share, automate, personalize business processes on the web
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Modeling and understanding students' off-task behavior in intelligent tutoring systems
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Making mashups with marmite: towards end-user programming for the web
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Storytelling alice motivates middle school girls to learn computer programming
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Supporting end-users in the creation of dependable web clips
Proceedings of the 16th international conference on World Wide Web
GoalDebug: A Spreadsheet Debugger for End Users
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Information Needs in Collocated Software Development Teams
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Software Development Environments for Scientific and Engineering Software: A Series of Case Studies
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Some Problems of Professional End User Developers
VLHCC '07 Proceedings of the IEEE Symposium on Visual Languages and Human-Centric Computing
On to the Real World: Gender and Self-Efficacy in Excel
VLHCC '07 Proceedings of the IEEE Symposium on Visual Languages and Human-Centric Computing
Explaining Debugging Strategies to End-User Programmers
VLHCC '07 Proceedings of the IEEE Symposium on Visual Languages and Human-Centric Computing
Design Planning in End-User Web Development
VLHCC '07 Proceedings of the IEEE Symposium on Visual Languages and Human-Centric Computing
A Type System Based on End-User Vocabulary
VLHCC '07 Proceedings of the IEEE Symposium on Visual Languages and Human-Centric Computing
Children as Unwitting End-User Programmers
VLHCC '07 Proceedings of the IEEE Symposium on Visual Languages and Human-Centric Computing
Comparison and Evaluation of Clone Detection Tools
IEEE Transactions on Software Engineering
Component-based tailorability: Enabling highly flexible software applications
International Journal of Human-Computer Studies
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Testing vs. code inspection vs. what else?: male and female end users' debugging strategies
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Employing patterns and layers for early-stage design and prototyping of cross-device user interfaces
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
CoScripter: automating & sharing how-to knowledge in the enterprise
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
The buzz: supporting user tailorability in awareness applications
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Topes: reusable abstractions for validating data
Proceedings of the 30th international conference on Software engineering
Debugging reinvented: asking and answering why and why not questions about program behavior
Proceedings of the 30th international conference on Software engineering
Opportunistic programming: how rapid ideation and prototyping occur in practice
Proceedings of the 4th international workshop on End-user software engineering
Teaching software engineering to end-users
Proceedings of the 4th international workshop on End-user software engineering
Mobilization by demonstration: using traces to re-author existing web sites
Proceedings of the 13th international conference on Intelligent user interfaces
Interactive Fault Localization Techniques in a Spreadsheet Environment
IEEE Transactions on Software Engineering
DENIM: an informal web site design tool inspired by observations of practice
Human-Computer Interaction
An ethnographic examination of the relationship of gender & end-user programming
An ethnographic examination of the relationship of gender & end-user programming
How do we program the home? Gender, attention investment, and the psychology of programming at home
International Journal of Human-Computer Studies
EnsembleMatrix: interactive visualization to support machine learning with multiple classifiers
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Attaching UI enhancements to websites with end users
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Why and why not explanations improve the intelligibility of context-aware intelligent systems
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
Sketching User Experiences: Getting the Design Right and the Right Design
Sketching User Experiences: Getting the Design Right and the Right Design
Supporting End Users to Be Co-designers of Their Tools
IS-EUD '09 Proceedings of the 2nd International Symposium on End-User Development
End-user programming in the wild: A field study of CoScripter scripts
VLHCC '08 Proceedings of the 2008 IEEE Symposium on Visual Languages and Human-Centric Computing
Can feature design reduce the gender gap in end-user software development environments?
VLHCC '08 Proceedings of the 2008 IEEE Symposium on Visual Languages and Human-Centric Computing
How designers design and program interactive behaviors
VLHCC '08 Proceedings of the 2008 IEEE Symposium on Visual Languages and Human-Centric Computing
Automatic detection of dimension errors in spreadsheets
Journal of Visual Languages and Computing
A framework and methodology for studying the causes of software errors in programming systems
Journal of Visual Languages and Computing
Interactive, visual fault localization support for end-user programmers
Journal of Visual Languages and Computing
As easy as “click”: end-user web engineering
ICWE'05 Proceedings of the 5th international conference on Web Engineering
Specifying and reasoning about dynamic access-control policies
IJCAR'06 Proceedings of the Third international joint conference on Automated Reasoning
Abstraction as a means for end-user computing in creative applications
IEEE Transactions on Systems, Man, and Cybernetics, Part A: Systems and Humans
Generative usability: security and user centered design beyond the appliance
NSPW '09 Proceedings of the 2009 workshop on New security paradigms workshop
Research toward an engineering discipline for software
Proceedings of the FSE/SDP workshop on Future of software engineering research
Towards communities of practice for mashups
Proceedings of the 3rd and 4th International Workshop on Web APIs and Services Mashups
LDS: computer-based lesson development system for teaching computer science
USAB'10 Proceedings of the 6th international conference on HCI in work and learning, life and leisure: workgroup human-computer interaction and usability engineering
Modularity for the modern world: summary of invited keynote
Proceedings of the tenth international conference on Aspect-oriented software development
Supporting the cooperation of end-user programmers through social development environments
Proceedings of the 2nd International Workshop on Web 2.0 for Software Engineering
Supporting professional spreadsheet users by generating leveled dataflow diagrams
Proceedings of the 33rd International Conference on Software Engineering
Type-safe evolution of spreadsheets
FASE'11/ETAPS'11 Proceedings of the 14th international conference on Fundamental approaches to software engineering: part of the joint European conferences on theory and practice of software
Using automatic persistent memoization to facilitate data analysis scripting
Proceedings of the 2011 International Symposium on Software Testing and Analysis
An architectural approach to end user orchestrations
ECSA'11 Proceedings of the 5th European conference on Software architecture
Intelligible TinyOS sensor systems: explanations for embedded software
CONTEXT'11 Proceedings of the 7th international and interdisciplinary conference on Modeling and using context
End users as co-designers of their own tools and products
Journal of Visual Languages and Computing
An idea garden for end-user programmers
CHI '12 Extended Abstracts on Human Factors in Computing Systems
What can model-based UI design offer to end-user software engineering?
Proceedings of the 4th ACM SIGCHI symposium on Engineering interactive computing systems
Considerations for computerized in situ data collection platforms
Proceedings of the 4th ACM SIGCHI symposium on Engineering interactive computing systems
Detecting and visualizing inter-worksheet smells in spreadsheets
Proceedings of the 34th International Conference on Software Engineering
MASH: a tool for end-user plug-in composition
Proceedings of the 34th International Conference on Software Engineering
Assisting end-user development in browser-based mashup tools
Proceedings of the 34th International Conference on Software Engineering
Supporting sketch-based retrieval from a library of reusable behaviours
Expert Systems with Applications: An International Journal
I would DiYSE for it!: a manifesto for do-it-yourself internet-of-things creation
Proceedings of the 7th Nordic Conference on Human-Computer Interaction: Making Sense Through Design
Integrating heterogeneous web services from an end user perspective
Proceedings of the 9th Middleware Doctoral Symposium of the 13th ACM/IFIP/USENIX International Middleware Conference
A collaborative user-centered approach to fine-tune geospatial database design
ER'12 Proceedings of the 2012 international conference on Advances in Conceptual Modeling
Foundations and tools for end-user architecting
Proceedings of the 17th Monterey conference on Large-Scale Complex IT Systems: development, operation and management
Programming behaviour of a personal service robot with application to healthcare
ICSR'12 Proceedings of the 4th international conference on Social Robotics
On the empirical evaluation of fault localization techniques for spreadsheets
FASE'13 Proceedings of the 16th international conference on Fundamental Approaches to Software Engineering
A language for end-user web augmentation: Caring for producers and consumers alike
ACM Transactions on the Web (TWEB)
I can do text analytics!: designing development tools for novice developers
Proceedings of the SIGCHI Conference on Human Factors in Computing Systems
CHI '13 Extended Abstracts on Human Factors in Computing Systems
Visually modelling data intensive web applications to assist end-user development
Proceedings of the 6th International Symposium on Visual Information Communication and Interaction
Five key challenges in end-user development for tangible and embodied interaction
Proceedings of the 15th ACM on International conference on multimodal interaction
A web-centred approach to end-user software engineering
ACM Transactions on Software Engineering and Methodology (TOSEM) - Testing, debugging, and error handling, formal methods, lifecycle concerns, evolution and maintenance
An Empirical Investigation into Programming Language Syntax
ACM Transactions on Computing Education (TOCE)
SRE: A Scenario-based Requirement Exploration Process for End-user Mobile-Application Development
Proceedings of International Conference on Advances in Mobile Computing & Multimedia
Proceedings of the 45th ACM technical symposium on Computer science education
On the benefits of providing versioning support for end users: An empirical study
ACM Transactions on Computer-Human Interaction (TOCHI)
Going back and forth in metacommunication threads
Proceedings of the 12th Brazilian Symposium on Human Factors in Computing Systems
Hi-index | 0.00 |
Most programs today are written not by professional software developers, but by people with expertise in other domains working towards goals for which they need computational support. For example, a teacher might write a grading spreadsheet to save time grading, or an interaction designer might use an interface builder to test some user interface design ideas. Although these end-user programmers may not have the same goals as professional developers, they do face many of the same software engineering challenges, including understanding their requirements, as well as making decisions about design, reuse, integration, testing, and debugging. This article summarizes and classifies research on these activities, defining the area of End-User Software Engineering (EUSE) and related terminology. The article then discusses empirical research about end-user software engineering activities and the technologies designed to support them. The article also addresses several crosscutting issues in the design of EUSE tools, including the roles of risk, reward, and domain complexity, and self-efficacy in the design of EUSE tools and the potential of educating users about software engineering principles.