コーディング力向上施策
自己紹介
項目 説明 氏名 湯川 敦 役職 特になし(名前だけの取締役) 入社 2003年9月(契約社員時代含む) 前職 ゲーム会社(ぷよぷよを作った広島の会社、1997年倒産→2001 年会社再建断念)のWebサイト制作、PerlでのCGIスクリプト制作、 Javaミニゲーム制作など1
• はじめに(3P)
2
• 紹介したいテーマ その1(5P)
3
• 紹介したいテーマ その2(7P)
4
• 紹介したいテーマ その3(7P)
はじめに
以前の帰社日で紹介された評価シート中で、1~2年目の目標として、
年間1万ステップのコーディング
とあった(と記憶)。
私の現場に配属された
新人技術者
に対しては、かなりの間、
コーディン
はじめに
新人技術者に関しては、
最初の頃はテスト担当
となることが
多く、いきなりコーディングの機会を与えられることは少ないと思
われる。
研修で色んな知識を覚えた後、仕事でコーディングさせてもら
えるまでに、
時間が空いてしまうと、コーディングの感覚を忘れて
しまう
かもしれない。
はじめに
【発表の目的】
ある程度楽しみつつ、コーディング力をつけられるようなサ
イトなどを紹介したいと思います。
【対象者】
コーディング力を向上させたい人
そういう人を教育する立場の人
1
• はじめに(3P)
2
• オンライン実行環境(5P)
3
• 紹介したいテーマ その2(7P)
4
• 紹介したいテーマ その3(7P)
オンライン実行環境
オンライン実行環境とは?
ブラウザ上で、プログラムソースをコンパイルして実行することができるサイ
トがあります。
おススメ理由
書いたコード動かすまでの労力(コスト・手間)が圧倒的に低いです。
色んな機能的制約はありますが、標準入力・標準出力は使えるので、
プログラミング言語の初歩的な学習にはかなり向いています。
オンライン実行環境
オンラインの実行環境の紹介
IDEONE ・・・有名(後で紹介します)
http://ideone.com
Paiza ・・・けっこう機能はいいが、転職サイト・・・
http://paiza.jp/
Wandbox・・・APIの制約が緩いのでいろいろカスタマイズできそう
http://melpon.org/wandbox/※
Wandbox API
https://github.com/melpon/wandbox/blob/master/kennel2/API.rstオンライン実行環境
こぼれ話
IDEONEをどこで区切るかで、みんな迷っている? ideoneで検索すると第二検索ワードに「読み方」が出てくる IDEとONEで切って「アイディーイーワン」が正解らしい。 http://b.hatena.ne.jp/entry/242177283/comment/sh19910711オンライン実行環境
IDEONEの機能紹介
ここにソースコードを入力 ここに標準入力として与えら れる文字列を入力 言語が選択できる (めっちゃ多い) 実行ボタン→コンパイルして実 行→標準出力の結果が表示オンライン実行環境
IDEONEで利用可能な言語
■popular Bash C (gcc-5.1) C# C++ 5.1 (gcc-5.1) C++14 (gcc-5.1) Haskell Java Java7 Objective-C (gcc-5.1) Pascal (fpc) Pascal (gpc) PHP ■others Ada Assembler (gcc-5.1) Assembler (nasm-2.11.05) AWK (gawk) AWK (mawk) bc Brainf**k C (clang3.7) C++ (clang3.7) C++ (gcc4.3.2) C99 strict (gcc-5.1) CLIPS D (ldc 0.14) D (gdc 5.1) D(dmd) Elixir Erlang F# Factor Falcon Fantom Forth Fortran Go Groovy Icon Intercal JavaScript (rhino) Node.js Objective-C (clang 3.7) Ocaml Octave Oz Perl 6 PicoLisp Pike Prolog (gnu) Prolog (swi) Python (Pypy) R Rust Scala Scheme (chicken) Scheme (guile)1
• はじめに(3P)
2
• オンライン実行環境(5P)
3
• オンラインジャッジサイト(7P)
4
• 紹介したいテーマ その3(7P)
オンラインジャッジサイト
オンラインジャッジサイトとは?
サイト上で、プログラミングに関する問題が出題され、回答として、プログ
ラミング言語を提出し、評価を受ける形式のサイト。
初歩的な学習向けの問題から、高度なアルゴリズムを駆使する問題ま
で、様々なレベルのものがある。
おススメ理由
初心者は学習用として、経験者は腕試しとして、色んなスキルの技術
オンラインジャッジサイト
オンラインジャッジサイトの紹介
AIZU ONLINE JUDGE(日本で有名)(後で紹介します)
http://judge.u-aizu.ac.jp/onlinejudge/
PKU ONLINE JUDGE(北京大学)(世界的に有名)
http://poj.org/
Code-IQ
【転職サイトなのであまり・・・】 https://codeiq.jp/
Paiza
【転職サイトなのであまり・・・】 http://paiza.jp/オンラインジャッジサイト
Aizu Online Judgeの機能紹介
会津大学で開発されたオンラインジャッジシステム。色んな書籍で取り上げられており、 日本では一番の有名どころ。無料ユーザ登録のうえ、ログインが必要です。 問題セット・・・あらかじめ用意された問題に解答していくことができます。 ランキング・・・ユーザの回答数ランキングが閲覧できます。 ステータス・・・ログインすれば他の方の投稿状況・ソースコードが見れます。 コンテスト・・・定期的にプログラミングコンテストも開催されているようです。 コース・・・コース別の問題がまとめられています。こちらから始めるのが吉。
オンラインジャッジサイト
問題の例1(初心者向けの最初の問題) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_1_A 問題文 (前略) "Hello World" と標準出力にプリントするプログラムを作成してください。 (後略) 入力 この問題に入力はありません。 出力 "Hello World" と一行に出力してください。オンラインジャッジサイト
問題の例2(初歩的な問題から抜粋) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_4_A 問題文 2つの整数 a と b を読み込んで、 以下の値を計算するプログラムを作成して下さい: a ÷ b : d (整数) a ÷ b の余り : r (整数) a ÷ b : f (浮動小数点数) 入力 1行に2つの整数 a, b が与えられます。 制約 1≦a, b≦109 入力例 3 2 出力例オンラインジャッジサイト
問題の例3(パソコン甲子園2003より) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0009&lang=jp 問題文 6 桁以下の正の整数 n を入力し、n 以下の素数がいくつあるかを 出力するプログラムを作成して下さい。ただし、素数とは 1 と 自分自身でしか割り切れない正の整数のうち 1 をのぞいたものを いいます。例えば 10 以下の素数は、2, 3, 5, 7 です。 入力 複数のデータセットが与えられます。各データセットに n (1 ≦ n ≦ 999,999) が1行に与えられます。入力の最後まで 処理して下さい。データセットの数は 30 を越えません。 出力 入力例 10 3 11 出力例 4 2 5オンラインジャッジサイト
その他、先に紹介したPaizaでは、ゲームコンテンツもあります。 ゲームの傾向にやや偏りがありますが、興味のある方はどうぞ。 プログラミングで彼女をつくる(オンラインジャッジ中級クラスの問題まであるよう なので、それなりに手ごたえはありそうです) https://paiza.jp/poh/ando 恋するハッカソン(やってないからわからないけど、プログラミングで彼女を作る、 に近い感覚のようです) https://paiza.jp/poh/hatsukoi1
• はじめに(3P)
2
• オンライン実行環境(5P)
3
• オンラインジャッジサイト(7P)
4
• プログラミングコンテスト(7P)
プログラミングコンテスト
プログラミングコンテストとは?
オンラインジャッジサイトと同様の形式で数問出題され、問題
ごとの配点と、トータルの時間制限がつく形が一般的です。
競
技プログラミング
と呼ばれ、一つのジャンルを形成しています。
上級者向けすぎるようにも思うかもしれませんが、易しいレベル
のコンテストもあります。
プログラミングコンテスト
おススメ理由
スポーツでいうと、文字通り、競技会、大会のようなもの。 レーティングなど実績が数値化されるので、スポーツのような感覚で楽しめる上、自 身の成長が実感しやすい。 制限時間内に問題を解くことが、プレッシャーのある中で冷静かつ迅速に最適な方 法を考える訓練になり、障害対応力や問題解決力の向上に役立つ。 高度なものになると、アルゴリズムの専門知識や計算量を意識することが必要で、こ んなの業務で使うことあるのか?というほど難易度が高くなるが、コーディング力向上 の訓練としては非常に役立つ。プログラミングコンテスト
プログラミングコンテストサイトの紹介
TOPCODER (英語)
https://www.topcoder.com/ ・・・参加者は成績をもとに6段階に格付けされる。 「Wihite」「Gray」「Green」「Blue」「Yellow」「Red」 最高位のRedCoderの称号は全会員の上位0.1% 日本人RedCoderは10人程度、ほぼ東大らしい。 回答後に、他人のコードのバグを指摘すると得点がもらえるという フェーズがあり、ユニークだが緊張感がある。
CODEFORCES(英語)
http://codeforces.com/
AtCoder(日本語) (後で紹介します)
https://atcoder.jp/プログラミングコンテスト
AtCoderの紹介
日本語なので、入りやすいと思います。平均週に1回(外部主催を含め)な
んらかのコンテストが開催されています。AtCoder主催のコンテストは3種類。
1. AtCoder Beginner Contest
1・2問目は初級者にも十分解ける。3・4問目は中級向け、問題によっ ては手ごわい
2. AtCoder Regular Contest
中~上級向け。十分時間があれば解けそうだが、限られた時間で全問解答 するには、傾向と対策が万全でないと無理。
プログラミングコンテスト
問題の例1(AtCoder Beginner Contest 046 の1問目)
http://abc046.contest.atcoder.jp/tasks/abc046_a 問題文 シカのAtCodeerくんは、ペンキをこれまでに3つ買いました。おととい買っ たペンキの色は a , 昨日買ったペンキの色は b , 今日買ったペンキの色 は c です。各ペンキの色は1以上100以下の整数で表されます。 AtCodeerくんはわすれんぼうなため、同じ色のペンキを買ってしまってい ることがあります。 AtCodeerくんが買ったペンキの色の種類の個数を 教えてあげてください。 入力 入力は以下の形式で標準入力から与えられる。 入力例1 3 1 4 出力例1 3 入力例2 3 3 33 出力例2 2 制約 1≦a, b, c≦100
プログラミングコンテスト
問題の例2(AtCoder Grand Contest 007 の6問目)
http://agc007.contest.atcoder.jp/tasks/agc007_f 問題文 シックの仕事はコピー取りです。ある日、シックは上司から英小文字からなる長さ N の文字列 S0 を受け取 りました(この日を 0 日目とします)。これ以降、i 日目の仕事は、文字列 Si−1 を Si にコピーすることです。 以下、Si の j 番目の文字を Si[j] と表します。 シックはまだこの仕事に慣れていません。毎日、文字列を先頭の文字から順に書き写していくのですが、正 しい文字の代わりに誤って直前に書いた文字と同じ文字を書いてしまうことがあります。すなわち、Si[j] は Si−1[j] または Si[j−1] のどちらかと等しくなります。(ただし、文字列の先頭の文字を書き間違えることはあ りません。すなわち、Si[1] は必ず Si−1[1] と等しくなります。)
プログラミングコンテスト
前ページのつづき 制約 1≦N≦1,000,000 S0 と T の長さはともにNである S0 と T の長さはともに英小文字のみからなる 入力 入力は以下の形式で標準入力から与えられる。 N S0 T 出力 入力例2 5 abcde abcde 出力例2 0 ※湯川補足: 最初から一致 している 入力例3 5 acaa aaca 出力例3 2 ※湯川補足: S0=acaa S1=acca 入力例1 5 abcde aaacc 出力例1 2 S0=abcde, S1=aaccc, S2=aaacc のプログラミングコンテスト
参加する場合のポイント (初級)コーディング自体に慣れるため、たくさんの問題をやってみましょう (中級)要求を解釈してコーディング内容に落とし込む訓練になります (上級)アルゴリズム・計算量も踏まえた最適コーディングを素早く見つける戦 いになります。腕に覚えのある人は挑んでみましょう(きっと上には上がいること が自覚できるでしょう)。 共通のポイント 現場でのコーディングルール(適切なコメントや可読性)をなるべく外さないよ う意識しましょう。時間制限に引っ張られて汚いコードを書くのでなく、時間制 限があるからこそ、整理してコードを組むことが重要です。1
• はじめに(3P)
2
• オンライン実行環境(5P)
3