もう4月。このままでは、あかん。
1月からオレは本気を出すと思いながら、気がつけば4ヶ月。
時間を湯水の如く浪費しながら、今まで一体何をしていたのかと愕然として、これを書いています。
このままでは、あかん。
ロックダウン中に書き始めたプログラミングも、もうすぐ3年目。
とにかく、10分でも、1行でも良いから毎日続けるということを自分に課しながら、それなりに長い年月が流れました。
他の記事にも書いてますが、昼間はプログラミングとは全く関係ない仕事をしている為、せっかく書いたコードを誰かに見せることも、フィードバックをもらうこともなく、作った成果物をまともに評価してくれる人も周りにいないので、なんというか、漫然とコードを書いて、漫然と独学デベロッパー生活を送っており、こんな締まりのない感じではあかんのではないかと思い、何かもう少し自分のプログラミング生活をより意味のあるものに出来ないかなあと色々と考えた訳ですが、その月に自分のやったことや、学んだこと、作りたいものや興味のある技術などを、月一回くらいログしていけば、自分なりのデベロッパーヒストリーみたいなものを残しつつ、また、人にも分かるように書かんとあかんということになれば、いつも漫然とやっていることも、より深く理解をしようと意識するのではないかと思い、数年後、立派なプログラマーとなった自分が、生暖かい眼で過去の思い出を振り返れるようなログになるんじゃないかと思い立ち、今回とりあえず書いて見ることにしました。
プログラムを学ぶときに、何が重要か
これは、プログラムに限らずなのですが、短い期間にすごい仕事を幾つも成し遂げるパフォーマンスの高い人と、自分のように漫然と時間をダダ漏れさせてしまう凡人と、一体何が違うのかということを考えると、昔ビルゲイツとウォーレンバフェットが、世界1位と2位の富豪だった頃に対談か何かをしている映像を思い出すのですが、良い仕事をするために一番重要な事は?と言う質問に、確か両巨匠ともに同じ回答をしていて、それは何かといえば、集中力。
ビルゲイツも、バフェットも、どんな天才も、凡人も、変態も、自分も、1日に24時間しかないのは、同じです。
で、結局その時間をどう使うかであって、そこで重要になるのは、集中力。
時間の量は一緒なわけで、その質が圧倒的に違うと言う事なんだよね。
で、自分の生活を振り返ってみると、圧倒的に低クオリティなわけですよ。
俺は社会人であり、日々の業務に毎日忙しいのだよ 等と嘯きながら、一体何時間、見た途端に忘れる様な下らないニュースやゴシップを流し読みし、どうでも良いような他人の呟きやダンス動画や写真等を眺め、自分の人生にクソの役ほども立たないであろうコンテンツを見る事にどれだけの時間を費やしているのか。
時間というのは、人生そのものです。
また、受け身の情報って、思考停止を誘発するので、その情報に対して自分は何も考えていないわけで、まさに虚無である。全てはノイズであり、昔のテレビの砂嵐である。
まず、こういった中毒性があって有害なものから距離を置くのは、人生において最優先事項である。
世の中、エロい服装で料理を作ったり、アジアのジャングルで現地人が掘立小屋を建てたりするなどの有害なコンテンツで溢れている。
あと、マルチタスクも集中力を分断する大きな要因である。 一定時間、一つのことに没頭出来るように、行動に対する態度を変えないといけない。
そして、集中力というもの考えた時に、同時に去来するのは、歳という問題である。
もはや40も半ばを越え、体力や気力の衰えを自覚せざるを得ず、そして体力や気力は集中力と直結する。
山口組6代目のインタビューが昔新聞に載ってたんだけど、生活で一番重要な事は との問いに、健康な肉体と健康な精神 と世間の暴力団に対するイメージと真逆な事を朗らかに言っていて驚愕したのだけど、あんなに毎日修羅場みたいな立場のトップが、日々凌いでいくのに何が重要かと聞かれ、この答えである。
つまり、判断力や決断力、そのための集中力。修羅場を乗り越えるには、やはり心身ともに健康でないと、適切な判断や決断が出来ず、己の命をも危険に晒してしまう訳である。 一周回って、すごい説得力だと思った。
猪木の、元気があれば何でも出来る は非常に真理なのである。
という事で、出来るだけ携帯やSNS、ネットニュースなんかのギラギラしたノイズから離れる努力をし、先月からジム通いを再開しました。
やはり、身体を動かすのは良いね。
身体を動かすと、よく食える、で、よく寝れる。次の日、体が軽く、頭もスッキリしている。
誰でもできる事だけど、かなり効果的ですよ。
今月やった事
1, 以前にReact作ったプライベートなファイルを売買出来るプッラトフォームアプリを、ネイティブのCSSとHTMLから、MUIテンプレートに変換。
MUIはGoogleのMaterialDesignの思想を、 BootStrap の様に使えるようにReact用にライブラリ化されたもので、ReactのUIに完全にインテグレーションできる様になっている。
元々BootStrapとかTailwindみたいなCSS系のテンプレートは全く好きでなくて、男は黙ってネイティブCSSを使うようにしていたのですが、FlutterでMaterialUIを使ってみて、かなり良く出来ていると思った。
いわゆる色調、色相、明度などのアカデミックなデザイン理論を
下敷きに、Googleが長年積み上げてきたUIやUXのノウハウが追加され、非常に洗練されたUIが超簡単に実装できる。 JSXのHTMLをMUIのタグに置き換えて、sxプロパティに追加のCSSを書いていく感じ。
2, コードのリファクタリング
上記アプリの全ページを書き直しながらかなり無駄なコードが目につき、UIを書き直しつつ、各フックなど、バックエンドのコードも大幅にクリーンアップ。
最初に試行錯誤しながら書いたときは、まあまあ上手く動いてるやん。俺天才と思っていたものも、時間経って見返すと、同じ値を参照するサーバー問い合わせコードが複数のコンポーネントで被っていたり、無意味なエラーハンドリングのコードが鎮座していたりとかなり散らかっており、天才的なアイデアが閃いたと思って深夜に書き記したメモを次の朝に見返したり、酒の席で知り合ってめちゃ綺麗と思った子に、後日素面で真昼間に出会ったりといった時に感じるような何とも言えない祭りの後感を感じ、ある程度時間が経ってから見直すのは、重要だと思いました。
3、webRTCと、Socket.IO の勉強
リアルタイムのウェブカメラを使ったサービスを作ろうと思っており、それ用の事前学習。
ZOOMみたいな機能が、簡単なJaveScriptを書けばブラウザの機能だけで簡単に作れてしまうのは凄い。
それにsocket.ioを利用したpeer to peer の仕組みを組み合わせるという感じ。
4年ほど前、プログラムの勉強を始める前に考えていたアイデアを、自分の手で作れるんじゃないかと言うところまで来たのは、なかなかワクワクするね。
今月学んだコードのあれこれ
1, Reactで、UIとフックの両方を返すテクニック
ReactのコンポーネントはUIを返し、Hookはステートと ファンクションを返す。って言うのが基本だけど、Hook の中で、コンポーネントをリターンするファンクションを作れば、UIもフックで返せると言うことに気づいた。
こう言う感じ。
const useReturnUI = () => {
const [data, setData] = useState(null);
const [isOpen, setIsOpen] = useState(false);
const functionA = async(a){
const value = await doSomething(a);
setData(value);
isOpen(true);
}
const returnComponent = () => {
return (
isOpen ? <ComponentRed data={data}/> : null
)
}
return { functionA, returnComponent }
}
export default useReturnUI
このfunctionAを別のコンポーネントで起動することにより、ComponentRedがdataを渡された状態で表示されるって言う感じ。
Hookなんだけど、コンポーネントのようにUIも返している。
2, CORSを理解する
分かったようで、あんまり分かっていなかったんだけど、自分でサーバーを2つ建てて、リクエストを送ってみたらよく理解できた。自分の手で試してみるって大切だね。
文字で書くよりも映像にした方が早いんで、また解説動画を作ってここにでもアップ予定。
と言う感じで、今月やった事を改めて書いてみると、色々と思い出して、穴の空いたバケツがより補強されたような感じになりました。来月も書けるように頑張ります。