」という心持ちここまでつらつら書いてきましたが、おそらく僕は「より多くの楽しみを手に入れる事で孤独をあまり感じていない」という結果になっていると思います。これが10年先、20年先にどうなるのかはよくわかりません。本当は家庭を持つようなこともあった方が良いのかも知れません。少なくとも両親はとても喜ぶでしょう。どこかのタイミングで自分と一緒に歩んでくれる人が現れることを諦めてはいません。いう人がいたら今よりももっと楽しくなるような気がしますしね。それを楽観していられるような状況でも無いと認識しているので「ずっとこのままでも大丈夫なように覚悟はしている」というのが今の心境でしょうか。今までに別の道を選べる瞬間もあったけれど選ばなかったのは自分自身なのだから、その事についてはキチッと受け止めていく気持ちであったりします。そのおかげで気持ちとしては結構安定している、というところでしょうか。おしまいにたまにはこういう吐露するエントリーも良いかと。書きすぎた感あるので、怖くなったら消すかもです。成長はじめにチームの中でどのように振舞うべきか、というのはコード書けるかどうかとはまた違うスキルですよね。実はコード書く事と別に学ぶこともできると思っています。2018あるあるだよなーと思うことで。コード書けることと、チーム内での立ち居振る舞いが両立している人はかなり少ないんですよね。片方ずつは努力でどうにかできたとしても二つは別々の切り口なんですよね。かたや「一人でも」を重んじていて、かたや「メンバーにとって」を重んじているので。下記の派生エントリの一つでもあります。ms2sato.circlearound.co.jp質問すること私個人の話を書いておくと、個人の開発時代が長かったのと、立場的に自分が牽引する側に居ることの方が多かったのもあり、起業してから「既にかなりの開発が進んでいて、何かしらの文化が構成されている開発チーム」に関係することが増えました。私もそこで結構うまくできなかったりしたこともあって、辛かったなぁ...みたいなことを思い出しながら書いてみます。当時関わった外部のチームの方々が暖かく対応してくれて良かったです。今でも新しくプロジェクトに関わりはじめる時はドキドキします。上手に質問するのは難しいです!特に「なにをいつ聞いてよいか(むしろ聞かなければいけないか)」の呼吸を掴むこと、ですかね。技術もまだまだ発展途上でプロジェクトに参加した時、わからないことは多数ですし、むしろわからないことだらけだと思うんですよ。それを片っ端からメンバーに聞いてまわったらそれは良い顔されないですよね。「そんなん自力でグーグルで調べてや」って言われてしまいます。逆に、聞かずにどうにかしようとしてずっと調べ続けていると「なんで聞かないの?聞かないと無理でしょ?」と言われてしまったりします。なんでや!自力で調べろって言ったのはあんたやろ!あるあるかと思うのですが、整理すると下記3点くらいでやるべき行動が変わるんですよ。誰かに聞いて良いこと聞かずに一人で調べるべきこと、考えるべきことタイミング誰かに聞いて良いこと文書化されていないか、文書が示されていないこと。それがわからなければ最初に聞くのは「xxについてどこかに書いてありますか?読みたいです。文化っぽいこと(タグの付け方、WIPの出し方、レビュアーのアサインの仕方、ブランチの名前付け)ただし、観察すれば類推できることも多いので、ここで先に観察してから仮説を立ててから「確認として」聞けると良いかと。不自然な実装の経緯*1今やるべきことやゴールこれがわからないと何もできないはず。明瞭になっていなければ確認しないと進められないはず。「それを明瞭にさせるために少し進めるのがゴール」というケースもあるので、難しいですよね。ある程度進むまではあまり大きな裁量は無いはずなので、目指すべき直近のゴールについてわからなければ、誰かに聞かないといけない。(できれば)聞かずに一人で調べるべきこと、考えるべきこと検索すれば出てくるような一般的な技術のことコードを読めばわかること(程度はありますが)エラーに対応する方法ツールの使い方タイミングこれが一番難しいような気がするのですが、上記の条件は状況によって変わっていく場合があります。「今やっていることのゴールがいつまでか」ということに影響を受けるんですよ。時間に余裕があるなら調べる時間を取っても良いでしょうが、時間が無い時には聞いてわかることを聞いて、仕事を終えに行くのも大事だったりします。初学者の方の場合には、ほとんどの仕事にバッファが見積もられているはずなので、上記のようなことになっても「聞かずに」と言われる可能性はあります。そのあたりの話はこの次の章で書きます。質問の前にするべきこと(実は質問自体よりも大事!)いきなり質問する前に、こんなことをしたりすると良いということを書いてみようかと。「今、時間がかかっている、もしくは時間がかかりそう」と先に伝えることこれが結構大事な気がしています。時間がかかかる予測ができたタイミングで報告や相談をしてみて、先輩などに「その時間をかけるべきか」の判断を仰ぐというものです。「自力解決をすべきかどうか」という判断は自分自身には出来ないケースも多いので、まだよくわかっていないうちは「こいつは手強いぞ」と感じたなら軽く相談するのは良いと思います。分報を導入しているチームなどであれば「いまxxxに対応してて、苦戦中」などと書いてみるのも良いですよね。大切なのは「めーーーーーっちゃ時間かけちゃいました。わかりません(><)。」という状況になるのを避けることです。この時に既に報告や相談をしているなら、その時間は自分の独断で進めたものでは無いので一方的に責められることは無いでしょう。何か質問するにつけてもその内容が相手にとって意味不明なことが多いと「こいつ、なんか言ってるけどわけわからん」と思われてしまいますよね。積み重なるとコミュニケーション自体が結構やりづらくなります。少なくとも以下のようなことを整理してみると良いと思います。解消するためにした行動どんなワードで検索したかコードをどのように変えてみたか考えていることうまくいかない理由について足りない知識からでも考えること打破するためには何が必要か、推察することちなみに、こういうことをしている時に「あ、あれまだ試してない」と気づいて解決できることも多いので、騙されたと思ってまずはやってみると良いと思います。ツールこの辺は今はコードについてはgitとGitHubの扱いがわかっていれば良いと思うのでこのブログでは論じません。聞いてくれれば私の考えは答えられるけれど巷にいっぱいある情報ですよね。ドキュメントもSaaS型のWEBサービス使っているところが多いと思うのでそれぞれ調べれば良いかと。やって経験するの?以下は、チーム開発を練習するための場所や方法について考えてみます。野良プロジェクト立ち上げ型ただ誰かと集まってやってみる形ですね。以下のような利点欠点があるでしょうか。気心の知れた人たちでやれば楽しい。一方で以下はネガティブな内容ですね。仲間を選ばないと頓挫してしまう。全て独学で進むことで、勝手に大きな勘違いをしたり、一般的ではない文化を作ってしまう可能性がある。「これができれば苦労しない」という方は多いのかも知れませんが、世の中には稀有な環境もありますのでそういう場所をうまく探せるのであれば良いかと思います。チームトレやってます。弊社ではチーム開発のトレーニングやっていますよ。弊社の社内で実際に利用しているサービスの開発を通して、チームでの作法を学習していただきます。詳しくは下記をご覧くださいませー。*2就業目指している方も、チーム経験あると強いのでご検討いかがでしょうか。十分な実力が発揮できそうなら、こちらでの成果を弊社からも紹介の材料としています。circlearound.co.jp*1:あまり最初の頃はツッコミ過ぎると気を悪くする先輩もいると思うので程々にどうぞ。08:30Tweetもっと読むコメントを書く2018-08-23あまりに熱い「弊社トレーニング利用者の声」に応えたくキーボード叩きます。はじめにtravy.hatenablog.comこんなに熱いメッセージをしていただけたら、黙ってなどいられようか(いや、黙っていられない)。大筋は本当に尤もだという内容で、弊社のトレーニングについてとても理解していただいていると思います。今回トレーニングした弊社側からの目線や補足も交えてお伝えできれば幸いです。最初の経緯はちょっと省略しますが、面談の際に下記のようなことは伺えました。WEBサービスを作れるエンジニアとしての就職を考えられている。独学でそこそこいろいろ試されている。調べて問題解決できそう。モノを作るのは好き人に頼る前に事前になにかやってみて、より高みを目指そうとしたり、さらに速度を上げたい人は総じて良いマインドなので、大歓迎だと思いました。腕試しあとは実際に作っているものや基本部分が本当に備わっているかはお互い不安であったりもしたので、まずは下記で腕試しを勧めました。面談から伺える実力が本物であれば無料期間の二週間で難なくこなしていくだろうから、お互いにとって無駄が少ないと判断してのことです。circlearound.co.jpある程度の実力が備わっていないうちに個別トレーニングを受けられると、結果的に生かせないというケースがあるので、このステップは弊社にとっても、受講する方にとっても良い試金石となるステップだと思っています。記事にもありましたが、Rubyの基礎の基礎(プログラミングの超基礎)を確認し、SinatraでWEB開発の基礎概念を固めてから、Railsを学ぶような構成になっています。実際にはサクサクとこなされてしまい、担当の小笠原も「よくデキる人だ」という評価をしていたので安心がありました。良い作法を学ぶこのあと私がバトンタッチして個別トレーニングを担当させていただきました。過去に書いたコードを事前に見せていただいたりして「『とにかく力技でどうにかしよう』という条件であればどうにか動くものは作れる」と判断していたので、中心になっているのは「より良いコード」であったり「実際の開発現場でも見慣れている形のコード」のような、コードのスタイルを学ぶことでした。Railsであったので、例えば以下のようなことです。アソシエーションを適切に使うenumを使う画像をアップロードして保存するなどのような基本的な画面構成に慣れるよくあるgemの操作に慣れる題材としては先のブログでもありましたが元々書いていたものを1から作り直すという経験を通じて行いました。実は「良いものとの差分を理解すること」は実力アップの一つの条件でもあるので、あえてこういう方法を提案することがあります。終わってからその差に気づいて貰えたのは私としても「してやったり」感がありますね。レビュー、マージの流れで進みます。最初はIssueをこちらが出してやってもらうようなことが多いですが、慣れてくれば自身でIssueを出して開発を進めてもらい、こちらはレビューだけするような流れになっていきます。ちなみにインデントとかスペースとかは慣れると自然にできるようになりますし、ツールでも補えることですが「どういうものが読みやすいのか」を学ぶのには良いと思っています。個別トレーニングはあくまでも自分のコードだけの世界です。「自分にわかるコードしか基本的には存在しない世界」だということですね。実際の開発現場に入って驚かれた方もいると思いますが、自分が書いたものではないコードを読み解くのは結構(いやかなり)大変なことだということです。このトレーニングの題材のコードはそれでもなるべくコンパクトに作られたものですが、練習になるいくつかのポイントを持っていて「基礎概念を理解していないとソコソコ苦労する」コードになっています。最初の方でコードを読む際のコツやどこから読むと全体が掴みやすいかなどのポイントを共有しました。この時は同時に二人の受講生の方がチームだったので、確か問答しつつやっていた気がします。コードを読むのが苦では無い様子だったのでキャッチアップが早かったですね。一緒に誰かが開発しているということは、gitでもコンフリクトが起こりますし、それを解消しながら進まなければいけないという事になります。個人では起こらないことを体験しながら身につけていっていただきました。Issueだけで内容を掴みきれないようなものをあえてチャレンジしてもらったりすることで、必要なコミュニケーションや考え方の勘所を掴んでもらえたはずです。私が今回一緒にやらせていただいて改めて思ったのは「深く考える訓練」をどこかでできている人はやはり理解や成長の速度が違うということです。順調に伸びていかれていたのはこの点が大きな理由だと思っています。考えが深いことは適切に行動できる可能性が上がりますし、振り返りを行って改善することもできるのでしょう。いわゆる技術という括りにハマらない根底の基礎スキルを伸ばすことは全体的に加速させるのでとても重要であるし、私達もとても大事にしている考え方です。今回のケースは本人が元々備えている素養にもかなりうまくハマったケースであると言えると思います。「典型的な型にはまった内容を学校教育のように体験したい」というだけの場合には弊社の個別トレーニングはあまり適していないと考えていて、廉価版のRubyClimbingのようなサービスを検討していただいています。個別のトレーニングであることもあり、いわゆる「同じ目標に向かう仲間」的なものができたりは殆どしません。目的が自己研鑽であり、昨今オンライン/オフラインでコミュニティを探すことができるようになり始めていることからも*1、それは大きな価値では無いと思います。一人でも、それでも学習を続けられる基質こそがずっと支えてくれるマインドだと私は考えています。おしまいに週末の25日にトレーニングをまるごと説明する会を開くので、ぜひ聞きに来てくださーい。成長はじめにms2sato.circlearound.co.jpまたこの記事の続き的に繋げます。前回は実力が示せるポートフォリオについて書きました。ms2sato.circlearound.co.jp次は情報のアウトプットについてです。元の記事では「Qiita」でも「ブログでも」と書いてたら、こんな風にツッコミいただきまして。これは間違いないなと。qiitaだとストーリー追うのが大変なところはあるかもですね。開発ブログみたいになってくれている方がエラーに苦しんだエントリーがあって、2日後に解決とかなって良いかもです。2018年8月7日Qiitaみたいにまとめなくていいので、学んだところやエラー解決したコードを貼っておいてもらえるといいですよね。日々更新してくれてればどれくらい勉強してるかも分かるし、モチベーションの高さも判断出来るので。採用する側としても応募でブログのURL書いてあったらとりあえず読みますしね。2018年8月8日なので、この辺りで「私が何を見たかったのか」を考えたいと思いました。例のごとく「そんなんじゃ足りねぇ!xxを残さずしてどうする!」とかツッコまれたいです。サイクル「成長の過程」と一言になっていることを整理しておくといいと思いました。それは結果、下記のようになりました。エラーの英語は「....」という意味らしいから...、user変数にxxしてて...(独り言っぽいけど、いいんです)解決へのきっかけ&解決エラー内容をGoogleしたらStackOverFlowにヒットしたんすよ!これで勝つる!実はDBにデータが入ってなかったとです。悪いのは入力画面みたい。なんとなく、「起承転結」みたいなことかなと思いました。この中でも重視しているのが「考察からの解決」かと。瞬殺できていることは考察も何も無いので良いのですが、悩んだ時にはちゃんとそれを書いていてくれると良いなと思います。綺麗にまとめる必要はありません!プライドが高い人はすぐに「ちゃんと問題解決までまとまってないなら書きません」とか言い出しちゃうのと、Qiitaだと課題解決までしておかないと書きにくい空気感があるんですよね*1。さんが言っていたブログの方がいいというのは私も同意します。過去書いていた私の開発ブログでは「課題発生の日」があり、「調査ばかりしている日」があり、数日して「過程と解決」が書かれる、というようなことがよくありました。これで良いと思うんですよ。日々やっていることをメモしているだけで構わないと思います。大事なのは「あなたに会ったことはないけれど、日々努力していることはブログで知っていて、どういう解決をできてたかがわかる」という事実では無いかと思います。GitHubの草はわかりやすいですが、神経質にならなくても良いかも。毎日pushすること自体には特に意味がないと思うので(調査ばっかりしててpushできない日とか全然あると思います)、そこは最初は無理せずで良いかと。毎日開発ブログ書いてみる、くらいで十分かなと思います。おしまいに採用ちゃんと考えているところであれば、ブログなどURLで伝えると読んでくれるので出しておくとお得ですよ、ということで。最近だとTwitterで名前やアイコンが知られると良いということもありますが、ストックされるブログのような情報もとても有用ですよ。