TECH EXPERT 11日目

TECH::EXPERT

10時半に教室に行ったものの、なんだか気が乗らない。
疲れてるのもあるけど、今は自分のサイト作りをするだけなので教室じゃなくてもいい気がするんだよなぁ。質問したい内容も特に現時点ではないので、昼過ぎに一旦帰宅することにした。

午後からはdivのプログラマーさんから講演。名古屋と大阪を繋いで中継しているようだ。
講演の中身については触れないが、その後の質問コーナーで出てくる質問の次元の低いこと。
TECH EXPERT受けてる時点で就職までは世話してくれるんだから、何の言語やったらいいですか?なんて聞いても意味ないよ。私を含めてそもそも何をやるか以前の素人だろうに。カリキュラムをこなしてプログラミングというものがある程度理解できてから、就職して道が見えるようになってから考えればいいのさ。
就職という視点で考えるなら、第1に誠実であること、そして自分が無能でないと証明できれば普通はそれ以上は求められない。それで落とされるのなら会社を選ぶ段階で分不相応に高望みしてるだけだ。

私はプログラマーの給与体系に興味があったので講演後に個人的に聞いてみた。
一般的には月給制や年俸制で、成功報酬・歩合のようなパターンは普通はないとのこと。
PGの質というのは個人差が非常に大きいのでプロジェクトに対する寄与度が大きく違うと思うのですが、それによるfeeの違いはあまり考慮されないらしい。一般職と同じように定期昇給と役職級による差はあれど、それ以外の特別な報酬はなさそうだった。
昇給したいなら転職(ヘッドハント)が一般的で、歩合制のような成果物に対して報酬が比例するような形態が希望なら独立や個人事業主として生きる事になりそう。

私は成功報酬の方が好みなので個人事業主かな。
いったん就職して、現場経験を積めばさっさと独立するのが良さそう。

convention over configuration

規約が最初。規約に従わない場合は自分で設定してね、という概念。
初めてのプログラミングの勉強をrailsでやる場合に、学習を阻害する根源。

規約の中身が多すぎるため把握しきれず、意図しない動作をしてしまう。(規約通りなのだが)
初学者にとって規約を理解することそのものが困難であり、膨大すぎる規約のためそもそも把握できるようなものではない。なにより規約があることを知らない。

私が10日余りrailsを勉強して引っかかった部分はほぼ全てrails内部での処理である。
読んでないけどきっと規約に書いてある。
rubyに関しては書いた通りに動かせるのでロジックが組める。でもrailsは書いた内容が出力される時に、”いいように”して出力してくれるので私の意図と違ったりする。
なのでrailsは覚えゲーだと思う。「AをしたらBになる」という入出力を覚えることはできても、理解したいのならrailsではない方が好ましいかもしれない。

Object-relational mapping、O/RM、ORM

データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。(wikiより)

railsでいうActiveRecordで、オブジェクトっぽく書けば関連するテーブルのデータを引っ張れるようにしてくれる。

CSS

clear: both;

子コンテンツに付ける。
両サイドの回り込みを解除できる。
floatを使った際に、floatの次に要素がある場合にはその要素に付与する。
当然であるが、最後の要素もfloatさせたい場合には使えない。
要素がない場合にはから要素を作るのではなく、親要素にclearfixを使うのが一般的。

clearfix

floatさせたい要素の親要素にclearfixクラスを設定して、CSSでclear: both;をかける。
具体的には親要素の後ろ(after)に空のブロック要素を作成してclear: both;している。

.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

position

position: fixed;

ウィンドウに対して位置を固定できる。

position: relative;

子要素からの起点としたい要素に対して設定する。

position: absolute;

relative要素の左上の位置を0.0の座標として、top, left等を絶対値で指定する。
親要素から高さや幅等は見えなくなる。
floatとの強弱関係はfloatが親要素内で上へ積み上がっていく一方、absoluteは全てを無視して指定した位置に存在する。

margin

margin: auto; で左右中央揃へ

position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
でrelative要素からの上下左右中央揃へ。

margin
position: relative;
した場合、起点はmarginを除いた左上から。
marignは要素外に余白を作る。

padding
position: relative;
した場合は、起点はpaddingで伸びた要素を含む左上から。
paddingは要素内に余白をつける。

値渡し と 参照渡し と 参照の値渡し

以下は自明ですよね。

def aaa(num)
  num += 1
end
num = 3

aaa(num)
puts num  => 3

num = aaa(num)
puts num  => 4

では配列だとどうでしょうか?

def aaa(arr)
  arr << 1
end
arr = []

puts arr  => 何も返らない

aaa(arr)
puts arr  => 1

仮引数に値を代入しただけなのに実引数が変更されるので不思議ですよね?
なんで数字は予定通りの挙動で配列だと挙動が変わるのかが謎でした。

ポイントは「参照の値渡し」
railsは基本的に値渡しです。実引数を渡しても、コピーされて仮引数が使われるため、メソッド外へ影響を及ぼしません。
ですが、配列を持つ変数については配列内の実態をそのまま持つのではなく、参照先が保存されています。なので仮引数にも参照先がコピーされており、参照先を変更するような処理をすると、あたかも実引数を変更したかのように見えるのです。実引数は変更していませんが、実引数の参照先が書き換えられているのです。

多くの言語ではオブジェクトを渡すと参照の値渡しになるので、変更を明示的に返さなくても変更が反映される。

値渡しと参照渡しの違いを理解する

コメント