サカナ未遂

プログラミング、筋トレ、子育て

Rubyの勉強を始めて4ヶ月が経ちました

 

今年の2月からRubyを勉強を始めて4ヶ月が経ちました。

この4ヶ月間で勉強したことなどをまとめたいと思います。

 

なぜRubyの勉強を始めたか

 実はRubyという言語について何も知りませんでした。

一昨年くらいに、自社にいた同僚が「Ruby面白いよ」と言っていたのですが何それ?程度でした。

ただその同僚は、大手の社内SEに転職し、大幅な年収アップと快適な開発環境を手に入れてました。(最新のMacBookProとiPhone支給、リモートワーク可、使用する技術を自分で選定することができる等)

そんな彼をみて、「Rubyって年収アップに繋がるかも?、よい環境で仕事することができるかも」と漠然と感じてました。

(ただその元同僚は、RubyだけでなくAWS、Docker、Node.js、Vue.jsとかインフラから、アーキテクト、フロントエンドまでなんでもできるフルスタックな能力を持っていたから大幅に年収をあげることができたのですが、、、)

 

それで今年、漠然と自分のスキルに不安を感じた時、新しい技術を習得しようと思い、元同僚の真似をしてRubyの勉強を始めました。

 

Rubyについて調べてみると、Ruby on Railsというフレームワークを使っての開発がほとんどで、スタートアップ企業などでよく使われている、スピード重視の開発が可能、Rubyの開発者が日本人であることから日本語のドキュメントが充実してるなど、学ぶことの利点が多いことがわかり、Rubyを学習することに決めました。

 

まずはRubyの資格取得

まず始めに、前回のブログでも書きましたがRubyを学ぶのに評判のいいチェリー本 を購入し、試験対策本を読破してRubyの資格を取得しました。

Rubyの仕事イコールRailsの仕事の言われているようですが、Ruby基礎から学べばRailsの学習も加速がつくと判断し、Railsは置いといてRubyから勉強しました。

 

資格取得後、Railsの勉強

3月末にRuby技術者認定Silverを取得した後、

4月くらいからRailsの勉強を始めました。

何から手をつけるか色々調べるとRailsチュートリアルが評判がよかったのでこれを進めることにしました。

これが結構ボリュームがあり、4月いっぱいはかかりました。

なんとか終わらせましたが、ところどころ理解できてないところや、覚えていない機能もあり、まだまだ基礎を学習できたとはいいがたい状態でした。

 

Rspecの勉強

RailsのテストフレームワークRspecデファクトスタンダートということで、Rspecの学習をすることにし、電子書籍Everyday Rails - RSpecによるRailsテスト入門』を購入することになりました。

この本は翻訳本なのですが、翻訳者の中にチェリー本の著者の伊藤淳一さんもいたので、きっと良書に違いないと思い、希望価格$23で購入しました。($19から買えるようですが、著者、翻訳者に敬意を評して)

この本も素晴らしく、Rspecでのテスト方法、テスト方針を学ぶことができました。

※この本の書評はまだ時間ある時に書きたいです。

 

今何やってるか

Railsチュートリアルの1周目は終わらせることに集中し、理解できないまま進めた箇所があったので、2周目に入りました。

また、テストはRspecで書くようにしています。

そのほか、SolidusというECサイトのテンプレートを提供してくれるGemの解析や、AWSへのデプロイ方法などを少しずつ進めています。

 

Ruby以外にやったこと

プログラミング自体のスキルをアップするため、デザインパターンリファクタリングを会社の休み時間を利用して勉強しました。

 

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

 

 

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

 

 

あと英語が壊滅的にできないので、通勤中には基礎の文法から勉強し直しています。

 

スキルアップできているの?

正直わかりません。4ヶ月前よりは確実にスキルアップできていると思うのですが、

本やサイトで勉強しているだけで、業務に携わった訳ではないので、自分がどのくらいRubyの技術が向上しているのか試す場所がないためです。

 

今後どうする?

とりあえずRailsチュートリアル2周目を完走した後は、Webサービスを作ってみようと思います。

作ることで自分が何ができて何が不足しているかわかると思います。

私は、筋トレと沖縄民謡が好きなのでそれに関連した何かを作りたいと思っています。

 

以上、4ヶ月のまとめでした。

レビューの低評価の理由が『完全初心者向けじゃない』について思うこと

 

技術書を買う時に、ショッピングサイトのレビューを見て、買うかどうか決める人は多いと思います。

 

私も技術書を買う場合にはよく参考にしています。

ただ、たまにこの理由で低評価はどうなんだろう?

と感じることがあるのでそれについて書いてみたいと思います。

 

初心者向けだと思ったけど違った

違和感というか残念に思うのがこの理由です。

確かに「やさしい○○入門」とか「初めての○○」とか入門者向けをタイトルに付けているのに、難解なものは低評価を付けたくなるのも無理はないです。

 

ただこのタイトルの場合、以下のパターンが考えられます。

A.まったくのプログラミング初学者向け

B.他の言語を習得しているプログラマー向けの新しい言語の入門編

 

で、低評価をつける人は、Aの方々ではないかと思われます。

プログラミングは、ある程度知っている人と、まったく何も知らない人とで学習を開始するスタートラインはまったく異なります。

例えば、初学者の場合

Ruby勉強始めたけど、出てくる単語がそもそも解らない。

 →クラス?インスタンス?継承?そもそもオブジェクト指向ってなに?

Ruby on Railsを学習したいのにLinuxコマンドなど環境に関する操作出てきて混乱する

 →今どのディレクトリにいるの?、今作ったファイルはどこにあるの? 

などなどあると思います。

ただ、特定のプログラミングの技術書で、そこまで掘り下げるのは難しいと

割り切るのも必要かと思います。

そのような基礎的なところ、環境周りを1から記載していてはページがいくらあっても足りません。

なのでその辺りは、省略されていてもしょうがないかなと。

 

あらかじめどのレベルの読者を対象にしているか明記している本もありますが、ショッピングサイトには対象レベルを書いていないことがほとんどです。

絵本などは対象年齢の記載がありますし、技術書もショッピングサイトに対象レベルを簡単に書いていてくれると購入者も分かりやすいのになぁと思います。

 

 エンジニアなりたいなら

 入門者向けの本を買って、難解だからといって低評価をしてしまう気持ちも分かりますが、一度自分のスキルを見直し、どの部分が理解できないのかを掘り下げる必要があります。

実際の業務では全て仕様書やマニュアルに書いてあるわけではありません。

正解がないこと、実現方法が解らないことに対して問題解決していく能力が必要となります。

その練習の第一歩として本で理解できないところを、インターネットなどで検索、勉強会に参加してきくなどして解決することで己をスキルがアップしていくのではないかと考えています。

 

プログラムの勉強は範囲が広く深いです。

最近はオンラインで動画で学習できるサイトもありますし、低評価をつける前に自分の成長のチャンスと思って頑張りましょう。

いかに勉強しないエンジニアになったか

 

エンジニアは日々スキルアップの為に、プライベートな時間に

勉強されている方が他の業種に比べて多いと聞きます。

(プログラミングやサーバーいじるのが趣味で勉強と思ってない方もいるかもしれませんが)

 

ただ私は、システム開発の業界に入ってから、ほぼプライベートで勉強することなく

これまでやってきました。

そのツケが回ってきたのか、37歳の今になって自分のスキルが不安になり今年から

プライベートな時間は、ほとんとプログラミングの学習に費やすようになりました。

なぜ勉強してこなかったのか、どうやって勉強を継続できるようになったかを書いていきます。

 

勉強しなかった理由(言い訳)

飲酒

とにかくこれです。

帰宅したら、妻が料理を用意していてくれるので、ビールを飲みながら食事。

食後はチビチビとウィスキー飲みながらバラエティー番組みて、眠くなったら寝てました。

休日も基本昼から飲んでました。

 

趣味に時間を費やしてた

20代の頃は、カポエイラというブラジルの格闘技を習っていました。

平日の夜間と日曜の午後に練習行っていて、練習のあとは、一緒に習っているメンバーと週3〜4日は飲みに行っていました。

30代になってからは家族で行った沖縄にハマり、三線を買って、カルチャースクールに習いに行ってました。

帰宅したらウィスキーや泡盛を飲みながら三線を練習。

休日はカルチャースクールで三線習うか、子供と公園遊び。

30代半ばからは筋トレにハマり、家でベンチプレスできるように器具を買って

会社から帰って来れば1時間ほどトレーニングをやり、疲れるので夜10時には就寝するようになりました。

また近年は北方謙三歴史小説にハマり、通勤中は三国志水滸伝をずっと読んでました。

 

仕事に高スキルを必要としなかった

これまでSESで常駐してきた現場はそれほど高スキルなことを要求されなかった為、

業務の中で身につけたスキルだけでなんとかこなせてきたので、特に勉強しなくても

やっていけました。

もしかしたらこれが一番の原因かもしれません。

技術に不安がないから趣味に時間を費やしてこれたのかも。

 

なぜこの歳になって勉強を始めたのか

去年(36歳のとき)、そろそろ自分のキャリアを考えたとき、SIerの孫請け会社で

この技術力でこの先大丈夫なのかと、ふと不安になりました。

以前、うちの会社にいた友人と飲む機会が会った時、そいつが喋っている技術用語が

ほとんど知らない単語でした。

GitHub、Heroku、Node.js、RubuOnRails、Vue.js、BootStrap、etc...

本当にGitHubすら知りませんでした、恥ずかしい。

このスキルのまま40代になり、SESで案件が決まらず自社待機➡︎リストラなんてなったら、なんて考えたらいても立ってもいられなくなりました。

 

勉強するためにやったこと

 ノートPCを買う

去年末にMacBookProを買いました。

別にWindowsでも良かったのですが、Windowsは仕事でも使っているし、

Macの操作に慣れておいて損はないと思い購入しました。

ノートPCである理由は、まず勉強会に参加できることです。

これまではディスプレイが小さいので敬遠してたのですが、

本当に買って良かったです。

今では、参加できるもくもく会や勉強会を探して参加するようにしています。

 

酒を飲まなくなった

とにかくアルコールを飲んでしまうと、勉強なんてできないし、やっても忘れてしまうので、飲まないことにしました。

あくまで勉強するために飲まないだけで禁酒ではないのです。

飲み会とかあれば飲みますが、会社の飲み会とかは全部断るようになりました。

帰宅して勉強終わった後に、缶ビール一本くらい飲むようにしてましたが、

不思議なもので、昔は飲めるだけ飲みたかったのに、今では別に飲まなくても平気になりました。

一週間で一滴も飲まない時もあります。

経済的にも健康的にも効果ありますし、酒はなければないほうがいいのかもしれません。

 

趣味をリストラした

週4でやってた筋トレを週3回、一日15分にしました。ボディビルダーになるわけでもないので、最低限筋肉を維持できる量に減らしました。

 

習っていた沖縄三線のカルチャースクールをやめ、楽器を弾かないようにしました。

これもお酒と同じで、やめた訳ではなく、今後余裕ができたときにまたやりたいと思ってますが、人生において絶対に必要なものではないので一旦中断することにしました。

あとテレビもYouTubeも全く見なくなりました。 

 

今どんな感じか

大体毎日2時間くらいはプログラミングの勉強に費やすようになってます。

特にやるぞ!という気持ちがなくても、当たり前のように勉強するようになりました。

誰かが言ってたのか、本で読んだのか忘れましたが、やる気は続かないから習慣化した方が良いとのことです。

うまい具合に習慣化できてると思ってます。

この調子で毎日スキルアップし、リストラされないように、というよりさらにキャリアアップを目指したいと思います。

Rubyの継承チェーンについてのメモ

Rubyの継承チェーンについて勉強したのでメモです。

継承チェーンとは?

Rubyのクラスのスーパークラスを見る、そのスーパークラススーパークラスを見る、をBasicObjectが見つかるまで続ける。
このクラスの道筋が継承チェーンとなります。
Stringクラスの場合だと以下のようになります。

irb(main):001:0> String.superclass
=> Object
irb(main):002:0> Object.superclass
=> BasicObject
irb(main):003:0>


StringクラスのスーパークラスがObjectクラス、ObjectクラスのスーパークラスがBasicObjectクラスとなっています。
ちなみにBasicObjectクラスを見ると

irb(main):003:0> BasicObject.superclass
=> nil

となっているので、BasicObjectクラスが終点であることがわかります。

継承チェーンのモジュールについて

しかしここでクラスの親クラスを返すancestorsメソッドを使用して見ると

irb(main):004:0> String.ancestors
=> [String, Comparable, Object, Kernel, BasicObject]

先ほどスーパークラスで辿った時に出てこなかった「Comparable」と「Kernel」があります。
これらは、クラスではなくモジュールとなります。

モジュールはクラスにインクルードされることで、クラスの継承チェーンに挿入されます。
それではインクルードした場合、継承チェーンのどこに挿入されるのでしょうか?
またインクルードする順番は関係するのでしょうか?
試してみましょう。

module A
end

module B
end

class C
  include A
  include B
end

p C.ancestors


実行結果は

[C, B, A, Object, Kernel, BasicObject]

まず自作クラスのスーパークラスはデフォルトでObjectクラスになるのですが、
インクルードされたModuleがスーパークラスの前に差し込まれています。
またBの方がAより先に来ています、
つまりインクルードすると、
・自分のクラスの後に差し込まれる
・複数インクルードすると後に指定した方が継承チェーンでは先に来る
となります。

ちなみに

module A
end

module B
end

class C
  prepend A       #includeをprependに変更
  include B
end

p C.ancestors

とincludeをprependに変更すると、自分のクラスの後ではなく先に挿入されます。
以下実行結果です

[A, C, B, Object, Kernel, BasicObject]

Cより先にAが来ていますね。

このようにインクルードする順番は、includeを使うかprependを使うか、
includeの場合は、上に書くか下に書くかで変わって来ます。
モジュールをインクルードしてメソッドを書き変える場合などに意識するようにしようと思います。

参考にした文書は以下になります。

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

 

Ruby技術者認定試験Silverを取得しました。

 

先週、Ruby技術者認定試験Sivlerに合格しましたので

その報告となります。

 

勉強期間

2月の頭からRubyを初めて触り、

試験を受けようと勉強を始めたのが2月の半ばなので、

試験勉強としては1ヶ月ちょっとってところです。

 

勉強方法

通勤中は試験対策本をひたすら読みました。 

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書
 
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
実はRubyを初めるにあたり、最初に買った本がこれでした。
正直、この本を読まなければ試験に合格することもなかったと思われます。
この本の特徴は、「この機能は〜です」のような教科書タイプの本とは違い、
読者に手を動かさせ、間違わせ、考えさせるようになっています。
テスト駆動開発を実施しながら著者の伊藤淳一さんが何度も暖かく語りかけてきます。
「〜をやりましょう。・・・失敗しましたね・・・こうしてみよう」的な感じで進みます。ついついプログラムを動かさずにはいられなくなります。
気づけば、試験対策で無闇に暗記していたところの機能の使用用途などが
すんなり頭に入ってきました。
今まで避けてきた正規表現も、この本にて紹介してる著者Qiitaの記事で勉強できます。
この記事も非常に秀逸で、何度も挫折した正規表現が、不思議と読めるようになりました。魔法のようです。
 
チェリー本でRubyの使い方、楽しさを学び、試験対策本でかっちり勉強すれば
楽勝ではないかと思います。
私は、94点で合格することができました。

今後について

Ruby未経験者の私が今後Rubyを仕事にしようと思うと
資格は一つの目安になります。
(資格=仕事ができる、ではありませんが未経験者ならないよりはまし)
次はGoldを年内に取得できるように勉強します。
ただその前に、Railsチュートリアルを完了させ、
Railsの資格(ブロンズ)に挑戦しようと思います。
 
 

ベタープログラマになる為に

今日は「ベタープログラマ」を翻訳した柴田先生の講演を聞いてきました。
優れたプログラマーはどういうものか、どういったキャリアを築いていくかが主な議題でした。
特に印象に残っている要点を忘れないようにメモです。

 

・知識への投資は常に最高の利息がついてくる

 

・ソフトウェア開発は一生続けられるキャリアであり、素晴らしい旅であり得る。
しかし「Helloworld!」で始まった旅は中間管理職への昇進で終わる。

 

・正しく動作しないコードはガラクタである

 

・保守できないコードは負債である

 

・同じ開発を10年やっても成長しない。常に新しいことに挑戦しないといけない。

 

・優れたプログラマは人が理解できるコードを書く

 

・ソフトウェアは腐る、それはテストコードがないプログラムである。

 

・読んでわかるコードにコメントを書く必要はない。

 

・会社は自社で使う技術のサポートしかしてくれないし、最悪なにもサポートしてくれない。
自分の専門性が時代遅れにならないように維持することを会社に頼ることはできない。

 

・一冊の良い本を選べは他の人が何十年もかかって習得してきた見識を数日で得ることができる。

 

・勉強しなくても会社の開発はこなせるため学習習慣を失う。しかし学習しないとレベルが下がっていく。

 

などなど当たり前のようで、現在直面している問題に対しての話もたくさん聞けました。
今後も自分の技術を向上しつつ、キャリアを積んだエンジニアの講演会、技術勉強会に顔を出して行きたいと思います。

ブログに技術記事を書く理由

プログラミングなど、勉強しているととても助かるのが技術ブログ。

私くらいのレベルだと、何かしら不明なことがあった場合、Qiitaとかを検索すると、

だいたい解決してしまいます。

 

自分も勉強結果をアウトプットしたいと考えても、調べて出てくることを

書いても仕方がないと思って過ごしていました。

でも、別に技術サイトに投稿するわけでもないので、自分のブログにアウトプットしていくことにしました。

じゃあ日記にでもつけとけよとか言われるとまぁそうなんですけど、"いつか誰かが何かのきっかけで見るかもしれない"という緊張感があるので、適当なことは書けない、という気持ちになるのため、あえてブログに書くことにしました。

技術のこともさることながら、ブログを書くことも初めてなので、ブログの書き方、技術的な記事の書き方を徐々に学んでいこうと思います。

できれば週一くらいで更新したいとは思いますが、あまりこだわらずコツコツ続けていこうと思います。