ふりかえりって楽しい(2020.04.13 ~ 2020.04.19の週報)
今週考えていたこと
- ふりかえり会をやる意味について
- 短期的に達成したいこと
- コミュニケーション不足の解消
- コントローラブルなことに目を向けることでのストレス軽減
- 中期的に達成したいこと
- あんまり考えてなかったかも
- まず短期の目標達成が優先
- 先の計画を立てて行動するのが苦手
- その時の状況、環境などを考慮して決めていけばいいのでは?
- あんまり考えてなかったかも
- 長期的に達成したいこと
- 会社の文化としてふりかえり会が定着している
- 会社の文化って誰が作るの?
- 会社にいる個人の良さがうまくマージ(溶け合って)して出来上がるものというイメージ
- そうした時に考えるべきことは、自分の良さとか自分が得意なこと、好きなことを黙々とやっていくこと。
- 意図して作ろうとすると、しらけた感じになりそう
- 会社の文化って誰が作るの?
- 会社の文化としてふりかえり会が定着している
- 短期的に達成したいこと
フロント
- TypeScriptの型
- Literal型
let clothSize: "small" | "medium" | "large" = "large" const cloth = { color: "white", size: clothSize } cloth.size = "small" // compile error
- typeエイリアス
- void型
- TypeScriptは関数でundefinedを返すことを許していない
- ただし、return文があるときはコンパイルが通る
- TypeScriptは関数でundefinedを返すことを許していない
- unknown型
- anyより少し厳しい制約がある。
- 基本的にanyと同じく代入できるが、代入した値を利用する時には、型を保証する必要がある
let unkniwnInput: unknown let text: string unkniwnInput = "hello" text = unkniwnInput // Type 'unknown' is not assignable to type 'string'. if (typeof unkniwnInput === "string"){ text = unkniwnInput }
- TypeScriptのコンパイラー
- tsconfig.json
- include/exclude
- sorceMap
- ブラウザでTypeScriptをデバッグしたい時に使用する。
- JavaScriptからTypeScriptを生成する際に使用される
- ブラウザでTypeScriptをデバッグしたい時に使用する。
- tsconfig.json
- TypeScriptでClassを使う
- 「this」の範囲
- 範囲というかパターンで理解するのが良さそう
- https://qiita.com/takeharu/items/9935ce476a17d6258e27
- TypeScriptでclassを書くと、classが型になる
- 「this」の範囲
- Interface
- Objectの型
- オブジェクトのみ利用可能 <=> Type
- オブジェクトにはInterface, 変数はTypeを利用する
- Interfaceを満たしているのであれば、問題なし
- 部分的に構造を定義することが可能
- Interfaceで関数の型を定義する
- Objectの型
interface addFunc { (num1: number, num2: number): number; }
- インターセクション
type NumberBoolean = number | boolean type StringNumber = string | number type Mix = NumberBoolean & StringNumber const TEST1 : Mix = "TEST" // TS2322: Type '"TEST"' is not assignable to type 'number'. const TEST2 : Mix = true // TS2322: Type 'true' is not assignable to type 'number'. const TEST3 : Mix = 100
- Type Guard
class Dog { speak() { console.log("bow") } } class Bird { speak(){ console.log("tweet") } fly(){ console.log("fly") } } type Pet = Dog | Bird function havePet(pet: Pet) { if(pet instanceof Bird){ pet.fly() } }
- [https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/instanceof](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/instanceof)
// HTMLElement => HTMLInputElementへの型アサーション const input1 = <HTMLInputElement>document.getElementById("input") const input2 = document.getElementById("input") as HTMLInputElement // jsxを使用している時にはこちらの方が紛らわしくない (document.getElementById("input") as HTMLInputElement).value = "hogehoge"
interface Designer { name: string; age: number; [index: string]: string } // TS2411: Property 'age' of type 'number' is not assignable to string index type 'string'. interface Designer{ name: string; age: srting; [index: string]: string } // ok
- 関数のオーバロード
function toUpperCase(x: string): string; function toUpperCase(x: number): number; function toUpperCase(x: string | number): string | number { if (typeof x === "string"){ return x.toUpperCase() } return x } const hello1 = toUpperCase("hello")// string const hello2 = toUpperCase(20) // number
- Nullish Coalescing
const downLoadData: DownLoadedData = { id: 1 } const userData = downLoadData.user ?? "not-set" // undefined or null の時に「not-set」になる
[https://blog.jxck.io/entries/2019-08-14/nullish-coalescing-optional-chaining.html](https://blog.jxck.io/entries/2019-08-14/nullish-coalescing-optional-chaining.html)
- LookUp型
- objectのメンバー型を取得する方法
interface DownLoadedData { id: number; user: { name?: { first: string; last: string } } } type id = DownLoadedData['id'] // number type user = DownLoadedData['user'] // user
- ジェネリクス
- 型を引数として受け入れる機能
function copy<T>(value:T): T { return value } console.log(copy<string>("ddd").toUpperCase()) class DataBase<T extends string | number | boolean> { private data:T[] = []; add(item: T){ this.data.push(item) } remove(item: T){ this.data.splice(this.data.indexOf(item), 1) } get(){ return this.data } } const database1 = new DataBase<string>() database1.add("string-only") const database2 = new DataBase<number>() database2.add(11) const database3 = new DataBase<boolean>() database3.add(true)
- kyeof
// 柔軟なジェネリクスを作りたい時 function copy<T extends {name: string}, U extends keyof T>(value:T, key: U) { return value[key] } copy({name: "test", age: 20}, "age)
interface Todo { title: string; text: string; } type Todoable = Partial<Todo> // オプショナル型 const todo: Todoable = { title: "s" }
- conditional Types
type ConditionalType1 = "tomato" extends string ? number : boolean // number type ConditionalType2 = string extends "tomato" ? number : boolean // boolean
- nullとundefiend
- https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/null
- null は識別の欠如を表し、変数がオブジェクトを指してないことを示します。API においては、通常はオブジェクトが返されるところで、関連したオブジェクトがない場合に null がよく渡されます。
- https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/undefined
- まだ値が代入されていない変数は undefined 型となります。評価しようとしている変数に値が代入されていない場合、メソッドや文も undefined を返します
- https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/null
バックエンド
- Go
- map
- errors
- errorメッセージを使用するときに「:」を使用すると、見えにくくなる
io.Writer
io.Reader
- 入力の抽象化
- io.Readerの補助関数
- ioutil.ReadAll()
- 終端記号に当たるまで全てのデータを読み込む
- ioutil.ReadFull()
- 決まったバイト数だけ確実に読み込む
- ioutil.ReadAll()
buffer := make([]byte, 4) size, err := io.ReadFull(reader, buffer)
- io.Copy()
- https://golang.org/pkg/io/#Copy
- ファイルなどを読み込んで書き込む(つまりコピー)を行う
- https://golang.org/pkg/io/#Copy
r := strings.NewReader("some io.Reader stream to be read\n") if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) }
その他
- 正規表現
- メールアドレス の仕様
- Mongo
- DocumentValidation
- 変更、削除の時に注意が必要
- 差分のみを保存しようとするので、そういった観点で仕様を理解すると良さそう
- DocumentValidation
- コードを書くときにホスピタリティが足りない
- 自分にしか伝わらないコードを書いている
- リーダーシップについて
- 人を引っ張っていくことは自分には難しいかも
- でも、まずは自分が楽しむってことはできそう
- そのためには自分の解釈が大事
- まずは他者より自分を律する
学習中
- https://www.udemy.com/course/typescript-complete/
- 体系的に学習したい & 倍速でサクッと学習したい
- ハンズオンなのでわかりやすい
- Goならわかるシステムプログラミング
- 会社の上司に勧めらた本
- 難易度高いな〜と感じてて寝かせてたけど、気合入れて読んでみたら意外と読めてる
学習終了
こんなご時世だからこそ、自分ができることに集中したいよねと強く感じた1週間(2020.04.06 ~ 2020.04.12の週報)
今週のハイライト
- 会社のメンバーで1週間のふりかえりを試験的に始めてみました(僕が巻き込んだ形)
理由としては二つ
- リモートワークでコミュニケーションが減っており、ラフな話ができる機会を設けたいと感じた。
- コロナの影響でアンコントローラブルな事象は増えており、ストレスの変数が多くなっている。
なんで「ふりかえり」なの?
- 自分自身の行動・思考をふりかえることで、アンコントローラブルな事象ではなく「コントロールできる」ということに意識を向けることで、ストレスの軽減を実現したい
- どんなふりかえりをしたの?
- 「ファン・ダン・ラーン」というフレームワークを用いたふりかえり
- 「Fun」「Done」「Learn」という軸で、1週間の行動・考えていたことを書き出してもらう。
- あえて「KPT」はやらない
- 「ファン・ダン・ラーン」というフレームワークを用いたふりかえり
- やってみてどうだった?
- 自分が感じたこと
- ファシリテートとタイムキーパーを同時にやるのはむずい。ファシリテートに集中したい。
- スプレッドシートでにふりかえりを記載してもらったが、シートの構成、運用などあいまいな部分があると感じた。
- 自分が感じたこと
- 今後どうするの?
- 継続したいと思っている
- ふりかえりの力は、継続してようやく実感できるので、少なくとも1ヶ月は続けたい
- シートの改善、フレームワークの選択などチャレンジできることはたくさんあるので、少しづつやっていく
- 継続したいと思っている
今週のアウトプット
- 読んでいて面白いと感じた部分
・ 究極的に、技術というのは我々にとっては手段です。プロダクトの価値を最大化させ事業を成功させることこそが目的。この目的を忘れないことが非常に重要だと思っております。
・もともとザ・スタートアップの時にはモノリシックなPHPのシングルリポジトリのアプリケーションで動いていたのですが、やはり当時は少ない人数でrapidに開発していたというところで負債もたくさんたまっております。
- 感想
- 技術負債よりも別の課題解決を優先した結果、技術負債も溜まってしまう。スタートアップあるあるな気がする。
- 技術負債を見越して、「あえて実装しない」ということもできるようになりたいと感じた。(割と高等テクニックな気がする)
- スタートアップは1プロダクトに集中して開発することがほとんどなので、技術負債が出てしまうのは仕方ない気もする。
- 技術負債を許容した上で、ドメインの課題解決するのに力を注ぐことは適切ではあるけど、最適解ではない気がする
- では最適解は何か
- プロダクトのロードマップを描ける人間(プロダクトマネージャー)が、技術負債を意識した上で適切な機能開発を行うか、意思決定していくことだと思う。
- ドメインの課題解決と技術負債とのバランスを絶妙に取れる人が、初期のスタートアップには必要ではないか。
- 上記を実現できる人材は、なかなかいない印象がある。
- では最適解は何か
- 技術負債よりも別の課題解決を優先した結果、技術負債も溜まってしまう。スタートアップあるあるな気がする。
- 技術負債を見越して、「あえて実装しない」ということもできるようになりたいと感じた。(割と高等テクニックな気がする)
フロント
- コード分割
- useParams
- Avoid Export Default
- Option monad in TypeScript
- endWith
- キャッチ句の変数は型アノテーションを持つことはできません
- TypeScript
- JavaScriptの上位集合という理解
- なぜ使うのか
- ドキュメントとしての側面
- コードを読むことが容易になる => 開発効率が上がる
- Linterとしての側面
- ES5へのコンパイラとしての側面
- babel
- ドキュメントとしての側面
- TypeScriptの型とJavaScriptの型
- TS => 型検査(tsc) => JS => 型検査(JavaScriptエンジン) => ブラウザ
- それぞれの型検査は別物と考えた方が良い
- TS => 型検査(tsc) => JS => 型検査(JavaScriptエンジン) => ブラウザ
- Tuple
- 初期値の設定と変数の参照の時だけ型チェックが厳しい
バックエンド
- Goのstruct
- go では継承がないため、embed という形で field を引き継がせることができる。 interface の場合は interface のみを embed でき、struct の場合は interface, struct を embed できる
- yamlのinline
- Goのいけてるライブラリ
- int64型・uint64型からstring型へ変換する方法
- nil check
- Goの空文字判定
- mongo
- Goの正規表現
- https://medium.com/eureka-engineering/regexp%E3%81%A8%E3%81%AE%E4%BB%98%E3%81%8D%E5%90%88%E3%81%84%E6%96%B9-go%E8%A8%80%E8%AA%9E%E6%A8%99%E6%BA%96%E3%81%AE%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%A8%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-984b6cbeeb2b
- https://ashitani.jp/golangtips/tips_regexp.html
- Goのテスト実装パターン
- GoのUnmarshal
- Gin
その他
- ACL
- ネットワーク上のユーザーがアクセスできるサーバーやファイル、アプリケーションなどの情報を定義したリスト
- https://kotobank.jp/word/ACL-1317
- https://www.itbook.info/network/cisco24.html
- ホワイトリストとブラックリストをまとめたものをACLと定義づけている?二つを内包しているのかな?
- サッカーのトーナメントだと思った...
- MIMEタイプ
- クライアントに対して、転送するドキュメントの種類を伝える機能です。ウェブにおいて、ファイル名の拡張子は意味を持ちません
- RBAC
- ロールベースアクセスコントロールの略
- https://qiita.com/kawasima/items/8dd7eda743f2fdcad78e
- ジェイウォークの原則
- ポモドーロ
- 一番分かりやすい OAuth の説明
- nits
2020.03.30 ~ 2020.04.05
今週のハイライト
- あまり技術的なことをキャッチアップすることがなかった。詰まったことをメモ書きしているので、キャッチアップが少ないということは、詰まらずに作業できているのかも。
- リモートワーク疲れてきた。全く外に出れないことってストレスでしかない。身体的な疲れと言うよりも、「いつまで続くのか」という先が見えない状態にしんどさを感じている
- とはいえ、自分にできることにフォーカスして日々を過ごしたいと思っている。手洗いうがい、アルコール消毒!
- そろそろこの週報のクオリティも上げたい!
フロント
広域的に広く公開されるメソッド、変数に関しては省略しない方がよい
- グローバルに参照される変数、メソッドがある場合、名前を省略すると意図しない使い方になってしまい、結果バグとなる。
- そういったバグを避けるためにも、少し長くなってしまってもいいので、意味が正しく伝わるメソッド名、変数名を考えたい。
- 逆に狭いスコープなどの変数は省略してもいいのでは?
- private, ループの中での変数宣言など
- 逆に狭いスコープなどの変数は省略してもいいのでは?
TypeScript
- React useStateでオブジェクト扱いたい問題
バックエンド
脱Go言語初心者への道のり #1 〜オフィシャルガイドラインの作法【前編】〜
Effective Go
- 辞書的に使う。
- mongoのindex
- assert
- ginのbinding
- goのアンパサンド(&)とアスタリスク(*)
- goのsliceとarray
- [] string => sliceの宣言
- [...] => capを指定しないarrayの宣言
その他
- Markdown
- evernoteでマークダウン使えるの知らんかった
- 最近読んだ本
- ふりかえり読本 学び編~経験を力に変えるふりかえり~
- ふりかえりの重要性をわかりやすい言葉で解説してくれている。
- 具体的なふりかえり方法も解説してくれるので、個人でもチームでもすぐにアクションにつなげやすい。
- この本を読んでから、週報を書き始めた。
- ふりかえり読本 学び編~経験を力に変えるふりかえり~
2020.03.23 ~2020.03.29の週報
今週のハイライト
- 基本情報技術者試験を受けようと思ったけど、コロナの影響で中止。勉強に当ててた時間を別のことに使おうと思う。何勉強しようかな〜
フロントエンド
- モックサーバー
- フロントエンドの画面を作りたいだけならモックサーバー使えばいいやんって調べてた。
- ターミナル 開くとか、npm installするとかめんどくさいから、この機能をWebサービス化したらおもろいかもとか考えてた。
汎用的なコンポーネント の作り方
- React: 保守しやすいハイパフォーマンスの UI コンポーネントを作成する
- コンポーネントとロジックの分離を意識することはできてきたけど、分離を徹底することで複雑になる部分も発生するんだなと。この二つをいい塩梅に設計するのがちょっと楽しくなってきたかも。絶対的な設計はなくて、その時の状況に応じた「最適解」を探すことを大切にしたい。
- この設計の話をベテランのエンジニアさんと話したときに、「あ、自分の考え(スタンス)を持ってないや」と痛感した。「自分より経験のある人の意見 = 正解」って捉えているところがある。間違ってもいいから、自分のスタンスを明確にしたい。
Object.key().map(~)でレンダリングしようと思ったらされなかった話
- これなんだっけかな。オブジェクトのが配列をmapでループさせたいだけだったのに、描画されなくて、「なんだこれ?」って思ったらKeyをしてなかったみたいな感じだったような。Vueでも同じようなことをした気がする。
useState
React router のHistory
- routerに型をつけたくて、どうしたらいいのかと調べた。型っていいよね、安心する。特に、抽象的な処理を行っているライブラリを利用するときには、次に何をすべきか、何ができるのか推測できるのはストレスが少ない。
React Context
- 『コンテクストは、ある React コンポーネントのツリーに対して「グローバル」とみなすことができる、現在の認証済みユーザ・テーマ・優先言語といったデータを共有するために設計されています。』
React ref
- テーブルなどの複数の項目を描画させて、クリックした行のみclassを適用させたくて調べた気がする。結局、うまく使いこなせなくて断念してしまった。
Formik
TypeScript
- Object literal may only specify known properties,
型をつけたobjectを配列に入れる時
- const [xxx,yyyy] = useState<Array
>([])
- const [xxx,yyyy] = useState<Array
React Router
- オブジェクトを返せないので、async/awaitは返せない
- routerで非同期処理を行うことを想定していないのかも。ルーティングはできる限りシンプルすることが正義と感じた。
- ルーティングはユーザーに影響が大きいところなので、エンジニアが想像しづらいものになることは避けた方が良い。
import
Vue
- Vue.jsに書いてある「アロー関数は、this が期待する Vue インスタンスではなく・・・」とは?
- Vue.nextTickのコードリーディング
- 画面更新した後に関数を実行したいときなど
- Modal開いて、document.querySelectorするとか
nullアクセス
バックエンド
- docker exec -it
- Mongoの接続
- MongoDBコマンド一覧(自分用メモ) - Qiita
- dbのなかにcollectionがある
- MongoDB コマンドメモとか書き - Qiita
その他
- LRU(Least Recently Used)は、ページアウト要求があった場合に管理している中で「最後に参照された時刻が最も昔であるページ」を置換え対象とするアルゴリズムです。このアルゴリズムにより最近参照されたページが主記憶に残り、使用頻度の低いページは新しいページと入れ替わることになります
- PMBOKによればプロジェクトにマイナスの影響を与えるリスク(脅威)への対応戦略には「回避」「転嫁」「軽減」「受容」の4種類があります。
- 回避
リスクそのものの除去や、プロジェクトのスコープや目標を縮小・変更するなどしてリスクの影響をゼロにする戦略。
- 転嫁
リスクのある業務・作業のアウトソーシングや、損害保険の契約によってリスクによるマイナスの影響を第三者へ移転する戦略。
- 軽減
リスクの影響範囲を狭くしたり、発生確率を低減したりする戦略。
- 受容
リスクが現実化した時の影響が許容可能範囲内である場合やリスクの除去が困難であるときに、特に対策をせずにそのままにしておく戦略。対策費用が予想される損失金額を上回っているときなどに採られる。
スラグ
JWT
- JWTとCookieがごっちゃになってたけど、これを機会に勉強できたのはよかった。
- JWTを認証用トークンに使う時に調べたこと - Carpe Diem
- 【JWT】 入門 - Qiita
- JWT・Cookieそれぞれの認証方式のメリデメ比較 - Qiita
- 『最も大きな違いはCookieがstateful・TokenがStatelessという点』
- JWTとCookieがごっちゃになってたけど、これを機会に勉強できたのはよかった。
技術力とは
- いつも「自分には技術力がない」と思っていて、しんどいな〜と思う日々が続いていたんですけど、そもそも技術力の定義とは?と疑問に思って、いろいろ調べてみたら、下記の記事が今のところしっくりきた。自分の場合で言うならば、圧倒的に実装のスピードが遅い。けど、クオリティとかは、さほど自己嫌悪に陥ったことはないな〜とか考えてた。心配性な性格のせいか、慎重に実装している気がする。これはスピードとトレードオフなので、今後の課題でもあるけど。できないこともあるけど、できている部分も少しはあるはず。
2020.03.16 ~ 2020.03.22 の週報
この記事は何?
1週間の振り返りとして、インプットしたことを「週報」という形でアウトプットしたもの。 業務では、フロント(React,TypeScript)とバックエンド(Golang)が多いので、その辺りのインプットが多い。 また、仕事を進めるにあたりマインドセットに課題を感じているので、その辺りのインプットも多めとなっております!
フロントエンド系
lodash
Axios
エラーハンドリング
- Axiosのエラーに型をつけて書くだけで、エラーハンドリングがとたんにしやすくなったのを実感した。
TypeScript
- ジェネリクス
- 記事
- https://logmi.jp/tech/articles/322649
そもそも型とは、値とその値に対して実行できる操作の集合ということはもうみなさんご存じですよね。私はけっこうこれが目から鱗でした。
数字で「2」とあったらこれはnumber型だよねとか、「text」って文字があったらtext型だよねというのはなんとなくわかっていたんですが、それに対して、型が決まると実行できるアクションが決まるというのは、言われてみれば当たり前のことなんですが、文字にされると「あっ、そうか、そういうことか」ということですごく腑に落ちました
- 自分もこの記事を見て、「あ〜確かに」と腹落ちした。
- 「型が決まると実行できるアクションが決まる」 = コードを理解する時間が短くなる。という理解。
- コード読むってしんどいよね...
- ただ、コード量が多くなるので、全てのプロジェクトで使うべきかは、検討する必要あり。複雑なプロダクト(ドメインが複雑である)を作る時には、有効だという理解をしている。
- https://logmi.jp/tech/articles/322649
コンポーネント とロジックの分離
- https://qiita.com/tuttieee/items/a3ca7d9d415049d02d60
- 社内の先輩にかなり特訓していただいた。僕自身もこの書き方にしっくりきたし、何よりReactの良さを引出しているように感じた。
async/await
スプレッド構文
- https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax
- なんとなく使ってたけど、改めて学習。
react-router
withRouter
- https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/withRouter.md
- match, location, historyをwithRouterを使ったところで扱えるようにする
- withRouter will pass updated match, location, and history props to the wrapped component whenever it renders.
RouteProps
- match, location, historyをうまく扱えるようにできる
- Routeからrenderするcomponentに渡せる
- ちゃんと理解できてなかった
- https://qiita.com/takeyuichi/items/fa6ab3a347c9fc537be4
- match, location, historyをうまく扱えるようにできる
- Routerをカスタマイズして、認証の確認ができる
バックエンド系
MongDB
-
- 値渡しとポインター渡し
- https://github.com/golang/go/wiki/CodeReviewComments#receiver-type https://medium.com/finatext/go%E8%A8%80%E8%AA%9E-golang-%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%80%A4%E6%B8%A1%E3%81%97%E3%81%A8%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E6%B8%A1%E3%81%97%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E5%BD%B1%E9%9F%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-70aa3605adc5
- 値渡しとポインター渡し
Context
- FireStore
その他考えていたこと、学び
プルリクのお作法
- ブランチを切ったら、まずは空でも良いのでPRを作る
- 周りの人がタスクをやっているかも知れんし、見といてくれるかも
- フローを整理すると。。。
- タスクをもらう
- ブランチを切る
- PRを作る(空でも良い)
- PRに作業内容を記載
- 上長に報告
- 一旦、このフローでタスクをこなしていく中で、改善を積み上げていく。
どのタイミングで周囲の人と相談するのがベストか
- 自分の経験との差分が大きい場合
- スキルと経験の棚卸しをしていないと、差分が見えない
- ex) フロントエンド => Reactはできるけど、TypeScriptは厳しそう
- ex) バックエンド => 簡単なモデリングはできる
- 経験を積んでいくと、差分は小さくなるので、周囲との相談が減っていきがち?
- スキルと経験の棚卸しをしていないと、差分が見えない
- 解決すべき論点が多い場合
マインドセット
- タスクフォーカス
- 自分のタスク(課題)にフォーカス、それ以外については仲間を信頼する。
- https://logmi.jp/tech/articles/322464
たちはその意識を変えることはできるんですね。外側の環境を変えることはできませんが、自分がその環境をどう捉えるかということは変えることはできるんです。今日の覚えて帰ってほしいことの1つは「コントロールできないものと戦わない」ですね。わからないものはわからない。変えられないものは変えられないんです。