みたいな話が流行りみたいなのでちょっと思い出してみます。
自分の経歴とか経験はざっくりこんな感じ。
目次
開発環境編
本番環境と開発環境の構成が違う
開発環境は自分のローカルマシン上に組んでたわけですが本番環境と合わせることは全く気にしてませんでした。 PHPだから動くやろ レベルの認識。
本番環境にデプロイしたら止まる ってのもつらかったですけど 新しいプロダクトの開発始めたら前のプロダクトが動かなくなる みたいなのもつらかったですね…
今だとDockerやvagrantで解決できるのでほんと助かる。
コーディング編
if文の=判定で代入
x=1のときに処理をしたいif文で
if ( x = 1 ) {
...
みたいなやつですね。
これだとxに1が代入されるだけで、判定は常に真になってしまうやつ。正しくは「if ( x == 1) { 」とかですね。
プログラミング以外で慣れていた、学校の勉強なんかの「=」は「1 + 1 = □」みたいに「テストのときに左辺の結果を右辺に書く」ようなものの認識だったので、「==」って書き方に慣れてなかった感じです。
DirectXの引数おおすぎ
もう具体例とか出せないんだけど DirectXの引数に取ってる構造体の設定多すぎてよくわからん くなってた気がする。
今でもよくわかってません。(むしろもう全然使ってないから今どきどうなってるのかわからぬ)
グローバル変数便利に使いすぎ
とりあえず変数をグローバルにしておくとコードを書いているときは面倒なことを考えなくてすむのでグローバルにしてたら 動かしたときに面倒なことになりました みたいな…
引数増やすのが面倒で、割と懲りずにやってた気がします。
変更するたびにしくじりすぎ
どこかのコードに手を入れて、目視確認して 「ヨシ!」 → 納品してから死ぬ みたいなことを本当に…
これを解決したのは ユニットテスト の存在でした。今から思うとユニットテスト抜きでよく作れてたな。
ポインタがわかるけどわからない
よく理解が難しいといわれるポインタですが、個人的には概念のところはわりとすんなり理解できてたんじゃないかと思ってます。(要するにメモリアドレスを格納した変数があって、*とか&とかで解釈の仕方を変えてるみたいな)
なんだけど ポインタのポインタのポインタ みたいなのが出てきたら 実際どうなってるのかよくわからんくなってた 点は否めない。なんか 変数の頭に「p」が増えてく 。(「難しい」って言われてるのこういうとこやないのか)
うまいこと整理できてなかったってのもちろんありますがやたらめったらポインタ使わないってのが学びですかね…
しらんまにオブジェクトを破壊してる
参照とかポインタとかで配列やオブジェクトを渡してるとあるある。
PHPはナチュラルにそうなるから厄介。
<?php
class Hoge {
public $var = [];
}
function update($hoge) {
$hoge->var[] = 'b';
printf("update hoge\n");
print_r($hoge);
}
$hoge = new Hoge();
$hoge->var[] = 'a';
update($hoge);
printf("hoge\n");
print_r($hoge);
結果
update hoge
Hoge Object
(
[var] => Array
(
[0] => a
[1] => b
)
)
hoge
Hoge Object
(
[var] => Array
(
[0] => a
[1] => b
)
)
みたいな。
その他編
JavaとJavaScriptの区別がついてなかった
JavaScriptのことを 「ブラウザで動くJava」 くらいの認識でたまに話がおかしくなってた。幸いにして早い段階で違うことを指摘してもらえたので混乱しなくなった。
プライベートIPのクラスB範囲を知らなかった
プライベートIP (LAN内などで自由に使える範囲のIP)は
- クラスA 10.0.0.0~10.255.255.255
- クラスB 172.16.0.0~172.31.255.255
- クラスC 192.168.0.0~192.168.255.255
の3種類あるのですけど、AとCは見たことあったけどBは見たことなくてしばらくの間 グローバルIPと勘違いしてた 。
プライベートIPの話だとこの後歴史的経緯PIアドレスを持つ企業に就職して、そこに割り当てられていたのが確かクラスAの範囲のやつで、つまりクラスAのプライベートIPをグローバルIPとして使ってたような感じでへーって思ったこともあった気がします。(ちょっとうろおぼえ)
まとめ!
- 開発環境と本番環境はなるべく合わせる
- グローバル変数なるべく使わない
- ユニットテストを書く
- 参照/ポインタで転んでも泣かない