PROGRAMMING LANGUAGES IN UNDERGRADUATE COURSES AND IN SOFTWARE INDUSTRY IN BULGARIA

Programming languages are one of the main knowledge areas in the Computer Science curriculum. Software development professionals often need to learn new languages, constructs and concepts to effectively combine them in solutions they develop. Universities must adequately prepare their students for the challenges they will face. Studying programming languages is a part of more general knowledge covering programming paradigms, concepts, technologies, patterns and algorithms. The first programming language plays and important role since freshmen have different backgrounds and different expectations. This paper presents a recent survey on programming languages used in Bulgarian academic courses and discusses results in the light of the recent index of programming languages popularity and industry trends. The survey of languages studied at universities is juxtaposed with industry demands for professionals with specific knowledge in particular programming languages. The study covers all Bulgarian universities with undergraduate courses in the professional field of informatics and computer science and the programming skills demanded in job offers during the last six months in Bulgaria. AMS Subject Classification: 68N15, 97P40


Introduction
In the last fifteen years, software development in Bulgaria become one of the url: www.acadpubl.eufew rapidly developed industry sectors.According to the annual report of the Bulgarian Association of Software Companies (BASSCOM) [1] this industry is export-oriented (70%) and its contribution range to the GDP is about 2% -2.25% for the last several years.As the most rapidly expanding worldwide industry, the software development sector doubles employees every 5 years.With its 19000 software developers employed in total, versus 6000 new positions occupied in the last 5 years, this tendency is also valid for Bulgaria.An acute shortage of professionals in the whole ICT industry is obvious nowadays.Universities have a rapidly decreasing number of students in science, technology, engineering and mathematics.All this puts the universities in the position of debtors to the ICT industry.Technology changes and seemingly permanent occurrence of new programming languages, development tools and frameworks introduce new requirements for graduated students to get their first job.However, there are fundamental concepts over time such as control structures, code organization and style, data structures and type systems, design patterns and algorithms.Finding the best approach to mix the modern and the fundamental knowledge in university courses will be a never-ending task.Trends in the software industry like cloud computing and mobile applications; big data and social networks, will shape requirements for vacancies in this economy sector and will add additional requirements to academic curricula for dedicated courses in this directions.Collating programming languages used by academia and industry can provide information for course adaptation to match expectations and trends.
A recent survey conducted on programming language use in US Academia and Industry was presented in [2].Another recent overview presented in [3] shows the introductory programming subjects in European higher education.Mason at al [4] reports the results of a study of introductory programming courses in Australian universities.
This paper summarizes the current state of the adoption of programming languages in the curricula for different Computer science undergraduate courses in Bulgarian universities.We analyze the data in the light of Bulgarian software industry demands and trends.

Influences and Trends
The technologies evolve and the design methods influence programming languages by adding new requirements in order to better support software development.On the other hand, new ideas and visions evolve in answering the con- Software development industry needs a wide range of programming languages each of which with specific features, applications and supporting tools.There is no universal programming language and we are speaking about a bundle of languages.Even development of a simple web application requires utilization of at least several different languages -that is why not the only top 10 nor even the top 20 most popular languages matter.TIOBE Programming Community index is one of the most complete survey of programming languages in use.The index heavily relies on 25 search engines.The number of hits determines the rating of the language.The index only counts Turing complete languages [5].
In recent years, git repository hosting services became very popular.Millions of software developers contribute to different projects and collaborate using such services.We have also included in the survey information about the popularity of programming languages based on GitHub opened pull requests [6].
TIOBE index details in Table 1 show that most of the top 15 languages are nearly the same regardless of the source and year when the data is collected.Visual Basic 6, which is already considered an old programming language, is still widely used.On the other hand, Google Go appears to be the language that has gained the most popularity in 2016.Another review conducted by the authors is of job offers published since December 2016 until May 2017 on the four most popular Bulgarian job search sites (jobs.bg,jobtiger.bg,rabota.bgand zaplata.bg).Languages that are mentioned in job offers as required or preferred were detected with the tool developed for this purpose.Due to lack of successful automated matching of C language, it was omitted in the process.Table 2 summarizes the information extracted from the sites based on average count of appearances of the programming language in job offers.
Except the small varieties, the language ranking between the four sites based on job advertisements are equal.The ratio of programming languages according to the total number of job offers is as follows: JavaScript 28% of job advertisements, Java 19%, PHP 15%, C# -11%, Python 8%, C++ -7%, Perl 3%, Ruby 3%.All the rest of the languages are with a ratio below 2%.The results show that the business expectations are closer to language popularity ranking by GitHub rather than TIOBE Programming Community Index.Since Bulgaria is also a very big outsourcing destination, we believe that the results have a meaning that is more general.

Academic Courses Overview
During the winter semester of 2016/2017 academic year, we have conducted a survey across Bulgarian universities, by collecting data on programming languages used in courses.As a starting point, we used Bulgarian University Ranking System [7] and we selected all universities with undergraduate courses in the professional field of informatics and computer science.Next, we used European Credit Transfer and Accumulation System information packages published on universities websites as a main source for the collected information.As a secondary sources we have used supplementary course sites and information published by lecturers.Our research covered current state of 136 compulsory courses in 28 Bachelor Programs from 9 Bulgarian universities.
We were searching for answers to the following questions: • What is the first programming language used in compulsory introductory programming courses?
• How many languages are studied per undergraduate program in compulsory courses?
• What is the coverage of studied languages and the top 15 popular languages based on TIOBE and GitHub statistics?
• What is the percentage of matching of desired/expected languages by companies (based on our monitoring of job offers requirements) and studied in compulsory courses programming languages at the universities?
• What education languages are chosen: classic or designed for education?
• What is the paradigm varieties coverage?
The course named Introduction to Programming or similar exists almost in all bachelor studies of Computer science.A programming language provides a notion in which to express algorithms, techniques, and data structures [8].Our observation shows that C++ is the first programming language chosen by most of the Bulgarian universities with undergraduate programs in Computer Science and Information Technologies.Although not exclusively intended for teaching students, programming with its multi-paradigm support C++ makes it easy to introduce imperative, structured and object-oriented programming.Introductory courses in programming begin with problem analysis and translation specifications into algorithm.Developing algorithms as a process smoothly and subsequently shifts from sketches and natural language to formal structures and programming languages.Top-down methodology implies imperative (procedural) paradigm and C++ supports it.C++ is part of the C-language family and its syntax is very close to Java, C#, JavaScript and others.This fact gives a boost of digestion of languages studied next from the family in the curricula.
Despite the long running debates on the first programming language [9] and the early introduction of the object-oriented paradigm it seems that this is not the path chosen by universities in Bulgaria, but rather a more classical/historical approach is applied, i.e. from procedural to object-oriented programming.This is also evident from the presence of consequent courses specifically intended for object-oriented programming in most cases.
As a first programming language C++ is used in about 83% of introductory courses, C is used in 8% of the courses.The other three languages C#, VB.NET and Pascal have equal share of 3% each.C++ and C# are the two most often used languages to be included in the second curriculum course, which is objectoriented programming.Java is another very popular language in which the object-oriented paradigm is studied and it is used in about 20% of the objectoriented programming courses, where C++ has a share of more than 62%.
Table 3 summarizes distribution of languages over the semesters.One key finding is that the most used languages during semesters are C/C++, Java and C#.The average number of different languages studied per undergraduate program in compulsory courses is about 5. Often a single language is used as a working language for multiple courses and C++ is the most used common language per program.It is obvious that the most used languages are not specifically designed for education.
Although the functional programming paradigm exists since the 1950s it seems that it is not a preferred paradigm as the first to be introduced in the courses of computer science and information technology.Furthermore, pure functional languages like Haskell are very rarely advocated in the courses.
There are much less programming paradigms than programming languages.The paradigms most widely covered in mandatory courses are only the imperative (procedural) and the object-oriented ones.The paradigms for logic programming and functional programming are partly present.Most of the other paradigms such as aspect-oriented programming and metaprogramming, parallel and asynchronous programming, language-oriented programming are either subjects in graduate programs or electives.Declarative programming is Another key finding from the research is that functional and logical programming paradigm languages remain isolated in the courses.Interoperability with already introduced languages is not discussed and combining languages for solving complex problems is not a subject of the courses.The only courses in which more than one language is used explicitly to solve problems are on Databases and Web programming.
Knowledge from constructing programs to solving complex problems affects programming languages evolution.Modern programs can be complex with a source code in millions of lines.Nowadays, software is developed by large teams and it takes months and sometimes years to complete.Success in such scale of development partly depends on how programming languages can assist in decreasing complexity.Understanding the basic concepts popular today is crucial.
Web programming is another area where multiple languages are involved in a single project.Of particular interest are the languages and application frameworks, as is evident from the market demand.From the results of the survey, it can be concluded that special courses on programming for mobile devices are not a part of the mandatory subjects and are mainly in the eligible courses, and programming for the Web in most cases is part of the compulsory courses.But the basic languages for the frameworks are part of the compulsory courses like PHP, C#/VB.NET, JavaScript, etc.The most popular language for web programming courses is still PHP.

Conclusion
Programming languages in academic courses are often chosen according to purely educational criteria, such as staff, readiness, books, etc. Academic courses does not follow the trends in technology as quickly as Industry needs.At the same time, our survey shows that top languages in industry are also popular in academic courses, but there are still compulsory courses that use languages with rapidly decreasing popularity.Another result of the survey is that there is no significant difference between universities according to languages chosen to be studied in similar courses.

Table 1 :
Top 15 programming languages based on TIOBE Programming Community Index and GitHub Octoverse

Table 2 :
Required or preferred programming languages in job offers published in four most popular Bulgarian job search sites

Table 3 :
Distribution of programming languages over the semesters