{'fraction_non_alphanumeric': 0.025495344951062305, 'fraction_numerical': 0.005681546908570065, 'mean_word_length': 5.500931098696462, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
A Survey on the Effects of Working Conditions on Programming Efficiency in an Educational Environment

A recurrent concern of instructors and managers in learning and industrial sectors is how to organise the working environment to increase the productivity in tasks such as programming and software testing. Evidence of the increasing interest from different domains in this topic is the growing amount of research that has been published on physical factors (e.g., product, personnel, project and process), programming tasks (e.g., tests, questionnaires, programming, testing and debugging), and assessment methods (e.g., time, software metrics and academic grading). The objective of this paper is to survey the literature and to enable one to gain valuable insights into the relevance of physical factors to improve programming efficiency, especially in a learning environment. This study also makes recommendations on the techniques that can provide further experience for learners before joining the industrial sector. Finally, this survey suggests research directions, including an analysis of the correlation between physical factors and measurable productivity.


Introduction
The term "working conditions" is often used to refer to the environment and surrounding circumstances in which employees or students work. Such conditions include a wide range of aspects, from physical components of the workspace or study space to the methodologies that the institution implements, which can influence the developer's behaviour and productivity. Working conditions can be divided into product, personnel, project and process related circumstances [1]. Examples of these factors include elements in the work or the study space such as light, noise, music, company culture, job satisfaction, satisfaction of the study process, relationship with colleagues or other students, technical training, different coding practices such as pair programming, and the complexity of a task. This topic plays an essential part in educational processes for students enrolled in university-level courses of programming and industrial companies providing internal training. A careful study of the working conditions' impact on programming efficiency can increase the effectiveness of learning activities, leading to higher standards of education and skilful specialists. This paper surveys the existing literature concerning the effects of working or learning conditions on developers' efficiency in the educational process, focusing on the main investigated physical factors, programming tasks and assessment methods. Moreover, by analysing the trends and gaps in the literature, this study enables better decision making regarding the surroundings for students and practitioners in the academia and the industrial sector.
The methodology for collecting relevant literature consists of data acquisition from scientific journals and conferences using search keywords and sentences including "working conditions", "programming efficiency", "physical factors". This was followed by an analysis of the relevance of individual studies, resulting in a summary covering papers published between 1984 and 2018 addressing different working and academic conditions' effects.
The remaining of this paper is organised as follows. Section 2 outlines the existing research on physical factors, typical programming tasks and methods for performance assessment. It also categorises the current body of study and introduces a taxonomy for such factors. In Sect. 3, we discuss the trends and the gaps in the literature and this analysis constitutes a useful resource for researchers and software project managers willing to improve the work environment in their companies. Section 4 presents overall observations and suggestions for further research.

On the Physical Factors
Physical factors can be divided into four different categories according to their characteristics: product, personnel, project and process factors. Product factors refer to software qualities that are established throughout the stages of software development. They concern to artefacts (e.g. software code, specifications, documents) and system characteristics (e.g. complexity, scalability, instability) [1]. Product factors also include the application type, programming language, database management system, development model (agile/waterfall), hardware platform, graphical user interface and operating system [2]. An example of a study on product factors is presented by Delorey et al. [3], which explained how the choice of programming language affects productivity and the outcome. In another study, Mohapatra et al. [4] showed that product factors such as code reusability and convenient document management system could significantly impact productivity while maintaining high quality.
Personnel factors comprise developers' attributes that impact the productivity of the whole team during the development process. This type of factor is often related to the expertise level of individuals and their roles in the project.
For example, the study by Trendowicz et al. [1] investigated how skills of development team members (e.g. analysts, architects, engineers, project managers), programming suppliers, clients, maintainers and subcontractors affect the overall performance. It is possible to see that age and gender influence the quality of the code and the productivity of the development team [5]. Moreover, personnel factors like pair programming [6], the role of a participant in the project [7] and compatible soft skills [8] also affect the programmers' efficiency. A common limitation of the aforementioned studies is that they ignore the relationship between developers in a team, which is an important personnel factor.
Project factors include various aspects of setup and maintenance, such as the high turnover rate of the staff. Examples of project factors that impact developers' productivity are customer participation, development environment adequacy, staff availability, use standards, methods, tools, software's logical complexity, requirements volatility, quality requirements, efficiency requirements, installation requirements, staff's soft skills and domain knowledge [2]. Raziq et al. [9] also discussed how satisfaction and relationship with colleagues or classmates during a project could affect productivity.
Process factors are related to the characteristics of software processes including techniques, apparatuses and innovations that are implemented during the product life-cycle. These factors also include quality of evaluations, consistency of examinations, quality of the tools, nature of the executive procedures, or degree of customer cooperation [1]. As described by Sudhakar [10], different software engineering tools and techniques such as rapid prototyping, software testing, e-mail, document management systems, programming languages, and configuration management systems are examples of process factors that affect efficiency.

On the Programming Tasks
In this section, we consider tasks which can be used for evaluation of the programming efficiency in an educational context. They can be grouped in four macro-categories: tests, questionnaires and exams; implementing data structures and algorithms; working on a project; testing and debugging.
This survey focuses on programming tasks in an educational process, which are mostly assessed through exams and tests. For example, Hu et al. [11] investigated the impact of such evaluation techniques on productivity. There were no special assignments to estimate students' productivity; instead, they studied in different physical conditions and took general exams and tests. Other studies focused on the task of learning an extracurricular topic, with outcomes being evaluated according to questionnaires for participants [12]. Wiedenbeck et al. [13] proposed a different approach for assessing students' progress by providing them with simple tasks for approximately 1.5 min. Such a method stands as an alternative method for evaluating the learning outcome since short tasks can assess knowledge but not ingenuity nor the ability to produce a creative solution quickly.
Another type of activity which is important for computer science students is the implementation of algorithms and data structures. Nanz and Furia [7], and Bergersen et al. [14] mention simple tasks for algorithms implementation. The development of basic algorithms allows researchers to consider the minimum number of internal human factors and focus on the implementation. Another approach outlined by Darcy and Ma [15] is to provide a coding task as an exercise. Different difficulty levels of the proposed tasks help researchers to evaluate the influence of physical factors on the programmer's productivity. Not only standard algorithms can be used in the evaluation as indicated by Sprigle and Schaefer [16], who used tasks in LOGO programming language for drawing.
Although this survey focuses on the academic environment, it is noteworthy to mention studies that focus on programming tasks in industrial projects. For example, Raziq and Maulabakhsh [9] used different types of tasks from those commonly used in academia. The advantage of using industrial tasks is that they can be studied over a long time, as indicated in [3] and [10]. For instance, in [2], the employees of a large company were observed during the software project, and researchers investigated how different factors affect productivity. It is worth emphasizing that, unlike academic tasks, industrial ones are more narrowly focused. For example, Sullivan and Umashi Bers [5] discussed software development and robotics tasks. There are many projects in industry that are dependent on the specific domain, which complicates the process of evaluating the productivity of programmers.
Testing and debugging are here considered separately, although both are part of industrial and academic projects. Chaparro et al. [6] mentioned different tasks which are related to debugging, re-factoring and program comprehension. When evaluating productivity, the debugging skill can be critical since small errors or problems with external services can cause the inability to present a working code. Khan et al. [17] organized multiple-choice questionnaires to measure a programmer's performance on recognizing debugging problems. Such an approach is one of the simplest ways to give objective feedback on the productivity of testers and programmers. A more comprehensive method is presented in [18], where the project manager assigned to programmers a set of modules for testing in modelbased development. Khan et al. [19] proposed a special system of providing tasks for evaluating the productivity of programmers. The training session consisted of watching a video clip, followed by a series of debugging questions that had to be answered within a fixed time. After completing the training session, participants continued with the actual test, which consisted of two cycles of watching clips and debugging test.

Constraints and Performance Assessment of Programming Tasks
This section examines two important elements related to programming tasks: the constraints and evaluation methods for assessing programming performance.
Most of the literature focuses on combining time constraint and completeness evaluation, using software development metrics and academic grading.
One of the simplest methods for evaluating programming performance which has been employed is to assess whether the task was finished in its entirety. In this type of evaluation, the time to solve a task is used as a performance metric. The literature contains several examples of research in this direction [3,6,7,14,20]. However, most of the research addresses programming in the workplace with limited research being done in an educational context [21].
Using software metrics is a practical way to evaluate not only students' performance but also the quality of the generated code. Some metrics have been commonly used by the industry sector and can offer a good benchmark. For example, Mohapatra [22] uses function points and a person's monthly effort to estimate individual productivity. Sudhakar et al. [10] employed a more comprehensive set of metrics to evaluate programming performance: use function, use case, object and feature points. The literature also contains examples of not conventional software metrics for programming quality assessment, including the number of lines of code (LOC) [7,10] and memory usage [7]. Darcy and Ma [15] extended LOC by considering blank, comment and executable lines. Vihavainen [23] employed an alternative measurement by counting indentation errors. It is noteworthy that LOC cannot be the only one measure because it partially depends on the choice of programming language.
Several studies have used academic grading for assessing programming quality [11,13,17]. For example, Raschs et al. [12] surveyed developers to compare his or her overall performance with peers at the same level and speciality area. A nine-point scale was used, with labels ranging from "very inferior, the very worst" to "very superior, the very best". Mohapatra [22] focused on evaluating team productivity and demonstrated that there exists a strong relationship between programming quality and following a systematic project management plan. It is also important to consider the fact of possible subjectivity of people who put such evaluation, which affects academic grading as a metric.

Discussion
As evident in the analyzed studies, working conditions play an essential role in software developers' performance. For example, Malik et al. [24] conducted a study to demonstrate that the physical environment has a significant positive effect on employees' productivity. The study used multiple regression analysis to emphasize that the performance mostly depends on physical working conditions, training and development, and communication practices. In another study, Srivastava [25] demonstrated that there is a dependence between the working environment and the employees' behaviour by examining the resultant organizational effectiveness and performance.
Several studies have also confirmed that environmental conditions affect the emotional and psychological health of employees. A job usually occupies a considerable portion of a person's day, which makes relevant any discussions about the impact of a job on the emotional health [26]. According to McCraty et al. [27], there is a strong relationship between emotional and physical health and the work-related indicators of workplace satisfaction as well as the perception of individual contribution. The study enabled an overall reduction of the blood pressure, improved emotional health and workplace-related measures of the employees by enhancing the work environment.
Working conditions have a significant effect not only on the emotional health of employees but also on their physical health [28]. One of the essential components of the workspace is its shape or design. Open workspaces might lead to different work collaboration and efficiency compared to small closed individual office design. The design of the workspace may influence the surrounding noise and have an impact on the employee's performance. One important aspect of choosing the office design is the type of work that is being done, whether it requires collaboration and teamwork, or it is an individual task. Danielsson and Bodin [29] showed that the lowest health status for employees was found in medium-sized and small open-plan offices, while the best health rates were found among employees in cell and flex offices.
A study by Estácio et al. [30] revealed that the work environment could also be affected by the style of work: individual, team-based, or pair-based, with collaborative practices outperforming solo programming with regard to acquiring programming skills. Furthermore, it was shown that enhancing the learning outcomes, improving students' satisfaction and reducing frustration in assignments could be achieved with pair programming [31] and more interactive learning environments [32]. Flor and Hutchins [33] noted that the "solutions space", i.e. all possible solutions for a problem, is maximized when two programmers concentrate on a task. There are other factors which may influence the effectiveness of collaborative learning. A study performed by Chaparro et al. [6] on postgraduate students reported that close skill level and personality compatibility are among the main elements that positively affect the success of pair programming. Another finding of the research is that collaborative programming can boost or undermine the performance depending on the type of task. According to the study, software design and implementation were demonstrated to be more efficient, while debugging was not significantly faster nor easier with this practice.
There has been a considerable increase in the number of publications on working conditions in the last decades. Appendix in Sect. 4 represents the summary of considered literature, namely physical factors, programming tasks and performance measure chosen for each study. Figure 1 shows an increasing amount of research on personnel physical factors and programmers' productivity. This growth is more noticeable on the number of studies about project and process factors such as satisfaction and relationship with colleagues. This interest is caused, among other factors, by an increasing concern with creating a comfortable atmosphere in offices and educational centres to improve the productivity of employees and students.
Regarding the number of publications on job-specific problems, there has been a considerable increase over the years (see Fig. 2a). This can be explained in part by the acknowledged relationship between profit and employees' Research of programming tasks impacting performance.
Research of measures evaluating performance. productivity. Moreover, the number of papers considering debugging and testing tasks, as well as exams and questionnaires has also increased. Interestingly, there has been no significant amount of research on programming tasks related to algorithms, to the best of the authors' knowledge. It is also possible to notice that most of the research has focused on performance assessment using software metrics such as source lines of code (SLOC) and software function points (SFP), as shown in Fig. 2b.
It is noteworthy that most of the conducted research has focused on the physical factors in an isolated manner. In other words, the effects of the synergy between different factors are often ignored. Future research should focus simultaneously on several factors as their interaction can impact the results of the software project. Moreover, the majority of studies has used software metrics for assessing programming productivity addressing the industrial environment [7,10,22]. Such an approach might bring additional complexities and a steeper learning curve to students compared to the usual academic grading evaluation. However, the use of software metrics in a learning environment can also provide practical experience which might be useful for future industrial jobs [11,13].

Conclusion and Future Research
The research on working conditions is relevant not only for corporations aiming to maximise the productivity of their employees but also for educational institutions interested in improving their curricula and improving students' overall qualification before they enter the job market. A deeper understanding of concepts like physical factors, programming tasks and methods of evaluating performance can enable better decision making. The body of research is, therefore, a useful resource for professors and university managers to improve the academic environment.
This survey is meant to serve as a guideline to future researchers, software project managers and specifically university faculty members. Moreover, a taxonomy for physical and programming factors has been introduced to assist the stakeholders to quickly recognise and solve potential issues that might affect the performance. The review of the extensive literature on programming metrics can be applied to evaluate the existing model of performance in a company or the educational institution, identifying the need for improvements in their processes.
One possible research direction is the study on the potential synergy between different working conditions, and how their combination affects the performance. Such an approach could provide more comprehensive insight into the operation and management of the entire project or the curriculum. Any conclusions that might emerge from the integration of industry and academia will provide a better understanding of factors impacting performance and consequently benefit both fields.