初めてのプログラミング言語

実家の部屋を整理していましたら、『はじめて読む8086』(1987)と『はじめて読むMASM』(1988)が出てきました。マシン語(機械語)とそれに対応したアセンブリ言語の解説書です。基本図書といってもよい書籍です。

私自身も最初はBASICを雑誌や学習マンガで学んだ一人ですが、初めて開発したパブリックドメインソフト(PDS)はアセンブリ言語で作りました。MS-DOSに標準添付されていたのがMASMというアセンブラしかなかったからです。当時はシステムコールに興味があって、いろいろ技術書を買い込んでいたことを思い出します。

その後、比較的安価なTURBO-Cを手に入れて、C言語の世界へと入っていくことになります。それもPDS開発のためでした。

というわけで、私のプログラミングスキルは独学の好き勝手学習で身につけたものです。そのため、ちゃんとしたソフトウェア工学を学んだ人のようにプログラミング教育などを語ることはできません。

けれども、素人プログラマーなりにプログラミング教育についてはいろいろ考えていきたいと思います。

RでPISA2015

 PISA2015の「ICT活用調査」の分析記事が話題になっています。

  OECDのWebサイトには,各種報告書とともにデータファイルも統計ソフトファイルとして公開されていて,ダウンロードすれば自分で集計処理をすることが可能です。(集計概要は「Compendia」としてExcelファイルにまとめられています。)

 普通に詳細を検討するなら,概要ファイルをExcelで処理した方が楽だと思いますが,せっかくなので,Rという統計環境に挑戦することにしました。

 (追記20170114:「RでPISA2015〈その2〉」もご覧下さい)

 Rは,統計分析のためのプログラミング言語です。市販の統計ソフトが裏側で処理していることを利用者自身がプログラミングすることで,希望に応じた統計分析処理を行なわせることができるというわけです。その代わり,ボタン1つで処理させるような手軽さはないというのが敷居の高いところです。

 しかし,R言語とそのための環境を構成するソフトウェアは,オープンソフトウェアとして無償で公開されて,世界中の専門家が仕事で利活用している優れものです。研究を生業としているものとしては,一度はちゃんと触れておきたいソフトウェアです。

 取っ付き難さはあれど,導入手続は簡単です。

 1. Rをダウンロードする。 (たとえばこちらから https://cran.ism.ac.jp )

 2. RStudioをダウンロードする。 https://www.rstudio.com/products/RStudio/ 

 3. RとRStudioをインストールする。

 4. RStudioを起動する。

 これで,準備が出来ました。あとは,データファイルを読み込むなどして,統計処理を命令していきます。

 ちなみにRとRStudioですが,Rが言語命令を処理する本体ソフトウェアで,RStudioは操作のしやすい窓口(インターフェイス)を提供する統合環境ソフトです。

RStudio

 左上がプログラムを編集する場所,左下「コンソール」が実際に命令をする場所,右上にいろんなデータの一覧,右下がファイル一覧ですが,タブで切り替えるといろんな情報を表示できます。

 参考情報として三重大学の奥村先生による「PISA 2015データを読む(未完)」というWebページが貴重な入り口を示してくださっていますので,これをまず試してみましょう。

 初めてだと「取得から読み込みまで」の部分で音を上げそうですが,Rは標準で備わっている機能を命令で呼び出す以外にも,パッケージというものを足していくことで機能拡張させることが可能なので,PISAのデータファイルが他のソフト向けのものでも,該当するパッケージさえあれば読み込む機能を追加できます。そうやって読み込んでみるとPISAデータは結構メモリ食うねって話が書いてあります。

 しかし,ここではRStudioという統合環境ソフトを使うことにしたので,この辺をかなり楽にクリアできてしまいます。

 macOSであれば,PISAからダウンロードした圧縮ファイル(たとえば PUF_SPSS_COMBINED_CMB_STU_QQQ.zip)を展開して出来上がったファイル(Cy6_ms_cmb_stu_qqq.sav)を自分のホームディレクトリに移動させれば,RStudioのファイル一覧画面で確認することができます。これをダブルクリックなどして開こうと(インポートしようと)すると,必要なパッケージをダウンロードするか?と(英語で…)聞いてきますので,その指示に従って操作すれば読み込みに関しては完了してしまいます。

 上の画面写真の赤い矢印あたりにある「Pacakges」というタブで切り替えると,現在手元にあるパッケージ一覧と利用するかどうかのチェックマークが並んでいて確認できます。この一覧にないパッケージは「install」ボタンで探しに行ってダウンロードします。

 「PISA 2015データを読む(未完)」では,「data」という変数(オブジェクト)に読み込んだデータが格納されたのですが,RStudioを使って上記の方法をとると「Cy6_ms_cmb_stu_qqq」という名前になるんじゃないかなと思います。続く「回答の分析」の解説と命令はその部分を置き換えて,コンソール内で操作すればWebページ通りになると思います。

 さて,問題はここから先です。

 他の質問に対する回答集計や選択肢の異なる場合の処理など,どうやったらいろいろ見ることができるのでしょうか。できればExcelのようにグラフ作成したらパッと視覚的に確認できると嬉しい。

 しかし,Rに挑戦する場合には,パッと出るのを「自分でプログラミング」しなければなりませんから,R言語を使って試行錯誤することとなります。

  奥村先生のWebページが「(未完)」なのは,経験のある方でもそれなりに時間をかける仕事になるからで,さまざまな質問形式のPISAデータをRで読むとなると煩雑さはやむを得ないところです。

 というわけで,私も完成とまではいきませんが,少しチャレンジした成果を以下に載せておきたいと思います。R言語は初めてですので,各所のお知恵を拝借して組んでみた,とりあえず動いたというレベルです。Rプログラミングの参考にはなりませんが,とりあえずPISAデータをいじってみたいという皆さんの参考になればと思います。プログラムを編集する場所(左上)に貼り付けて実行してみてください。

 なお,このプログラムは学校質問紙「SC017Q07NA」という質問のグラフを描くものです。質問番号やファイルを変えて改良してください。

# For PISA2015 rev2
# K.RIN

library(haven)
library(ggplot2)
library(plyr)
library(tidyverse)

#student_raw <- read_sav("~/Cy6_ms_cmb_stu_qqq.sav")
school_raw <- read_sav("~/Cy6_ms_cmb_sch_qqq.sav")

#質問文(手動で質問文をコピペ)
q_title <- "Is your school’s capacity to provide instruction hindered by any of the following issues?\n[SC017Q07NA] A lack of physical infrastructure\n (e.g.building, grounds, heating/cooling, lighting and acoustic systems)"
#回答選択肢(手動で設定のこと)
ans_limits <- c("1","2","3","4")
ans_labels <- c("まったく\nあてはまらない","どちらかといえば\nあてはまらない","どちらかといえば\nあてはまる","とてもよく\nあてはまる")
#ラベル
y_label <- "パーセント %"
x_label <- "国"
legend_label <- "回答"

#回答データ抽出(国別クロス集計)
tmp <- subset(school_raw, school_raw$SC017Q07NA != "NaN")
country_ans_table <- table(tmp$CNT,tmp$SC017Q07NA)
ftable(country_ans_table)

#縦長dfへ変換
country_ans_long <- tbl_df(country_ans_table)
#横長df版クロス表
country_ans_wide <- spread(country_ans_long, Var2, n)
#国別idづけ(いまのところ利用せず…)
country_ans_wide <- country_ans_wide %>% rownames_to_column('id')
#idを文字から数値へモード変換
mode(country_ans_wide$id) <- "integer"
#国別id付き縦長df
country_ans_long <- gather(country_ans_wide, answer,count,-id,-Var1)

#並べ替え(表示の関係で逆順に)
country_ans_long <- arrange(country_ans_long, desc(Var1), desc(answer))

#列名変更
colnames(country_ans_long) <- c("id", "CNT", "answer", "count")
#パーセント計算(グラフ描写用)
country_ict <- ddply(country_ans_long, "CNT", transform, percent = count / sum(count) * 100, 0.1)
#小数点以下1桁処理(ラベル表示用,合計が100%にならないことあり)
country_ict <- ddply(country_ict, "CNT", transform, percent_rounded = round_any(count / sum(count) * 100, 0.1))
#ラベル位置計算
country_ict <- ddply(country_ict, "CNT", transform, percent_label_y = cumsum(percent)-0.5*percent)
country_ict <- arrange(country_ict, desc(CNT), desc(answer))

#フォントファミリー設定
quartzFonts(HiraKaku = quartzFont(rep("HiraginoSans-W3", 4)))
par(family = "HiraKaku")

#グラフ描画
graph <- ggplot(country_ict, aes(x = CNT, y = percent, fill = factor(answer))) + geom_bar(stat = "identity", position='stack') + scale_color_manual(values = rainbow(7)) + theme_bw() + geom_text(aes(y = percent_label_y, label = percent_rounded), color = "white", size = 3) + scale_y_reverse(breaks = c(100.0,75.0,50.0,25.0,0.0), labels = c("0%","25%","50%","75%","100%")) + coord_flip(expand = FALSE) +
ggtitle(q_title) + scale_fill_discrete(limits = ans_limits, labels = ans_labels) + ylab(y_label) + xlab(x_label) + labs(fill = legend_label) + theme(legend.title = element_text(family = "HiraKaku", size = 10),plot.title = element_text(family = "HiraKaku", size = 10), legend.text = element_text(family = "HiraKaku", size = 7), axis.title = element_text(family = "HiraKaku", size = 9), axis.title.y = element_text(angle = 0, vjust = 0.5))

print(graph)

参考資料

PISA 2015データを読む(未完)」(奥村晴彦)
Rクックブック』(オライリー)
Rグラフィックスクックブック』(オライリー)
ggplot2 — きれいなグラフを簡単に合理的に」「tidyr — シンプルなデータ変形ツール」(Heavy Watal)
ggplot2 documentation」(Hadley Wickham)
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」」(tera monagi)

平成27年度 学校における教育の情報化の実態等に関する調査結果

 平成27年度「学校における教育の情報化の実態等に関する調査」の最終集計結果が出たようです。毎年,速報値が流れて,しばらくしてから確定値が公表されます。何かしら結果集計の最終確認をしているようで,たまに数値が変わります。それに泣かされたこともあります ^_^; 。

 今回の調査結果公表について,例年と違うことが行なわれたとして話題になっています。一つは,速報値公表段階で市町村別の結果を公表したこと。もう一つは,確定値公表の概要資料に市町村別版のものを加えたことです。

 「市区町村別 学校における主なICT環境の整備状況(全校種)」という資料は,市区町村をずらっと順位付けしたもので,文部科学省の資料としては大胆な試みかも知れません。

 ただ,速報値段階での市区町村結果の前倒し公表や,確定値における順位づけリスト公表にしても,文部科学省的にはインパクトのある出来事かも知れませんが,受け手にしてみれば,大した変化を感じません。これまでも確定値で市区町村レベルの調査結果は確認できましたし,それをもとに日経BP社は毎年「全国市区町村 公立学校情報化ランキン」を特集していました。

 唯一,今回の取り組みで役立ちそうなのは,新たに加えられた「平成27年度学校における教育の情報化の実態等に関する調査結果(市区町村別)」[(1)北海道〜愛知県(2)三重県〜沖縄県]が都道府県別に作成されていて,地方自治体で参照する資料として使いやすいという点でしょう。市区町村の多い都道府県はグラフの字が小さくて大変ですが…。

 見える化したことで,表だけでは掴みづらかった整備状況の格差がわかりやすくなったという意味で,見る人によっては衝撃なのかも知れません。

 りん研究室では「教育情報化実態調査結果_経年データ(コンピュータ・周辺機器整備編)」を以前から公表していますが,これは全都道府県の合算値であり,都道府県レベルの経年データを作成するに至っていません。

 統計局のサイトは,データ登録の仕方次第で経年比較等ができる機能(データベース機能)を持っているはずですが,残念ながら「学校における教育の情報化の実態等に関する調査」は,独自作成したエクセルファイルを保管する仕方で登録されているため,経年データ作成は手作業にならざるを得ません。

 文部科学省には,(人手が足りないのは承知ではあるけれども)過去の調査結果も含めて,統計局のデータベースに登録するよう期待したいと思います。また,調査結果だけでなく,質問紙内容(エクセルファイル)と生データも合わせて公表して欲しいところです。

 ただ,実態調査については,そもそも調査デザイン自体が実態を把握するにふさわしいのかどうか疑問が提示されています。整備状況値は,ICT活用状況値ではないことからも,実態調査そのものの見直しが必要になっていることは確かです。

 今回の市区町村レベルの数値公表の姿勢変化が,実態調査に対する見直しの手始めであることを期待したいところです。

タブレット端末画面は広い方がよい

 学校への導入や生徒が購入するタブレット端末の話題もひと頃に比べると議論もだいぶ収まってきたように思います。というのも,メーカー側で「文教向けタブレット端末」というカテゴリーの商品が各社出揃って,従来のように入札によって淡々と導入されていくというフェーズに入ったからです。

 最初こそ,iPadがよい,Windowsタブレットがよい,Androidタブレットがよい,といった基本OS比較論争も賑やかでしたが,これもいまやAndroidタブレットは圏外へ消え,検討会議や入札条件の都合でiPadが候補から外されることも珍しくなくなって,とりあえずの選択で丸く収まるなら,それでいいんじゃない的な雰囲気に落ち着いています。

 タブレット端末には…

  • カメラとビューア
  • PDFビューア
  • PDFアノテーション
  • Webブラウザ
  • 地図アプリ
  • スライド作成アプリ
  • ファイル転送機能
  • 画面外部出力
  • ペン入力機能

 …くらいが備わって快適に動作すれば,あとは利用サービスや導入アプリと活用法次第といったところでしょうか。

 キーボード入力練習がしたいというニーズにまで応えるなら外付けキーボードも必要といったことになりますが,そこまでいくなら素直にタブレットPCかノートパソコンを選択すべきだと私は思います。コンピュータ/プログラミング学習のための活用もタブレット端末で可能な水準は限定的に考えてるべきです。

 その上で私は,タブレット端末を導入なり入手なりするなら,なるべく広い画面のものがよいというアドバイスをあらためて強調したいと思います。

 もちろん広い画面は筐体が大きくなることを意味し,重量が増すということにもつながります。持ち運びをするといった場面を想定すると,大画面タブレット端末を推す意見に同意し難いかも知れません。

 それでも私は,最低でも12インチ以上のもの,具体的にはSurface Pro 4(12.3インチ)やiPad Pro(12.9インチ)程度の画面の端末を利用すべきであると主張したいと思います。

 作業領域の広さは,作業内容の把握具合に直接影響します。

 個人的な感覚でも,iPad Pro 12.9インチモデルを使用していたときと,iPad Pro 9.7インチモデルを使用しているときを比較すると,当然ながら12.9インチ画面の方が情報量が多く,たとえば図表作成をする作業も12.9インチの方が全体を把握しながら作業を進められるます。

 ノートアプリにペン入力で記録をとるときも,画面の書き込みを継続するための移動や拡大縮小操作において大画面の方が快適でした。

 文教向けタブレットについては,学校の机サイズとの関係を根拠にして,あまり大きな端末はそぐわないといった知見が固まりつつありますが,それは「タブレットPC」の実績から導き出された感が強く,確かにタブレットPCのような分厚さや存在感のある端末であれば机にフィットするため小さめである必要があるかも知れません。

 しかし,昨今のタブレット端末は十分に薄く,大きな画面のタブレット端末と教科書やノートが重なり合うことにも違和感がなくなっています。

 もちろんまだ実証的な結果が得られている意見ではありませんが,むしろどのような先入観も一旦保留して,広い画面のタブレット端末を試してみることも同等に評価する必要があるのではないかと思います。その上で,また適合性を判断すればよいのだと思います。

小学校プログラミング教育・議論の取りまとめを読む

小学校段階におけるプログラミング教育の在り方について(議論の取りまとめ)

文部科学省サイト

書込みPDF

==

文部科学省「小学校段階における論理的思考力や創造性、問題解決能力等の育成とプログラミング教育に関する有識者会議」(平成28年5月13日,5月19日,6月3日)での議論を取りまとめた文書が6月16日に公表されました。

長い会議名に対して,まとめ文書は端的なタイトルです。

事の流れを大雑把に振り返ると,「e-Japan戦略」の頃から「IT人材育成」はずっと唱えられ続けてきており,2013年の「情報通信技術人材に関するロードマップ」で初等中等段階におけるデジタルコンテンツの制作やプログラミング等のカリキュラム開発が言及されました。

その後,「日本再興戦略」「世界最先端IT国家創造宣言」「日本再生実行会議」,そして「産業競争力会議」では4月19日の「初等中等教育からプログラミング教育を必修化します。」という発言が話題にもなって,同日に文部科学省が有識者会議の設置をしました。

事の始まりから「初等中等教育」と言及され,小学校(初等教育段階)と中学・高等学校(中等教育段階)の両方でプログラミング教育を検討することが折り込まれていたといえば,確かにそうです。

また,議論の取りまとめを読むと,教育課程の中にすでに取り組みが存在する中等教育段階のことを考えれば,それへの準備期間である初等教育段階のプログラミング教育の在り方を検討することは,当然の成り行きなのでしょう。

しかし,このような流れでは,小学校段階における「必修化」の是非そのものを検討することは飛び越されています。つまり,小学校での必修化は不要であるとの選択肢は除外されていたわけであり,それが有識者会議における議論の苦しさ,取りまとめ文書のまだるっこしさの一因ではないかとも思います。

その上,取りまとめ文書は,とても読み難いと感じました。

行政関連文書としての独特の言い回しをする必要があることも理解できますが,一部の文章は大仰に表現することを迫られて書いたようにも読めます。

そのため,「プログラミング教育」とか「プログラミング的思考」として捉えなくてもよいものまで,無理にその枠組みに入れようとしている印象を与え,小学校段階での「プログラミング教育」とは,現時点においてまなざしの問題であるかのように思わせてしまう側面もあります。

別の言い方をすれば,この取りまとめ文書の中で,小学校における「プログラミング教育」の成否は,各学校の「カリキュラム・マネジメント」による采配次第であるとされており,それが実現するかどうかは,次期教育課程の出来上がり次第です,期待してます,おわり,という構成になっているということです。

それがどこか対岸を眺めている「まなざし」という印象を生むのかも知れません。

もちろん,取りまとめ文書は,外堀に関しても言及しており,小学校の外部からの働きかけについて様々示唆されているように思います。そういう意味では,すべてを学校任せにせず,私たち自身が,日本という国が持続するための人材育成にもっと関わっていくべきと前向きな解釈をして「プログラミング教育」のムーブメントを推し進めていくのも大事でしょう。

けれども,取りまとめ文書の,特に冒頭部分の一連の文章は,私の読解力の低さがあってか日本語として冗長な部分が多いと感じ,プログラミング教育を語る後半にたどり着くまでにはすっかり疲れてしまいました。普通の人たちは,これくらいあっという間に読み解くものなのでしょうか。

仕方ないので,私なりに添削をしたのが冒頭の「書込みPDF」です。

行政関連文書ではそんな風に書かないというご意見もあろうかと思いますが,誰かに読んで欲しいならば,こんな感じで変更してみてはどうだろうかという私なりの提案です。

その他,思いついたことも少し書込みましたので,ご笑覧ください。何か思いついたら追加して書込んだりしますので,そのときは再ダウンロードを。