Koichiの日記

人材紹介会社出身の25歳がエンジニアを目指します

【FizzBuzz問題】今までと少しだけ別の解き方をしてみました

最近の学習状況について

 

プログラミングスクール自体は学習期間をスタートしてからはだらけた生活ともおさらばをして毎日通えており、ある程度順調かと思います。周りの方のやる気に引っ張られている気はします。感謝です。

ブログに関してはもはややっていないのと同じになってしまいそうで危機感を感じたので投稿です。ものすごく薄い内容のブログ記事が続いた関係と少し、というか大分怠惰だった関係もあり、かなり久しぶりの投稿となってしまい反省をしています。

インプットによりすぎていたのはそもそももっと反省をしなければいけないと思いますし、少し趣向を変えてできる限り継続をして記事をかけるようにしていきたいと思います。

 

 FizzBuzz問題

 

スクールのカリキュラムで今、JQueryやデータベース、GitHubの使い方等を学んでいたりするのですが、少しRubyRailsから離れてしまっているという印象もあり、息抜きがてらにRubyの問題が突然ときたくなってしまいました。

ただ、あまり難しすぎると微妙なので、おなじみのFizzBuzz問題を解いてみました。

 

模範解答

スペースを除いた文字数:160 文字がある行数:16

  def fizz_buzz
    num = 1
    while (num <= 100) do
      if (num % 3 == 0) && (num % 5 == 0)
        puts "FizzBuzz"
      elsif (num % 3) == 0
        puts "Fizz"
      elsif (num % 5) == 0
        puts "Buzz"
      else
        puts num
      end

      num = num + 1
    end
  end

  fizz_buzz

これだけだと簡単にできすぎるので、putsを一回しか使わないこととeachを使って解く方法を試してみました。実際にputsは確かにRailsに入るとほとんど使わないですし、色々な解き方ができたほうが今後にとってはいいと思いますのでやってみました!

 

putsを1回しか使わない方法

スペースを除いた文字数:146 文字がある行数:17

def fizz_buzz
 int = 1
 while int <= 100 do
   if int % 15 == 0
     num = "fizz_buzz"
   elsif int % 5 == 0
     num = "fizz"
   elsif int % 3 == 0
     num = "buzz"
   else
     num = int
   end
      puts num
      int += 1
  end
end

fizz_buzz

 

最初にputs numはputsを一回しか使わないということで絶対に作ることは決定です。何とかnumでまとめるためにはif文を作って条件分岐の過程でnumに代入をしていくのがベストと考え、intという変数も作りました。若干文字数は少なくなりましたが、そこまでは変わらない印象も受けます。

 

範囲オブジェクト+eachを使う方法

スペースを除いた文字数:135 文字がある行数:15

def fizz_buzz
  (1..100).each do |i|
    if i % 15 == 0
    word = "fizz_buzz"
    elsif i % 5 == 0
    word = "fizz"
    elsif i % 3 == 0 
    word = "buzz"
    else 
    word = i
    end
    puts word
  end
end

fizz_buzz 

文字数、行数ともに最もいいスコアを出すことができました。範囲オブジェクトをあまり馴染みが無かったのですが、使ってみました。ここもさっきはintを使いましたが、wordという変数を使って表現をしてみました。基本的なロジックは2番めとほぼ変わっていません。ただ少しスッキリとした印象はありますね。

 

気付きとしては簡単で一般的な問題でも解き方は複数あるという点です。ということは複雑な問題であればとりあえず動くものと、動いてかつ高速で誰からも読みやすいというコードもあるということだと思います。とにかく一人あたりの生産性を強く求められると思うのですが、それだけ個人的には面白そうだなと感じています。

 

明日からもがんばります!

【7日目】日々の学習報告

2日前から引き続き、railsの画像投稿アプリケーションを進めました。

正直今日はかなり単純なプログラムしか書いていないし、ほぼ説明通りに書いていったのですが、

内容や概念はかなり大事だと思っています。

railsの機能が非常に多くて驚いていたんですが、常にこういった図を頭の中に思い描いてプログラムをしているだけで後々の理解度は差は出てくるはずだと思っています。

 

ルーティング⇛コントローラー⇛ビュー

        ↓↑

       モデル

        ↓↑

      データベース

 

前職での取引先の企業がrailsを利用をしている企業が、rails経験がなかったとしても

MVCモデルを活用をした経験がある人であれば欲しいといっていたことを思い出しました。

実際面接で聞かなければ分からないものだといっていたし、過去の企業側の質問事例でも結構多く出ていたので、

しっかりと覚えていきます。

また、「プロになるための技術入門」という本がこういった技術的な部分について詳細に書かれているとのことでしたので、

明日早速購入をして勉強をしていきます。

【5日目】日々の学習報告

こんばんは

5日目になります。

 

本日はRubyといったらこれ、といわれるフレームワークrailsに少しだけですが、触れてみました。

 

フレームワークは言語とセットでPHPであればcakeやLeravel等がありますが、gmailに例えた、イメージでいうと文章が出来上がっているテンプレートみたいです。

そしてグーグルの辞書登録機能がライブラリーのイメージです。Rubyではgemと言われるものを使います。

ここまではある程度前知識はあったのですが、初めて実際にrailsフレームワークを見て、こんなにファイルがいっぱい元々入っているのかと少し驚きました。

 

今日は軽くしかやっていませんが、Webサービスが提供をされる上でのクライアントとサーバー側の仕組みについて主に概念的なものを学びました。

 

ルーティング⇛コントローラー⇛ビュー

この3つはセット。Webサービスでページを例えば遷移をすると、アドレスが変わる。この際にその変わったアドレスがリクエストとして、クライアントからサーバーに情報が渡る。そして、ルーティングでそのリクエストがどのクラスでどのインスタンスメソッドで行うかを定義する。そしてコントローラーはそのリクエストによって動くクラス。そのクラスの中のインスタンスメソッドがアクションという。アクションによって返ってきた値がビューに渡される。最終的にビューで行われた処理がクライアントの画面上で行われる。

少し夜が遅くて眠いということもあり、文字が多くて少し自分で書いていても分かりづらくなってしまいました。明日またしっかりと復習をしよう。。。

あと技術的なことに関してもっとアウトプットをしていったほうがいいなと思ったので、NewsPicksとか見る時間よりもゴリゴリ書く時間を取ります。

 

ビジネスは前職の兼ね合いで結構分かる部分があるけど、正直今の課題は圧倒的に技術力なので、、

【4日目】日々の学習報告

本日の学習内容 

こんばんは

4日目の投稿になります。

本日はRubyについて学びました。

 

・ハッシュと配列

両方エクセルをイメージすると認識をしやい気がします。

配列は0、1、2,…と続いてハッシュはキーを指定をすることができるので、

具体的な属性名を入れることができるイメージです。

・if文

Rubyはすべて数式で表されているという前提がある。

trueの時は実行、falseの時は実行をされないなどはイメージがしやすかったです。

・引数

メソッドは何かオブジェクトを入れたら値を返してくれる(出力をされたものとは別になることもある)が、その何かのオブジェクトに該当をするもの。管理をしやすくすることができる。

・クラスとインスタンス

クラスから生成できるオブジェクトがインスタンスRubyで用いられるすべてのデータはオブジェクトで表現をされる。そもそも何故オブジェクトが必要かというとおそらくですが、コンピュータが認識できるのは元々2進数でしかできない。ただ、それだと著しく表現がつかみにくいので、その中でよく使われるものをパッケージにしてコンピュータ上でも認識をできるようにしている、のだと思う。

 

明日はrailsにいよいよ入っていきます。

とりあえずペースをあげなきゃだな。がんばります。

 

【3日目】日々の学習報告

本日の学習内容

 

こんばんは

3日目の投稿になります。

 

本日は大きく分けて3つのことを行いました。

======================================================

①森林浴 1時間程度

HTMLCSSについての学習 2時間程度

Rubyの基礎について  2時間程度

======================================================

①今日は前日ものすごく寝るのが遅かった(5時)のもあり、かなり疲れが溜まっていたこともあり、

筋トレではなく、森林浴に行きました。代々木公園をひたすら歩いていたのですが、

すごく気持ちよかったです。さすがに体内時計がおかしくなっていたので、

今日は早く寝てとにかく生活リズムを整えて、明日は思いっきりやっていきます。

 

②前日の復習と簡単にファイルの実行をしたって形ですね。

今はまだまだ各要素名や属性名、タグ名にについての細かい理解はできていませんが、

ざっくりと理解をした感じです。

 

少し馴染みがなかったCSSmarginpaddingという余白についてのプロパティについてですが、図で表すとこんな形になるかと思います。

少しずれてしまっていますが

 

:要素

▽:padding

:ボーダー

margin

 

Paddingは要素とボーダーの間、marginはボーダーの外側ですね。

要素の背景色とpaddingの背景色は同一になります。

この考えができることによって色々な幅が広がるって感じだと思います。

 

□□□□□□□□□□□□□□□□□□□□

□□□□□□□□□□□□□□□□□□□□

□□□□□□□□□□□□□□□□□□□□

□□□▲▲▲▲▲▲▲▲▲▲▲▲▲▲□□□

□□□▲▽▽▽▽▽▽▽▽▽▽▽▽▲□□□

□□□▲▽▽●●●●●●●●●●●●●▽▽▲□□□

□□□▲▽▽●●●●●●●●●●●●●▽▽▲□□□

□□□▲▽▽●●●●●●●●●●●●●▽▽▲□□□

□□□▲▽▽▽▽▽▽▽▽▽▽▽▽▲□□□

□□□▲▲▲▲▲▲▲▲▲▲▲▲▲▲□□□

□□□□□□□□□□□□□□□□□□□□

□□□□□□□□□□□□□□□□□□□□

□□□□□□□□□□□□□□□□□□□□

 

③少しだけですが、Rubyの概要と簡単なプログラムをターミナルで遊びました。

僕は大学時代に軽くC++をやっていたのですが、それと比べるとかなりとっかかりやすいです。

変数の定義とかたしか昔は

int num = 1;

とかやっていた気がしたんですが、Rubyだと

num = 1

とかでできました。

後は定数は大文字で定義をするんですね。

ターミナルの動かし方なんかもやりました。

cdpwdlsなんかを使いました。

 

カレントディレクトリ:今いるディレクトリ(フォルダ)

ホームディレクトリ:ターミナルを立ち上げた時に出てくるディレクト

ルートディレクトリ:一番上にいるディレクト

結構黒い画面で抽象的な画面ですが、慣れればGUIよりかも簡単で早くなるんだろうなと思っています。

 

今日は軽めで以上です。

明日はそのかわりに結構力を入れて取り組みます。

【2日目】日々の報告とこれから一緒に勉強をする道具について

本日の学習内容

 

大きく分けて3つのことを行いました。

 

======================================================

①運動 1時間程度

②家にてオンラインで事前学習(環境設定) 2時間程度

③実際にテックエキスパート渋谷校に行って学習(HTMLCSSについて)  4時間程度

======================================================

 

①こちらに関しては今後完全に習慣化できるようにしていきたいと思います。

個人的に人生で大切にしたいことの中で健康はかなり優先順位が高いです。

緊急度は低いものの、大切なことです。特にエンジニアは座り仕事になると思いますが、

不健康になりがちだと思いますので、健康管理は時間のある今のうちに習慣づけたいと思います。

 

②環境設定についてはテックエキスパートのガイドがかなり丁寧に作られていたからわりかしスムーズで正直助かりました。

一人で独学でやっている人でこの段階でプログラミングを挫折をする人が多い、というのは正直納得ができます。

後々振り返ってみると本当に簡単でなんでもないことなんだけど、予備知識ないと結構辛いものがあるっていう事は結構多いと思います。

個人的には結構ITリテラシーは高いほうだとは思っているけどMac初挑戦ということもあり、

トラックパッドの使い方に関しては苦慮をしていますが、どちらも使ったことがある人はみんなマウスよりかも

使いやすいっていっているのでとにかく慣れるようにしていきます。

後はとにかくショートカットキーですね。隣のタブに移動をするとかウィンドウを閉じるとか

今まで知っていても使っていなかった機能が大半ですが、いい機会なので強引にでも使うことで段々と慣れていきます。

 

③事前学習期間ですが、テックエキスパート渋谷校に行ってみました。

実は家から徒歩5分でかなり近いです。(1ヶ月後には実家に戻るので遠くなってしまいますが

まだ友達もいないのと個人ワークなので、特段家にいる時と変わらないのですが、

これだけたくさんの人が頑張っているのを見ることができるのはいいなと思いましたし、やる気もより出ましたね。

近くに優秀な人がいると話さなくても効率が上がるみたいな研究もあるらしいので、

今後も実際に家ではなくスクールにしっかりと通って学習はしていきたいと思います。

HTML:テキストや箱を定義をするもの

CSS:HTMLで定義をしたテキスト、箱を配置・装飾(色を変えたり大きさを変えたり、下線を入れたり)するもの

といった感じで、実際にいくつかコーディングをしました。

今日はすごい簡単な例でしたが、実際にプライベートで見るWebサイトをHTML、CSSだとどんな記述になるんだろう、といった観点で見ていけば上達も早くなりそうだなと思いました。

 

本日のトピックス

 

道具についてです。

 

これから学習をしていく上での相棒というくらい、個人的には道具はすごい重要だと思っています。

部活でも僕はバスケ部だったのですが、まずは形から(バッシュ・バスパン・ウェア)から入ることを

強く推奨をされる文化で育ってきましたし、いい道具は身につけるだけでやる気が上がります。

今回エンジニアになるにあたって購入をしたものがあるのと、今まで買ってよかったなと思うものの紹介です。

 

 

Mac book pro 13インチ(タッチバーなし)8GB 256GBストレージ

 

一番の盟友になるマシーンですね。こちらはヤマダ電機で購入しました。

はじめてのMacです。とにかく使ってみて感じたのはスムーズ、そしてかっこいい

 

②キックフリップ

 

こちらはMacの熱を逃がす効果と、打ちやすいように奥側を高くしてくれるものです。

Macをまず使ってみてすぐに感じたことは、「端末熱くない?」ということです。

これがあまりよくなくて寿命を縮めてしまうらしいので、買ってみました。

3000円くらいで購入をできるのですが、これは今の所大正解だと思っています。

 

③バッグ

 

持ち運び用にバッグを買いました。手で持つ手提げタイプ(珍しい縦型)のやつです。

これは2500円位でした。ノートや筆記用具、財布に充電器なども入れやすいタイプです。

今の所まだ今日の1回しか持ち運びをしていないのですが、何とも言えません笑

 

④モニター

 

こちらはもともと購入を3年前にしていたものです。新卒で入社をした会社が、

社内ではディアルディスプレイを採用をしていたので、影響をされて家での持ち帰りの仕事用にすぐに

4月に買いました。格段に効率があがったのを覚えています。

1万円くらいでそんなに高くはないですが、コストパフォーマンスは最強です。

結局ほぼ全員ゆくゆくは買うことになるのですが、

 この時は同期の中でも断トツに購入時期が早くて話題になりました。

 

 

簡単にですが、こちらが紹介となります。

他に何かいいものがあれば是非教えていただきたいです。

 

どれも共通をしていえるのは「時間をお金で買うことができるのなら投資をする」という考え方ですね。

もちろんコストパフォーマンスもありますが、年齢を1つ重ねるごとに実際シビアな目で見られていきます。

そんな中ではとにかく時間が買えるのであればそれはすごく価値のあるお金の使い方であると僕は思っています。

 

 

明日は引き続きHTMLCSSについてとRubyの基礎をマスターします!

【初投稿】これからエンジニアブログをはじめるにあたっての目標

【自己紹介】

はじめまして。

 

簡単に自己紹介からです。

東京生まれ東京育ちの25歳です。

 

東京理科大学工学部を卒業後、IT・Web・ゲーム業界に特化をした、

人材紹介会社(転職エージェント)に新卒で入社をして3年間の勤務をした後、

エンジニアへの転職を目指しております。

 

大学時代にも実は工学部だったのですが、当時学習をしていたC++の難解さに挫折をし、

実は再び学習をし始めております。

実際4年前以上になるので、本当にほぼ何も覚えてはいませんので、

ほぼ未経験でのチャレンジになります。

 

人材紹介の経験もあるので、未経験というのは簡単な転職ではないということは

もちろん重々承知ではありますが、なんとか食らいついていきます。

 

学習をする上では前職の経験からしても感じますし、他の未経験エンジニアの方の意見も参考にして

圧倒的にアウトプットが大事ということでしたので、しっかりとアウトプットをしていきます。

 

まずは職業を営業⇛エンジニアとして、一歩を踏み出すために下記のようなことには力を入れていきます。

 

【当面の目標】

人事の方が未経験でも評価をしてしまいたくなってしまうような取り組みを意識してやっていきます。

 

①1日5回Twitterでツイート(後述のNewsPicksとも連携)

②1日1回ブログにアウトプット

③NewsPicksでのコメント1日3件以上

④プログラミングスクールの事前課題をキックオフまでに終わらせる

============================

 

Twitterに関しては現在、Twitter転職なるものが流行をしているなど、日本では再流行をしています。人事の方に対しての露出度も非常に高いと思いますので、どういった考えを持っている人なのかが分かるようにやっていきます。

 

②内容としては日記的なものや学習をしていて感じたことが中心となる予定です。他にも営業とエンジニアで違うこと、人材業界の人に向けたわかりやすい技術解説などを予定をしています。

 

③ずっと使っているニュースサイトでTwitterと連携をすることができるので、日々ニュースに対してどういう考え方をしているのかを発信をしていきます。まあ趣味みたいなものです。個人的にはこれから先、ただ技術力が高いエンジニアというよりもビジネスに理解力のあるエンジニアのほうが圧倒的に重宝はされると思うので、やっていきます。あと他の方、絶対ほとんどやっていないと思うので、少しでも差別化できればと思っています。

 

④まずプログラミングスクールとしてはテックエキスパートに通います。10週間で60万円と中々の投資にはなりますが、絶対に回収はできると思っています。5月25日からキックオフにはなるのですが、その前に2週間分の課題は事前に公開をされているので、何とか事前に終わらせるようにしていきます。

 

あんまり多すぎても続かないとは思いますし、やってみて気づくことも色々あると思います。

ただ、何とかして早く一人前になれるよう頑張っていきます!