エロと研究と日々の徒然

いらすとやでイラスト自動生成 〜桃太郎編〜

おはようございます、プルさわです。

徹夜明けのハッカソン中にブログ記事を書いています。

 

アプリ作りました。

以下のWebサイトで公開中です。(近日中に閉鎖します。)

いらすとか.tech

ということで、試してみましたよ。

 

桃太郎の文章をいらすと化してみた

文章元:

http://hukumusume.com/douwa/pc/jap/08/01.htm

 

イラスト元:

www.irasutoya.com

 

 

はじまりはじまり〜。

 

 

昔々あるところにおじいさんとおばあさんがいました。

f:id:oscillograph:20170205100826p:plain

 

おじいさんは山へしばかりに、おばあさんは川へせんたくに行きました。

f:id:oscillograph:20170205100851p:plain

 

おばあさんが川でせんたくをしていると、ドンブラコ、ドンブラコと、大きな桃が流れてきました。

f:id:oscillograph:20170205100925p:plain

 

「おや、これは良いおみやげになるわ」

f:id:oscillograph:20170205100942p:plain

 

おばあさんは大きな桃をひろいあげて、家に持ち帰りました。

f:id:oscillograph:20170205100958p:plain

 

そして、おじいさんとおばあさんが桃を食べようと桃を切ってみると、なんと中から元気の良い男の赤ちゃんが飛び出してきました。

f:id:oscillograph:20170205101017p:plain

 

「これはきっと、神さまがくださったにちがいない」

f:id:oscillograph:20170205101034p:plain

 

子どものいなかったおじいさんとおばあさんは、大喜びです。

f:id:oscillograph:20170205101049p:plain

 

桃から生まれた男の子を、おじいさんとおばあさんは桃太郎と名付けました。

f:id:oscillograph:20170205101113p:plain

 

桃太郎はスクスク育って、やがて強い男の子になりました。

f:id:oscillograph:20170205101130p:plain

 

そしてある日、桃太郎が言いました。
「ぼく、鬼ヶ島(おにがしま)へ行って、わるい鬼を退治します」

f:id:oscillograph:20170205101146p:plain

 

おばあさんにきび団子を作ってもらうと、鬼ヶ島へ出かけました

f:id:oscillograph:20170205101203p:plain

 

旅の途中で、イヌに出会いました。
「桃太郎さん、どこへ行くのですか?」
「鬼ヶ島へ、鬼退治に行くんだ」
「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」

f:id:oscillograph:20170205101219p:plain

 

イヌはきび団子をもらい、桃太郎のおともになりました。

f:id:oscillograph:20170205101234p:plain

 

そして、こんどはサルに出会いました。
「桃太郎さん、どこへ行くのですか?」
「鬼ヶ島へ、鬼退治に行くんだ」
「それでは、お腰に付けたきび団子を1つ下さいな。おともしますよ」

f:id:oscillograph:20170205101250p:plain

 

こうして、イヌ、サル、キジの仲間を手に入れた桃太郎は、ついに鬼ヶ島へやってきました。

f:id:oscillograph:20170205101305p:plain

 

鬼ヶ島では、鬼たちが近くの村からぬすんだ宝物やごちそうをならべて、酒盛りの真っ最中です。
「みんな、ぬかるなよ。それ、かかれ!」

f:id:oscillograph:20170205101321p:plain

 

イヌは鬼のおしりにかみつき、サルは鬼のせなかをひっかき、キジはくちばしで鬼の目をつつきました。
そして桃太郎も、刀をふり回して大あばれです。

f:id:oscillograph:20170205101342p:plain

 

とうとう鬼の親分が、
「まいったぁ、まいったぁ。こうさんだ、助けてくれぇ」
と、手をついてあやまりました。

f:id:oscillograph:20170205101403p:plain

 

桃太郎とイヌとサルとキジは、鬼から取り上げた宝物をくるまにつんで、元気よく家に帰りました

f:id:oscillograph:20170205101420p:plain

 

おじいさんとおばあさんは、桃太郎の無事な姿を見て大喜びです

f:id:oscillograph:20170205101445p:plain

 

そして三人は、宝物のおかげでしあわせにくらしましたとさ

f:id:oscillograph:20170205101507p:plain

 

めでたしめでたし

f:id:oscillograph:20170205101617p:plain

 

 

おわりに

作るの大変でした。

よかったら使ってみてください。(閉鎖される前に)

いらすとか.tech

本当の権力者は誰? 日本の大株主をゆる〜く分析

好きなことで、生きていく

Youtuberよろしく、データ解析で生きていきたいプルさわです。

本日は個人的に前々から気になっていた、株式会社を動かす影の権力者がいるのかどうかを調べてみたいと思います。

続きを読む

シンガポール渡航で強制送還の危機に瀕した話

学会発表をするためにシンガポールに行こうとした時の話です。
結論は「パスポートの有効期限は確認しようね」という話なので、以下の文章は暇な人だけ読んでください…。
 

楽しいと噂のpixivへインターンに行ってきた

こんにちはプルさわです。

久々に記事を書いたかと思えばそこそこ真面目な記事です。

このブログでこんな真面目な記事を書くことになるとは…!

 

さて、今回のインターンは参加者が結構いて「こんなことしました!」みたいな記事は他の方が書いてるみたいなので、私はインターンを通して思った雑多なことをまとめてみようかと思います。

 

誰向けの記事か

どこかインターンに参加したいと思ってる人

pixivのことが気になってる人

 

目次

  1. 今まで参加したインターンなど
  2. pixivのインターン
  3. pixivの雰囲気(pixivはエンジニアにとって天国か否か?)
  4. 全体的な感想

 

1. 今まで参加したインターン

最近になって「インターンめちゃくちゃ楽しい!」ということに気づいて数社ほどインターンに参加しておりました。

参加していたインターンは主に

  • データ解析系
    会社のデータベースいじって、施策考えるような内容。
    だいたいログデータを使う。
  • エンジニア系
    数週間の間にこんなもの作ってねと言われて、ひいひい言いながら作る

といった2種類の系統です。

今回のpixivのインターンはデータ解析系とエンジニア系のミックス(どちらかというとエンジニア系)になると思います。

 

2. pixivのインターン

概要

ssl.pixiv.net

上記リンクをご参照ください。

 

インターン発見から応募まで

以前から周りの人に「pixivはいいゾォ」という話を聞いていたので、
少し気になっていました。

ある日、よだれ垂らしながらTwitterをしていたら、pixivインターンについてのツイートが流れてきたので「とりあえず応募してみるか」という軽い気持ちで応募してみました。

なんか今まで作ったものやgithubのアカウント等を送り、
面接をしたように記憶しています。

 

面接に行ったとき、オフィスのヤバさ*1にびっくりしてワクワク度が向上しました。

pixivのオフィスは一度行ってみることをお勧めします!

 

お題とか実際の業務内容

というわけで、日々布団にくるまってゴロゴロしていたら
インターン当日になりました。

 

初日にチームビルディングが行われ(行われていて)、
複数チームに分かれて課題をすることに。

自分は3人チームのエンジニア(技術職)として参加。

面白かったのが、チーム内に総合職の人がいたということでした。

メンターさんにも総合職が入っており、実務視点で開発ができたところがとても良い点かと思われます。

これは他のインターンでなかなかないポイントだと思います。

 

内容は簡単に言うとCV率をごにょごにょするという内容でした。(割愛)

www.okuramkt.com

 

CV率向上だとざっくりしすぎなので、もうちょっと具体的に言うと

  • gitを使ったチーム開発(苦手 of 苦手)
  • 総合職との企画のすり合わせ
  • 自動メール送信システムの構築
  • PHP! PHP! PHP!(チームによって言語はまちまちでした)*2

といったところでしょうか。

詳しくは以下のブログで…。

medium.com

 

業務以外のこと

お弁当がいちいち美味しかった。
なんかよくわからないですが、お弁当が美味しかったです。

f:id:oscillograph:20160314121617j:plain


最終日はオシュシ食べれて幸せでした。

f:id:oscillograph:20160314192023j:plain

 

それから、フリードリンクがとてもよかったです。

毎日からだ巡茶を飲みまくって、体が巡りまくるのを感じていました。

コカ・コーラ からだ巡茶 410ml×24本

コカ・コーラ からだ巡茶 410ml×24本

 

 

また、業務の間にちょこちょこ講義が入って、pixivでの開発やセキュリティーの取り組み、メルマガの書き方などなど良い知識をたくさん吸収できたかと思います。 

 

3. pixivの雰囲気(pixivはエンジニアにとって天国か否か?)

結論から言うと、エンジニアエンジニアしてる人にとっては天国だと思います。

ぶっちゃけ「僕が考えた最強の開発(働く)環境」みたいなオフィスでビビりました。

以下、自分が良いなと思った点

  • 良い人が多い
  • 雰囲気が自由
  • 総合職との距離が近い
  • 自社サービスを愛している人が多い

「良い人が多い」ということについて以下ちょっと説明。

「良い人」の定義は結構難しいのですが、
簡単に言うと「技術力があって優しい人」です。
楽しそうに技術の話をしているので、こっちまで楽しくなってきますね。

そしてズバ抜けた技術力を持ってる人は良い意味でちょっと変わってる人が多いという経験則があるのですが、pixivにはそんな良い意味でちょっと変わってる人がたくさんいました。

この辺は人事の方の人を見る力が結構良い感じに作用しているのかなと思います。

 

4. 全体的な感想

個人的な反省

もう少し、git(github)についてもっと勉強しておくべきだったと思います。
github使いこなせないものはエンジニアにあらずという感じがするので、今後も使いこなせるようにしとくべきかなと思います。

それから、インターン期間中は100%インターンに力を注げるようにしておくべきだったかと。
色々と用事が立て込んでいたので、100%力を注げなかったのがちょっと心残りです。
もし参加したい方がいればまるっと予定を空けておくことをおすすめします。

 

面白かったこと

総合職として参加してる人に「エンジニアとの価値観の違いに驚いた。」と言われたことが面白かったです。正直自分はエンジニアというほどエンジニアに染まってないと思っていたのですが、ちょっと染まりかけているのかもしれません。

キンプリをおすすめされました。働くためにはプリズムの輝きが必要みたいです。

 

まとめ

参加者含め社員さんが「良い人」ばかりだったのが良かったと思います。
たった5日でしたが、実務の勉強も含めて多くの気づきがありました。

  • オフィス環境が良いとこんなにも働きやすい
  • 優しい人が多いと安心感がある
  • 違う職種の人と仕事を進めていくことの難しさ楽しさ

 インターン面白かったんで、迷ってたらとりあえず参加してみると良いと思います。

 

 

 

 

 

*1:「pixiv オフィス 」で画像検索してみてください。

*2:RubyとかC++とか色々ありました。

図書館総合展に行ってきた。

こんばんは、プルさわです。

本当は「日本のAVはなぜモザイクが必要なのか」という表現の自由と検閲に関する内容にしようと思ったのですが、書いてる途中で俺の趣味がばれそうになったので無難な内容に書きなおしてたらギリギリになってしまいました。*1

ということで、図書館総合展で出展しようかなと思ってる人の背中を押すような記事を書くことにしました。

この記事はklis Advent Calendar 2015 - Adventarの22日目です。

www.adventar.org

 このAdvent Calenderは知識情報・図書館学類(klis)という、とある大学の学類(いわゆる学科)に関係する記事を書こう、という趣旨のようです。

拙者も昔、在籍していたのでなんか書こうと思います。

ということで、記事スタートです。

 

忙しい人向け、この記事の内容

簡単にまとめると、

という感じです。

 

図書館総合展とは?

www.libraryfair.jp

図書館総合展は図書館の関係者・関係業者などが一同に集まるイベントです。
個人的には東京ゲームショウの図書館バージョンみたいなものと思ってます。

klisの学生は図書館LOVERが多いので、参加者が多いのです。

今回2回目の参加ですが、結構活気のあるイベントです。

  • 図書館大好き!
  • 図書館について学んでるけど、最近図書館への愛が薄れている
  • 図書館ちょと興味あります
  • 出版と図書館の関係に知りたい

といった方々におすすめでございます。

 

とりあえず図書館総合展に行ってみよう

図書館総合展参加による一番の収穫は図書館に関する人や技術、商品といった様々なものとの出会いだと思う訳ですが、これは何度行ってもそう思います。

始めて図書館総合展に行ったときは「図書館業界がこんなに活気あるとは何事だ!」と思いました。びっくりしました。

図書館の活気をかなり感じることができる空間となっています。

 

とにかく、図書館業界で働いていこうかなと考えている人は一度見学に行くと良いでしょう。

さらに関連企業による出展ブースもたくさんあるので、図書館(情報)学を学ぶ学生にとっては隠れ就職活動の場として有効活用できます。

 

出展せよ、さすれば与えられん

はい。この記事のメインテーマです。

図書館総合展には企業の出典ブース以外にも研究やその他の活動などを発表することができるポスター発表ブースがあります。

このブース、出展料が比較的低価格と貧乏人にも優しい設定になっています。

ということで、ちょっと手をつけている自由研究があったので、その内容に関して自費でポスター発表をしてきました。*2

内容についてはまたの機会にでも。

 

発表したら色々といいことがあったので、その話でもしようかと思います。

 

色々な人と会える

いくつか驚いたことはあったのですが、ひとつは参加者層の厚さです。

お話した人には

  • ばりばりのエンジニア
  • 出版の営業マン
  • 大手メーカーのエライ人
  • 図書館員(司書さん)
  • 研究者
  • 女子大学生
  • 女子高校生

といった方がいらっしゃいました。名刺もいっぱい交換できます。

図書館に関係する色々に人に会えるというのがいいところでありますね。

出展側としては予想以上にフィードバックが多くて大変勉強になりました。

現場の声を聞きながら、専門家の声も聞きながら、女子高生の声も聞けます。

 

発表はモチベーションのアップにつながる

これは図書館総合展に限った話ではないですが、何かしらのプロジェクトを抱えている人は定期的に発表しましょう。

ここのポスター発表は事前審査がないので、結構ショボクテも文句言われません、たぶん。いや、クオリティーを高めましょう。

ということで、とりあえず発表してみて、周りの反応を見るのもいいかと思います。

 

自分の場合は、私の研究内容に興味を持ってくれている人が以外と多かったのが嬉しかったです。

  • 「君と話せるのを楽しみにしていた。」⇒事前にホームページでチェックしていたらしい
  • 現場の人「このシステム、ぜひ実現させてくれ。」
  • 研究者「かくかくしかじかしたら良い精度出ると思うよ。」
  • 現場の人「ここは図書館の利用者も困るからね~。」
  • 会社のエライ人「うちの会社で働かない?

 

 

などなど。

配布資料についても、なんかめっちゃ余ったら悲しいから、そんなに多く刷って行かなかったのですが完売してやる気がアップしました。

まとめ

ということで、図書館総合展は面白いので参加してみることをおすすめします。

来年も参加する予定なので、図書館総合展で会いましょう!

*1:最近は着エロと百合とロシア人が好きです。

*2:稼いだお金は研究資金に突っ込みましょう

淫夢語でプログラミング

こんにちは。プルさわです。

最近私の周りに淫夢好きなよく分からない人が目に着くようになりました。たまげたなあ。
私は正直淫夢のことは良くわからないのですが、最近ハマってる変なプログラミング言語シリーズと絡めてなんかしてみようということで、今回新しいプログラミング言語を作ってみました。

ということで、できたのがIceTea(アイスティー)という言語です。

Rubyで作りました。

命令とか使い方とか

とは言っても内容はBrainf_ckに毛が生えた程度のものなので、とりあえず知らない人は↓の記事でも読んでいただけると良いかと思います。

Brainfuck - Wikipedia

以下のように使ってください。

命令文字列 機能
n回だよ、n回あくしろよ ポインタの指す値をn増やす
n回だよ、n回お手だよ ポインタの指す値をn減らす
なんか足んねえよなぁもうn回鳴いてみろ ポインタをn進める
この野郎もうn回鳴いてみろ ポインタをn戻す
こ↑こ↓ ポインタの指す値をUTF-8のコードとみなして出力する
(小学生並みの感想) 1文字入力を読み込んで、ポインタの指す値に設定します
ハイ、よーいスタート ポインタの指す値が0以外なら何もせず、0ならループを終了して次へ進む。
2人は幸せなキスをして終了 ループの終了を意味します。この位置まで来ると、対応するループの先頭へ戻ります

Hello, World!

サンプルプログラムです。
以下のプログラムを実行すると「Hello, World!」が出力されます。

9回だよ、9回あくしろよ

ハイ、よーいスタート
  なんか足んねえよなぁもう1回鳴いてみろ
  8回だよ、8回あくしろよ
  なんか足んねえよなぁもう1回鳴いてみろ
  11回だよ、11回あくしろよ
  なんか足んねえよなぁもう1回鳴いてみろ
  5回だよ、5回あくしろよ
  この野郎もう3回鳴いてみろ
  1回だよ、1回お手だよ
2人は幸せなキスをして終了

なんか足んねえよなぁもう1回鳴いてみろ こ↑こ↓
なんか足んねえよなぁもう1回鳴いてみろ
2回だよ、2回あくしろよ こ↑こ↓
7回だよ、7回あくしろよ こ↑こ↓ こ↑こ↓
3回だよ、3回あくしろよ こ↑こ↓
なんか足んねえよなぁもう1回鳴いてみろ
1回だよ、1回お手だよ こ↑こ↓
12回だよ、12回お手だよ こ↑こ↓
この野郎もう1回鳴いてみろ
8回だよ、8回あくしろよ こ↑こ↓
8回だよ、8回お手だよ こ↑こ↓
3回だよ、3回あくしろよ こ↑こ↓
6回だよ、6回お手だよ こ↑こ↓
8回だよ、8回お手だよ こ↑こ↓
なんか足んねえよなぁもう1回鳴いてみろ
1回だよ、1回あくしろよ こ↑こ↓

その他実装とかの細かい話

  • ポインタの移動とポインタの指す値の増減を数値でできるようにしました
  • 日本語を使っているのでもちろんUTF-8です
  • 数値部分は全角でも半角でもオッケイです
  • メモリの増減・ポインタの移動に関する数値は正規表現で抜き出してます
  • ポインタ系の命令では、2回数値を記述しますが同じだろうが違おうが始めにでてきた方の数値を使うようにしています
  • Regexp#unionなんていう便利なメソッドがあったので、それを使って命令をまとめました

参考資料(偉大な先人達)

以下の本はBrainf_ckの実装で大変お世話になりました。
それから、Rubyで言語実装系を作る際にとても勉強になります。


以下のサイトはBrainf_ckを元に変な言語を作った人たちです。

brainf*ckでジョジョ言語 - toyoshiの日記

おっぱい言語

masarakki/nyaruko_lang · GitHub



ソースコード

class Icetea
  # エラークラスを継承する
  class ProgramError < StandardError; end
  
  ORDERS = [
    /\d+回だよ、\d+回あくしろよ/,
    /\d+回だよ、\d+回お手だよ/,
    /なんか足んねえよなぁもう\d+回鳴いてみろ/,
    /この野郎もう\d+回鳴いてみろ/,
    /こ↑こ↓/,
    /\(小学生並みの感想\)/,
    /ハイ、よーいスタート/,
    /2人は幸せなキスをして終了/
  ]

  def initialize(src)
    # トークンを入れる配列
    @tokens = src.scan(Regexp.union(ORDERS))
    @jumps = analyze_jumps(@tokens)
  end

  # 実行
  def run
    # テープを表した配列
    tape = Array.new()

    # 何番目の命令を実行しているか
    pc = 0
    
    # ポインタが現在どこを指しているか
    cur = 0
    
    while pc < @tokens.size

      case @tokens[pc]
      when /(\d+)回だよ、\d+回あくしろよ/
        tape[cur] = tape[cur].to_i + $1.to_i
      when /(\d+)回だよ、\d+回お手だよ/
        tape[cur] = tape[cur].to_i - $1.to_i
      when /なんか足んねえよなぁもう(\d+)回鳴いてみろ/
        cur += $1.to_i
      when /この野郎もう(\d+)回鳴いてみろ/
        cur -= $1.to_i
        raise ProgramError, "You can't move lefft from start point" if cur < 0
      when /ハイ、よーいスタート/
        pc = @jumps[pc] if tape[cur].to_i == 0
      when /2人は幸せなキスをして終了/
        pc = @jumps[pc] if tape[cur].to_i != 0
      when /こ↑こ↓/
        n = tape[cur].to_i
        print n.chr
      when /\(小学生並みの感想\)/
        tape[cur] = $stdin.getc.ord
      end
      pc += 1
    end
  end

  private
  # ジャンプ命令を解析する
  def analyze_jumps(tokens)
    jumps = {}
    starts =[]
    startword = "ハイ、よーいスタート"
    endword = "2人は幸せなキスをして終了"

    tokens.each_with_index do |e, i|
      if e == startword
        starts << i
      elsif e == endword
        raise ProgramError, "total number of #{startword} is more than #{endword}" if starts.empty?
        from = starts.pop
        to = i
        jumps[from] = to
        jumps[to] = from
      end
    end
    raise ProgramError, "total number of #{endword} is more than #{startword}" unless starts.empty?
    return jumps
  end
end

begin 
  Icetea.new(ARGF.read).run
rescue Icetea::ProgramError => e
  puts e.message
end


エンジョイ!プログラミングライフ!

プログラミングについて何も知らない人間がIT企業の学生インターンに参加できるようになるまで

こんにちは。

内容はタイトルの通りですが、とりあえずこの記事の目的としては以下のことを目指しています。

目的:この記事を読んだ人が独学でプログラミング技術を身に着けて思い描いたものを作れるようになる

 

「今からプログラミングの勉強を始めたいけど、何からやってどこに向かえばいいのか分からない!」

という人の助けになるようなものができれば幸いです。

 

始めになぜこんな記事を書こうかと思ったかを書いているので、そんなもの興味ないという人は適せん飛ばしていただければ良いかなと思います。

(書き終わってから気づいたのですが結構本の紹介が多いです。)

この記事の構成は以下の感じです。

  1. 出会い:プログラミングになれる
  2. 1年目:プログラミングにモヤモヤする
  3. 2年目:数学を学ぶ
  4. 3年目:バイリンガルトリリンガルプログラマー
  5. 4年目:プログラミングで色々できる

つまりプログラミング初めて4年くらいでちょいちょいお金もらえるくらいプログラミング書けるようになるよってことです。

しかし実際は4年もかかりません。

自分は学生生活で遊びまくっていたので、上記の1年は1か月くらいで学べる内容だと思います。

つまり、

 出会い→1か月目→2か月目→3か月目→4か月目

と読み替えていただければ良いかと思います。

試行錯誤しながらウネウネしたので4年もかかってしまった訳で、ヤル気あれば1~4か月くらいで下記の内容をさらうことができると思います。

 

以下の説明では様々な本が登場しますが、「これを読め」という訳ではなく私はこれを読んだというだけで、Webの情報でも良いですし、図書館で似た本を借りて読むとかも良いと思います。その辺は柔軟に。

 

なぜこんな記事を書いたか

先日、某IT企業のインターンに参加してきました。

インターンの内容はお口チャックされてしまったのですが、とても良い経験ができたので、この経験について何か記事を書きたいなと思っていたところ以下のような記事を見つけました。

ちらちら見ていたのですが、どのキャンプも料金結構高いなぁと思いました。
もちろん人に教えてもらうことによって身に着く良いことはたくさんありますが、独学で学ぶことによって身に着く良いこともたくさんあります。

ということで、今までのプログラミング人生を振り返りつつ、他の人の役に立つ記事でも書こうと思い立ってみました。

 

以下本編。

 

プログラミングについて何も知らない人間が
IT企業の
学生インターンに参加できるようになるまで

 

出会い:プログラミングなんてできるのはスーパーハッカーだけでしょ?

冗談抜きでこう思っていました。

私のプログラミングとの初めての出会いは大学の授業でした。(いきなり授業の話かよという感じですが。*1
当時は「プログラミングなんか絶対できんから、予習とかしないと絶対に卒業できなくなる」という恐怖心から、与えられた参考書を事前に読み進めていました。 

ということで、以下の本が人生で初めて出会ったプログラミング技術書です。

 

たのしいRuby 第4版
 

 

私のプログラミング人生はここから(=『たのしいRuby』)始まったと言っても過言ではありません。

そして、この本の内容を全て理解したときに初心者脱出と言っても過言ではないかと思います。

授業で「なんでRubyからやるんだ?」とか愚痴ってた学生もいましたが、今になって思うとRubyから始めたのが非常に良かったのだと思います

 

プログラミング最初の一歩は、こうした本を手元に置いてパソコンで実行しながら「あ、なんか動くな。」という感覚をつかむところから始まります。

最初は、やってることの意味とか仕組みとか全然分からず、魔術的な言葉がたくさん出てきて頭沸騰しながら読むことになると思います。

 

こうしてなんとか最初の数ページを読み、それをパソコンで実行できたとき、プログラマが一番初めに習得するであろう技術を取得できます。

それはパソコン画面に自分の好きな言葉を表示させるという技術です。*2

こうして、スーパーハッカーへと続いていく(?)階段の一段目に立つことができます。*3

 

この本で学ぶべきこと(=プログラミングの最初の基礎)は

  1. 変数とは何か
  2. 文字列と数値の違い
  3. 配列とハッシュ
  4. メソッドとは何か
  5. 各種演算(真偽の計算はとっつきにくいけど重要)
  6. 条件判断(if文とか)
  7. 繰り返し(while文とか)
  8. テキストデータの読み込み方法

の8つくらいかなと思います。
というか正直、当時はここまでしか分かりませんでした。

そんな訳で、基本中の基本を学んだところで次のステップに移ります。

 

1年目:プログラミングは何か気持ち悪い/Webって何?

考え出すとモヤモヤするプログラミング

プログラミングを学び始めると気持ち悪いと思うことが多いのです。

初心者の場合、とりあえず動くけど何がどうなっているのかさっぱり分からないことがキモいポイントかと思います。

私の場合、原因は「パソコンについて実は意外と知らないこと」にありました。

プログラミングをはじめたい、もしくは始める人というのは意外と「自分は普通の人よりパソコンに詳しい」という思い込みがある場合が多いのではないかと思います。

実はプログラミングを始めるほどにはパソコンに詳しくないという場合が多いのではないでしょうか。

そこで、そのプログラミングに対するモヤモヤした気持ち悪さをじゃっかん解消してくれるのが以下の1冊です。

コンピュータはなぜ動くのか?知っておきたいハードウエア&ソフトウエアの基礎知識?

コンピュータはなぜ動くのか?知っておきたいハードウエア&ソフトウエアの基礎知識?

 

これを一通り読み込むとプログラミングの基礎となるパソコンがどんなものかということがざっくり分かります。

これを踏まえた上で、たのしいRubyの内容を読み返すと結構分かってきます。

クラスって何だよ!

そんでもって、たのしいRubyで幾度となく登場するアヤシイ単語「クラス」。
この「クラス」を理解するためには様々なプログラミング言語で登場する「オブジェクト指向」という結構重要な概念を理解しなくてはならないのですが、これがまったくもって分からかったのでした。

そんなときに、以下の本で雰囲気をつかむことができました。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

 

 一通り読むと「クラスという単語の意味」に加えて周辺のありがたい知識も身についてしまいます。

こうして、モヤモヤを解消しながらRubyという言語を知りどんどん仲良くなっていくのです。

 

個人でWebページを作れる!(脇道だけど後々重要) 

プログラミングについてちょっとできるようになると、レンタルサーバーなどを借りて自身のWebページなんかを作ってみたくなるわけです。*4

そのときに学ばなくてはならないのがHTMLとCSSです。

基礎は以下の本で学びました。

HTMLとCSSで基礎から学ぶWebデザイン

HTMLとCSSで基礎から学ぶWebデザイン

 

 実際にホームページを作って公開してみると色々と勉強になります。

 

また、ついでにインターネットの仕組みも学びたいと思い以下の本を読みながらフムフム言ってました。

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

 

 

2年目:プログラミングって数学!?

さて、ここまでで『たのしいRuby』の内容を一通り理解できるようになってRuby結構使えるけど?」という状態になります。 

Rubyについてもっと学びたいという人は『パーフェクトRuby』なんかを読むのがいいと思います。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

 

 

英語がOKなら以下の本が超良いです。

Eloquent Ruby (Addison-Wesley Professional Ruby Series)

Eloquent Ruby (Addison-Wesley Professional Ruby Series)

 

 

上記の本を読まなくてもここまで来ると結構自信が付きます。

そして、「Ruby結構できるで?」状態のときに出会ったのが『数学ガール 乱択アルゴリズム』です。

数学ガール 乱択アルゴリズム (数学ガールシリーズ 4)

数学ガール 乱択アルゴリズム (数学ガールシリーズ 4)

 

この本を読むとプログラミングの奥深い世界がチラっと垣間見えます。

この本を読むことで、アルゴリズム(=ひとまず「プログラムの内容を普段使う言葉で表したもの」としていただければ良いかと思います。)という言葉・概念と出会います。
数学ガール』で実際に出てくるアルゴリズムRubyで再現してみたりするととても実力が付きます。

そして、このアルゴリズムって何なのかを知ることによって、プログラムと数学との関連性が見えてきます。

アルゴリズムに関する数学の知識は、プログラミングで高度な処理を行いたいと思った場合に必須の知識になります。

ここらへんで少し実際のプログラムから離れて、

など机上の勉強を挟むと良いかと思います。

この辺の勉強に関する本は挙げるときりがないので、上記の単語でググったりしながら勉強していただければと思います。

以下のサイトなどが参考になると思います。

どこまで学べば良いかと言うと、「自分が完全にギブアップするまで」です。*5

数学の世界は結構難しいので、ある程度学んだらまたプログラミングの世界に戻って来ましょう。

 

3年目:他のプログラミング言語は方言みたいなもの

Rubyの知識を深める

数学を学んで(学びながらでも)さらにRubyの扱いに慣れていくことになります。

私はここらへんで、データベースとかも学んでおりました。
データベースの知識はプログラミングにとって必須だと思いますので、どこかで学びましょう。今です。

おすすめは『マンガでわかるデータベース』で一通り概要を把握して、『作りながら学ぶRuby入門』に沿ってRubyで実際に作ってみるということです。

マンガでわかるデータベース

マンガでわかるデータベース

 

 

作りながら学ぶRuby入門 第2版

作りながら学ぶRuby入門 第2版

 

 

ここまでくるとプログラミングを用いてそれなりに立派な何かを作る力が付いています。

そうすると実際に何かを作ってみるのが良いと思います。

プログラミングで何か作る

実際の処理に対して、プログラミング言語には「向き・不向き・できない」があります。

ここで3つくらいの道に分かれることになります。

どれかの道に進んだ後で、別の道を行くというのも可能ですし、そのまま別の道をずっと行くこともあるのかなと思います。

 

1つはデスクトップアプリケーションの道です。

Rubyはデスクトップアプリケーションを作るのに不向きだと思います。(できなくはないです)
Windowsであれば、確実にC#を学ぶことになります。Macのことはしりません。*6

自分は以下の2冊で勉強しました。

やさしいC# (やさしいシリーズ)

やさしいC# (やさしいシリーズ)

 

 

改訂3版 パーフェクトC# (PERFECT SERIES 1)

改訂3版 パーフェクトC# (PERFECT SERIES 1)

 

 

 

2つめはWebアプリケーションの道です。

いわゆるCGI(≒サーバーでプログラムを動かす仕組み)を学んでいくことになります。
以下のWebサイトで学ぶのがとても良いかと思います。

Rubyist Magazine - Ruby ビギナーのための CGI 入門 【第 1 回】 初めての CGI プログラム

ここで、レンタルサーバーなどを借りて、実際に公開してみるととても勉強になります。
はじめは、ロリポップ や さくらのレンタルサーバー なんかがおすすめです。

 

そして、様々な言語でCGIのアプリケーションを作ってみましょう。3つの言語くらいに触れましょう。

おすすめはPHPPython(、Perl)です。

ここまで来ると、入門書とかは逆にうっとうしく感じるようになっているかと思います。
あとここまで来ると、他の言語についてはWebで検索しながらプログラミングできるようになっていると思いますので、本に頼ることもあまりなくなってくるかと思います。

PHP+MySQLマスターブック

PHP+MySQLマスターブック

 

 

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

 

 

 

3つめはスマホアプリケーションの道です。

これは割愛。とりあえず気になる人は「android アプリ 開発 入門」とかで検索すれば良いと思います。*7

 

 

こうして他の言語に触れると、「あれ?Rubyで使ってた知識って結構使えね?」という状態になります。

これがポイントです。

様々なプログラミング言語間には、「英語と日本語」ほどの壁はなく、「東京弁と関西弁」くらいの差があるんだということが実感できればかなりレベルアップします。

つまり、用途に合わせて強い武器を選ぶことができるようになるのです。*8

 

アルゴリズムについて

ここまで来ると前のところで出てきたアルゴリズムが効力を発揮します。

このレベルになると同じことをするのに様々な言語を使うことができるということが分かり、アルゴリズムを元に使用するプログラミング言語を選択することができるようになります。

そうすると、「こんなことをしたい!」という抽象的な処理を実際のプログラムに落とし込むことができるようになってくるのです。

私は、ここまで来るのが長かった…。

 

4年目:自分は何をやりたいのか

さて、このレベルになると、プログラミングで何か作るという点ではだいたいのことができるようになっています。

なので、何をしたいか、何を作りたいか、ということをはっきりさせるのが重要なのではないかなと思います。

ここからは自分が経験した分野でどんなものがあるのかというのを少し紹介する形にしたいと思います。

こうした分野に目を向けて、それらの技術を組み合わせることで素敵なアプリケーションが開発できると思います。(え?俺が何か作ったかって?え?><)

データマイニング

大量のデータから何か有意義なことを発見しようという分野。

最近ビッグデータとかで流行ってますね。Python使えればだいたいのことはできます。

が、R(という言語)も学んでおきたいところ。

自然言語処理

めちゃくちゃ面白い分野です。
機械に言葉を理解させようという世界感です。

簡単な例だと、迷惑メールの振り分けとか しゃべってコンシェル とかです。

以下の本がおすすめ。

自然言語処理の基礎

自然言語処理の基礎

 

 

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)

 

 

画像処理・認識

人間のように機械に画像を理解させようという感じです。

これまためちゃくちゃ面白い。

紙の文書を読み込んで、PCで扱えるテキストに変換したり、画像中の細胞の数を自動で数えたりできます。
あとは、画像にA君が映ってますとかを自動で判定できるようになります。

デジタル画像処理 (Rで学ぶデータサイエンス 11)

デジタル画像処理 (Rで学ぶデータサイエンス 11)

 

 

情報検索

早い話がgoogleみたいなサイトを作ろうというものです。
ユーザがデータにアクセスするのを支援したりします。

レコメンド

Amazonのこの本を買っている人はこんな本も買っていますというアレです。

最短経路問題

これまたものすごく奥が深い。

電車とかの乗り換えシステムに使われています。

以下の本はマジで面白いです。

巡回セールスマン問題への招待 (シリーズ「現代人の数理」)

巡回セールスマン問題への招待 (シリーズ「現代人の数理」)

 

 

その他

たくさんありますが、サーバー関連やマイコンなどのハードウェア関連も学ぶと良いでしょう。今回の記事ではあまり触れていません。

マイコンなど扱うことによって得られる、プログラミングの世界が実世界に影響を与えるという体験はとてもエキサイティングです。

CentOSなどを扱ってみると、OSの世界も広がって楽しいです。

 

まとめ(最後に)

以下の通りに学びました。これからプログラミングを始めたい人は参考にしていただくと良いかもしれません。

  1. Rubyやる(別の言語でも良いと思います。)
  2. パソコンについて知る
  3. インターネットについて知る
  4. Rubyを一通りできるようになる(こちらも同様)
  5. アルゴリズムを学ぶ(周辺の数学も学ぶ)
  6. 他のプログラミング言語に手を出す
  7. 自分が何を作りたいかを考える

まあ、実際の私のプログラミング学習はもっとウネウネ曲がりくねったものなのですが、ちょこっと整理して紹介してみました。

 

では、最後にハッカー魂に火を付ける最高の2冊を紹介して終わりにしたいと思います。

ハッカーと画家 コンピュータ時代の創造者たち

ハッカーと画家 コンピュータ時代の創造者たち

 

 

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

 

 

 

補足

ホントはRとかMathematicaMATLABなんかについても書きたかったのですが、思いのほか記事が長くなってしまったのでデータ解析系の言語はまたの機会に…。

また、C言語Javaなど他の言語については記事で触れていないですが、機会があれば学んだ方がいいと思います。

個人的にはLispが変な感じで面白かったです。(詳しくはないけれど。)

*1:大学の専攻は情報科学ではないので、プログラミングに関しての専門教育は受けていません。

*2:Hello World!

*3:たぶん著名なスーパーハッカー達もここから始めたと思います!想像ですが!笑

*4:お金がない人は FC2ホームページ - 無料ホームページスペース とか無料でできておすすめです。

*5:客観的な目標としては、『パターン認識機械学習』という本がギリギリ読めるくらいかなと思います。

*6:宗教上の理由です。

*7:iOSについては宗教上の()

*8:だいぶ毛色の違う宣言型の言語も学ぶと良いかもしれません。これについてはググってください。