読者です 読者をやめる 読者になる 読者になる

paiza開発日誌

paiza(https://paiza.jp)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

その職務経歴書で、面接官が会いたくなると思いますか?選考で落とされる書類の共通点とは

ITエンジニアのキャリア ITエンジニアの転職

f:id:paiza:20170117203837j:plain
Photo by César Santiago Molina
f:id:paiza:20140916135428p:plainこんにちは、谷口です。

paizaでは事前の書類選考なしで求人応募ができます。そのせいか、スキルはあっても「書類選考をなかなか通過できないのでpaizaから応募したくて…」という方にもよくお会いします。

そういった方に、paizaから応募を始める前に提出していた職務経歴書を見せてもらうと、落ちる職務経歴書には共通のパターンがあることがわかります。

書類選考がある場合、「書類を書くの苦手だし…面接で話せばいいでしょ」と思って適当に書いてしまっては、そこで落選が決まってしまいます

今回は、書類選考を実施している企業へのヒアリングと、実際に応募者が提出していた職務経歴書を見てわかった「落ちる職務経歴書」と「受かる職務経歴書」の違いをお話しします。

書類作成が苦手な方の参考になればと思います。

■落ちる職務経歴書と受かる職務経歴書の違い

f:id:paiza:20170117204119j:plain
Photo by liz west

◆業務経歴・スキル編

◇具体的な実績やスキルがわかりづらい

【落ちる例】

3年間、RubyWebサービスを開発をしてきた経験があります。
××年の前期、〇〇プロジェクトにてMVP・敢闘賞を受賞しました。

この場合はRubyを3年使ってたぐらいしか情報がなく、具体的にどんな開発業務に携わっていたのか、どんな経験やスキルがあるのかわかりませんよね。

また、企業独自の評価システムや主体的な評価のみを書いても、外部の人間にとってそのすごさや具体的な業績を理解することはできません。


【受かる例】

女性向けポータルサイトを運営している〇〇社で、20代の女性向けECサービスの開発チームに3年間所属。
サービスの立ち上げから開発・運用までを経験しました。
主にフロントエンドの開発を担当し、サーバサイドチームとの折衝や数値分析にも携わっていました。 
使用言語:RubyJavaScriptR言語……
使用フレームワークRuby on RailsjQuery……
使用管理ツール:GithubRedmine……

どんな経験とスキルがあるのか、何ができるのかが具体的にわかりやすくなっています。

また使用経験のある開発環境だけでなく、どんな会社の何の事業において、どこに所属してどんな立ち位置で何の業務を担当してきたか……といったことまで書けていれば、きちんとビジネス的な視点を持って仕事できる人であるとわかります。

さらに「自分が企画した××機能の追加により、ユーザーの購入ページへの遷移率が前年度平均〇%から△%まで向上した」等、具体的な数値がある場合は、プラスして書いておくとよいでしょう。誰が読んでも実績がわかりやすくなります。

◇ブランクや短期間での転職多数など、マイナスの経歴についてスルー

【落ちる例】

経歴内に一年以上のブランクがあったり、短期間での転職を繰り返していたりするが特に触れずにスルー

職務経歴書でその人の本質すべてを知ることは、もちろん不可能です。しかし、長期のブランクや短期での転職を繰り返している人は、「スキルは大丈夫?」「うちに入ってもすぐに辞めるのでは?」という懸念を抱かれてしまう可能性が高いです。


【受かる例】

〇年×月に体調を崩し療養のため退職(現在は回復)。療養中は独学で〇〇を学習し……

〇年~〇年の時期は、フリーランスとして友人から仕事を請け負っていました。

学校に通ったり、療養や介護の必要があったりしてキャリアを中断しなければならなかった時期がある場合は、その旨を正直に明記しておいた方がよいでしょう。

あまり正当な理由がなく「実はニートだった期間があるのですが…」「年齢の割に転職回数が多いのですが…」という人もときどきいらっしゃいます。

その場合も、「当時はこう考えていたので安易に退職・転職をしたが、結果としてブランクを生み、転職回数を増やすことになってしまい反省している。今後はもっとこうなりたいと考え、こんな勉強をしている……」というように、「この時期のことは問題だったと認識できています、今は考えが変わっています」といったフォローが入れてあれば、マイナスイメージを減らすことができます。

◆自己PR編

◇応募先の業務内容やポジションに合っていないアピールばかり

【落ちる例】

(自社サービス開発企業でWebサービスを開発するフロントエンドエンジニア求人への応募なのに)私はこれまで大手受託開発企業でマネジメント職に〇年間携わり、お客様との折衝能力や高いマネジメントスキルを身につけ……

B2Bのビジネスシステムを作っている企業への応募なのに)私は昔からゲームが好きでゲーム開発事業への憧れが強く、ゲームに関する情報収集は欠かさず……

このように、応募した企業やポジションにそぐわないアピールポイントをびっちり書いている人は一定数います。

職務経歴書の中でも特に自己PRや志望動機といった項目は、応募先ごとに書き換える必要があると思ってください。使い回すと、書いてある内容と企業にズレが出ます。

また、フロントエンドエンジニア職への応募でマネジメントスキルをアピールし続けるような、想定業務や募集ポジションにそぐわないアピールも、「うちではそのスキルは活かせないので、別の会社へ行った方が……」と思われてしまいます。


【受かる例】

Webサービス開発経験はありませんが、前職でソーシャルゲーム開発をする中でユーザー対応や分析にも〇年間携わってきた経験は、貴社の××Webサービス運営業務でも活かせると考えております。

まずはズレたアピールをしてしまわないように求人票や企業のサイト等をきちんと読み込む必要があります。そして応募先が求めているスキルや人物像を把握した上で、その人物像と自分との接点を見つけることが重要です。

たとえ想定される業務と同様の開発経験がなかったとしても、「この経験やスキルは、このような点が貴社の業務でも役立てられると考えています」というような書き方をするとよいでしょう。

◇どうでもいい(応募先の業務に関連性のない)資格の羅列

【落ちる例】

TOEIC500点
漢字検定4級・世界遺産検定……

TOEICは650点以下なら書かない方がましです。

また、業務と関係ない資格やだいぶ昔に取得した級数が低すぎる資格なども、意図がわからないですしアピールにはならないので、書かない方がよいでしょう。


【受かる例】

〇年×月 高等学校教諭 一種免許状(数学) 取得
〇年×月 日商簿記検定 2級 合格
〇年×月 応用情報処理技術者試験 合格

もちろん資格はそれ自体を持ってさえいれば受かる、なければ落ちてしまうというものではありません。が、それなりに難易度の高い資格やビジネス系の資格は、直接開発業務に関係なかったとしても「継続的な学習や努力ができる人」という印象を持ってもらえる場合もありますので、書いておくとよいでしょう。

◇プライベートな取り組みについてまったく書いていない

経験のない分野の企業へ応募している場合、少なくともそれを補うための勉強をまったく何もやっていない人が通過することは難しいでしょう。「うちの業務で何を使っているか、どんなスキルが必要かもわかってないまま応募してきているのでは?」と思われます。

【受かる例】

Pythonを使った業務開発経験はありませんが、自分で公式のチュートリアルを進めつつ、〇〇アプリを自作し……

同種システムの開発経験やメイン言語の業務使用経験がなくても、そこをきちんと課題視して取り組めていれば、「この人なら業務経験がなくても問題なくキャッチアップできそう」だと思ってもらえます。

◆そもそも編

◇長すぎる

書類選考で1人の書類を見る時間は10秒からよほど長くても1分ほどで、NGと判断された応募者はどんどん落とされていきます。

長すぎるとそれだけでも目を通しきれませんし、「要所を把握してまとめる力のない人なんだな」と思われてNGとなってしまいます。

よほどキャリアを積んでいたとしても3枚、一般に20代~30代前半くらいの方であれば2枚がベストです。まとまらないようであれば、そもそもフォーマットや記入事項を見直しましょう。しっかり書くのはアピールできるポイントに絞り「このプロジェクトの話は、この応募先ではあまりアピールにならないな」と思う経歴などは簡略化する工夫をしてみてください。

◇誤記や詐称がある

故意ではなかったとしても、誤記があると人によっては「適当に書いてる?」と思われ、印象を悪くしかねません。書いたら書きっぱなしではなく、最低限見直すようにしてください。特に学歴や入社年月日・経験年数等の数字が間違っているのは問題です。

また、故意による詐称が発覚した場合はほとんどの企業でその時点で落選や内定取り消し、入社後であれば解雇となります。(ほとんどの企業は内定通知書や就業規則の中でその取り決めを記載しています)

場合によっては訴訟問題や軽犯罪法違反にも充分なり得ますので、詐称は絶対にやめましょう。

※paizaの職務経歴書・履歴書テンプレート

paizaでは職務経歴書や履歴書のテンプレートが無料でダウンロードできるようになっておりますので、ぜひご活用ください。

履歴書と職務経歴書、書き方のポイント | ITプログラマー・エンジニア転職のpaiza

■そもそも書類選考は必要なのか問題

f:id:paiza:20170117204231j:plain
Photo by Donnie Ray Jones
応募書類の書き方についてずっとお話してきましたが、そもそもエンジニアというのは、書類だけではそのスキルを判断できない職業です。

例えば2人のエンジニアの経歴に、同じ開発プロジェクトに同じ年数いたと書いてあったとしましょう。しかし、1人は特に勉強することもなくコピペのプログラミングや安定運用に携わっていただけ、1人はばりばり新機能のコーディングをして、プライベートでも競技プログラミングで好成績を残したり自作アプリを開発していたとしたら、とても同じ実力であるとは言えません。

スキルや適性が書類だけで判断できない職業の場合は、書類選考が無意味になってしまう場合もあります

paizaは、スキルチェック問題を解いて規定ランクを取得していれば、事前の書類選考はなしに応募企業と必ず面談ができるというサービスになっています。スキルチェックが書類選考の代わりになっているというわけです。

一方で、一部の企業ではいまだに「履歴書は手書きの方が良い」みたいなことを言う採用担当者の方もいます。ときどき「転職エージェントによる履歴書の書き方」のようなサイトですら「履歴書は手書きの方が評価される」と書いているところがあるくらいです。

エンジニアの普段の業務において手書きで何か公的な文字を書く機会や、それが業務に影響を及ぼすことがあるでしょうか?(これは今ではエンジニアだけに限ったことではないですが……)

募集企業側も、「手書きの履歴書の方が人間性が見えてよろしい、温もりが感じられる」などという考えは、本来であれば見直すべきだと思います。

■まとめ

書類選考を通過できれば、職務経歴書は「自分をスムーズに紹介し、アピールポイントを補強するために役立つツール」になり得ます。

ただ、実際はスキルがあるのにうまくアピールする文章を書けない人、やむを得ないブランクや複雑な経歴、また業務経験が浅いことなどがネックになり、スキルを見せる以前に足切りに合ってしまう場合も多くあります。

事情を説明するにしても、スキルを見せつけるにしても、まずは書類選考を通過する必要がある……というのは、転職を希望しているエンジニアにとっても負担の大きいことかと思います。

paizaでは書類選考がなく、プログラミングスキルチェック問題を解いて、規定ランクを獲得できていれば、応募した企業と必ず面談することができます。なかなか書類選考を通過できない方、書類作成の負担を減らしたい方、プログラミングスキルで評価されたい方、また転職意志がなくても「自分のプログラミングスキルがどのくらいなのかランクを知りたい」という方はぜひご利用ください。

paiza.jp




paizaではスキルのあるエンジニアがきちんと評価されるようにし、技術を追い続ける事が仕事につながるようにする事で、日本のITエンジニアの地位向上を図っていければと考えています。特にpaizaではWebサービス提供企業などでもとめられる、システム開発力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題を出題しています。

テストの結果によりS,A,B,C,D,Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp

初心者からのJavaScript開発入門!iTunesのJSONデータを使ってランキングサイトを作るチュートリアル大公開!

プログラミング学習 プログラミング初心者 開発ネタ Webサービス紹介

f:id:paiza:20170117152152j:plain
どうも、まさとらん(@0310lan)です。

今回は、JavaScriptJSONを使った「Webアプリ開発」に挑戦してみようと思います!


そこで、アップルが提供しているRSS Generator」からJSONデータを取得し、多彩なジャンルのランキングサイトを構築してみましょう!

RSS Generator

f:id:paiza:20170117152214j:plain
RSS Generator」という名前の通り、これはiTunes Storeで提供されているスマホアプリ、音楽、映画…などの最新情報をRSS形式で取得可能なURLを自動生成してくれるサービスです。


ただし、URLを少し変えるだけで「JSON(JSONP)データ」も取得できるようになっているので、このデータを読み込んでアプリや音楽などの最新ランキングを自動表示するサイトを作ってみたいと思います!

■必要なファイルを準備しよう!

それでは、最初に必要となるファイルを準備するところから始めましょう!

今回のランキングサイトは非常にシンプルなので、必要なファイルは「index.html」と「app.js」の2つだけです!


取得したJSONデータを「テーブル要素」でランキング順に表示するという単純なモノです。
f:id:paiza:20170117152237j:plain


まずは、「index.html」のbody内に、テーブル要素の枠組みだけを用意しておきます。

<!-- index.html -->


<body>


    <div class="container">


        <!-- ランキング表示用のテーブル要素を準備 -->
        <table id="ranking" class="table table-striped table-hover"></table>


    </div>
    
</body>

今回はJavaScriptにフォーカスを当てたいので、CSSに関しては軽量で汎用性の高いフレームワークSpectre.cssを読み込むだけにしておきましょう。(CSSフレームワークについてはコチラを参照

※上記HTML要素内のクラス名は、すべて「Spectre.css」で用意されているものだけを使っています。


次に「app.js」ですが、ひとまず以下のような内容で作っておきましょう!

// app.js


window.addEventListener('load', function() {


  // 最初に実行される処理を書く
  getAppList();


});




function getAppList() {


  // JSONデータを取得する処理を書く
  
}

HTMLを読み込んだ後、最初に実行される関数として「getAppList()」を作成しています。

この中に、「iTunes Store」のJSONデータを取得する処理を書いていくようにしたいと思います!

■「JSONデータ」が得られるURLを作ろう!

必要なファイルが準備できたところで、早速「JSONデータ」を取得するURLを作っていきましょう!


最初に、「RSS Generator」のサイトにアクセスして、以下の画面構成を確認します。
f:id:paiza:20170117152359j:plain

それぞれの機能は以下のとおり!

  1. 国名を選択
  2. アプリ、音楽、映画などのメディアを選択
  3. 無料アプリ・有料アプリ、最新情報などの選択
  4. 取得するデータ数の選択
  5. 各メディアのジャンルを選択

上記の内容で、自分が欲しい情報をマウスでボチボチと選択するだけでURLが自動生成されるので便利です!

例えば、日本のiOS無料アプリランキング情報(全ジャンル)を10件取得するためのURLはこのようになります。

https://itunes.apple.com/jp/rss/topfreeapplications/limit=10/xml


そして、このURLからJSONデータを取得するのは簡単で、末尾の「xml」を「json」に書き換えるだけでOK!

https://itunes.apple.com/jp/rss/topfreeapplications/limit=10/json


試しに、このURLをブラウザのアドレスバーに入力すると、「JSONデータ」として情報が得られているのが分かります!
f:id:paiza:20170117152449j:plain

■「JSONデータ」をJavaScriptで扱おう!

さて、ここまで来ればあとはJavaScriptからJSONデータを読み込んで、ランキングを表示するだけです!

そこで、jQueryなどのライブラリを使っても良いのですが、単純にJSONを取得するだけなので今回は標準で使える「fetch」を使ってみましょう!


「fetch」の使い方はものすごく簡単で、JSONを読み込むだけならこんな感じに書けます。

  fetch(url)
  .then(function (data) {
 
     return data.json(); // 読み込むデータをJSONに設定


  })
  .then(function (json) {


    // JSONデータを取得して処理する


  });

冒頭の「url」の部分に、先ほど生成したURLを代入すれば、最終的に変数「json」の中に取得したデータが入っています。


結果をコンソールログに出力すると、「feed」→「entry」配下にしっかりとデータが取得できていますね!
f:id:paiza:20170117152554j:plain

サンプルソースコード


このように、「fetch」は簡単で使いやすいのですが、一部のブラウザはまだ対応していなかったりします。

対応状況の詳細|Can I use… 】

f:id:paiza:20170117152634j:plain
そこで、現状は同機能を提供するライブラリ「fetch.js」を読み込んでおくのが良いでしょう。

<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/2.0.1/fetch.min.js"></script>

■ランキングに必要な情報を確認しよう!

先ほど、コンソールログに出力したデータの中身をもう一度よく見てみましょう!

10件のデータが配列で用意されているわけですが、それぞれのデータには…

  1. アプリのアイコン画像URL
  2. アプリのタイトル
  3. アプリのダウンロードURL

のような個別の詳細情報も取得できるのが分かります。
f:id:paiza:20170117152732j:plain

今回作るランキングサイトはシンプルなモノなので、上記3点の情報があればひとまず充分でしょう。


これらのJSONデータにJavaScriptからアクセスするのは簡単で、それぞれの階層を辿っていくだけで取得できます。

// 10件の配列データを格納
var appList = json.feed.entry;


for(var i=0; i<appList.length; i++) {


    // ①アプリのアイコン画像URLを取得
    var imgUrl = appList[i]['im:image'][0].label;


    // ②アプリのタイトルを取得
    var appTitle = appList[i].title.label;


    // ③アプリのダウンロードURLを取得
    var linkUrl = appList[i].link.attributes.href;


}

データはランキング順に用意されているので、for文で順番にループを回しながら各データにアクセスすれば良いでしょう。

■ランキングを表示してみよう!

取得したランキング情報を、JavaScript側で動的に「テーブル要素」を生成して表示してみたいと思います!

すでに冒頭で、HTML側に「table」要素の外枠を用意していたので、あとは中身の「列・行」を追加していくだけでOKです。


先ほど、for文を使って「imgUrl(画像)」「appTitle(タイトル)」「linkUrl(リンク)」をそれぞれ取得しているので、以下のような感じでテーブルを作ることが出来ます!

// 行を追加
var row = table.insertRow();


// 順位をセルに追加
row.insertCell().textContent = i+1;


// アイコン画像をセルに追加
row.insertCell().innerHTML = '<img src="'+ imgUrl +'">';


// タイトルをセルに追加
row.insertCell().textContent = appTitle;


// ダウンロードリンクをセルに追加
row.insertCell().innerHTML = '<a href="' + linkUrl +'">リンク</a>';


ブラウザで確認すると、見事にランキングが表示さましたね!
f:id:paiza:20170117152835j:plain

ちなみに、「RSS Generator 」をいろいろ触ってみると分かりますが、URLを少し変えるだけでさまざまなランキングを作れるのが分かります。


例えば、「topfreeapplications」→「toppaidapplications」に変更すれば、有料アプリランキングも簡単に作れます。


f:id:paiza:20170117152902j:plain

「topsongs」に変更すれば、音楽のランキングが表示されます。


f:id:paiza:20170117152925j:plain


「topmovies」に変更すれば、映画のランキングも簡単です。


f:id:paiza:20170117152942j:plain

(音楽・映画などは、JSON構造が少し違う場合もあるので要注意)


さらに、URL内の「jp」を「us(アメリカ)」「cn(中国)」「ru(ロシア)」などに変更すれば、世界各国のランキングを作ることも簡単に出来るわけです。

■ブラウザ側にデータを保存しよう!

最後に、取得したJSONデータをブラウザの「ローカルストレージ」に保存する方法も解説しておきます。

現状は、毎回データを取得しにいくプログラムになっているため、あまり効率が良くないので「ローカルストレージ」にデータを保存し、そこから読み込むように変更してみましょう!


といってもそんなに難しくはなく、一番最初に「ローカルストレージ」にデータがあるかどうかをチェックする条件分岐を書いておけばOKです!

window.addEventListener('load', function() {


    // ローカルストレージのデータを取得
    var listKey = window.localStorage.getItem('appranking');


    if(listKey) {
    
        // ローカルストレージにデータがあれば
        // そのデータを使ってランキングを表示する
    
    }
    else {
    
        // ローカルストレージにデータが無ければ
        // JSONデータを取得しにいく
  
    }


});


ローカルストレージにデータを保存する処理もこのように簡単です。

var appList = json.feed.entry; // 配列データを格納


// 取得したデータを「appranking」という名称で保存する
window.localStorage.setItem('appranking', JSON.stringify(appList));


ここまでの内容を踏まえて、今回のサンプルデモを以下のリンクから確認できるのでぜひ試してみてください!(手動で最新データに更新する機能も追加しています…)

サンプルデモ


サンプルデモの全ソースコードは、以下のリンクから確認できます。
github.com

■まとめ

今回利用した「RSS Generator 」のランキング情報は、実際にiTunesApple Storeなどで閲覧できるランキング情報と同じものですが、少し更新タイミングにズレがあるのは覚えておきましょう。

ただ、自分で好きなようにカスタマイズして開発できるのは大きな魅力だと思います。


注意点として、JSONデータへのアクセスはなるべく最小限にし、サーバーに負荷をかけないようにローカルストレージなどを使いましょう。

ぜひ、みなさんも挑戦してみてください!

アルゴリズムの学習レッスン動画が期間限定無料で見放題!プログラミング学習コース

f:id:paiza:20170117132313p:plain
paizaでは、未経験者でも動画を通してプログラミング等が学べる「paizaラーニング」を公開しております。

本日から2017年1月23日までの期間限定で「アルゴリズム入門1」を無料公開中

来週2017年1月24日から30日までの一週間は、「アルゴリズム入門2」の無料公開を予定しています。

paizaラーニングでは、paizaの人気美少女キャラクター霧島京子(cv:上間江望)が、かわいい声で優しく・楽しく・わかりやすくプログラミングを教えてくれます。「霧島京子による1本3分程度のレッスン動画」に加え、「ブラウザ上でコードを書いて実行できるオンライン実行環境」「複数の練習問題」で、初心者でも無理なくプログラミングを習得することができます。

paiza.jp




paizaではスキルのあるエンジニアがきちんと評価されるようにし、技術を追い続ける事が仕事につながるようにする事で、日本のITエンジニアの地位向上を図っていければと考えています。特にpaizaではWebサービス提供企業などでもとめられる、システム開発力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題を出題しています。

テストの結果によりS,A,B,C,D,Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp

プログラミング問題を作るエンジニアが、数学的な面白いアルゴリズムを紹介してみた

プログラミング初心者 プログラミング学習 開発ネタ

f:id:paiza:20170117123901j:plain
Photo by Alex Graves
秋山です。

paizaでは主にプログラミングスキルチェック問題の作成を担当しているので、アルゴリズムについて調べることもよくあります。

というわけで今回はみんな大好き?な、数学的なアルゴリズムについて書いてみたいと思います。

プログラミングの勉強を始めたばかりの人から「アルゴリズムってどうやって考える&勉強するといいんですか?」と聞かれることもあるので、参考になればと思います。

■数列のアルゴリズム(フィボナッチ数、黄金比)

数字が 1,2,3,4,5,6....100 というように、最初の1から順に1ずつ増えていくというのも、ある意味アルゴリズムに則った数列であると言えます。

もう少し複雑な数列になると、paizaラーニングアルゴリズム入門編でも出てくる「フィボナッチ数列」という数列があります。数学が苦手な人でも聞いたことある言葉ではないでしょうか…。(フィボナッチ数 - Wikipedia

フィボナッチ数列とは、 1, 1, 2, 3, 5, 8, 13, 21,.... と続く、要は「前の2つの数字を足したもの」の数列で、アルゴリズムを考える上でのいろんな要素が詰まっています。

フィボナッチ数列は、自然界の現象に数多く出現するとされています。例えば、ヒマワリの種のらせんはフィボナッチ数の法則に則っているとする話があります。が、実際は数が小さいうちは法則に則っていても、一定数を超えると種の並びに分岐などが起こったりして、必ずしもアルゴリズム通りではないそうですね。

f:id:paiza:20170117115746j:plain
Photo by Marcel Sigg

またフィボナッチ数列には、いわゆる「黄金比」と言われているものが隠れています。

黄金比とは
f:id:paiza:20170117121146p:plain
(1:1.6180……)になる比のことです。

これがフィボナッチ数列とどう関係あるかというと、例えば 1, 1, 2, 3, 5, 8, 13, 21,.... の8番目の 21 を 7番目の 13 で割ると、 1.61538461538 という、黄金比の近似値を求めることができます。もっと数列を進めれば、隣同時の比も、どんどん黄金比に近づいてきます。フィボナッチ数列で隣り合う数の比は、黄金比に収束するんですね。

黄金比は、古い建造物や絵画などにも現れていると言われていますが、偶然なのかこじつけなのかはよくわかりません。

ちなみに、MacBookPro13・15インチは解像度の比率が1.6です。テレビ放送や映像作品では、16:9が主流となっていて、1.77ぐらいの比率です。古いアナログ放送などは、4:3で1.33ぐらいの比率です。どの比率が見やすいかは個人差かもしれませんが、なんとなーく近い範囲なのが興味深いです。(これこそこじつけかもしれませんが……)

フィボナッチ数列を使ったプログラミングが学べるpaizaラーニングこちら
アルゴリズム入門編1:FizzBuzzとフィボナッチ数を学ぶ-paiza動画ラーニング | ITプログラマー・エンジニア転職のpaiza

■リュカのキャノンボール問題(平方ピラミッド問題)

フランスの数学者、エドゥアール・リュカが考案した「砲丸を並べて底面が正方形のピラミッドを作っていった時に、ピラミッドに使われた砲丸の総数が平方数になるピラミッドの段数を答えよ」という問題です。

(ちなみにリュカは先に紹介したフィボナッチ数列を研究したり、ハノイの塔のアルゴリズムを考案したりした人です。ハノイの塔についてはpaizaラーニングアルゴリズム入門編でも説明しています。)

一見、砲丸を無限に積めるとなると、平方数も無限に出てきそうな気がしますよね。

でも、実際に平方数になるのは1段と24段の時だけなんです。これを証明するのはものすごく難しいので、力技で解いてみたのがこちら↓

少なくとも、1000段目までの間で、1段目と24段目以外に平方数は出てきませんでした。

無限に試しても平方数になるのは1段目と24段目だけ、という数学的証明について日本語で読める概要はこちら↓が参考になるかと思います。
平方ピラミッド問題と楕円曲線の整数点 石井夕紀子

Googleの入社試験で出た?という噂がある数列問題(※真偽は不明です)

1, 11, 21, 1211, 111221, ...
10,9,60,90,70,66, ...
という数列において、「それぞれ次に来る数字は何か答えよ」という問題です。

これはちょっと意地悪な問題です。数列を読み上げるとわかりますね。

1
11 ← 1つの1(手前の数字を読み上げる)
21 ← 2つの1
1211 ← 1つの2 と 1つの1
111221 ← 1つの1 と 1つの2 と 2つの1

ということは、次の数は

3つの1 と 2つの2 と 1つの1 → 312211

となりますね。

次の数列も読み上げるとわかります。(英語で)

10 → ten
9 → nine
60 → sixty
90 → ninety
70 → seventy
66 → sixty-six

文字数に注目すると、1ずつ増えているのがわかります。
ということは、次の数は

ninety-six → 96

となります。

10 tenのところがoneやsix、同様に9 nineのところがfourやfiveでない理由は、その文字数中で最大の数……という意味らしいです。

もし本当に出題されていたとしたら、こういった点について具体的に説明できるかどうかを面接で見ていたんですかね。


※余談ですが、昔、数学の授業で 1, 3, 4, 6, 8, 10, 12 は何の数列?という問題を出されたことがあります。ヒントはこの数字は2011年廃止されて 1, 2, 4, 6, 8, 5, 7 に切り替わっているということ。

答えは地上波放送(首都圏)のチャンネル番号です。この話をすると歳がバレますね…。

■まとめ

というわけで数学的なアルゴリズムに触れてみました。

アルゴリズムはプログラミング考えるときに重要だし、いろんな法則があって楽しいので、少しでもアルゴリズムの勉強に興味を持ってもらえたら嬉しいです。(数学的な話が多くて嫌いになったって言われたらどうしよう……)

フィボナッチ数やハノイの塔、またもっと単純なFizzBuzzFizz Buzz - Wikipedia)などは、paizaラーニングアルゴリズム入門編でも学べます。

本日から2017年1月23日までの期間限定で、FizzBuzzやフィボナッチ数について学べる「アルゴリズム入門1無料で見放題になっています。来週2017年1月24日から30日までの一週間は、ハノイの塔について学べる「アルゴリズム入門2」の無料公開を予定しています。

無料公開の期間を過ぎると有料に戻ってしまいますので、ぜひこの機会にアルゴリズムを学んでみてください!
paiza.jp

アルゴリズムの学習レッスン動画が期間限定無料で見放題!プログラミング学習コース

f:id:paiza:20170117132313p:plain
paizaでは、未経験者でも動画を通してプログラミング等が学べる「paizaラーニング」を公開しております。

paizaラーニングでは、本日から2017年1月23日までの期間限定で「アルゴリズム入門1」を無料公開中

来週2017年1月24日から30日までの一週間は、「アルゴリズム入門2」の無料公開を予定しています。

paizaラーニングでは、paizaの人気美少女キャラクター霧島京子(cv:上間江望)が、かわいい声で優しく・楽しく・わかりやすくプログラミングを教えてくれます。「霧島京子による1本3分程度のレッスン動画」に加え、「ブラウザ上でコードを書いて実行できるオンライン実行環境」「複数の練習問題」で、初心者でも無理なくプログラミングを習得することができます。

paiza.jp




paizaではスキルのあるエンジニアがきちんと評価されるようにし、技術を追い続ける事が仕事につながるようにする事で、日本のITエンジニアの地位向上を図っていければと考えています。特にpaizaではWebサービス提供企業などでもとめられる、システム開発力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題を出題しています。

テストの結果によりS,A,B,C,D,Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp