USING THE GOOGLE APP ENGINE PLATFORM FOR TEACHING PROGRAMMING

The article outlines the present situation connected with teaching programming to students of different levels of education in Polish schools. The observed negative trend towards marginalization of programming can be successfully reversed in education thanks to using the latest IT achievements such as cloud computing (CC). The paper presents ways in which the cloud computing technology can be used to teach how to develop and code Internet applications by means of the Google App Engine platform. The final part focuses on practical examples of programming problems involv ing cloud computing applications which may be solved in IT classes with students of different levels of education.


TEACHING PROGRAMMING -ITS IMPORTANCE AND CHALLENGES
At present, teaching IT mainly puts emphasis on skills such as using word processors, spreadsheets, programs for presentations, multimedia and graphics. Thus the key question is how to do something without considering why it works or how it works [8]. The aspects connected with algorithmics and programming are still neglected in school curricula and hence, they are either marginalized or simply left out. Sometimes even students or teachers themselves tend to disregard those IT areas as they are commonly believed to be difficult, boring or likely to be of interest only to a small circle of specialists. Programming gets more attention only in high school courses with extended IT programmes or at universities where students who major in computer science study programming languages more thoroughly.
It is important to emphasize that teaching programming in schools has a lot of benefits. First of all, developing applications is a form of creative activity which develops logical thinking and may stimulate creativity in students. Professor M.M. Sysło claims that "programming may lead to innovative solutions and to discoveries". Moreover, it can be a good tool for exploring concepts from computer science and from other areas of life. It is also an easy way of combining teaching IT with teaching other subjects. Furthermore, programming helps in better understanding what computers are like and how they function.
According to Seymour Papert, an educationalist and one of contemporary computer science gurus, the essence of human intellectual activity is the constant need to improve the way we follow. He maintains that conception is feasible by means of programming languages and the programming environment. Thanks to such tools it is possible to develop and edit programs, check them for mistakes, correct errors and translate the code into the machine language understandable for the computer. Papert and his coworkers from the Artificial Intelligence Laboratory at the Massachussetts Institute Technology developed Logo, a programming language that can be used by children in their first contact with computers. In his book "Mindstorms: Children, Computers and Powerful Ideas" the author presents a significant theory about the relation between a child and a computer. He claims that it is the child that should program the computer and not the other way round, when it is the computer that programs and determines the behaviour of the young user [7]. Unfortunately the idea is often disregarded and it is still common for a computer to program the behaviour of the learner.
At present the big challenge that lies ahead is to restore the importance of teaching programming at schools and at universities. That task entails a variety of questions concerning the right choice of a programming language and the environment, the proper selection of the teaching material, interesting examples, problems and effective teaching methods that could encourage and stimulate the learner at the same time fostering the awareness to learn.
Currrently, teaching programming and algorithmics at elementary schools and at junior high schools is based on the Logo language and Imagine Logo. Sometimes Elbox Laboratorium Informatyki ELI 2.0, a special educational software package, is also used for graphic construction of algorithms as well as for programming in Logo and Pascal. Another, relatively new program that has become popular at the level of primary schools and junior high schools is Baltie -the graphics environment for object programming based on the C# language. The languages and the tools have officially been approved as educational aids for school use by the Ministry of National Education. Thanks to them teaching computing is more attractive, student-friendly and in addition, students can use a computer in an active way to their advantage.
Secondary schools in their computer science classes, especially in the case of classes with the extended IT programme, resort to different programming languages, the most popular being Pascal, C++, PHP or Java. The choice of the language depends on the invention of teachers who quite often prepare the curriculum on their own. When making that kind of decision, one may take into account various factors including the ministerial recommendations, previous professional experience, fads or fashions. However, one may also independently search for new solutions using the latest trends and technologies.
In the present times, the latter approach is likely to be most effective as young people represent the Internet generation and hence, quite frequently belong to different network communities, use mobile devices and a wide range of e-services on a daily basis. On the other hand, using new technologies in class always entails a lot of effort since the teachers are forced to constant professional self-development, raising their qualifications and updating their skills in the rapidly developing area of IT.
Another difficult aspect and challenge for teachers is the growing complexity of solutions that the didactic staff teaching computing have to face on their own. It needs to be emphasized that even the choice of the latest programming language or the environment should not overshadow the core of teaching IT i.e. learning and understanding the basic concepts and conceptions connected with the field of study. Raimond Reichert et al. claim that "general education is rarely applied for immediate use, but helps us put details of transient importance into a larger perspective" [8].

USING CLOUD COMPUTING IN EDUCATION
The technology that has become more and more popular in recent years is cloud computing (CC). "The Horizon Report" published annually since 2004 and prepared by the New Media Consortium (NMC) and the EDUCASE Learning Initiative, informs about the growing role of the technology, also in the area of education. CC is becoming more and more widely used mainly because of the maturity stage the technology has achieved and also due to financial reasons [9]. Furthermore, cloud computing guarantees free, although limited, access to data storage space in data warehouses. That enables access to the stored information and a possibility of introducing changes from any place and at any time. Cloud computing is also a good solution to meet the need of growing high-performance computing necessary to facilitate demanding scientific experiments and research. It is worth remembering that many CC applications are available free of charge. Hence, the technology gives a wide range of opportunities for cooperation and team work while developing various types of tasks, especially projects [4].
Cloud computing providers have noticed and since exploited the big potential of the technology for schools and for university education. The world pioneer in the CC field was Amazon who offers educational institutions access to its web infrastructure. Scientists and academics needing high-performance computing or disk space for their research may apply to obtain grants and free usage credits to tap into the on-demand infrastructure of the Amazon Web Services (AWS). Educators conducting courses in distributed data processing, Artificial Intelligence etc. may also try and apply for free usage of AWS. That solution is a way of eliminating high costs connected with organization of the advanced hardware and software base necessary when complex research endeavors have to be tackled and big amounts of data have to be handled [2].
Another IT tycoon -Microsoft is also a big CC provider for educational institutions. The offer of the company in this field is aimed at three areas: connecting education communities, managing educational institutions and providing different types of infrastructure. Live@Edu is one of examples of such solutions. The application includes an email account, tools for cooperation and communication, an office package and disk space for learners, educators and teachers [6]. Another example is Office 365 -CC software including office applications and tools for cooperation. Except for popular office tools, the Office Web Apps package offers tools for web conferencing, remote desktop sharing or a virtual board. Thus, Microsoft is not only a provider of CC tools that may be used for educational purposes but also a provider of business and administrative tools [11].
Google is one more corporation offering their web services to schools and universities. Its offer is vast and varied as the company supports academic communities to help further the innovations thanks to their academic funding programmes [1]. Furthermore, Google provides educational institutions with the CC application package including email, a shared calendar, Talk -the instant messaging tool, Blogger and Google Documents. The CC technology of the company may be also useful for developing web applications in the cloud. The Google App Engine is a programming platform that may be successfully used for running previously developed web applications. Despite some limitations, the platform is available free of charge and thanks to its advan-tages, it may be used for educational purposes, especially for teaching programming.
Students spend a lot of time online and therefore their habits and the knowledge of the virtual environment may be easily used as a tool to direct and foster their interests in the area of IT when they are made to develop applications in the cloud [3,4].

BUILDING WEB APPLICATIONS ON THE GOOGLE APP ENGINE
Google App Engine (GAE) is a popular programming platform for developing, hosting, testing and managing a previously built application. GAE is based on the PaaS (Platform as a Service) cloud computing model that provides access to hardware such as servers, networks etc. as well as to software including operating systems, databases or server applications. In a limited way, Google enabled its all interested programmers free access to its resources in the data centres. The only prerequisite is having a standard Google account.
GAE is a specialist programming interface (API) and a secure environment isolating applications, which are being developed, from the hardware, the operating system, the location on the server and from other applications. The major components of the platform are: the sandbox, runtime environments for programming languages and the data warehouse. The applications that are developed run in environments with a limited access to the operating system where the distribution of applications to many servers and load balancing are provided [5]. The GAE platform makes it possible to develop a code in a static language like Java as well as in a dynamic one like Python. The programming tools used for building applications for the GAE platform and belonging to the Software Development Kit include: a developer web server simulating the GAE environment on the local computer, a program for sending a code to the server as well as a program for storing and downloading data from the Datastore [10].
Developing programs for cloud computing is a process that differs from building traditional desktop applications or from Internet applications running on host servers. The key difference concerns the way of storing data that is strictly connected with the CC provider and their specific methods of storing data. The other important aspects are input and output operations that use Internet protocols. The program structure is also different because in CC applications it helps isolate individual segments of applications.
The process of developing cloud computing software may be conducted in two ways. The first one is connected with direct building of CC applications by means of online tools available in the Internet browser window and the remote console. There is no need to set up software on the local computer. The second approach requires integration of programming tools from the developer's computer and the cloud computing platform. Developing a program in this way comprises two stages i.e. developing and testing the application on the local computer and placing the code in the cloud in order to observe its behaviour. The second approach is characteristic of the GAE platform.
Internet applications are dynamic and they enable to generate websites with varied content that depends on the action of the user. Web programs receive incoming requests from the browser, make decisions, download and modify data, prepare answers and send them to the user. WWW applications are based on the HyperText Transmission Protocol (HTTP) that enables a two-way data transfer between the WWW browser and the WWW server. The code of CC applications is generated as a reaction to a particular request that may come from the user [12].
Google App Engine supports programming applications in Python, Go and Java. Using the Java virtual machine (JVM) enables programming in other languages such as JRuby, Groovy, Scala, Clojure, Jython or PHP. The author's recommendation for teaching programming in schools is Python. It distinguishes itself by a clear syntax and rich documentation, which make the language relatively easy to master. Furthermore, it is a multiplatform language, therefore the applications created in it will run on many devices and will work with different operating systems. It is vital that Python has a lot of stable libraries and frameworks. In addition, it has many built-in types and is a fully typed language. Finally, it is important to emphasize that Python has a big and professional user community.
Google experience of using Python resulted in selecting the language as the first choice for building software for the Google App Engine platform and supporting its development [3]. Before that, building Internet applications forced the developer to perform many actions like preparing infrastructure, the operating system, providing security, back-up copies, updates etc. At present the programmer working with the GAE platform who is developing CC programs does not have to perform such actions and may fully concentrate on the software and its target users. Due to all the advantages of GAE and Python, both of them may be successfully used for teaching programming in lower and higher education institutions.

PROGRAMMING ENVIRONMENT FOR DEVELOPING APPLICATIONS ON THE GAE PLATFORM
Before an application for the GAE platform is built, it is important to prepare the work station thoroughly. First of all, the Google account needs to be created and it is necessary to log on the project website of Google App Engine. The registration of the first application entails entering the activation code that the user receives in a text message. The next stage in the registration process is choosing a unique name for the program that is created, which will be a part of the URL address in later stages. Afterwards the tools for developing software on the GAE platform have to be downloaded and installed. If the application is to be created in Python, first it is essential to set up the language programming environment e.g. 2.7 version. Later the tools from the App Engine Python SDK need to be installed. The kit includes a web application server simulating the App Engine environment on the local computer as well as the Google App Engine Launcher -a useful program with a graphical interface which makes it easier e.g. to place the application in the cloud. In order to have a fully-equipped workstation one has to install the Integrated Development Environment (IDE) such as PyDev on the Eclipse platform.

EXAMPLES OF PROJECTS THAT MAY BE USED FOR TEACHING PROGRAMMING
The chapter aims at presenting an example project -a web program run on the GAE platform that may be developed in IT classes devoted to programming. The "Temperature Converter" program is used to convert temperatures into different scales (Fig. 1). The user interface of the application is shown in the Internet browser window and consists of a few components: text boxes, labels and a button. Operating the program is easy and intuitive. First a number needs to be entered i.e. the value of the temperature defined in a scale. Next a button converting the temperature into a different unit has to be pressed. The application includes a basic exception handling and error monitoring. When the incorrect input data is entered, the information about the error will be generated automatically. When the user types the data to more than one text component, the content of all the boxes of that type will be removed. If the temperature is entered correctly and the right calculations are made, the button will change its name from Convert into Clear. Moreover, in that situation its function will be different. From now on it will be used to delete text boxes of the application form. The presented application was developed in the Python programming language. It uses its own framework called webapp which is easy to use. The choice of the framework determines the structure of the program. The basic elements of such applications are: • RequestHandler class used for processing incoming requests and generating the response, • the instance of the WSGIApplication class used for representing the application that directs incoming requests to suitable Request-Handler objects, • the run_wsgi_app() function used for realizing the server loop and enabling the application start.
Individual code parts of the presented application fulfill the following functions: • import of framework elements: the webapp module and the run_wsgi_app function, • implementation of the MainPage class inheriting from the ReqestHandler class dealing with incoming http requests and generating responses, in this case the GET request is interpreted by means of the get()) function, • creating a list of operations on the basis of a dictionary including keys (temperaturę symbol units) and their corresponding values presented in the form of short lambda functions taking arguments and returning a list with expressions calculating the temperature in particular units. • taking and preliminary validation of data from the form, • choosing the type of converting temperature or the clearing option in the form, • performing the try-except instruction in which calculations will be made or in the case of problems, an exception will be reported, • displaying results generated in HTML, • building the instance of the WSGIApplication class mapping incoming requests on the basis of URL into particular RequestHandler objects, • creating the main() function, in which the run_ wsgi_app function will activate the whole application.
There are many applications that may be built in IT class devoted to programming. Below there is an example showing an application calculating biorhythms (Fig. 2). Another task that may be done in IT class is a simple database containing contact details useful for the Internet user (Fig. 3).

CONCLUSIONS
Contemporary education faces many challenges and one of them is the necessity to be upto-date in the rapidly developing IT area. Meeting the challenge is a significant task that all participants of the education process have to face.
It is obvious that having suitable IT skills and a knowledge of Information and Communication Technologies (ICT) is a must on the contemporary employment market. Therefore, nowadays the school has to use the existing tools and methods, but at the same time the teaching and the learning process have to be conducted in a new, more interesting and more innovative way.
It is important to change the approach to the learner, to the education process and to the subject in order to facilitate educational challenges. Hence, the student should be perceived as an interested discoverer of new technologies. The process of education should be treated like initiation stages on the path to higher knowledge. The subject should be like a multi-layer puzzle that may be solved thanks to the tools passed from the educator to the learner.
The paper presents one of the ways of implementing the above idea into educational life on the example of the conception of using programming computers. Teaching programming may be combined with learning about new technologies e.g. about cloud computing. Arousing interest in CC among students can be a helpful tool in teaching programming. Modification and updating the curriculum can make the didactic process more effective and more learner-friendly. Students may be encouraged and asked to build applications and web pages that will run on their own mobile appliances. Learners may also try Fig. 3. The window of the "Address book" program on the GAE platform and develop programs that will be built in social networks that are so popular with young people nowadays.
There are lots of interesting and practical examples of teaching programming. One of the methods that can make IT classes more studentfriendly is using the Google App Engine platform for developing cloud computing applications.