にっきちょう

日々考えたことをつづっています。野球・プログラミング・旅行・ゲーム・絵

アルゴリズムとは?ハムを簡単に切る方法

こんにちは、Kikuchigeです。

 

今回はアルゴリズムについてのお話をします。

 

みなさんは、アルゴリズムというものをご存知でしょうか?

 

なんとなく聞いたことがある、または知らない方がほとんどではないでしょうか。

中にはプログラミングを勉強している方で、知っていて当然、という方もいると思います。

 

ちなみに私は、つい最近知ったばかりなので、今回は、アルゴリズムを全く知らないという方向けに入門編といった感じで解説していこうとおもいます。

 なので、もう知っている!という方はスルーしちゃってください。または、それでもいいよ、という方は復習としてぜひお読みになってください。

 

……というわけで、

 

まず、アルゴリズムとは何なのか、からお話ししていきます!

 

アルゴリズムとは。

 

この単語だけ聞いても、よくわかりませんよね。

アルゴリズムは「問題を解決する手段」という言葉に直すことが出来ます。

 

例えば、ある一つの問題があったとします。

 

プログラミングに限ったことでなくてもいいですよ。

例えば、買ってきたロースハムを、包丁で1センチ角に切りたいと思ったとします。

 

一枚一枚、格子状に縦横に包丁を入れていく、

あるいは、まず半分に切ってから二枚に重ねて切り分ける、

細切りにしてから、重ねて端から切っていく……

 

ハムの切り方といっても、やり方はたくさんありますよね。

どう切るかは人それぞれだと思います。

 

ですが、どういった手順で切るかなんて普段考えたりすることはあまりありませんよね。

なんとなく、どう切れば簡単に切れるかな……

と、包丁を持った時に何となく頭に思い浮かべて切ることが多いのではないかと思います。

 

アルゴリズムでは、この一枚のハムを切るために、どういった手順で切るのか。

このことを明確に決定し、手順を書きだすという作業をします。

 

ではなぜこういったアルゴリズムが必要なのでしょうか。

それは、手順の最適化を目的としているからです。

 

先ほど言ったように、ハムの切り方の手順はいくつかありますよね。

ですが、できれば短時間で簡単に切りたいと思うことが普通ではないでしょうか。

 

もし、ハムが一枚ではなく、何枚も切ることになったらどうでしょう。

いちいち一枚一枚切っていたら、とても時間がかかってしまいますよね。

できれば、重ねて切って包丁を入れる回数を減らそうと思われるかと思います。

 

そういった「手順の最適化」を目指すために、

アルゴリズムは必要となってきます。

 

ですが、普段の生活の中でわざわざアルゴリズムを使って行動を決定することはしません。

アルゴリズムは、おもにプログラミング設計をするときに、コンピューターに手順を説明するために必要になってきます。

 

このアルゴリズムによって、コンピューター問題を解決する際、どういった手順で解決すればいいのか納得できるわけです。

そして、命令する手順が少なければ少ないほど実行するコンピューターも、命令する人間も楽ちんです。そのために「手順の最適化」は必要になってきます。

まとめると、問題を解決する手段の明確化、手順の最適化はこういった人がコンピューターに命令するために必要なのです。

 

……ちなみにですが、なぜハムの切り方をたとえ話にしたのかというと、たまたま見た3分クッキングでハムを切るシーンがあったので、そのときにふっとアルゴリズムのことが思い浮かびました。

食材の切り分け方からアルゴリズムを考えるというのは、下記のサイトから参考にしています。

http://research.nii.ac.jp/~uno/algo_3.htm

 

一見手間のかかりそうなアルゴリズムですが、いかに少ない手順で物事を実行するのかを考え、結果的に最速の手順が思いついたときには、とても達成感を感じます♪

頭の体操にもなりますので、ぜひ体験してみてはいかがでしょうか。

 

というわけで、今回はアルゴリズムのお話をしました。

 

上手く伝わりましたでしょうか?もしわかりずらかったと感じた方や、もっと詳しいことを知りたい!といった方は下記のサイトもぜひ参考にしてみてください。

 

paiza.hatenablog.com

home.jeita.or.jp

 

 

それではまた。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

論理派と感覚派?説明下手はどっち

こんばんは、Kikuchigeです。

 

突然ですが、自分が論理的と感覚的どちらなのかを考えたことはありますでしょうか?

 

論理的というと、なんとなく学者や政治家のイメージ。

感覚的というと、感情的だったり、天才肌だったりといったイメージが私にはありました。職業だと芸術家とかでしょうか?

 

まあ、美大に通っている人間としては、芸術家がみんな一概に感覚的かというとまた違うと感じてますが……それはそれとして、

個人的には、感覚的な思考より論理的な思考が出来たほうが、メリットが大きいと思っています。

 

……というより、つい先日、企業面接に行ったあとにとても痛感しました!

 

実は私はかなりの感覚派で、自分の思っていることに論理的な説明を付けるのがとても苦手なようなのです。

これは、面接以外でも、なにか人に説明したり、初対面の人と会話したりといったときに結構響くとおもいます。じぶんがこう!って思っても、論理的に感情を説明する力がないと伝わりませんからね。

 

とくに、個人的な意見としては論理派の方にとっては、感覚派で生きてきた人の意見って、理解されずらいと思っています……。

 

というわけで、論理的な説明ができるようになるためにはどうしたらいいのか、気になったのでちょっくら調べてみました。

 

curazy.com

 

 

こちらの記事は、自身が論理的か感覚的なのか、腕と手の組み方で診断できる記事になっています。

カンタンな診断なので、気になった方はぜひ試して見てください。

 

ちなみに私は右脳+右脳でかなり猪突猛進なチャレンジャー(感覚派)とでました。

なるほど。納得いくようないかないような……

 

とにかく、論理的な説明ができるようになりたい。

 

というわけで、ネットでどうしたらいいのか、論理的になるための改善法を調べてみました。その結果……

 

大事なのは、「メモを取ること」という情報が見つかりました。

 

そんな簡単な方法で本当に論理的思考が身につくの?……って思いますよね。

実際、こればかり試して見ないとわかりませんが……

 

じつはこれに似た方法が、「ゼロ秒思考法」という本で紹介されているのです。

内容としては、いつも不安に思っていることや不満、気がかりなことなどをすべて紙に書きだすことを毎日続けること。

簡単に説明するとこんな感じです。実は以前本屋で立ち読みしただけなので、実際は本一冊分の説明があります。具体的な方法はそちらを参照した方がわかりやすいです。

 

実は私、以前やろうとして続かなかったのですが、こういった方法で論理的思考に近づくことが出来るみたいです。続けていたら、変わっていたのかもしれませんね。

 

というわけで……

 

このゼロ秒思考法を、再び試して見たいと思います!

 

といっても今日はもう寝なくてはいけない時間なので、また明日から始めたいと思います。なかなか続かない三日坊主人間なので、もしかしたら続かないかもしれませんが……

 

でも、変わろうとしないことには変われませんので、明日から毎日、寝る前にメモ書きをしてみたいと思います。

 

しばらくたったら、経過を報告したいと思っていますので、嘘にならないように頑張ります。気になった方は「ゼロ秒思考法」で調べてみると、実際に試した方の感想がたくさん見つかりますよ。

Google

 

それでは、また。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

プログラミング☆クエスト

 

こんにちは。Kikuchigeです。

 

4月に入ってだんだん暖かい陽気になってきましたね。

サクラも咲き始めて、いよいよ春本番……就活本番といった感じです。

温かくなってうれしいような、つらいような…… 。がんばります。

 

 

 

今回は、この前買った日経ソフトウェア雑誌の付録のゲームソフトをやってみました!

 

タイトルは「プログラミング☆クエスト」です。

 

無難なネーミングですね。感想が述べづらいです。

 

余談ですが、こちらは、日経ソフトウェア編集部と吉村信彦さん、スマイルブームさんの合作だそうで、

スマイルブームが開発した、「SMILE GAME BUILDER」というソフトで作成されていました。

 

この「SMILE GAME BUILDER」ですが、Windows用のゲーム作成ソフトで、手軽に3Dゲームが作れるそうです。実際プレイしてみて、ゲーム画面は普通にドットではなく、3Dで動かすことが出来ました。

以前RPGツクールVXAceというソフトでゲームを作るのを手伝ったことがあるのですが、こちらにくらべてかなり難易度が低いみたいなので、

 

カンタンに自作ゲームを作りたい人にはとてもおすすめです。お値段も9800円と結構手が届きやすいです。

 

といった話はさておき、内容のほうを少しだけ。

 

まずスタート画面。

 

 

 

f:id:Kikuchige:20170404175253j:plain

 

ファンタジー感満載ですね。タイトルはこんな感じですが、わくわくしてきました。

 

内容のほうは、

 

まず、主人公のショウ君が先輩に借りた、自作のゲームを始めるところから始まります。

 

f:id:Kikuchige:20170407160441j:plain

 

以外と現実的な導入ですね。ちなみに先輩は女の子です。

ショウ君はプログラミング初心者で、プログラミングの入門として「プログラミング☆クエスト」を先輩に貸してもらった設定になっています。

 

先輩は すごいよなあ……

とか言っているあたり、ショウ君はちょっと先輩にあこがれていたりしていそうです。

といった想像は置いておいて。

 

f:id:Kikuchige:20170407161908j:plain

 

こちらが先輩が作った「プログラミング☆クエスト」のプレイ画面です。

 

街並みがのどか。

 

主人公は冒険者で、メイン舞台がこちらの城下町です。

住人がなぜかプログラミング関係の話をしています。

 

風景はファンタジーなのに住人の会話内容がIT知識で違和感ありまくりですが、

話しかけていくうちにいろいろなプログラミング関係のお話が聞けて、プログラミング初心者でもほんの少しだけ知識が身に付く内容となっています。

 

ゲーム内のストーリーとシステムは、モンスターが出るたびにプログラミングに関するクイズが出てきますので、それをクリアしていくと進行するしくみです。

 

f:id:Kikuchige:20170407163434j:plain

 

クイズのクリアレベルによって、畑に咲く花の数が増減します。

完璧にクリアすれば満開、それ以下は花の数が減っていきます。

 

ちなみに私は初プレイ4分の3くらい咲きました。クイズに何回も間違えても敵は攻撃してこないので、基本的にサクサクプレイです。

プログラミング知識としてはあまりがっつり身についた実感がありませんが、プログラミング初心者でも内容的にはわかりやすかったです。

ときどき住人も自分たちのセリフに突っ込みをいれていて、ちょっと面白かったです。

 

というわけで、「プログラミング☆クエスト」1の感想でした。

このゲームは続きの「2」があるみたいですので、今度そちらもプレイしてみたいと思います。

 

それでは!

 

 

 

 

 

 

 

 

 

「IoT」家電?

 こんにちは。Kikuchigeです。

 

今日は何日か前の新聞に載っていた記事のことをちょっと取り上げてみたいと思います。

 

その新聞記事の内容はというと......

 

総務省が「IoT機器」についてサイバー攻撃に対する弱点をあぶりだす調査を始める。という内容でした。

 

なんだかむずかしそう……

 

普段新聞を読まない文系の私にとっては、なんのこっちゃ?ってな感じです。

 

どうやら「IoT機器」がウイルス感染して遠隔操作され、気が付かないうちにサイバー攻撃に勝手に使われちゃう可能性があるから、それをどうにかしようと総務省が言っているらしいのです。

 

サイバー攻撃と言えば、よく名の知れた大企業とかが、個人情報が流出した可能性がある~と言っているのをニュースでよく見かけますよね。

 

なのでなんとなくサイバー攻撃の意味は分かるのですが……

 

「IoT」機器ってなんだろう?

 

と思いました。

 

なので調べてみると……どうやら、「IoT機器」とは、

「モノが自らインターネットに接続して発信する」

機械みたいです。

 

例えば、パソコンやスマホなんかは、人がインターネットを使っていますよね。

 

それとは違い、インターネットを自ら使っている家電なんかのことを、「IoT家電」と呼ぶみたいです。

 

初めて知りました。そんな家電があったんですね。

 

というわけでちょっと「IoT家電」について気になったので、どんなものがあるのか調べてみました。

 

 

sinap.jp

 

 

こちら、「ハイアール」という会社が発表した、IoTの冷蔵庫だそうです。

 

この冷蔵庫の表面が大型の液晶画面になっていて、wifiにもつなぐことができるのだとか。

見た目はちょっと時代を先取りしすぎている感じがしなくもありませんが……

 

ストックされた食品の賞味期限や消費期限を冷蔵庫が教えてくれて、 足りなくなったものをネットでオーダーしたり、 時にはスーパーのチラシが表示され、安売りの卵とかをそのまま注文できたりするんだそうです!

 

すごく便利ですね!ぜひ使ってみたい。

 

ascii.jp

 

こちらは、赤ちゃんのおしゃぶりが「IoT」になっているんだそうです。

 

ソニーコンピュータサイエンス研究所が発表したもので、おしゃぶりの吸い方をパターン分析して、

「次に寝るのか、それとも泣くのか、我慢しているか」など、赤ちゃんの気持ちがわかるのだそう。

 

まだ開発途中なんだそうですが、商品化したらすごくいいですよね!子育て中のお母さん方の気持ちを考えると、とても素敵な商品だと思います。

しかし、おしゃぶりまでネットにつながるとは……時代ですね。

 

inupathy.com

 

こちらはさっきのおしゃぶりの犬バージョンといった感じですね。

 

首輪に「IoT」が使われていて、飼い主はスマホから犬の気持ちが受け取れるんだそうです。

なんか少し昔に似たようなものがはやったような記憶がありましたが……

世界初と書いてあるので、きっと別物なのでしょうね。もっと情報が確実なのかな?

 

もっと時代が進めば、わんちゃんとおしゃべりできる未来も近いかもしれませんね。

そうなったら嬉しいような、怖いような。

 

最後にこちら。

 

www.irobot-jp.com

 

 

掃除ロボットのルンバです。

 

そういえば、こちらも「IoT家電」だったんですね。

スマホから操作や設定が出来るんだそうです。

 

うちにはまだルンバがいないので、いつか買ってみたいです!

 

 

というわけで、今回は「IoT家電」でまとめてみました。

 

中には家電じゃないものもありましたが……

 

いつの間にか、時代って進んでいたんだなあ……と思いました。これからどんなIoT家電が出てくるのか、ちょっとわくわくしますね。

とはいえ、我が家はあまり家電を買い替えないので、実際に購入する日は遠そうですけどね~。

 

ちょっとプログラミングの話とは関係ないお話でしたが、

紹介したもののほかにも、たくさんあったので、もし気になった方はぜひ調べてみてください。

 

それではまた。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

進数ってプログラミングとどう関係あるの?

こんにちは。Kikuchigeです。

 

前回は2進数のお話をしました。

 

なので今回はその続き、進数とプログラミングの関係のお話をしたいと思うのですが、

 

その前に、なぜ私がこのブログを始めたのかをちゃんと書いていなかったのに気付きましたので、そのことを先にお話ししたいと思います。

 

私は大学は文系なのですが、見てのとおり、あまり話したり文章を書いたりするのが得意ではないです。

 

直接誰かに言われたりしたことはないのですが、少なくとも自分では、上手く説明できてないな……と思うことが多いです。

 

なので、新しく知ったことを解説できるようになりたい! 

と思ったのと、 

人に話せるような話のネタを、増やしたい!

と思ったことが、このブログを始めた理由になると思います。

 

と言っても、ほとんどノリで始めたようなものです。なので本当にそう思っていたのか?は謎ですが、

 

これから、上手く解説したりできるように頑張りますので、下手な文ですが、何か皆さんのお役に立てたら幸いです。

 

 

 

 

 

ということで、前回の続きを書いていきたいと思います!

 

前回は、

・2進数は1と0の組み合わせで数を表すこと、

・2進数はコンピューターが使っている言葉ということ。

 

をお話ししました。

 

そこで、今回は2進数とプログラミングの関係をお話ししたいと思います。

 

2進数はコンピューターが使っている言語だと言いましたが、実際どこでどんな風に使っているのでしょうか。

 

私たちがプログラムを書くときは、プログラミング言語と呼ばれるモノを使っています。C言語やHTMLなどの種類があります。

 

でも、コンピューターは私たちが書いた言語をそのまま使っているわけではありません。

 なぜなら、コンピューターは基本的に0と1しかわからないからです。

  

ん?ってなりませんか?

 

これだけの情報を持ったコンピューターが0と1しかわからない?

 おかしいですよね。

これには理由があります。

 

コンピューターと言っても、単純に考えてみるとただの金属の箱なのです。

(とはいえ、いろんなコードや部品が使われていると思いますが……)

 単純に言ってしまえばそうなります。

 

そして、もうひとつ。コンピューターを動かしているもの。

 それは電気です。 

電気が流れればコンピューターは動きます。流れなければ動きません。

 

この電気のONと、OFFの状態。それが1と0。

 

つまり、この電気が流れる、流れないをモールス信号のように組み合わせることによって、コンピューターは命令を理解し、発信しているのです。

 

例えば、今私が書いている平仮名や漢字も、すべて1と0の組み合わせによってコンピューターは理解しています。つまり、2進数ですね。

 

と、ここまで書いたのが2進数がコンピューターの使っている言葉、だということの解説になります。

上手く伝わりましたでしょうか?

 

例えば……プログラミングを人と人に例えてみますと、

日本生まれの方と中国生まれの方が、英語を使って会話をしているのに似ています。

 

お互いの母国語では伝わらないので、互いに共通語(プログラミング言語)を使って学ぶことでお互いに話せるようになるわけですね。

 

 というわけで、ここまでが進数とプログラミングの関係になります。

 

上手く説明できたかはわかりませんが、少しでも理解していただけたら嬉しいです。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

進数とは?ちょっとだけ解説

どうも、Kikuchigeです。

 

また、企業説明会に行ってきました。

 

このあいだスイカをなくしてしまって、焦って部屋中を探しまくったのですが、

 

結局見つからず切符を買っていくことになってしまいました。

 

もうどこか道端に落としてしまって、買いなおすしかないのかな……

 

と思っていたのですが。

 

次の日、財布に挟まっていたところを発見しました。

 

なんで財布に入れたのか、さっぱり思い出せません。

 

少し反省したので、今度からはちゃんと定期入れを買って来ようと思います。

 

 

 

 

 

 

今日の記事のタイトル。進数とはって書いてありますよね。

 

進数っていうのは、知っている方もいらっしゃると思いますが2進数とか16進数とかいうものです。

 

進数を知らない方でも、何となく聞いたことはあるのではないでしょうか。

 

進数は、プログラミングの基盤のお話とつながってきますので、

 

プログラミングに興味がある方は知っておいて損にはならないです(ちなみに、企業の筆記試験にも結構がっつり出題されていました)

 

というわけで、今日は2進数のお話をしたいと思います。

 

私たちが普段使っている数字は、10進数と言います。

 

どうして10進数と呼ばれているのかというと、10で2ケタになるからです。

 

それって当たり前でしょ?

 

と普通は思いますよね。ところが。2進数は違います。

2進数は2で2ケタになります。

 

例えば11や、10、110、11010011など、

 

2進数では、1から先の数はすべて0と1で表します。

 

これが、2進数です。

 

と、ここまで説明しましたが。

 

それってプログラミングとどう関係あるのか。

 

実は2進数というのは、私たちが普段使っているコンピューターが使っている言語になります。

 

と、今回はここまでにして、2進数とプログラミングのつながりについては次の記事でお話ししたいと思います。

 

説明下手ですいません。もうちょっとわかりやすく説明しようと努めていきたいとは思っていますが、もし詳しく説明が聞きたい方は、ぜひググってみてください。

 

それではまた次の記事で!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IT企業研究

こんばんは。

 

今日はWBCの準決勝でしたね。

  

私は、残念ながら会社説明会に言っていたので見ることが出来ませんでした。

 

菊池選手のホームラン、見たかったなぁ…… 

 

と、いつまでも過ぎたことを惜しく思っていてもしょうがありませんので、 

 

今日は説明会で学んだ、IT業界の仕組みについてちょこっとメモ程度に書きたいと思います。

 

 

 

一概にIT企業と言っても、どんな会社があるのかイメージがわきませんよね。

 

というより、私は文系でしたので全く知りませんでした。

 

よくわからないけど、プログラムを組んでゲームつくってるのかなっていう(もともとゲーム業界に興味があったので)

 

今考えると、お恥ずかしい話ではありますが。

 

 

IT企業というのは、ちょっと前の言い方をすると「ソフトハウス」と呼ばれていたそうです。(これは、パソコン自体を指す「ハード」に対し、「ソフト」部分をつくっている会社だからです。)

 

そして、そのソフトハウスも大きく3つに分かれています。独立系、メーカー系、ユーザー系。

 

この三つは、基本的には同じくシステムをつくる会社であり、SEさんやプログラマーさんが働いています。

 

 

ではどこが違うのでしょうか。

 

 

私も説明会などでちょろっと人事の方のお話を聞いたに過ぎないので、あまり詳しい説明はできないのですが、簡単に説明すると、違うのはその会社がお仕事をもらうまでの仕組みなんだそうです。

 

まずは、メーカー系。簡単に説明すると、このメーカー系はメーカーさんから直接お仕事を任されます。例えば、パナソニック、日立、ソニーなど。

 

どこも聞いたことのある大手企業ですよね。この企業さんからいつもお仕事が降って来るので、メーカー系は安定しているといえるのです。

 

パナソニック○○○○」など、企業名に親会社の名前が入っていることが多いのでわかりやすいです。

 

 

次に、ユーザー系。こちらも顧客から直接お仕事が来ます。どこがメーカー系と違うのかというと、(私もよくわかっていないのですが)もともと会社の中にあったシステム管理などの部門が分離してできた会社なんだそうです。

 

なので、こちらも安定しています。

 

 

最後に独立系。

 

 

おそらく、IT企業のなかでは一番数が多いのがこの独立系だと思います。

 

よく、独立系SIerなんて言葉を耳にすることもあるのではないでしょうか。

 

 

独立系は、前に言ったメーカー系やユーザー系のように、どこかの企業に属していないない独立したIT企業です。

 

主に、もともとメーカー系大手などでSEとして働いていた方が、起業して始めた会社が多いです。

 

なので、安定しているとは言えません。独立系でも大手になれば取引先も多く、安定しているといえるのでしょうが、基本的には上の二つと比べてそうなります。

 

とはいえ、独立系=ブラックというわけではないと思います。

 

大手でも、会社によってはブラックなこともあるそうです。よく、売り上げを社員数で割ってみればわかる、という言葉を聞きますが、大手でも中小でも会社によって雇用形態はさまざまです。ピンからキリまであります。

 

なので、そう言ったところは自分で説明会や、面接などで確かめるしかないと思います。って、今まさに私が自分の眼で確かめていかなきゃいけないんですけどね。

 

 

というわけで、長くなってしまいましたが、

 

 

私が企業説明会をまわる中で聞いたお話はこんな感じです。

 

 

もし、同じくIT企業の就職を考えている方がいらっしゃいましたら、少しでも参考になれば幸いです。