テックエキスパートDay2が終わりました。日曜日ということもあり、午前中は来ている人もまばらでしたが、午後には8割くらい埋まり50人くらいは教室にいました。(そして22時前ですが30人くらいまだ居ます)
やはりこういった環境というのはモチベーションが上がるのでとても良いと思います。
この記事ではday2で学んだ事の復習はもちろんのこと、それだけだとつまらないので、個人的に気になる事であったり良いなあと思った記事などを紹介できればと思います。
・有益っぽいツイート
・面白かった記事の紹介
・諸々復習(個人的備忘録)
プログラミングに関する有益っぽいツイート
本格的にプログラミングを学ぶにあたり、まずツイッターを始めて情報収集をすることにしました。個人的にはいずれの業界においてもツイッターが一番有益な情報収集ツールだと思っています。
そして思っていた通り、さっそくいくつか有益っぽいツイートを見つけましたので備忘録もかねて埋め込んでおこうと思います。
必要なエンジニアって?
昨今声高に「エンジニア不足!」みたいなことが叫ばれ、TECH EXPERTはじめ様々なプログラミングスクールやオンラインサロンなどが出来ていますが、ただプログラムが書ければいいなんて事はあり得ないですよね。
ユーザーが言ってることややりたい事を正しく解釈して、(だいたいがコミュ力高いがソフトウェアには疎い)ユーザーには実現性を見せるとともに、(だいたいがコミュ症でソフトウェアしか理解出来ない)プログラマには論理的に説明してあげれる翻訳能力が必要ですよね。
— わふ (@wafuku) July 13, 2019
この方のおっしゃる通り、結局発注するクライアントや、自社のフロント部門の人間からの要望を聞いて、それを解決するための最善プランを立てて分かりやすく説明し納得してもらったうえでシステムなりサービスなりを作る必要があると思います。
もし仮にエンジニア=コードを書けるみたいになっていると非常に危ういなと思ったので備忘録です。
業務未経験のWEB系エンジニアが面接で聞かれる事!
恐らく界隈で有名な方かと思いますが、とても評判の良い動画をアップされているようなので今後拝見したいと思います!
業務未経験からWeb系エンジニアへの転職を志望されている方が、Web系自社開発企業さんでの面接時に必ず聞かれる頻出質問とその対策についてまとめてみました!😁
良質なポートフォリオは大前提ですが、「一緒に働きたいと思って貰えるかどうか」も超重要ということですね✨https://t.co/6z1WlnQ7lk pic.twitter.com/JoI4Toy9xI
— 勝又健太@テック系YouTuber (@poly_soft) July 13, 2019
プログラミング初心者がやってしまいがちな事
まさに!という感じです。ただエラーメッセージに関してはエラーの箇所が分かっても改善方法がよく分からないというレベルなので研鑽必須ですね。
プログラミング初心者がやってしまいがちなこと
・エラーメッセージを読まない
・公式ドキュメントを当たらずにブログ記事ばかり読む
・コードリーディングの量が少ない
・なぜ動くのか理解せずコードをコピペする
・問題を分割しない
・動けばOKと考えてるこれを克服するだけで脱初心者。
— 山浦清透 (@kiyotoyamaura) July 13, 2019
問題を分割して考えるのは非常に重要だと思います。プログラムは結局1つ1つの固まりが構造化したものだと思うので(分かりませんが)、、ただ問題をどう分割すれば良いのかそもそも分からないという問題はあります。笑
これが本質
プログラミングも同じなのでは。
【無理めな女を落とす方法】
とにかく出会いの場に足を運び、女性に声をかけまくる。そんな”打席”に立ち続けた人に最高のマッチングが訪れる。
そんな泥臭さこそが恋愛における合理的な方法なのである。
恋愛に裏ワザなど存在しない。@takapon_jp pic.twitter.com/q6HIVzw9U9
— 渋谷でオナ禁しながらナンパする (@taka_affili) June 18, 2019
面白かった記事:SIerって本当にヤバいの? ひろゆきが語る、業界ごと沈まないためのキャリア戦略
SIerって本当にヤバいの? ひろゆきが語る、業界ごと沈まないためのキャリア戦略
2ちゃんねる創始者で有名なひろゆきさんのコラムですが、面白いなと思ったのは以下の4点です。(Sierってそもそも何?というレベルの素人視点ですので悪しからず)
ちなみにエンジニアは大きく2つに分かれるそうで、自社サービスを持つ会社のエンジニアと、SIerで働くエンジニア。で、後者にあたるエンジニアは”今すぐ逃げた方がいい”と語っています。
・環境的なインセンティブの有無
・働く市場はどこにするか
・「能力の違い」って大した問題じゃない
・経営者視点
環境的なインセンティブの有無
社内Sierはどこかのクライアントから受注した業務を遂行するだけなので、早く終わらせても良いものを作ってもご褒美は基本的に発生しない。
つまり「より良くしよう」という発想になりにくい、そういった環境に身を置くのは非常に危ないという話。
これはエンジニアに限らないですが、「より良いものをより早く、低コストで」といった工夫をしながら進めるのとそうでないのとでは、最終的に大きな差になって現れると思います。
働く市場はどこにするか
日本は経済が衰退しているので、海外向けに商品を作っている会社にするとか、ドル建てで賃金をもらうようにするとか、そういった工夫があればより豊かになれるというお話。
マーケティングっぽい話ですが、非常に本質的な話だなと思います。日本でも専門とする業界が変わるだけで仕事のコスパも変わりそうですね。
「能力の違い」って大した問題じゃない
ひろゆき氏いわく、コードを速く書けるとか、たくさんの言語を書けるといった問題は本質ではなく、重要なのは“必要な能力をその都度身に付けられること”。
というのもこの世界は、情報のアップデートが非常に早いから。色々な言語を好奇心でもって試していくくらいの人の方がいい。とのこと。
経営者視点
経営者視点に立つと別のものが見えてくる。ユーザーがもっと課金したくなるにはどんなサービスがあればいいのか、どんな事をすれば一過性に終わらず将来につながる作業になるのかなど。
day2復習と気になる事の整理
ここからは個人的な備忘録と自己研鑽エリアです。Day2ではRubyの応用やRailsを使うためのデータベース構築や、ローカル開発環境の整備?などを行いました。
インスタンスってそもそもなんだっけ?
色々やっていると、言葉の定義や役割がよく分からなくなってくるので整理したいと思います。
こちらのサイトの説明が分かりやすかったのですが、インスタンスというのはクラスを具現化した実体のこと。
昨日の記事で、クラスは仕様書みたいなものでインスタンスは印刷の版みたいなものと言っていましたが、そういうことですね。
プログラミング的に言うと、クラスをnewしたもの!つまり一応実体のあるものがインスタンスという理解になります。
しかしそのインスタンスには基本的に可変可能な引数が設定してあり(まあ厳密には自分で設定するだけですが)、その可変部分を埋めていく事で1つ1つのオブジェクトが完成すると言う感じでしょうか。
じゃあインスタンス変数ってなんなんだっけ?
次なる疑問がインスタンス変数です。インスタンス変数はRubyでは@nameみたいな感じで記述しますが、このインスタンス変数はクラス内の別のどのメソッドでも使う事ができます。(クラス変数というのもあり、それは@@nameなどで定義)
先ほどの話で、インスタンスは可変可能な部分があると言いましたが、その可変可能にするのがインスタンス変数の役割というイメージでしょうか。
class Ruby
def ruby(name) ←classがnewされたら生成 name部分が可変
@name=name ←可変な部分を受け取るのがインスタンス変数?
end
end
classがnewされた時に自動的に適用されるのがinitializeメソッド
インスタンスを生成するためにはclassをnewする必要がありましたが、newした時に自動で走るアクションを定義しているのがinitializeメソッドです。
なので先ほどのコードは間違っていてinitializeメソッドがあることによってnewの引数を受け入れることができ、インスタンス変数に数値を入れることができるのです。
class Ruby
def initialize(name) ←classがnewされたら生成 name部分が可変
@name=name ←可変な部分を受け取るのがインスタンス変数
end
end
today=Ruby.new("今日") ←newが生成されたらinitializeが走り @name=今日というのが取り出せる。
一言で言うとinitializeメソッドというのは、クラスの初期化をして、1個1個数値を入れてオブジェクトも作れるメソッドと言う感じですかね。
クラスメソッド、インスタンスメソッドについて
ここまでの話に関連するのですが、Rubyではメソッドという「複数の処理をまとめて一元化した式」があります。
しかしこのメソッドにも大きく分けて2種類あります。それがクラスメソッドとインスタンスメソッドです。
まあ恐らく名前は覚える必要ないのですが、それぞれクラスに対して実行できる処理と、インスタンスに対してだけ実行できる処理という違いがあります。
ちなみにクラスメソッドは「(def)self.メソッド名」という書き方をします
class Say
def initialize
end
# インスタンスメソッド
def aisatsu
puts "こんにちは"
end
end
# newによってインスタンス作成
hello = Hello.new
# helloというインスタンスなのでインスタンスメソッド「aisatsu」が使える
hello.talk
結局分かりづらいのですが、aisatsuメソッドはselfの付いていないただのインスタンスメソッドなので、newで1回インスタンスを作ってからじゃないと使えないということなのです。
参考記事:https://qiita.com/right1121/items/c74d350bab32113d4f3d
attr_accessorってなんやねんというお話
attr_accessorはゲッターとセッターを同時に定義することができる便利なものです
引用:https://www.sejuku.net/blog/14168
意味わからないのでちょっと噛み砕いて理解したいと思います。ちなみにこの項目のコードは全てこちらの記事から拝借させていただいております。
ゲッターとは?
ゲッターとは下の図のように、そのままだと持ってくることができないインスタンス変数を外に取り出すことができるものです。(インスタンス変数は同じメソッド内なら使い回しできますが、オブジェクト単位では使い回せないのでゲッターがないとダメなのです多分)
追記;通常はインスタンス変数はオブジェクトからは直接使えない(human.@nameなどはできない)ため下記のようなインスタンスメソッドを作って定義する必要があるが、ゲッターがあればこれを省略することができる。
def name puts @name end (メソッドを使う方法は .メソッド名なのでこれでいける。
ちなみにこのゲッター本当はもっと複雑っぽい
ちなみにアクセサリーダー(ゲッター)ですが、本当はもう少し面倒臭いっぽくて、テックアカデミーの記事によれば下記のような書き方をするそうです。参考:https://techacademy.jp/magazine/18768
class Book
def title
@title
end
もはや暗号のような感じですが、attr_readerを使わない場合は、別のメソッドでこのようにする必要があるようです。
セッターとは
先ほどゲッターでインスタンス変数を外でも使えるようにしましたが、実はゲッターだけだと、そのインスタンス変数を外から書き換えることができないのです。
そしてそれを可能にするのがセッターの役割です。
ちなみにこのセッターも本当はもっと複雑
先ほどのゲッターと同様にセッターも本当はもう少し面倒な書き方になっているようです。
def title=(val)
@title = val
end
end
本来はセッターはこのようにして定義することで書き換えたりできるようになるそうです。まじでよくわかんないですね、、。
ゲッターセッターの役割を1文でやってくれるのがattr_accessor
で、こんな面倒なゲッターセッターを1文書くだけでやってくれるのがattr_accessorなのです。(読み方分からないので”後取りアクセスor”と読んでいます)
ということで後取りアクセスが非常に有難い存在ということが分かりました。
プログラム書く際の考えかた
・プログラムに登場するものを考える
・それぞれの要素に対応するクラスを用意する
・動作を行うメソッドをつけてやる
Dateクラス
Date.new()と記載すれば日付を取得できる!!
Dateクラスの利用には require “date”が必要!
self.nameとかで自分の返り値を受け取れる
rubyではselfを使うことでそのオブジェクト自身の内容を取得することができます。
時間がないのでテックアカデミーの記事に記載のコードをそのまま記載します。(ここではしっかり後取りアクセス使ってますね!)
class User
attr_accessor :name
def initialize(name)
# self.nameに引数name を代入する
self.name = name
end
def my_name
p "私の名前は#{self.name}です。"
end
# クラスメソッド
def self.description
# この場合のselfの扱いは、 Userオブジェクトではなく、Userクラス
puts "#{self}クラス"
end
end
# Userのオブジェクトを生成し、引数で名前を与える
user = User.new("煌木太郎")
user.my_name
# クラスメソッドの呼び出し
User.description
このように代入の代入などをしたい場合にself.と書くと自分で自分の数値をゲットすることができるのです。
CSS:display:flexが非常に便利
かつては要素を横並びにする場合はfloatなどを使って、かつ結構難しめの記述をしてはじめて実現していましたが、flexを使うことで非常に簡単に横並びが可能です。
参考記事を貼っておきますのでこちらでご確認ください。
【CSS】Flexboxの使い方を徹底解説!基本から実践まで(サンプルあり)
Day2まとめ
ということでDay2の学んだことや、自分的に不明瞭だったことをまとめてみました。Day1よりも理解が進んでいる感があるので、この調子で続けていきたいと思います。
(ちなみに今日はRailsもやったのですが、このブログにアウトプットする時間がなかったので、不明点などはまた明日整理します)
またこうやってブログにすることで、かなり密度の濃いアウトプット&思考の整理になるので、何らかの形で自分の言葉で言語化するのは 控えめに言って非常におすすめです。