[PYTHON] Think seriously about what language to use in programming education and programming education.

Introduction

Programming education for elementary school students will be mandatory from 2020, but everyone regarding this How do you perceive it?

I take it positively, but the burden on the teacher is likely to increase, so it's difficult ...

So, this time, I thought about what language should be used in programming education, based on my experience in the field of education, seriously.

My career

Before getting into the main subject, I will briefly introduce my career (mainly around education).

--Birth: Immediately after entering Heisei --First PC: Windows me (I was doing only typing software and Minesweeper --First programming: 1st year of junior high school (Java) --University: Department of Electrical, Electronic and Information Sciences, Faculty of Engineering (Subdivided later → Proceed to Information Course) --Graduate School: In the information system, TA + in-university training and information department education method in the field (high school, about one month in total) --Part-time job: Tutor about half a year (middle and high school mathematics / English) --Teacher experience: Part-time about 1 year (high school information) --Education policy: ~~ I'm scared of my face ~~ 100% candy

What is compulsory programming education?

You can find it on this page of the Ministry of Education, Culture, Sports, Science and Technology.

This "compulsory programming education for elementary school students" is one of the highlights of the new course of study announced in March 2017, but there are three major changes related to information.

  1. Use information utilization ability as the basis of "normal" learning
  2. Utilize ICT in the school
  3. ** In elementary school, learn basic operations such as character input and develop programming thinking **

1 is probably more googled (probably). 2 is that you can use the ICT you bought for budget consumption properly (probably). Since the subject of this time is 3, the discussion of 1 and 2 will be omitted.

So, the problem is 3. The following is "[Elementary School Learning Guidance Guidelines (Notification 2017) General Rules](http://www.mext.go.jp/component/a_menu/education/micro_detail/__icsFiles/afieldfile/2019/03/18/1387017_001 It is a sentence pulled from ".pdf)". Even if I pull it, it's a little long, so I emphasized the important part.

(Omitted) ** No matter what kind of profession the children will have in the future, "programming thinking" that is universally required over time (what kind of movement to realize the series of activities that I intended) It is necessary to combine the symbols, how to combine the symbols corresponding to each movement, and how to improve the combination of symbols to get closer to the intended activity. In order to develop the ability to think logically) **, in elementary school, children acquire the logical thinking ability necessary to let the computer perform the intended processing while experiencing ** programming **. We are planning to carry out learning activities for this purpose. At that time, the aim of working on programming as a learning activity at the elementary school stage is not ** to learn a programming language or to acquire programming skills **, but to develop logical thinking ability and the goodness of the program. , Aware that the information society is supported by information technology such as computers, and try to build a better society by making good use of computers and attitudes to take the initiative in solving familiar problems. The purpose is to foster attitudes and to acquire the knowledge and skills learned in subjects more reliably. Therefore, considering that it is necessary to keep in mind that it is carried out systematically and reasonably and surely while associating it with the learning necessity and learning content in subjects, etc., in elementary school, the entire curriculum is overlooked. It is necessary to determine the grade and subject that will position the unit in which programming will be carried out. In addition, in the elementary school curriculum guidelines, in mathematics, science, and comprehensive study time (hereinafter omitted) from p85 to 86

When I was a student, the impression that called this was "How much do you want from elementary school students?" I think the high school teacher who taught me the information department also said something like "Elementary school teachers will have a hard time."

In short, the Ministry of Education wants children to develop ** programming thinking **. In the process **, it is not necessary to acquire programming skills **, and I want you to be aware that it is supported by information technology.

In other words, any programming language that children can experience is acceptable, and it goes without saying that how to choose that language is important for effective teaching and learning.

Please note that ** "programming education" ≠ "programming with coding" **. In "programming education" sung by the Ministry of Education, "notice that programs are used around us and operate according to conditions" is also part of "programming education", and here " It can be said that "programming" has a fairly broad meaning.

ICT / programming skills of the last high school and university students in Heisei

Now, let's change the story a little and introduce the ICT situation of the students when I was a teaching assistant (TA), Katekyo, and a lecturer. Think of it as a story from 2014 to 2018. Also, high school is a public / rural story, so the situation may be very different from private or urban.

high school

In the class where I had classes, I first conducted a questionnaire on ICT utilization in order to know the ICT utilization status of the students. What you can see from there

--Students who have their own PC at home are very rare (5% or less), ** Some students do not have a PC at home (about 10%) or only have a parent's work PC (5% or less) About 30%) ** ――On the other hand, ** The possession rate of smartphones exceeds 95% ** (It seems that many parents even in the countryside have them when they enter high school)

It's like that. There are some students who are uneasy if they don't tell them to turn on / off the power of the PC without joking. Also, typing technology is hopeless. About 10 to 20% of the students are popping with only the index finger of their dominant hand, so I took about 5 minutes at the beginning of each lesson to practice with the typing practice application.

Students with poor PC skills aren't bad at all, they're just never experienced. In fact, if any student works for a year, they will be able to type with both hands (blind touch is impossible) and handle MS Office 3 types properly.

On the contrary, ** how many students had high ICT ability was at the level of whether or not there was one in the 40-person class **. It seems that such students are interested in programming, playing PC games, posting blogs and videos on a daily basis, and using illustrator, but "Hmm ... The honest impression is that the population is small. After all, it seems that you are sucked by your smartphone.

In addition, I had never taught coding using any programming language. ** The main reason is lack of class time **. I was hoping that I could get in touch with JavaScript, etc., but I thought that I should spend some time on other things if I was halfway through, so I didn't give a programming class after all.

University

At university, I was mainly a TA, and on rare occasions I was entrusted with a lecture by a professor ~~ throwing ~~ to teach programming to students. The university I was in is a general university, and I can't put all the lectures I was in charge of at once, so I will talk about them in the following three categories.

--"University education" for all faculties --"Specialized education" for the Department of Electrical, Electronic and Information Sciences of the Faculty of Engineering --"Course-specific education" for information courses in the Department of Electrical, Electronic and Information Sciences, Faculty of Engineering

University-wide education

In university-wide education, I was in charge of all compulsory lectures from the liberal arts such as the Faculty of Letters to the sciences such as the Faculty of Medicine. In addition, I will explain basic PC operation methods such as how to turn on / off the power, but it seems that I have mastered PC skills like MS Office in high school (although there are differences, of course). However, there was almost no programming experience or knowledge, and most of the students (about 95%) did programming for the first time in this university-wide education lecture.


A little digression: Why is C language used in lectures?

I used C language in the lecture. I think many universities still use C language for their lectures. Isn't it old? While feeling that, when I thought about the reasons for my senior TA and personally, I came up with the following three points.

  1. If it is a Linux environment, there is no need to build or set the operating environment.
  2. Being a major compiler language
  3. Inflexible

Since 1 is for the convenience of the teaching side, I will omit the discussion, but I would like to keep in mind that the cost performance of the teaching side should also be considered.

Regarding 2, I think that the compiler language is good at first if you want to teach programming in earnest. This is because I think it is essential to understand the concept of "machine language" if you are involved in ICT as a developer rather than a user, and even if you don't like compiler languages, you will know "machine language". Also, because it is a major document, there are many documents on the net, and AOJ provides problems and automatically determines correctness. There are various advantages such as having a service that does.

Regarding 3, I think that computers should be learned first because they are basically inflexible things that execute what is instructed according to the instructions. For example, a language that requires a tight type declaration and specifies the scope of the instruction in parentheses. ~~ (You are the exception Python ~~


By the way, as for the students during the actual lecture, the students who do the work silently are conspicuous rather than having fun as a whole, feeling unmotivated.

The reason is that the task is too easy (at least for humans), or the given problem is unrealistic. For example, how do you feel about the following issues?

Q. Create a program that outputs the solution of the square of x from x = 1 to 100 (integer).

This kind of problem is often seen as a practice of for sentences. This is an example that makes you realize the convenience of loops, but since each calculation is simple (and meaningless), many students feel that "what is the meaning of this?"

That said, it is impossible for inexperienced people to suddenly say "merge sort or rokka ☆", and even if it is simple, it is necessary to teach from the basics. As a teacher, it is necessary to convey to students the joy of programming.

On the other hand, such problems are only the study of "programming skills" and do not lead to the development of programming thinking ability and logical thinking ability.

Professional education

In specialized education, the challenge is to implement major algorithms such as merge sort as more serious programming. The language used was C because of "university education".

At last, it has become a full-fledged programming lecture ... However, since "specialized education" is targeted at "electricity, electronics, and information departments of the Faculty of Engineering," some students in the electrical and electronic fields said, " I didn't come to this university to do this !! ”I feel the aura tremendously. ~~ (Some compulsory patterns ~~

It seems that there are some students who are not interested (not only the atmosphere of the aura) because some people get caught in the copy / paste checker for several years.

Regardless of the aura, at this level, I feel that there is a big difference in "basic abilities around ICT" and "programming abilities" depending on whether or not you are interested in ICT.

However, I don't know which is "interest" or "ability" because of the problem of chicken or the egg, but at least "I'm making videos as a hobby" and "I'm inputting data to a PC with a part-time job." Students who normally use PCs were generally good at their assignments.

At the stage where algorithms such as "merge sort" must be carefully considered and constructed, programming thinking ability and logical thinking ability will develop, but for students who are not interested, I do not understand why they are working on it. It's probably in the "?" State. Instead, I feel that by taking this level of programming seriously, "programming thinking ability" and "logical thinking ability" will improve dramatically.

Education by course

In course-based education, only students who wish to take an information course may take it, so there is a great deal of interest in programming. At this level, there are many students who are programming as a hobby (although it is still half or not), and because they are programming in seminars and laboratories, the language used for programming tasks is arbitrary (minor is a pity). I'm asking you to do it).

There are also high-level tasks that require fairly advanced programming skills (such as "creating an app that runs on a browser", "clustering word vectors", and "learning named entity extractors"). However, since I have given many lectures as explained in the specialized education, I will complete the assignment without any difficulty (most students are at the level of giving 80 points or more. Will it be A or AA? ).

Summary of high school / university ICT / programming skills

Well, it's been a long time, but in summary,

――Some students can't handle PCs properly when they enter high school, but they can learn the basics in one year's class. ――Currently, there is not enough time to conduct a full-scale programming class at high school. ――The actual coding is after entering university, and most students have no programming knowledge. ――I want you to work on "programming at a level where you need to think about algorithms" for "cultivating programming thinking ability and logical thinking ability" ――In the case of "programming at a level where it is necessary to think about algorithms", individuals' interests and abilities in ICT have a great influence on education and learning.

Main subject

Now, let's return to the original story of "what language should be used in programming education".

primary school

** No programming is required with coding in the first place. ** ** Many people may wonder, "What?", But it may be better to say that it is rather difficult to implement rather than unnecessary.

In my experience as a teacher above, I said, "High school students can acquire basic PC skills in a year." I wrote it as one year, but in reality you will be able to type in a shorter period of time. Is it about half a year in the long run? Six months later, you will be able to acquire a general level of programming skills by taking a programming lecture in the university-wide education that you take when you are in the first year of university. I think that you can learn from "PC inexperienced" to "easy coding" in about one year.

However, this is just a story for high school students. In fact, various basic skills are required to carry out coding. For example, college students said that x squared is a simple calculation, but what about elementary school students? Can you understand the concept of "repetition" correctly? Do you understand Romaji in the first place? For that matter, do you understand the concept of power ON / OFF correctly?

And, aside from the last one, in order to actually code a level that has an educational effect on logical thinking ability (eg merge sort level), a concept that can be intuitively felt at the university student (high school student) level , Must have acquired common sense knowledge. ~~ (Well, that may be programming thinking ability ... ~~

By the way, you who thought ** "Did you have time for information in elementary school? When will you do it?" **. Please be assured. It is written firmly.

In addition, in the elementary school curriculum guidelines, in mathematics, science, and comprehensive study time (hereinafter omitted)

Please do it in the time of comprehensive study. ~~ What? Arithmetic? Science? Even though I'm still on the edge, I can't take that much time! Don't be afraid! ~~

As a problem before knowledge and concept, ** I can't secure class time in the first place **. After all, is it the limit to incorporate it into the time of comprehensive study? I really hope that ICT can be incorporated into classes to solve the problems of four arithmetic operations in mathematics, and to operate and show videos and simulations in science. In reality, math and science will change a little, and I think that the time to touch the PC will increase in the time of comprehensive study.

From the standpoint of a former high school teacher (information), the fact is that in elementary school, we want you to spend more time studying information ethics and learning basic PC skills than the fluffy "programming education." is.

Junior high school

Since the elementary school is in a state like ↑, you can hardly code even in junior high school. Therefore, the debate "Which programming language is better?" Does not start.

Rather, I want them to have a certain level of basic skills around PCs in junior high school so that they can take programming lessons in high school. ** **

This is because when I was working part-time in high school, I had the experience that my PC skills were apt depending on my junior high school. That junior high school is doing Word and Excel exactly, this is Word a little, here is totally ... It's really disjointed. I think that all the teachers who are in charge of information at high school are experiencing it.

Therefore, it is a waste to have students who came to some extent in junior high school to have the same lessons as students who did not come to information classes in junior high school. If I can handle 3 types of MS Office at the time of graduating from junior high school, I will be able to do programming lessons in high school classes, and I am happy as I wanted to teach programming (it is a past form because I am no longer a teacher ). ~~ Rather than conducting programming education from an early stage, you should train your ability to handle information technology ~~

** Therefore, the Ministry of Education, Culture, Sports, Science and Technology should introduce an index to measure the basic ability of ICT common throughout the country to junior high schools and make efforts to raise the value to a certain number or more. ** **

On the other hand, regarding programming education, I think that junior high school students have developed some common sense knowledge and general concepts, so I think it is better to ** try to incorporate the idea of algorithms into real problems **. For example, you can introduce or think about familiar and simple machine algorithms in a conceptual schema, or have them write a command statement on paper to guide them to a specific place in the school and give it to another person to see if they can actually reach it. (The latter story was reasonably well received after giving a lecture to high school students).

As a teaching material just before coding, try using a Web service that enhances your logical thinking ability, such as Argologic. Would also be good. It is recommended if you have time ** because you will acquire basic knowledge of programming. ~~ If it's just increased, you'll run out of time! ~~

high school

If you have mastered the basic operating skills of a PC by junior high school, you will finally be able to start a full-scale programming class when you are in high school. (It was a long programming language ...

In addition, the goal is to implement algorithms such as merge sort and dynamic programming that train logical thinking ability, and if you have high school student level mathematical ability and thinking ability, you will be able to understand prerequisite knowledge, concepts, and practical applications. ..

So, what language to use, which is the main subject, has four main points.

  1. A major language with high potential
  2. Low installation cost
  3. Easy to understand grammar
  4. Practical (for high school students) outside of information classes

Although it is 1, it is desirable to be a major language, preferably a language that you will have the opportunity to use in the future, as you will be exposed to programming languages for the first time.

It is 2, but it goes without saying that it is better not to spend money and time. ** Money is especially important ** The budget for public high schools is the tears of a sparrow, so I would like to use a free one if possible

Although it is 3, I want to avoid so-called difficult languages because it is my first coding. An easy-to-read language with a small amount of minimum code and "magic" is good. At the high school level, it is assumed that you will not write large code with thousands of lines.

Although it is 4, I think that a language that students can easily benefit from is good because the students learn it with great effort. However, it would be nice if we could visualize the mathematical formulas and graphs that appeared in mathematics and science with only statistical processing and visualization.

Based on the above four points, I think that the candidates will be settled around Python, JavaScript, and C language.

Not a candidate who was the runner-up --Java: Major, but tends to have a lot of code. --Ruby: Python to learn from now on --PHP: JavaScript to learn from now on

JavaScript is by all means the cheapest to install, as long as you don't have to do much in a Windows environment. However, it seems to be troublesome when the algorithm becomes complicated.

Python also works on Windows if you throw in Anaconda, so it's relatively low cost. Another advantage is that it is easy for humans to read.

The C language is a little expensive to introduce, but the fact that it is a compiler language is a great plus for understanding the concept of "machine language".

Summary

--"Programming education" ≠ "Coding programming" ――It is realistic to let students acquire "programming thinking" through "programming education" that does not code when they are in elementary and junior high school. ――When you are in elementary school, I want you to spend time learning information ethics and basic ICT technology. ――I want you to acquire a certain level of PC skills when you are in junior high school. ――It is realistic for high school students to actually code, and if you do it, you want to do merge sort and dynamic programming that will train your logical thinking ability. --Python, JavaScript, and C languages are good programming languages.

reference

Ministry of Education, Culture, Sports, Science and Technology Promotion of computerization of education Programming education Elementary School Learning Guidance Guidelines (Notification in 2017) General Rules

Recommended Posts

Think seriously about what language to use in programming education and programming education.
What beginners think about programming in 2016
How to use is and == in Python
What is "functional programming" and "object-oriented" in Python?
Think about depth-priority and width-priority searches in Python
How to use Decorator in Django and how to make it
The programming language you want to be able to use
Go language to see and remember Part 7 C language in GO language
It's time to seriously think about the definition and skill set of data scientists
A story about trying to use cron on a Raspberry Pi and getting stuck in space
How to use pyenv and pyenv-virtualenv in your own way
[Introduction to Udemy Python 3 + Application] 36. How to use In and Not
How to create and use static / dynamic libraries in C
I tried to illustrate the time and time in C language
Comparison of how to use higher-order functions in Python 2 and 3
Explanation of CSV and implementation example in each programming language
Covector to think in function
Think about architecture in python
Programming language in "Hello World"
processing to use notMNIST data in Python (and tried to classify it)
[Introduction to Python] What is the most powerful programming language now?
How to give and what the constraints option in scipy.optimize.minimize is
How to use functions in separate files Perl and Python versions
What to do if you can't use the trash in Lubuntu 18.04.
What automation should I do in RPA, VBA, and programming languages?
Programming to fight in the world ~ 5-1
Programming to fight in the world ~ 5-5,5-6
Use optinal type-like in Go language
[Introduction to Python3 Day 1] Programming and Python
How to install and use Tesseract-OCR
How to use classes in Theano
Mock in python-how to use mox
How to use SQLite in Python
About dtypes in Python and Cython
Post to slack in Go language
How to use computer language slowly 2
How to use .bash_profile and .bashrc
Start SQLite in a programming language
How to install and use Graphviz
How to use Mysql in python
How to use ChemSpider in Python
How to use computer language slowly
Programming to fight in the world ~ 5-2
What to do if you can't use scikit grid search in Python
Connect to postgreSQL from Python and use stored procedures in a loop.
After all, what should I use to do type comparisons in Python?