TECH::EXPERT【18日目】

【学習内容】


・1000時間の法則の話
・リファクタリング
・正規表現(いいないいなアリコ・パスワードの設定)

【1000時間の法則の話】

個人的に気になったのはTECH::EXPERT卒業生の方のインタビュー記事でした。

その方は僕とは違って短期集中コースでしたが、とにかく圧倒的な学習時間を確保されていて、なんと1日15時間もPCと向き合っておられました。

単純計算で、10週間で1日15時間ということは合計で1050時間という計算になります。

記事内の情報によると、TECH::EXPERTのカリキュラムに加えて、ご自身で新しい言語を学んでNewsPicksのクローンサイトを作ったとかなんとか。

(以前この方についてメンターさんに聞いたところ、使用言語は多分Pythonだった気がします。間違ってたらごめんなさい。)

人によってスペックは異なるので、僕も1000時間確保すれば同じような結果が出せるとは言えないのですが、少なくとも人が何かを成すにはそれ相応の努力が必要であることは明らかです。

夜間・休日コースは6ヶ月で転職を実現させるコースなので、この1000時間の法則に当てはめてみると、1日あたり5時間強投入すれば実現できる計算になります。

「一流・天才と呼ばれる人は、10000時間の厳しい練習に打ち込んでいる」

マルコム・グラッドウェル氏の著書である『天才!成功する人々の法則』の中ではこのように綴ってあります。

つまり、天才であることの前に努力家であるということです。

もちろん何の道を究めるかによってそれに必要な時間も違ってくるかとは思いますし、自分は一流や天才と呼ばれる人ではないと思う人の方が圧倒的に多いと思います。

自分は天才である!と自負のある方は存分に楽をして頂いて構わないのですが、自分は天才ではないと思っている人はシンプルに学習時間を投入しましょう。僕も学習時間を投入します。

僕が学習時間を確保するために実践していることは、毎日PCを開くということです。

別に最初はネットサーフィンをしていてもいいと思います。

でも、一通りPC遊びが終わってやることがなくなったら、自然と「勉強しなくちゃ!」という気持ちになるような状態にしなくてはいけません。

勉強モードに入るために進捗管理表を常に立ち上げておいて、同期がどの程度進んでいるのか常にウォッチしておくのがおススメです。

人間とは何かしらの強制力が無いと、水のように高いところから低いところに流れていってすぐに楽をしようとする怠惰な生き物です。

僕自身も例外なく怠惰な人間の部類に当てはまっていて、油断をするとすぐに「別に1番でなくてもいい」と思ってしまい楽をする生き物です。

それ故に自分に強制力(ストレス)をかけて、極力教室に足を運ぶことで逃げられない環境を作り出しています。

必ずしも毎日教室に足を運ばなければいけないというわけではありませんが、教室に行かない日でも少なくともPCに3時間以上は向き合うようにしています。

そうすれば自ずと学習時間は100時間→1000時間→10000時間と増えていくと思います。

仮に10000時間も投入することができたとすれば、既にその道のプロと呼べる身分ではないでしょうか。

【リファクタリング】


処理の内容を変えずに冗長なコードを削除したり、コードを改善すること。

⇒だらだらしたコードやわかりにくいコード、意味のない記述などを簡潔にわかりやすくする作業のことです。
可読性が上がったり、メンテしやすくなるみたいです。


【リファクタリングを行うための6つの要素】


①制御フロー(if文、while文とか)
・条件式の左側には「調査対象」を、右側には値が変化しない「比較対象」の式を書く
・条件式は肯定形を使う
・単純な条件を先に書く
・関心を引く条件を先に書く
・関数から早く返す
・ネストを浅くする

②式の分割
・式を表す変数説明変数を用いる。(isNickname = current_user.nickname.nil?)

③変数
・不要な変数を削除する
・変数のスコープをできるだけ小さくする
・変数は1度だけ使う

④メソッドの抽象化
・定義した関数の目的を明確にする。
・直接的に関係ないものは別の関数にしてまとめる。
・凡用的なコードをメソッド化することと、他の場面で再利用できることもある。

⑤関心の分離
・どこからどこまでが1つの機能なのかを整理し分けてコードを書いていく
⇒1つの処理にあれこれ詰め込みすぎないこと。

⑥短いコードを書く
・凡用的なコードを作り、重複コードを削除する
・未使用コードや無用の機能は削除する
・最も簡単に問題を解決できるような要求を考える
・定期的にすべてのAPIを読んで、標準ライブラリに慣れ親しんでおく

【正規表現】

文字列に特定の文字が含まれているかを確認したり、特定の文字を取り除くなどの操作を行うための技術のこと。

⇒twitterの登録画面で、メールアドレスとか電話番号とか登録するときに値がおかしいと弾かれるアレとか。

【replaceメソッド】
文字列の一部を変換することができます。
変換したい文字列を「/(スラッシュ)」で囲みます

var fruit = 'ぶどうジュース';
=> undefined
fruit.replace(/ぶどう/, 'オレンジ');
=> "オレンジジュース"

【replaceメソッド グローバルマッチ】
文字列の中で指定した文字が複数個含まれる場合、全てを置換する役割を持つ。
これをつけないと最初の1つしか置換されない。

●「いいないいなアリコ」でお馴染みのアリコの電話番号から「-(ハイフン)」を取り除く

var tel = '0120-117-117';
=>  undefined
tel.replace(/-/g, "");
=> "0120117117

■replace.()の中には、第一引数から順にこのように書けばOK
(1)取り除く文字列,
(2)g.
(3)置き換える文字列

【matchメソッド】
文字列の中にある文字が入っているかどうかチェックできます。
引数に指定した文字列がレシーバの文字列に含まれているか否かをチェックするためのメソッドです。

"nice to meet you!".match(/meet/)
=> ["meet"]

●パスワードを設定する

var pass = 'Hoge1234';
=>  undefined
pass.match(/[a-z\d]{8,}/i);
=> ["Hoge1234"]

■.matchの引数は下記のように書けばOK
(1)[ ]の中は、どの文字がマッチするか記載(ここではa~zと数字)
(2){ }の中は、桁数を設定する。{4, 6}なら4~6と範囲を設定できる
(3)最後の、「/i」は大文字と小文字を区別しないという意味。

*
[a-z]: 角括弧で囲まれた文字のいずれか 1 個にマッチ
\d: 数字にマッチ
{n, m}: 直前の文字が少なくとも n 回、多くても m 回出現するものにマッチ
i: 大文字・小文字を区別しない検索

if文と組み合わせると入力エラーとしてガンガン誤入力を弾くことができる。
(ぶっちゃけこの辺はテンプレ化した方がいいんじゃ・・・)

var pass = 'aiueo123';
if (pass.match(/[a-z\d]{8,}/i)) {
   //パスワード設定の処理
} else {
  alert('パスワードおかしいやで');
}

●メアドのドメイン部分を抽出する

var mail = 'mail@yahoo.co.jp';
=>  undefined
mail.match(/@.+/);
=> ["@yahoo.co.jp"]

*
. : どの1 文字にもマッチ
+ : 直前の文字の 1 回以上の繰り返しにマッチ

⇒「@から始まり、何かしらの文字が1回以上繰り返すものにマッチ」


[a-z] : 角括弧で囲まれた文字のいずれか 1 個にマッチ
\d : 数字にマッチ
{n, m} : 直前の文字が少なくとも n 回、多くても m 回出現するものにマッチ
. どの1 文字にもマッチ
+ : 直前の文字の 1 回以上の繰り返しにマッチ
$ : 入力の末尾にマッチ

g : 文字列内で指定した文字が複数含まれている場合、その全てを置換
I : 大文字・小文字を区別せずに検索

【所感】

教室でメンターさんに質問できないのが辛い。。。

相棒も応用編に突入したみたいなので、また追いつけ追い越せで頑張っていきたいと思います。

この記事が気に入ったらサポートをしてみませんか?