フィヨルドブートキャンプでメンターとしてレビューしているときに、rubocopのカリキュラム以降は提出するコードをrubocopを通してから提出するようにお願いしています。

しかし、デフォルトのrubocopだと不便なところがあったのでfjordとしての設定を作りました。

方針は下記の2点です。

  • なるべくrubocopのデフォルトに従う。
  • rails newしたコードで指摘されまくるなど、流石にこれは厳しいという点のみ外す。

gistに置いたので下記のように書けば使えます。

.rubocop.yml:

inherit_from:
  - https://gist.github.com/komagata/9ad19373b9f9059ca52e727fbb7f2944/raw/e3a9bf5db5459a8172f634a677f7dccae66df060/ruby.yml
  - https://gist.github.com/komagata/9ad19373b9f9059ca52e727fbb7f2944/raw/e3a9bf5db5459a8172f634a677f7dccae66df060/rails.yml

require:
  - rubocop-minitest

Fjord rubocop configuration.

ruby用とrails用に分かれているのでrailsを使わない場合はそちらを読み込む必要は無いです。

それぞれgistのrevisionでURLが変わるので更新するには最新のURLを見に行って書き換える必要があります。

フィヨルドブートキャンプでメンターとしてコードレビューをしています。自由な形式でプログラムを書く課題の場合、やはりオブジェクト指向プログラミングにみなさん苦戦しているようです。

特に、オブジェクト指向プログラミングのイメージが掴めないと、

「何をクラスメソッドにして何をインスタンスメソッドにすればいいのか」

がわかりません。(みんなここで詰まっている)

なので、これを説明するのはものすごく難しいんですが、挑戦してみます。

(クラスを定義する記法や使い方はRuby超入門などで読んだという方を前提とします。)

クラスとインスタンス

クラスインスタンス鋳型実体 だと考えてください。

鋳型とはこういうやつです。

Image from Gyazo

タイヤキの鋳型はタイヤキそのものとは別のものですが、その鋳型からできる全てのタイヤキの形を決めています。

Image from Gyazo

Person(人)クラスで考えてみます。

Person(人)というものは現実の世界にはいません。実際にいるのは駒形、町田といった人の実体です。哺乳類という動物がいないのと同じです。実際にいるのはポチやタマです。

Personにはname(名前)やage(年齢)といった属性がありますが、「そういう属性があるよ」ということは共通していますが、実際の名前はそれぞれ実体によって違います。

クラス変数とインスタンス変数

そうやって考えてみると、変数に関してはクラス変数(もしくは定数)とインスタンス変数のどちらにすべきか自然とわかると思います。

例えば「目の数」という属性はPersonに共通する内容なのでクラス変数(もしくは定数)がふさわしいです。「性別」という属性はインスタンスによって違うのでインスタンス変数がふさわしいです。

クラスメソッドとインスタンスメソッド

全てをクラス変数とクラスメソッドで処理するというのは手続き型プログラミングの世界です。

関数(メソッド)は極力引数の情報だけで処理が完結すべきというのは関数型プログラミングの世界です。

オブジェクト指向プログラミングでは、極力「インスタンス変数を使ってそのインスタンス自身に処理させる」というのが基本です。

例えばself_introduce(自己紹介する)というメソッドを作る場合、それぞれこうなります。

手続き型プログラミング:

class Person
  def self.name=(name)
    @@name = name
  end

  def self.self_introduce
    puts "I'm #{@@name}."
  end
end

Person.name = "komagata"
Person.self_introcude

関数型プログラミング:

def self_introduce(name)
  puts "I'm #{name}."
end

self_introduce("komagata")

オブジェクト指向プログラミング:

class Person
  def initialize(name)
    @name = name
  end

  def self_introcude
    puts "I'm #{name}."
  end
end

komagata = Person.new("komagata")
komagata.self_introduce

どれが良い悪いというのはないですが、オブジェクト指向プログラミングは最後のスタイルです。

極力、実体(インスタンス)が個別に持つ情報を利用してインスタンスメソッドを呼び出して処理する。そういう書き方が基本です。

例えば「人を探す」というメソッドがあった場合、(なんらかの人物が他の人物を探すとかでない限り)特定の実体には関係がないのでクラスメソッドが適しています。

class Person
  def self.find(name)
    # 探して新しいPersonインスタンスを返す
  end
end

実際は実装上の都合やテクニックが加わってくるのでこれに当てはまらない場合もありますがあくまで基本の考え方はこれです。

Image from Gyazo

フィヨルドブートキャンプでリアクションにGitHubにもあるアイコンに独自に少し追加したんですが、プログラミングスクールとしては💪がすごく使い勝手が良い。

すごく日本人的かもですが、頑張ります!とか頑張ろ!って意味ですごく使いやすい。

という発表をBurikaigi2020 - connpassでさせていただきました。

Image from Gyazo

プログラミングスクールの問題点

一番言いたかったのは「未学習」と「未経験」を一緒にするのはやめようっていう話です。

Burikaigi

.net/C#・Java・Rubyという感じに三つの部屋に分かれていました。もちろん僕はRubyの部屋で、とても発表も面白かったんですが、他の2部屋の内容もめっちゃ気になりました。

C#はUnityをやってる時にやっていて、まだ全然習熟してないのでもし話聞いたらすごく勉強になりそうだし(Blazerとか聞きたかったわぁ)、Javaは最新の話題を全然キャッチアップできてないので聞きたかったです。

両方とも最近の話題がキャッチアップできるイベントがあったら行きたいなと思います。

Image from Gyazo

年齢層高めの我々おっさんにとっては最高の食事群でしたね。

鰤しゃぶ以外にも富山(主に魚!)の名物が満載。我々の好きなものばっかりじゃん。鰤しゃぶは昆布に日本酒をなみなみと注ぎ、火をつけてアルコールを飛ばした上でしゃぶしゃぶ…はかどるわぁ〜。

Image from Gyazo

Ruby部屋の皆さんは知った顔ばかり和みました。@muryoimplさんの地元の金沢も行きたいからイベントやって欲しいなどと話つつ、とても楽しく飲み食いできました。

もうおっさんの好きなもの全て集めて、千葉のホテル三日月とかでイベントやって欲しいですね😁

フィヨルドブートキャンプでいつも話すのでここに書いておきます。

入りたい会社が無い

勉強を始めたばかりで、

「プログラマーとしてどういう会社に入りたい?」

と聞かれても特に無くて当然だと思う。

会社のホームページや求人サイトに書かれるパブリックな情報は良いことしか書いてないし、将来性とか言われてもピンとこない。

せいぜい「ブラックじゃない会社が良い」「給料の高い会社が良い」とか。

おすすめの探し方

おすすめの探し方はプログラミング関係のイベントに色々行って、どこかのコミュニティに属してみることです。(プログラマ自身が主催してるところがいい)

コミュニティに属すると「こういうプログラマーになりたい」とか「この人と一緒に働けたらいいな」とか「この評判のいい会社で働きたい」など、自然と自分の中に好き嫌いができてきます。

普通の社会人は自社の悪口を社外で言わないものらしいですが、(僕を含めて)現場のプログラマーはイベントや懇親会で普通に悪いところも話しがちです😭

悪いところを含めて色んな会社のリアルな情報が聞けるので、コミュニティ内での会社の評判というのは概ね現実に即しているという印象です。

イベントに行く前に

そもそもある程度プログラミングの知識が無いとイベントに行っても話される意味がさっぱりでクッソつまらないのでいきなり行くのはおすすめしません。

rubyやrailsを噛り始めたぐらいで行き始めるのがおすすめ。

イベントの探し方

イベントの探し方はrubyだったら近所の地域rubyコミュニティを探してみるか、connpassで自分の使ってる技術で検索してみると良いと思います。

プログラミングスクールで、企業の研修で、同じ趣旨のことを毎回言ってるのでここに書いておきます。

斜に構えてる場合じゃねえ

特に哲学もなく、

「Twitter使ったことないんですよね〜」

「Mac/iPhoneってスタバでドヤるために持つものでしょ?」

とか言ってませんか?

SNSにケチを付けて玄人ユーザー気取りの消費者の立場は今日までだ!

オマエはこれからそのSNSを作る側の人間になるんだよぉおお!!

MacでiPhoneアプリを作る側になるんだよ!

だったらすることはなんだ?

使いまくって研究してくしかねーだろー。

「この機能はどうやって実装されている?」

「このキャンペーンはどのユーザー向けにどんな目的で行われている?」

Twitter使ってないだあ?

知らないサービスがあったら片っ端から登録せんかい!

Macがイキってる?

WindowsとMacとAndroidとiPhone全部買わんかい!

ガシガシ使ってガンガン作らんかい!

宣伝

このエントリーはプログラミングスクールの戸塚ヨットスクールフィヨルドブートキャンプの提供でお送りしています。(自作自演)

ss

現場の即戦力になれるプログラミングスクール フィヨルドブートキャンプ

フィヨルドブートキャンプ、2ヶ月程新規応募を停止してたのですが、月29,800円の有料のスクールとしてリニューアルして再開しました。

Image from Gyazo

FJORD BOOT CAMP(フィヨルドブートキャンプ)

やることは変わらないのですが、弊社紹介の企業に就職しなきゃいけないという縛りがあったのがなくなっています。

この縛りが、実際にやってみるといろいろと無理があったので一般的な有料スクールの形になりました。もちろん希望者には今まで通りおすすめ企業様にご紹介しますが、必須じゃないです。

弊社紹介企業様へ就職した方にはキャッシュバックします。

有料化するのに二ヶ月程時間がかかってたのは馬鹿な話ですが、単にStripeでカード課金機能をブートキャンプに実装してたからですね。

ちょっと前にあったお金がなくなる危機やRubyKaigi、企業研修などが重なってなかなか手が付けられずにいたんですがGWのおかげで実装できました。

RailsGirlsをきっかけに始められた女性陣が最近一気に就職して卒業されていったので、内部の体制を含めて次のフェーズということで整えていかなくてはと思っております。

先日行われたRails Developers Meetup 2019プログラミングスクールを作ってみたという発表をしました。

ss

スクールを始めたこと自体が以前のRailsDMがきっかけだったこともあり、発表資料を作りながら、

「どういうスクールにしたいんだっけ?」

など整理して考える機会にもなりました。

実際、お金がなくなったピンチなどいろいろありましたが持ち直し、卒業生も増えつつあるのでなんとか頑張っていきたいと思います。

有料化についてはStripeでの決済機能を僕が実装終わったらスタートという感じです。(作り中・・・)

フィヨルドブートキャンプの課題でtelnetでGETとPOSTをしてみるというのがあるんですが、手頃なPOST対象が無いので、このエントリーのコメント欄にお願いします!

フィヨルドブートキャンプをはじめるのにMacが必要なのですが(習熟しているならLinuxもOK)、どれを買ったらいいのかおすすめが知りたいと聞かれるのでおすすめを。

13インチMacBook Air、CPUは良い方、ストレージは256GB、USキーボード

AppleのWebから買うこと。

理由

  • ストレージ256GB
    • dockerなどの仮想環境を使いだすと128GBでは足りなくなる。
  • USキーボード
    • セミコロンやダブルクォートなど、プログラミング言語で多用される記号はUS配列を前提に作られてるっぽいから。
  • AppleのWebから買う
    • Macは値引きほとんどしないのでどこで買っても値段は一緒。
    • 基本、カスタマイズできるのはAppleのWebかApple Storeだけ。