そえブログ

最近は学んだことのアウトプット用に利用している記事なので、雑な表記だったり、読みにくい表現かもしれませんがご了承ください。

新社会人や駆け出しエンジニアに知っておいて欲しいことを書きました

エンジニアになろうと就職活動して、見事エンジニアのスタート地点に立った皆様、研修を終えいよいよ配属という皆様、中途採用でキャリアチェンジでエンジニアのスタートラインに立った皆様。

一緒にIT業界や日本を良くするために頑張っていきましょう。

そこでですが、割と勘違いというか、まだ分かってないというか、誤解している人が散見されるので、今回はあくまで私の考えですが、プロフェッショナルとは何か、エンジニアとして仕事をするとは何か、仕事を任されるということはどういうことなのか、ここら辺について書いてみようと思います。

Twitterでは足りないのでここ使います。

プロフェッショナルとは何か

wikipediaを参照すると、以下のように書かれています。

  • 専門的な仕事に従事し、その能力が高く、その仕事の技術に優れ、確かな仕事をする人
  • 主たる収入を得るために、特定の分野に従事している人

一般には後者の方が適切かもしれませんが、私の考えとしては前者であります。 つまり専門家というのが、あるべき姿であるということです。

エンジニアとして仕事をするとは何か

エンジニアに限った話ではないですが、お客様や世の中の問題をエンジニアリングで解決するのがエンジニアの仕事です。
つまり問題解決が目的であり、その手段がエンジニアリングであるというのが、エンジニアです。

仕事を任されるということはどういうことなのか

世の中には様々な仕事がありますが、仕事を任されるというのは、問題解決のために自分のリソース(能力、時間、体力、メンタルなど)を使うことだと思います。
そして、リソースを使うことに加え解決の責任も伴います。
責任というと重たい言葉ですが、解決できない人間に仕事は任せないわけで、つまり、解決に責任が伴います。
壊れたPC、繋がらないスマホ、傾いた家、腐った食べ物にお金払いますか?払わないですよね?
仕事を任せるということはそういう「期待される成果」を求められている、つまり任される側にはそれを果たす責任が伴うことになります。

理解しておいて欲しいこと

会社や組織に属している人、プロジェクトに参画してる人、全員に言えるのが、「顧客の期待に応える」責任が発生しているということ。

プロ野球で例えてみます。

日本のプロ野球選手は、基本的にドラフトで指名され入団します。
多くの選手は入団後2〜3年2軍で体力づくりや、プロレベルの試合経験を積みます。 その中で結果を出した人が1軍に上がり、少ないチャンスをものにした人がレギュラーとして試合に出続けます。

ここで何を言いたいかというと

  • 「できないから教えてください」スタンスの選手はいない(少なくとも1軍レベルには)
  • 1〜2年で1軍レベルの結果が出ないからといって諦めたり不貞腐れる人はいない
  • 成果のために日々試行錯誤と努力をしている

駆け出しエンジニアにも同じようなことが言えると思っていて

  • 「分からないことは教わる」スタンスでは主力にはなれない
  • 1〜2年で5〜10年やってる主力の先輩たちと同等の成果を求めたって大抵無理(たまにいるかも)
  • 試行錯誤や努力をやめたら成長は止まる

最後に

主力になりたい、稼ぎたい、やりたいようにやりたい。
そう思うのであれば、プロスポーツの一流でやってる人たちの考え方を真似るのが良いと思っています。

  • 少ないチャンスをいかにモノにするか
  • チャンスをモノにするために準備はできているか?しているか?
  • チャンスを呼び込むための種まきはしているか?
  • 1〜2年で心折れてないか?
  • 試行錯誤、努力を諦めていないか?

スキルが身につくか?成長するか?学びがあるか?
当然、環境として存在することは必要条件ですが、最後は本人がどう取り組むか次第だと思うので、いつまでも大学の大教室に行く感覚で「出席すればOK」という感覚は、邪魔になるのでさっさと捨てましょう。
自ら取りに行く、取りに行ってもアサインされない場合は信用、信頼が足りないので、信頼、信用を勝ち取りましょう。
上司が無能とか、会社がいけてないとか、他責にする前に自分がやれることを全てやりましょう。
それが社会人だし、大人だと思ってます。

【ゲーミフィケーション】集中力とモチベーションを維持向上させる

エンジニア組織でマネジメントをしています。

普段から、チームや後輩に対して、「ゲーム感覚で仕事やれると良い」ということを伝えているのですが、科学的に証明されてることがやはりあったのでいくつか紹介してみようと思います。

ゲーミフィケーションとは

いわゆるゲーム化することです。 仕事や、家事、その他日々発生するタスクをゲーム化することを意味します。

参考図書

ゲーミフィケーションするためのアクションプランとメリット

やりながら学ぶ、身につける

多くの人、特に完璧主義思考の強い民族である日本人には多い傾向にあると思いますが、「基本的な勉強をしてから実践にうつる」という考え方を否定し、
とりあえず始めてみて、つまずくたびに、そのつまずきを解消するために必要な知識やスキルを都度学んでいくという方法論です。

ゲームをやるときに、何かを学んでスキルを獲得してから始める人は殆どいないと思います。

たとえばRPGなどは以下のことやってから始める人はいますか?

  • 全行程を予めインプットする
  • 出てくるモンスターの技や特性をすべて事前に把握する
  • どこにどんなキャラクターが出てくるか事前に把握する

仕事なども同じで、都度学んでいくほうが効率も良いし、身につくスピードも早いです。
これはアクティブ・ラーニングの「自ら体験する」の過程での学びになるためです。
一方先に学ぶ形式でやるとどう頑張っても「読書」「視聴覚」レベルにしかなりませんので、効率には数倍の差がでます。

soepysoechang-af.hatenablog.jp

その際に、当然知らないものや、やったことないことに飛び込むことにはなる事もあるため、自分なりの工夫をし続け、トライ・アンド・エラーを繰り返していくことで、次回以降に向けた経験の蓄積が出来ます。

次に何をすべきか可視化する

迷ったときに、次何をやるか方向性が分かっているかどうかで、集中力やモチベーションに大きな差が出てきます。

ゲームの世界では、お助けキャラが「まずあそこの村へ行って鍵を取ってくるのじゃ」とか教えてくれたり、行けるステージまでしか道がつながっていなかったりしています。
これは、いわば次にやることを限定していて、プレイヤーの進むべき方向や順番を可視化してくれていると言えるでしょう。

ポケモン世代の私の場合、

  • マサラタウンを出発したら、四天王に挑戦するために各地のジムリーダーからバッチを貰う必要があります
  • 概ね戦える順番は決まっています

そういう感じで、次に進むべき方向がなんとなく決められているので「タケシに勝ったら、カスミ」みたいに次がわかったりします。
それによって、次に進みたい意欲やモチベーションが掻き立てられると同時に、「明日はここまで進めたい」と目標設定すらできるようになります。

仕事でも同様のことが言えて、デカいプロジェクトか、小さいタスクかは問わず、次何をすべきかの方向性がわかっているだけで、目標が決められるだけでなく、予定も立てられます。
そしてタスクごとの合間に「次何やろうか」と迷うことで一気に集中力が途切れ、戻ってこれないという経験をしたことある人は多いと思いますが、そのようなことを限りなく減らすことができます。

またこれらの「次の方向性がわかっている状態にする」「次何やるか迷わないようにする」話は、Developers Summit2023に登壇した際に「TODO分解で着実にゴールに迫る」「緊急度・重要度を見極め迷いなく」のあたりで話しました。

Developers Summit2023参考ページ

codezine.jp

損失回避思考

「これをやったら給料上がる」「これを成功させたら昇進できる」みたいな考え方ではなく、
「今これをやらないと二度と経験できない」「これが遅延すると、やりたいあのプロジェクトの担当が他者に回ってしまう」というような感じで考えることによって、
失う物事への恐怖を掻き立てることです。
そのタスクに対する集中力やモチベーションを高めることができるとともに、強い動機に繋がります。

得るものにフォーカスすることで人間は安定する方、確実性の高い方を求めることが、2002年ノーベル経済学章を受賞した経済学者のダニエル・カーネマン等によって提唱されています。(プロスペクト理論
成長や成功を求めるのであれば、失うものに対してフォーカスすることで、リスクを取って成長、成功に向かって行動することができるようになります。

参考wiki

プロスペクト理論

損失回避思考を上手く運用するには「取り上げインセンティブ」を活用するのが良いです。

例えば

  • 太った旦那にダイエットして欲しいと思っている妻がいるとします。
  • 3ヶ月後に5キロ減量していることが目標です。
  • 旦那は今一番欲しいものが「10万円する新しいゴルフのドライバー」です。

多くの場合は以下のようなアクションプランを選択しがちです。

  • 3ヶ月後に5キロ減っていたら10万円のドライバーを買い与える

しかし、これの場合、失敗したところで旦那にデメリットはありません。損失するものが無いのです。(奥さんの気持ちは失うかもしれませんがw)

一方、損失回避思考を活用する場合、以下のようなアクションプランにします。

  • まず10万円のドライバーを買い与える
  • 3ヶ月後に5キロ減っていなかったらメルカリで売るからね

これにより旦那は成功しなければ、ドライバーを3ヶ月後に失うことになります。
これは旦那にとってデメリット(損失)が発生することになるので、前述のアクションプランに比べ、モチベーションを高く出来、成功率が向上しそうなことは容易に推測できます。

仕事の中でもこういうことを上手く組み込むことで、成功率を上げることができるということです。

進展フィードバック(プログレスフィードバック)

目標までどの程度近づいているのか、把握できる仕組みを持っているか?
習慣が継続できているかを把握できる仕組みを持っているか?
これが仕事や趣味などで重要なポイントです。

特に仕事や筋トレなど多少の苦痛を伴うものについては、目標やゴールだけでは足りず、確実に前進している感覚が最もモチベーションを上げます。

例えば私はソフトウェアエンジニアをやっていますが、機能開発や不具合修正をする際には、
「XXXという機能をYYYY/MM/DDまでに出す」とか「XXXというバグを直す」ではなく、もっと細かいTODOに落とし込みます。

  • 不具合再現
  • 原因箇所の特定
  • 修正&テストコード(TDD
  • PR作成
  • E2Eテスト作成
  • リリースノート作成
  • Review
  • Build&Deploy
  • 打鍵

こうなっていると0 vs 100の進捗ではなく~10%刻みの進捗が見えるだけでなく、1個のTODOが見積もれるし、
1個でも終われば「今日は1個終わった」という感じで進んでいる感覚を味わうことができます。

これはTODOを刻まずに0%の進捗よりもプログレスバーがどんどん伸びる感覚によってモチベーションがキープできます。

また、習慣化の観点で最も困難な「継続すること」については、継続日数や継続回数をポイント制にしてしまうことが良いです。
1日やったら1Point、1週間やったら7Pointのようにです。
あとは、習慣が途切れたら2回継続したら1Pointとすることで、1度途切れても習慣をもとに戻すことが比較的容易になるのです。

ポケモン世代の私の場合、ポケモンで例えると、
レベルが上がるほど必要な経験値は増えるのですが、金銀から経験値のインジケーターが実装されました。
これにより「もうちょっとでレベル上がるからやり切っちゃおう」とかなるわけです。ほらね?継続できそうでしょ?

今自分がどの位置にいて、あとどれくらいで目指すべき場所にたどり着きそうか、それをみえる状態にしておくことは様々な理由で重要なのです。

そしてこれらは、プロジェクトマネジメントでも活用できるノウハウなのでぜひ身に付けたい方法論だと思います。

※進捗の重要性についてはマネージャーの最も大切な仕事-進捗の法則という別記事に記載しています。

最後に

※追記していくつもりです

長時間労働が苦じゃなくてもやめろ

新卒が入ってきて1ヶ月が経とうとしているが、

若者に多いのが

 

「とりあえずたくさん働いて早く戦力になりたい」

「とにかく多くのことを経験して早く成長したい」

みたいなやつ。

 

めちゃくちゃいい心構えだ!

 

ただ一つだけ言っておこう。

 

「長い時間働いて成果を出そうとするのは早いうちに無理が出るのでやめておけ」

 

 

できる限り早いうちに、短時間で成果を出すには?をとことん考え続けて、

最小労力最大成果を求めて、自らの仕事を改善していくべきである。

 

私がなぜ長時間労働をやめた方がいいと考えているかの理由は以下である。

 

 

1. 定年までそのノリでは絶対無理だから

 

よく考えればわかる。両親に聞いてみたらよい「1日12時間、週5日働ける?」

「お前はバカか。無理に決まってる。」

 

ちなみに私ももう無理。1日2日ならまあなんとか。でも次の日6時間くらいで終わらせる。

 

2. 今はいいけど5〜10年経って家庭を持ったら時間なくなるよ?

 

子育てパパ、ママが社内でどう立ち居振る舞っているか見てください。

12時間以上拘束されてる人はまずいない。

(いやうそ、たまにいる)

子供の相手、家事など、仕事と自分のこと以外にもやることが増える。

 

ちなみに私はまだこのフェーズではない。

 

 

3.プライベートの時間、人脈作りの時間なくなるよ?

 

シンプルに「趣味ないの?」「女作らないの?」という感じのやつ。

 

仕事一本の人

趣味にも全力出してる人

副業やってる人

女がいる男

 

どれが1番パフォーマンス低いかって分かります?

 

...分かりませんw

 

でもある研究によると、複数のものに全力投球してる人の方が相乗効果で双方にメリットが出るそうです。

 

まあ、シンプルに「Netflix見たくないの?」ということ。

 

とりあえず思いついたので書き残しておくことにする。

 

まあ兎にも角にも最初に書いた

 

 できる限り早いうちに、短時間で成果を出すには?をとことん考え続けて、

 最小労力最大成果を求めて、自らの仕事を改善していくべきである。

 

ということである。

炎上案件にしないために私が考えてる事

スマホから失礼します。

※あとでメンテするかも。

 

久々の投稿です。

 

以下の投稿を見て、社内のSlackにも投下したけどここでも投下しておく。

https://twitter.com/chio_pkmn2gen/status/1511308395134943239?s=21&t=hFNH09Vjmsw9XwcdyOEtxw

 

燃える理由の一つとして、
オーバーコミットと、スコープ削る余地を前もって用意してないところだと思うんですよね。

 

オーバーコミットは、自分やチームを必要以上に過大評価してるか、
自己分析できてないことによる「根拠のない自信」でOKしちゃう。

 

スコープ削る余地については、
事前にやると言ったこと(BackLogに積まれてるものなど)が100とした場合、
最悪の状況になった時に、10くらいまで削れるだけのタスク分解、機能の分解、プロセスの分解が出来てるか?てところかなと。

 

(あとは、事前に合意を取っておく、もしくは匂わせておく)

 

私のチームのメンバーには申し訳ないが、自分も含め「まだまだやれる、でも今は全然出来ない」というスタンスなので、かなり過小評価で見積もりも、スコープも決めます。


それゆえに「車を出荷できたらいいけど、まずスケボー完成させよ!時間あったらスクーターにしよ!」みたいなイメージで、
機能もtodoも開発する順番も分解して再構築して、、、てのを結構ふとした時に考えるようにしている。

 

ふとした瞬間に思いつくので、日々戦略が見直されます。でもそれが妥当ならそれがアジャイルとしては正解だと思ってます。


いきなり完成品を作ろうとしないで、順を追って。的な。

 

それゆえに悪い意味でなんでも完璧にしてからやろうとすることに結構「むっ」とするようになった気はする。

 


いいことだけど、
3分の1の段階ですでに合格点だった時、
残りの3分の2は後回しでも良い。
むしろその3分の2の時間を使って別のタスクをやるべき。

 


日本人は完璧主義が多いから100点を目指しがちだが、
ビジネスの世界では100点を1個取るより、
60点(合格点)を10個取る方が価値があるし優秀と言われることが多い。(と思う)

 

 

以上。読みにくくてすみません。

最も効率のいい勉強法を身に着けてからいい感じな話

効率のいい勉強方法を簡単に説明すると、「世の中の小中学校でやっていない勉強法」となるかと思います。
小中学校の勉強法否定しているわけではなく、科学的根拠のない、むしろ科学的に否定された方法論により行われていることが多いということです。

今回は、私が学び、実践している効率のいい勉強法の一部を紹介しつつ、さらに効率化を求め学んでいる内容について整理していこうと思います。

この内容はおそらくどんな分野でも実践でき生かすことができますので、ぜひ学んで日々の仕事、生活などに生かしていただければと思います。
ちょっと文章だけで長いので読みにくいかもですが。

普段の私の学び方

私は普段ITエンジニアとして働いていますが、ご存じの通りIT業界は技術の入れ替わりや、トレンドの変化が超高速であり、去年学んだことはもう古いということもザラにあります。
そんな中で、日々新たなことを学んでいくにはそのような方法論が良いのでしょうか??

私が新しいこと、経験したことないことを自らに定着させる手法として実践しているのは「アクティブラーニング」つまり積極的学習です。
こういうと抽象的でわかりにくいのですが、簡単に言うと「受け身ではない」「手や頭をガンガン使う」「アウトプットしながら学ぶ」というと少しわかりやすいでしょうか?

アクティブラーニング

出典:The Learning Pyramid . アメリカ National Traning Laboratories
この図で言うところの「自ら体験する」「他の人に教える」あたりです。

基本的にはまず以下の手順を実施していることが多いです。

  • 情報を収集しつつ関連情報まで探し集める(input)
  • 実際に手を動かす(output1)
  • 三者に伝えるためのブログ(ドキュメント)や勉強会コンテンツとしてまとめる(output2)

正直この3段階だけです。

情報をキャッチしたらまずその情報とその周辺知識などをとにかくinputします。
inputは学校の授業でもやっていますが、そこにはアクティブさはない場合が多いです。
小学校や中学校で勉強ができる子供は多くの場合「意欲的に」授業に取り組んでいます(一部天才が紛れています)。
どういうことかというと、
毎日学校があり、学校が決めた順番に授業があり、先生の説明していることを板書していき、たまに練習問題を解く。
というのが多くの義務教育で実践されている手法です。
子供の「裁量」が入る余地はあまりありません。
裁量が入らないということは「やらされ勉強」になりやすいということです。
しかし勉強のできる子供は、「やらされ勉強になってはためにならない」「この授業で自分は何を学ぼうか?」のような思考が自然と、無意識に働いていることが多いと思います。
これによって、勉強できる子は「アクティブ」に日々の授業に取り組み、結果として多くのことを「授業中に」学び取っていきます。
性格の差ももちろんあるでしょうが、取り組む姿勢、意識の向け方次第で変わる部分は大きいです。

話がそれました。
inputの次はとにかくoutputをします。
あの手この手を駆使し実際に使ってみる。とにかく数をこなす。そういう感じです。
それにより、体に刷り込んでいくイメージです。結果これが一番定着には効いています(私の場合)。

そして最後にもう一個のoutputである「第三者に伝える」ということをやります。
これは割と最近やるようになったものですが、誰かに教えるということは、少なくとも自分が理解している必要があります。
理解している状態というのは、知識や技術が体系化されており、いつでも使える状態にある、極論、無意識的有能の状態だと考えています。
その状態を作るためには、誰かに教えるのが最も効率が良いのです。

  • 教えるためには、自分が理解していなければならない
  • 理解するためには体系化していなければならない
  • 体系化するには、あらゆる情報を整理しなければならない
  • 整理するには、内容を理解しなければならない

・・・

のように、人に教えるためには、必然的に自分の中の情報を再整理する仕組みが働き、足りない知識を補い、あいまいな部分を埋めるなど、理解につながるあらゆることをすることになります。
この過程で人間は知識や技術が定着し、理解度が上がり、体系的な知識、技術として使いこなせる段階に行けます。

私は多くの物事に対し、この手法を応用し、日々新しいことを身に着けていっているわけです。


しかし、まだまだ改善の余地はあります。そこで今回紹介するのが既出の内容を超える(肉付けする)最も効率のいい勉強法です。
実際私もこれから自分の勉強法に取り入れなければならないものも多いので、日々学んでいるところです。

参考書籍は以下

この中からアクティブラーニングの方法論についてをかいつまんでまとめてみます。

効率のいい勉強法とは

アクティブラーニングとは言ってもどうしたらいいのか?となりますが、大きく2つの方法論があります。
想起、再言語化の2つです。それぞれについて説明をしていきます。

想起

想起とはすなわち「思い出すこと」です。
忘れかけたことや学んだことを思い出したりするときに、脳が活性化し、ニューロンの組み換え、整理が行われ、より記憶が強化されます。
ここでは順に方法論を説明していきます。

クイズ化

クイズ化はそのままで、知識などを学んだ際にクイズ形式にすることで、定着しやすくなるというものです。
ミニテストにしてみる、単語カードにしてみるなど。。。
心理学の世界では「検索練習」と呼ばれているらしく、単なるテキストの再読と比べ50~70%も記憶の定着率が上がるといわれています。
そして有効性を上げるには、できるだけ頻繁に、細かい単位でテストするのが良いそうです。
例えば、本を読んでいるときは1ページや1章など、受験勉強や資格試験なら1単元ごとに毎日やるくらい細かいほうが、想起の回数が増え、定着率が上がりやすくなります。

分散学習

分散学習とは、「復習の期間を徐々に伸ばすテクニック」です。
最も科学的によいとされる復習の頻度は「ピョートル・ウォズニアック」が考案した、平均して90%を忘れた状態になったタイミングで復習をするという仕組みです。
頻度としては以下のようになります。

  • 1回目の復習は1~2日後におこなう
  • 2回目の復習は7日後におこなう
  • 3回目の復習は16日後におこなう
  • 4回目の復習は35日後におこなう
  • 5回目の復習は62日後におこなう

記憶というのは「忘れかけている時」に復習するのが最も良いとされていることからも、90%を忘れた状態になったタイミングで復習をするのが良いということがわかります。

またインターリービングという「1度の練習に複数のスキルを交互に練習する」というテクニックもあります。
かつては、「ブロック練習」といわれる、1つのスキルを集中的に練習するのが良いとされていましたが、1つのセッションで複数のスキルを練習する方が上達が速いということが、南フロリダ大学の研究などから明らかになっています。
メジャーリーガーが、幼少期は野球だけでなくアメフトやバスケを同時期にやっている人が多いことなどからもわかる通り、同じことを集中してやるよりも能力を伸ばすには、いろいろなものを同時期に交互にやるのが良いことがわかっています。

チャンク化

チャンクとは「意味のあるかたまり」のこと、つまり知識や情報を何らかの法則に基づいてグルーピングし、頭に残りやすくすることです。
書籍内では一例として電話番号の例が挙げられていますが、「090XXXXYYYY」よりも「090-XXXX-YYYY」のように間にハイフンが入ることによって、意味のある塊に分けることができ、記憶しやすくなるという例です。

チャンク化は各自で自由に法則を決めることができるので、多様なグルーピングが可能だが、迷った時のコツを紹介しています。

  1. 情報の優先度をつける
  2. 複数の解法をセットで記憶する
  3. マインドマップでオリジナルチャンクをつくる

といった感じです。
優先度や重要度だけでもその情報が「優先度」という法則でグルーピングされるので、記憶に残りやすくなるわけです。

言語化

言語化とは、その名の通り、難しい内容を自分の言葉で言い換えること。
学んだ内容の理解度を深めるのに有効です。

自己解説

自己解説とはいわゆる「自問自答」、とくに「WHY」「HOW」を重視します。
学んだことに対し「なぜそうなのか」「どうやってそうなるのか」のように、自分で問いを作り、それに対し回答していくスタイルです。
学校で板書をうつし、先生の解説を聞きわかった気になる人は多いでしょうが、それは真の理解にはなっていません。
その内容を自分の中で咀嚼し、使いこなして初めて定着したといえるのです。
その「もうわかった」「理解した」を回避するのに有効です。

ティーチング・テクニック

ティーチング・テクニックとは「勉強した内容を他人に説明してみる手法」です。
最大のメリットは以下の3つでしょうか。

  • 人に教えるには自分の理解度を高めておく必要がある
  • 人に正しく教えるためのプレッシャーが勉強中にかかっているのできっちりやる
  • 人に理解してもらうには、説明の仕方に工夫が必要

単に勉強するよりも、効果が高いのは科学的にも一定の評価があります。

ティーチング・テクニックには大きく4種類があります。

教えるつもり勉強法

他人に教えようといったってそんな機会ないわ!て人はこの「教えるつもり勉強法」が有効です。
書籍では、「この後他の生徒に説明してください」といわれた学生は、「この後テストをします」といわれた学生に比べ、正答率が28%も高くなるというワシントン大学の例が上がっています。
ただセルフモチベートするのはやはり難しいので、筆者(私)は、ブログや、社内Wikiなどにアウトプットしたり、定期的に枠が存在する社内勉強会を利用する前提で学んだりします。
「教えるつもり勉強法」というより、もはや「教える前提勉強法」ですが。。。

バーダック勉強法

エンジニア界隈だとご存じの方も多いかもしれませんが、口に出して説明する、つまり「音読」です。
ラバーダッキングとは、一般にアヒルのおもちゃに対し、話しかけるようにプログラムの内容を説明していくというものですが、これを勉強法に当てはめたものです。

10歳児教授法

この問題を10歳の子供に教えるにはどうすればいいだろうか?と考えてみるテクニックです。
高等な専門用語は使えないし、子供にもわかるようにたとえ話や言い換えが必要となる点で、学んだことに対する理解力が深まります。

グループ・ゲーミング

高校生のころなどにやったことあるかもしれませんが、仲間と教えあいをするテクニックです。
ただ少し違うのは、問題の出し合いではないし、ゼミの輪読会とも異なります。
方法論としては以下のようなものが紹介されています。

  • 適当な勉強期間を設ける(2~3日)
  • 教えあいをする範囲を決め、それぞれが勉強する
  • 本番当日に、参加者に番号を割り振る
  • 範囲の中からランダムに問題を決める
  • さいころを振って、出た数字の人がその範囲の問題を解説する

この方法論のメリットとしては、

  • 事前に範囲を決めておける(準備期間がある)
  • 輪読会のように前もって担当範囲を決めるわけではないので、すべてを学ぶ必要がある
  • 教えるつもり勉強法の効果もあり理解度が増す

という、かなり画期的な方法だと感じます。

イメージング

イメージングとは「頭の中に何らかのシーンを思い描く」ことで学習効果を促進させるテクニックです。
ここでは2つを紹介しておきます。

ソロモン・イメージング

「あの人だったらどのように考え、どのような解き方をし、どのような説明をするか」のように、誰かの視点に立ってイメージすることです。
客観的視点が持てること、異なる視点をもってその問題に向き合える点で、いわゆる「6色ハット」と同様の効果が期待できると思います。

パーソナライズ音読

英語の理解力やスピーキングのために開発された手法で、文中の主人公をすべて自分を表すI,my,meに置き換えてみるという手法です。
他人事のものより、自分事のもののほうがイメージしやすく理解度も上がるという兵庫大学の研究結果が出ています。

最後に

ここまで読んでいただきありがとうございます。
書籍の要約というか抜粋のため、すべてを書くわけにはいきませんが、方法論として重要な部分を紹介しました。
私自身できていること、意識していることもあれば、全然できていないこともありますが、日々の勉強方法の参考になれば幸いです。

立憲民主党枝野代表の会見を見て違和感を持ったので書かせていただきます

以下の動画を見ていて、会見中にいくつか違和感をもったので、私なりに思ったことを記事にしようと思います。
また、それらについて考えるうえで、私の個人的な意見もいくつか出てきたので、それらも併せて記載しようと思います。(ライティングへたくそなので明確でないかもしれませんがご了承ください。)
なお私は政治家になるつもりはありませんが、一国民として政治に物申す権利は有しているため気になったことを発信させていただきます。
賛否両論は受け付けますが、過度な煽りや、悪口、人格否定については受け付けません。

www.youtube.com

小選挙区制度は政権選択選挙を意図した制度であり、一騎討ちの構造が理想である

こんな感じの発言がありましたが、私はこの点に違和感を感じました。
まず、ダイバーシティー、LGBTQの人権問題等、あらゆる価値観を許容していこうとしている中で、小選挙区制度とはいえ、一騎討が果たしていいのでしょうか?
一騎討の場合、「白か黒」「右か左」「保守か改革」「与党か野党」のように2つに1つの選択肢であるべきという風にとらえることができます。
しかし、あらゆる価値観を許容するのであれば多くの選択肢を用意するのが、本来、有権者の代表を選択する国政選挙、統一地方選挙などの理想であるのではないでしょうか?

小選挙区を軸に政権選択してもらう

リベラル思想(だと思っている)の立憲民主の代表が、選挙制度という一種のバイアス、前提条件を変えない前提での発言をしているように見えます。
公平性や自由のために積極的に政治をしていこうという組織なのであれば、より多くの意思を反映できる中選挙区比例代表制のみの仕組みのほうが、死票も減らせるし、いいと思うのですが、そういう考えはないのだろうか?
あくまで小選挙区制度にこだわって自民党と一騎打ちしたいのだろうか?

野党共闘はむしろ選択肢をなくしている

今回、立憲民主党共産党は、野党統一候補を擁立していますが、立憲民主を支持している人の選挙区に共産党候補が立候補している場合、誰を選べばいいのでしょう(きっと白票かそれ以外の政党だろうとは思う)。
結果的に自ら負けに行っているのだと思うが果たして。。。

個人的に

小選挙区制度は政権選択、2大政党制には適した制度だと思うが、今の日本は自民党とその他大勢」の構造だと思っている。
こういう場合、第2極となる野党がいない場合は、自民党反対の受け皿となる多くの意見を反映できる仕組みが必要なのではないかと思う。
つまり冒頭で記載した通り、一騎討ではなく多くの選択肢を提供し、死票を減らすことで偏りない野党の仕組みができると考えます。

政権選択の色を残す観点で、小選挙区でもいいが、過半数当選にすることで、おそらく選挙結果の様相は変わるのではないかと思う。
今の制度では過半数当選はできないので、自民党総裁選の決選投票方式を流用し、第2,第3候補まで投票することにしてみたらどうだろうか。

当然、集計がマンパワーでは実質無理なので、ネット選挙が前提とはなるだろうが。

テストコードを書くのに技術は要らない〜ノリと勢い、気合と根性〜

Qiitaに書くか迷ったけどなんか違うと思ったから個人ブログにします。

 

 

弊社はパッチの出荷サイクルが3ヶ月で、1ヶ月単位で締め切りがある。

つまり1回の出荷に向け3回のイテレーションが存在する。

 


私は、下っ端のペーペーエンジニアなのだが、21.07〜21.09の間にとあるパッケージ以下にアサート数ベースで軽く200〜300くらいテスト書いた。

 


っと、言い忘れていだが、Javaがメイン言語である。そしてかなり大規模パッケージシステムである。

 


ここまでで違和感を感じた方も多くいるだろう。

「え?年間4回しか出荷ないの?」「え?テスト200〜300書いたくらいで偉そうにしてんの?」

て思ったそこのあなた、、健全だと思います!

 


弊社ではテストコードを書く文化が無いのです。

いや、正確にいうと、テストがなくてもmasterにマージできるし、出荷もできるのです。

 


最近では一部のプロダクトでは、DX criteriaにのっとり長期目標として全クラス、全モジュールの50%以上にテストコードがある状態を目指して、ムーブメントが起き始め、徐々に他プロダクトに波及し始めている。

 

参考:

https://dxcriteria.cto-a.org/63c678561a6e449a9dab7f239bae29da


そんな中時代に乗り遅れてる弊社のエンジニアや、できない理由をこじつけてやらないエンジニア、わからないかやって無いエンジニアに向けて私の考えを書いておこうと思う。

 


200〜300とは言ったが、具体的な数は数えてない&もっといい書き方とかあると思う。

ただ黎明期はとりあえずノリと勢い、気合と根性でいいと思ってる。(スタートアップ企業と同じく)

 


・書く必要があるかないか

工数足りるか

 


あたりは、書いてみてどうにもこうにもやれないなーと思ってから考えることにしている。

※実際意外と書けるし、工数も足りる

 


ゆえにここ最近は全てのプルリク(または出荷対象全てのクラス)に原則なんらかのテストコードが入った状態である。

 


新たに生み出したクラスは、ロジックが既存(extract method + move)でも原則全メソッド全カバレッジ

 


このくらいのノリと勢いで半年くらい続けて、たまに私より優秀で書けるエンジニアにSOSしてたら、呼吸をするかの如く書けるようにはなると思う。

※たまに睡眠時無呼吸症候群とか過呼吸はあるけど

 


英語できねーけどプログラムはできる。

それは毎日読み書きしてるから。

※英語はたまにしかやらない。

 


いいコード書けるようになりたかったら、とにかくまず考えるより書く。書く機会がないなら上司に貰ってください。もしくは勝手に書いていいと思う。

そしてクソみたいなコード書いてレビューでクソほど指摘もらって、毎日毎日少しずつ前進すれば、そのうち「あの人コード書けるよね」になるはず。

 


あの人は才能があるから書けるんだ。知識があるから書けるんだ。

ある種そうかもしれないが、だとしたら私は例外か?

 


別に才能もないし、Java始めたのは入社してからだし、大学入学するまで実家にパソコンなんかなかった。

 


そんな私でもそれなりにテストコードを書いているし、少なく見積もっても、同じプロダクトを開発してるエンジニアの中でも、5本の指が、、、5本の指に入るくらいのレベル感で書けるようになっている。(3〜40人いる)

 


要するにやるかやらないかだけである。

 


工夫とか質とか、綺麗なコード書かなきゃとか、偉そうに考える前に、アサート1個書いてからそういうことは言いましょう。

 


テストコードは重要だけど、やっぱりプロダクトコードと比較すれば、プライオリティは下がる。それゆえに多少クソコードでもいいと思う。最初のうちは。最初のうちはね。

 


とにかくやるんだよ。

着手は誰にでもできる。技術でもなければスキルでもない(同じか)。

着手して、詰まったら聞く、調べる。

そうやって日進月歩していくしかないと思いますよ。

 


そのうちめちゃくちゃ普通に書けるようになってますって!最初だけつらいだろうよ?全然自力で書けなくて。

でも書けるようになるからやろうや!

 

 

 

と、まあこれで1人でも「テスト書きたい」「教えてください」「ここどうやったらいいですか?」と聞いてくる人が増えたら幸いです。