31才転職奮闘記

31才未経験がエンジニアを目指しているブログです。

7/10振り返り

 こんにちは!suzyです!

前回のブログで書いた通り技術的な記事をQiitaに書いてみました!

RubyRailsはマークダウン記法に未対応な部分がデフォルトではあるみたいで、見た目が美しくない所があるので自分でカスタマイズしていきたいなと思います。

 

振り返り〜ミニアプリ〜

先週〜今週はミニアプリの作成がメインでカリキュラムの進捗がちょろっとって感じでした。

同期の強強な2人はクオリティが高く、自分のアプリは本当に”ミニ”アプリのレベルでした。最終課題のチーム開発まで時間があるので、その間に"ミニ"から脱却できるように機能の拡張をしていきたいと思います。

同期の高クオリティのアプリを見ていて感じたのは、自分が使って便利になったり興味・関心のある分野でアプリを作成していたという事。私のミニアプリはカリキュラムになぞって作ったアプリだという事。

やはりコンセプトはとても大切だなと感じました。そしてそのコンセプトに沿って実装できる技術力を身につけていかないと!

振り返り〜カリキュラム〜

残りは自動デプロイしたアプリをawsのs3のバケットを登録して画像投稿ができるようになれば全てのカリキュラムが終了なのに、あと一歩の所でエラー!

フロントやバックエンドをいじってエラーがでるのは慣れてきたので何も感じませんが、ターミナルのLinuxコマンドで1日10時間以上ターミナル画面とにらめっこしているとさすがに精神が摩耗しました...

rubyrailsの学習の最初の頃もエラーが何がなんだか分からなかった時もそんな感じだったので慣れなんでしょうけど...

メンターさんの助言でec2インスタンス再作成した方が今の状態でエラーの原因特定するより簡単という事でawsと格闘しているわけですが、再作成したec2インスタンスでログインできない!ひとつ進むとエラー、ひとつ進むとエラーでしんどいす...泣

今日と明日は仕事が休みなので絶対にカリキュラムを終了させて残りのテストも完了したいと思います!

まとめ

最後のデプロイで詰まって足踏みしていますがカリキュラムは無事終われそう。最終課題のチーム開発がどんなふうにやっていくのか楽しみです。また仕事は来月末で退職するのでエンジニアに転職できるまでの間はニートです...エンジニアに絶対になるんだ!って不退転の覚悟といえば聞こえはいいですが、無職になるのは本当はとても怖いです。怖いですが学習漬けの毎日が楽しみですし、技術力を磨いて自信を持てるように引き続き学習と向き合いたいと思います!

 

終わり

7/6振り返り

おはようございます!suzyです!

 

またもやブログの更新が遅れ3週間ぶりの更新になってしまいました...

ちゃんと時間を管理してブログでのアウトプットの時間を作らないと週に1回の更新って難しいですね....

前回更新した6/16〜やった事は

  • 6/17~1/18カリキュラム進行
  • 6/19Rails勉強会
  • 6/20メッセージ送信の非同期通信の実装
  • 6/21~6/23インクリメンタルサーチの実装
  • 6/24~6/28自動更新の実装
  • 6/29~7/2カリキュラム進行
  • 6/30・7/3~7/4ミニアプリの作成

それぞれ内容が私には濃くて振り返ってみると、まだこれしかやってなかったんだって感じです。手帳に記録しておいてよかった!

カリキュラムも残り自動デプロイを残すだけとなりました。

2ヶ月しかまだTECH::EXPERTで学習していませんが、puts "Hello World"から始まってこんな所まできたのかというのが正直な感想です。同期の短期集中コースは昨日が最終課題発表でした。速い...

Rails勉強会

conpassというサイトを学校の同期が教えてくれて始めて勉強会に参加しました。もくもく会ではなくチーム3名ほどRailsでニアプリをで作るという感じでした。結局画面んにhello world的な表示をさせる所までで終了にしましたが笑

始めて現役のエンジニアの方とお話できた日でした。使用している言語はpythonphpフリーランスフルスタッグエンジニアの方などRailsを普段触っていないエンジニアの方がほとんどでした。私のようなrubyrails初学者の話もどんどん聞いてくれたり、技術的な事を教えてくれたり、この先学ぶべき言語や活躍する為には...などなど普段じゃ聞けない事をたくさん教えて頂いた時間になりました。これからも時間を作ってこのような勉強会に参加していきます!!

各機能の実装

非同期通信・インクリメンタルサーチ・自動更新の3つの機能追加

Js/jQueryajaxを使って実装していきましたが毎回、毎回ドツボにはまりエラー解決だけで3日過ぎちゃうって事も普通でした。前回のブログで書いた通り以前は全く理解できていなかったですが、Js/jQueryの記法やイベント発火・ボタン押下の仕様・変数宣言や引数の使い方などなど勉強する事がたくさんあり、理解度が深まりました。

ミニアプリ

最初はカリキュラムと並行しながらやるのがしんどいと思いました。しかし時間管理してカリキュラムやる時間とミニアプリ作成する時間を区切って取り組む事で良い息抜き的な感じで取り組む事ができました。materializeというマテリアルデザインcssを使っているので簡単にフロント機能は実装できていますが...それでも0→1でアプリを作成していくとカリキュラムで理解が浅かった所が理解でき始めたりと良い復習する時間にもなりました。またこういう機能実装したいなという部分が出てきてそれについて調べたりと今はしょぼしょぼアプリですがカリキュラム以外の機能を実装していきたいと思います。更にUI/UXを洗練させていきたい!まぁ明日の発表会には間に合いませんが...

まとめ

これから技術的なアウトプットはQiitaでやっていこうと思います。はてなブログは自身のスケジュールの振り返りや所感などをまとめて備忘録的に振り返れるようにしていこうと思います!

これを踏まえ、今日から取り組む改善策は

  • エラーや実装した機能など技術的な部分はQiitaに投稿
  • 週1回Qiitaに投稿する為に日々のアウトプットの時間を設定
  • アウトプットはQiitaに下書きみたいな感じで書いておき投稿するまでを効率的にできるようにする
  • 週1回はてなブログにスケジュールや振返りを投稿
  • 手帳に学習時間や取り組んだ学習内容を引き続き書いておく

カリキュラムを進めている時はカリキュラムをこなす事で精一杯でしたが、間も無く応用カリキュラムが終了し最終課題となります。ここからは敷かれたレールをなぞるではなく、自分で能動的にアクションしていく事がより学習の理解度を深める為には必要になってくると思います。なのでアウトプットの時間を大切にしていく為にも今日から早速改善行動!

終わり

6月の振り返り

こんにちは!@suzy1667687です!

カリキュラムでどツボにハマりまくり、先週分のブログの更新ができませんでした。先週〜今週は応用カリキュラムを進めていきました。

を学習しました。

正直JavaScriptjQueryはほとんど理解できていないです。この先のカリキュラムでRailsJavaScriptjQuery使ったインクリメンタルサーチの実装があるのでその中で学んでいきます!

応用に入ってからの時間のかなりの時間をhamlとsassを使ったフロント部分の実装です。恐らく50時間は使ったと思います笑

display: flex;

hamlは階層構造が非常に大切で、この階層構造がうまくネストできていないとcssが効かない事がよく発生しました。

f:id:suzyanamateurengineer:20190616092145p:plain

このように"test-user"と"日付部分"を横並びにして"こんにちは!"は一段下に配置する場合は方法の一つとしてdisplay: flex;を使って並べる事ができます。

しかしここでhamlの階層を考えなければいけません。

f:id:suzyanamateurengineer:20190616093131p:plain
私の場合はこのように"test-user"と"日付"の下に"こんにちは!"が潜り込んでしまいました。これは他の場面でもよく発生しました泣

f:id:suzyanamateurengineer:20190616093432p:plain

このhamlの記述では.Chat-main__messageの親要素(子要素に"test-user"部分の__message__nameと"日付"部分の__message__dateがいる)にheightで高さ指定をしているので"こんにちは!"(.Chat-main__message__text)は.Chat-main__messageと同じ階層にいるので.Chat-main__messageの下に位置します(htmlは左上に重力がある積み木みたいな構造になるので)。

それを解消しようと.Chat-main__messageの中に.Chat-main__message__text(こんにちは!)を入れてしまうとdisplay: flex;が当たってしまう為

test-user  2019/06/09  こんにちは!

 と3つの子要素全てが横並びになります。

下に潜り込むか横並びになるかでどツボにはまりました。

ここで考える必要があったのは、cssの当て方よりhamlの階層構造でした。

f:id:suzyanamateurengineer:20190616094621p:plain

まず.Messageの階層内に"test-user""日付""こんにちは!"を入れます。これで下に潜り込む問題が解決されます。

次に.Message_titleという階層内に"test-user"(.Message_title__username)と"日付"(.Message_title__date)を入れます。

f:id:suzyanamateurengineer:20190616095126p:plain

.Message_titleにdisplay: flex;を当てます。

"こんにちは!"(.Message_main)は.Message_titleと同じ階層にいますのでdisplay: flex;は影響しなくなります。

これでめでたく意図したレイアウトにできます!

この問題解決の為に5~6時間かかりました泣

 このdisplayプロパティはフロント実装では大変お世話になりました。自分のモノにできるようにこの記事を参考に勉強したいと思います。

overflow: scroll;

これもやっかいでした泣

overflowも色んな値があるのでこの辺の記事を参考にしました。 

f:id:suzyanamateurengineer:20190616100300g:plain

こういうスクロースの動きにしたかったんですが 

f:id:suzyanamateurengineer:20190616100219g:plain

このようにチャット内容が増えていくと下のテキスト入力欄が下に押し下げられる&チャット内容が無い時はヘッダー付近にいるっていう泣

overflow: scroll;はcssに記述しているのにうまくいかない状態でした。

f:id:suzyanamateurengineer:20190616101206p:plain

親要素の.messagesにoverflow: scroll;が記述されているのですが効かないです。私は原因は.messages内にあるはずと.upper-messageや.lower-messageにoverflow〜を記述したりheightを100%にしたりやりましたがダメでした。

f:id:suzyanamateurengineer:20190616101507p:plain

原因はここにありました。.chatが親要素で子要素に.messagesがあります。私は.chatにheight(4行目)を指定していなかったのです。この親要素.chatにheight指定がないと、子要素.messagesの.lower-messageは投稿が増える度に限度を知らずにどんどん下へ下へ伸びていきます。なぜなら親要素でheightの上限が決まっていないから!

子供を外で遊ばせる時に「公園の中で遊んでね!」といえば公園内で遊びますが、「どこで遊んでもいいよ!」っていうと好き勝手な場所で遊びますよね(意味不)

つまり子要素.lower-messageは親要素.chatでheight: 100vhと決まっている事で100vhの高さの上限にぶつかった時に初めてscrollしていくんですね。

まとめ

この2つの問題を解決するのに本当に10時間はかかったんじゃないか笑

他にも様々エラーは発生しましたが、この2つは特に手強かったのでブログにまとめてみました。説明力と文章力が無くうまく伝えられてないので、これからは読む方々に分かりやすい文章でかけるように努力します!

おわり

5/31今週までの振り返り

こんばんは!@suzy16676187です!!

 

本試験を突破しました!

エンジニアになる事が目標ですが、この本試験をパスしない事には目標にも近づけないので一安心です!

 

ライフコーチと面談

先週は本試験に向けて模擬試験を解きまくりました。ただ2回目以降だとある程度覚えてしまっていて、初見の本試験をパスできるかずっと不安でした。覚える=理解が深まるではないと思うので。

ちょうどライフコーチとの面談があったので今の不安を聞いてもらいました。

 

ライフコーチはRPGに例えると強いボスと戦うのはみんな怖い。どれくらい強いボスかは戦うまで分からない。鍋の蓋と棍棒で戦うのが不安なら、棍棒ではなくどうやったらソードを手に入れられるか?それが戦略・学習方略である。それには圧倒的学習時間の勉強をあなたは出来ているか?これからも出来るか?

「出来る」

じゃあ不安に感じなくて大丈夫。中間試験・模擬試験出来ないのは当たり前。一発目で出来たらこっちがビビる。仮に本試験がパス出来なくても再試験がある。そうなればあなたの理解はもっと深まるから良い事だ。

 

要約するとこんな話をしてくれました。

他にも目標をより深掘りしてくれたり、効果的な学習方法、今の不安を段階的に取り除く為にやるべき事などもアドバイスしてくれました。

 

ライフコーチのアドバイスもあり本試験を無事にパスする事ができ、ひとまず最大の不安は取り除かれました!

 

今までの学習を振り返ってみて①〜学習方法〜

私の場合、本試験までに約150時間を基礎カリキュラムの勉強時間に費やしていました。確かに基礎は大事ですが効率が悪いような気がします。私の問題点は1周目でのカリキュラムの定着率が悪い事です。どうすれば今までより時間をかけずに定着率を高めるかがこれからの課題です。

これからは、

  1. 「メモ書き、ブログやtwitterを活用してアウトプットをする事」
  2. 「隙間時間で復習」

上記2つの質を高めていく必要があります。

同じ時間を使って効率的で質の高い学習成果を出す為には、

  1. 「日々の学習戦略をより緻密に計画する事」
  2. 「その学習が効果的にできたかを1日単位でしっかり振り返り」
  3. 「改善できる事は翌日に即活かす事」

上記3つを徹底する事だと思います。TECH::EXPERTでは毎日学習報告フォームで1~3をやってますが、惰性になってしまってはいけないと思いました。今一度気を引き締めて学習に取り組まねば!

 

今までの学習を振り返ってみて②〜技術面〜

まだまだ技術的なアウトプットが弱いです。学習報告フォームの内容もそうですが、このブログにも自分の考え方や今の気持ちばかり書いていて、自分の思考の整理にしか使えてない事が課題です。この課題を解決する為にはアウトプットの時間を確保する事が必要です。そして技術的に難しかった事、調べて解決した事をPCだったり手帳に書き溜めて1週間毎に内容をまとめてブログで発信していきたいと思います。twitterなどオンラインだと一覧性に欠けて振り返りにくいので手帳やノート等のアナログの方がいいのかな。。。

例えば、

 

ajaxを使った非同期通信が難しかった。

→カリキュラム内容を復習してもなかなか理解が進まない。

→qiitaなどのサイトでカリキュラム以外の記事を隙間時間で読んでみる。

→理解ができた部分はキーワードを書いておいてブログにまとめる。

→疑問点は更に深掘りして検索していく。(検索力を身に付ける)

→理解が不十分でも分からない部分はどこなのかを明確にできるようにしてブログにまとめる。

 

この記事を参考にして思考と自身の技術的課題を整理できるようにしていきたいと思います。メンターさんや周りの人に質問するわけではありませんが、自身の抱えている問題点を明確にしてそれを言葉に纏める事は一緒だと思うので。

qiita.com

 

まとめ

基礎カリキュラムの時は学習方法(質)よりも学習時間(量)に重きを置いていました。プログラミング学習を開始して1ヶ月半で毎日勉強する習慣が身に付いたので、次は質を高める事を意識していきたいと思います!

 

おわり

独学とスクールどちらが良いのか?

こんにちは!@suzy16676187です!!

 

最近は仕事が休みで朝からスクール行ける日はカフェで1~2時間学習かブログを書いてから学校に行くのが気持ち良いです。場所を変えて学習をしていると気分が変わった気がして、学習が捗るような気がします(笑)

次回は11時からスクールで学習できるように9時にはカフェに着くように早起きしたいと思います。

今日は今週学んだ事のアウトプットよりも、プログラミングを学ぶにはスクールに行くべきか?を自分なりに考えてみたので記事に書こうと思います。

 

なぜ書こうと思ったのか?

自分がTECH::EXPERTに入る前に様々なネットの記事を読み漁りました。その時にスクールが書いている記事は信用していませんでした笑

なぜか?

それは民間スクールは"会社"なのでお金を稼がないと運営できないからです。なので自分たちの良い部分を前面に出すのは当たり前です。

私は良い面も悪い面もどっちの意見も見て判断したいと思っていたので、個人の方が書いたブログの方が私は信用できました。

 

私はIT業界とは畑違いの業界にいますし元来の出不精、積極的にコミュニティを広げる人間ではありませんでした。なので周りにエンジニアの知り合いや友人もいませんでした。その世界を知らない私はどうやって知り合ったらいいのかも分かりませんでした。だからとにかくネットで調べまくりました。

 

今プログラミングを始めようかなと考えている人や私みたく30代でプログラミングを勉強しようか悩んでいる人が私の記事を見つけて少しでも判断材料にしてもらいたいと思ったからです。

 

独学でもスクールでも学べる事は変わらない

独学だとProgateドットインストールpaizaなどで基礎を身に付けてアプリを開発しながらスキルを高めていくと思います。

よく独学は90%挫折すると言われていますが独学でも出来る人もいますし、学校に入ったけど続けられない人も全体の半分近くはいます。

10人の人間が「こんな事したいなぁ」と思っていても実際に行動に移している人間はそのうち1人くらいです。その行動に移した人間10人が目標に対し努力を続け、その目標を達成できるのもまた1人くらいです。プログラミングに限らずに何かを学ぶというのは90%くらいの人間はどこかで挫折したり諦めたりしているという事です(もちろん難易度が分野によって全然違うという事は別の話で)。

何が言いたいかというと、独学でもスクールでもやる人はどんな環境でもやります。

そして、メンターさんが言ってましたが「プログラミングはちょっとずつしか成長していかないよ。突然できるようにはならないから(天才除く)。」

スクールで学んだからといって独学で学習した人の何倍もスキルが身につく事は無いと思います。

なので一度始めたら最後までやり遂げられる人で実際に結果を出せている(出せた)人は独学で勉強できるはずです。

また、とにかく技術だけを身につけたいという人は全然、独学でもいいと思います。

自分の性格と求めるもの(目標)が大切で独学もスクールもプログラミングを学ぶ手段の一つです。

 

スクールを選んだ理由

ちなみに私は独学では挫折する人間でしょう笑

まず、学習習慣を身に付けるのは大変です。私は仕事を続けながら家で勉強できないのでそこに行けば強制的に勉強する環境が必要でした。それがスクールです。

そして、仕事でもそうですが自分の近くにスキルの高い同僚や先輩がいると「負けられない!」「いつか同じように仕事ができるようになる!」みたいな気持ちになりますよね?私はそういう人間です。私は独学だときっと自分のレベルを測る物差しがないので「自分めっちゃできるようになってるじゃん!自分スゲェ!」みたく過剰評価してるでしょう笑 スクールにいると同期でもめちゃめちゃ進捗が早い人がいます。自分は初心者の中でもまだまだレベルが低いというのが分かります。すると「もっと勉強しないと追いつけない!」という気持ちで危機感を持って学習に取り組みます。

つまり、

  • 学習する環境を家以外の場所で欲しかった
  • その環境にいけば強制的に勉強するようになる
  • 自分のレベルが現在どれくらいなのか客観視できる

この3つの理由が主にありスクールを選びました。

スクールのメリット

1ヶ月スクールに通ってみた経験の中で感じた事で話をしていきます。

  • 自力で解決できない事や自力で理解できない事がプログラミングにはたくさんある。

プロのエンジニアの方は検索力があるのでGoogle先生で解決方法を引っ張ってこられるでしょう。しかし初心者はその調べ方が分からないのです。調べてみても調べた内容が分からなくて"調べた内容を調べる"という無限ループに入ります。時間がかかります。学習時間の大半を調べる事に使っていては学習は進捗しませんよね。

もちろんその調べる中でどんどん知識は増えていきますのでメリットもありますが限界や限度があると思います。スクールでは基礎のうちは「5分考えて分からなければメンターさんに質問して下さい。」と言われています。初心者がそれ以上考えても答えは出てこないのです。限られて時間でボリュームたっぷりなカリキュラムを進めるには効率的に学習していく必要があります。

自力で解決できない時は人に頼りましょう。

  • アウトプットする人がいる。

最も効果の高い学習方法は自分の知識をアウトプットする事です。アクティブラーニングですね。大学などの講義を聞くだけだと脳に定着する知識は5%といわれています。一方教員のように人に教える事で95%脳に定着するといわれているそうです。プログラミングも同じです。私は「あ!こういう事かも!」って感じた事を人に教える、伝える、聞いてもらう事で知識が定着しています。 私はカリキュラムを1回で理解できません。2回目やる時は既に忘れている事が半分以上あります。でもメンターさんと話した部分や同期の仲間と話した部分などは覚えています。人に何度か伝えているうちに脳はその情報を整理し記憶に定着させてくれます。

アウトプットする人がいる事は大切です。

まだ1ヶ月しか通っていませんので実感できるメリットは主に上記の2つです。これから応用カリキュラムやアプリ開発、チーム開発と進んで行けば違うメリットもでてくると思うので、その時はまたブログを書こうと思います。

スクールのデメリット
  • お金がかかる事です。

無料のスクールもありますのでそちらを選んでも全然いいでしょう。ただ私のような30代を受け入れているスクールは少ないです。つまり30代で独学ができない人は有料のスクールを選ぶしかありません。結構な大金払います。払ったからにはやり遂げたい!転職したい!稼ぎたい!とポジティブに変換して学習する気持ちが大切です。目の前の数十万が惜しいと思う人にはデメリットですね。

  • スクールといっても自力でやる事が前提。過度な期待は禁物。

スクールは手取り足取り教えてくれる事はありません。困っている、悩んでいる自分を見つけてくれる事もありません。自分からアクションをしないと誰も助けてはくれませんし、教えてもくれません。スクールはあくまで学習場所であり、積極的に学習する人にとっては様々な事を教えてくれる場所です。私は「人に聞くのが恥ずかしい」「こんな事聞いていいのかな?」と思ってしまう人間です。でもそんな事を思って時間を無駄にする暇はありません。自分の将来を切り開く為にはそんな恥は捨てましょう。しかしどうしてもそれが出来ない性分の人にはデメリットですね。

 

まとめ

私はスクールで学習する事をオススメします!

学習初期(200時間以下)は特に挫折する確率が高いです。ここで躓くともうプログラミンングやろうなんて今後思わなくなると思います。安くはないお金を払い、自分は本当にエンジニアに転職できるのか不安を感じながら前に進む為には1人でやり遂げるのは私は難しいと思います。

まだ転職できていませんしカリキュラムを完走できるかも分からないので、今現在で思う独学とスクールに対しての私の考え方です。参考になれば幸いです。

ちなみに私は本試験が受かるか本当に不安で不安で仕方がありません泣。6月にはこの記事を「こんな風に思ってたんだ!しょぼ!」って笑って見られるように努力します!

 

終わり

TECH::EXPERT2週間目終了!!

こんにちは!@suzy16676187です!!

 

TECH::EXPERTに通って2週間が経ちました!

学習時間は2週間で67時間と当初の目標だった週30時間はクリアできていますが、まだまだ理解力が足りずに学習時間と知識量が比例しておりません!焦

中間試験と模擬試験ともに合格点には全く及ばすでした!泣

 

ただ同期の方に学習方法を教えてもらったり、説明が分かり易いメンターさんのお陰で良質なインプットが出来るようになってきました。

中間試験と模擬試験で自分の弱点(まぁ全部だけど、)が分かったので、その弱点を克服する為に今週は時間を使いました。

 

CSS&HTML

これは学習時間は少ないけど、RubyRailsに比べて理解が進みました。htmlの見た目の変化がcssの値を変えるとすぐ分かるので私には得意な部分なのかなと思っています。ただ中間試験では0点でしたまず基本的なcssのプロパティと値をclassに当てる事ができませんでした。

 

.content a{

font-size: 20px;

}

 

.content a」が全く理解できなかったんですよね。ただ1つ1つのプロパティ: 値;を当てる度にどんな風に動くんだろ?って確認しながら、ノーコピペでコード書いているうちに理解が進みました。ただリファクタリングの技術があるわけではないので、コードは汚いですが。

ざっくり大雑把に動かしてみて、margin: 0 auto;当ててみたり、text-align: center;当ててみたり、しているうちに「あぁブロック要素か、こっちがインライン要素か」っていうのが理解できてきました。

今は厳格に綺麗なコードが書けなくても、まずはhtmlcssが当てられてレイアウトが変わればいい!くらいの認識で学習しています。

今後の学習で細部までしっかり作り込みできるようにします。

 

Ruby

条件分岐とeach文に時間かけて学習しました。まだピンときてない感じです。

if 条件

    処理

  elsif 条件

    処理

  else

    処理

end

今の学習範囲ではelseに”無効な値です。”という処理にして不正な値が入力された場合に最初の呼び出し部分に戻るって感じなんですが、この処理を書くのを忘れてしまいます。つまり不正な値を入力するとエラーになるのでプログラミングとしてNGですね。引数、配列、ハッシュ等は繰り返しやってくうちにここは「book[:title]の書き方でいけそう」とか「books = [ ]だから本引数は(books)か」とかは分かるようにはなってきました。時間かかりますがエラー繰り返してカリキュラム見直しているうちにパターンが見つけられた感じはします。

ただ、railsに入るとこの理解では到底力及ばすな状態なので本試験までに理解度を高めていきます。

 

Rails

理解度が低い!泣

キーとバリューがどこから受け渡されてるのか理解できていない。railsの7つのアクションも理解度低いから「マイページは詳細表示するからshowアクションだよな」とか「新しい投稿するからここはcreateアクションだよね」とかどのコントローラとビューで動いているか理解低い。なので、パスってどこを通ってるの!?って感じです。

試験の時だとエラー文がどこのファイルなのか辿り着くまでも時間かかるし、コントローラー・アクションが分かってないから、更に時間がかかって焦って解けないみたいな感じです。

 

ただ昨日からrailsカリキュラム2周目に入って復習しているのですが、何かを掴み始めている感覚があります。恐らくroute,controller,view,model,dbの繋がりが徐々に分かり始めている様な感じですかね。1周目の時だとカリキュラム通りに書いてみて動いて、「あー動いた。あーエラーだ。」くらいで終わっていたので、成長はしてそうです。

今週は集中的にrails復習して知識を定着させる事と繋がりを意識して感覚掴んでいきたいです!

 

まとめ

以前の記事から1週間ですが、記事に学習した内容をアウトプットできるようになってきたかなと思います。まだまだ素人レベルの知識ですが笑

また、学習癖がついてきたみたいで朝起きて仕事前に勉強、仕事の後に勉強が苦ではなくなってきました。脳がチャレンジゾーンにいる事に慣れてきたようです。

プログラミングの勉強は楽しいです!

 

終わり

復習〜Ruby編〜

こんばんは!suzyです!

 

ヨドバシで予約してたair podsが思いの外はやく入荷し毎日使ってますがワイヤレスってすごく便利ですね!

特にハンズフリーでの通話が楽過ぎて感動しました!LINE通話の通知がapple watchで受けれたらもっと便利なのにな

さて、TECH::EXPERT夜間転職コースweek1が終了しました!基礎カリキュラムの1周目が終わったので、テストまで2周目しながら理解を深めていこうと思います。

現時点で理解が出来ない部分をこの記事でまとめておこうと思います。

Rubyの復習

ハッシュオブジェクト

1つの変数で複数のデータを持つ事のできるオブジェクト。ハッシュオブジェクトは自身の中にデータとそれに対応するキーのセットを持っている。このハッシュのキーのような名前を識別する為のラベルをシンボルオブジェクトと呼ぶ。接頭語(:)をつける。

例)

hash = {title: "となりのトトロ"}

ハッシュオブジェクトから値を取得するにはhash = {title: "となりのトトロ"}

puts hash [:title]

空のハッシュを宣言する事d後からハッシュの要素を追加できるようになる。

post = {} #空のハッシュの宣言

#以下で要素の追加

post[:genre] = "映画"

post[:title] = "となりのトトロ"

post[:review] = "トトロ可愛い"

ターミナルでユーザーが入力できるgetsメソッドを使って、入力された値を出力するには、

post[:genre] = gets.chomp

→ターミナルで"映画"と入力

puts"#{post[:genre]}"

→映画に置き換わる

 

説明だけ読んでると分かるんだけど、実際にrailsで様々なフォルダがあってコード量が増えてくると、どのタイミングでハッシュオブジェクト使うのか分からなくなる。回答のコード見ると「あぁ、こういう時に使うのか」となるんだけども。railsのアプリケーションの各機能を実装していく中で当たり前にハッシュが使われいるので、理解をしっかりしていかないといけない部分。

 

配列オブジェクト

ハッシュと同じように1つの変数でたくさんの情報を持つ事のできるオブジェクト。ハッシュがキーでオブジェクトを管理していたのに対して配列は順番でオブジェクトを管理している。配列の中のデータは要素と呼ばれる。

例)

smart_phone = ["iphone", "xperia", "galaxy"]

puts smart_phone

<<メソッドを使うと新しい要素を追加できる。

smart_phone = ["iphone", "xperia", "galaxy"]

smart_phone << aquos

puts smart_phone

 

複数の情報(例レビューの場合だと)を持つ場合は複数型(例posts)で定義する。1つのレビューはハッシュオブジェクトpostで生成する。レビューを書いたらハッシュオブジェクトpostを配列オブジェクトpostsに追加する。

 

現状ではこのハッシュと配列の定義や使い方が混同している。railsを進めていくとたくさんハッシュのキーがコードの中にあるし、配列の要素もあるから、同じpostでも「post」と「posts」で違うから難しい。

eachメソッド

配列オブジェクトに対してeachメソッドを実行すると配列に含まれる要素を順番に取り出す。配列の要素の数だけ処理が行われる。

配列オブジェクト.each do |変数|

  #処理

end

 

この変数が難しい。Railsでアプリケーションを作っていくと| ele |や| link |など「ん?どこで定義されている変数だ?」って混乱してしまう。

また変数numberを定義し忘れてしまう事もよくあった。number = 0をメソッド内で定義しないとeach文で自己代入演算子number += 1が動かない。

引数

引数はメソッドの外からメソッドに渡す値。

例)

def rename(name)

  name = "Mr.#{name}"

end

name = "Suzuki"

name = rename(name)

puts name

 

引数のnameとrenameメソッドで受け取る変数nameは名前は同じだが、別物である。name = rename(name)とメソッドからの帰り値をnameに代入している。

引数は様々な言葉を出力したい場合にその分だけコードの記述量やファイルの量を増えて管理しずらくなるのを避ける為にある。

クラスとインスタンス

共通する性質をクラスという型で定義しておく事で効率的に個々のオブジェクトを生成する事ができる。クラスに基づいて生み出されたオブジェクトの事をインスタンスと呼ぶ。クラスには属性が定義され、その属性に具体的な値が入った状態でインスタンスが生成される。

例)

stirng1 = "Hello World"

文字列Hello Worldはstringクラスのインスタンスである。

クラスメソッド

定義

class クラス名

  def self.メソッド名

  end

end 

呼び出し

クラス名.メソッド名(引数)

クラス変数は変数名の最初に@@をつける。クラス変数はクラスメソッド、インスタンスメソッドの両方で使える。

インスタンスメソッド

定義

class クラス名

  def メソッド名

    #処理

  end

end

呼び出し

インスタンス.メソッド名(引数)

インスタンス変数は変数名の最初に@をつける。インスタンスメソッドで定義された変数@は他のメソッドで定義したインスタンスの属性値を参照する。

クラスとインスタンスの定義に対する呼び出しのコードがいつも分からなくなる。例えば"review"を定義するとclass Reviewだとか@@reviewとかdef write_review、def show_reviewなど"review"があちらこちらにあってどれも違うクラスやインスタンスのクラス名やメソッド名なんだけど、理解ができていないから「結局なんて呼び出したらいいんだろう」ってなってしまう。呼び出しもreview.show_reviewとかreview.write_reviewだったり混乱しきりだ。

要件定義

プログラムに登場するものを考える。それぞれの要素に対応するクラスを用意する。各クラスのインスタンスが持つ特徴を考えコードに反映させる。

この要件定義を最初にしっかり考えておかないと後から新しい定義を追加するのも手間になりそうだし、コードの可読性にも関わってきそうだ。コード上での名称も他人が理解しやすいような名称を使う必要がある。応用カリキュラムだったりアプリの作成の時に実践していこう。

 まとめ

Rubyの理解の浅い部分を抽出してみたけども、これらの部分を理解をしていかないとRailsで開発を進めていく際にかなりしんどそうだ。Railsでエラーが度々発生するのは当たり前なんだけど、ルーティングがうまくいかない事やパスが通っていない等のエラーはともかく定義の仕方がそもそも理解できていなかったり、呼び出しが出来ていない、変数や配列、引数のミス、スペルミスは極力なくしたい。初歩的なミスのエラーで余計な時間を使ってしまっては学習時間ももったいないし。

基本の部分はしっかり固めておかないといけないので、week2はしっかり理解を進めていこうと思います!!

 

終わり