鏡華のブログ

鏡華のつぶやきを記録に残します

たまたまそこに詳しそうな人がいたから聞いてみようはやめろ

お久しぶりです、鏡華です。 この間とあるコミュニティで、こんな話が出て、面白そうだから記事にまとめるかと思って今この記事を書いています。

その話とはこういうものです。

(スマホの設定で困っている人がいたとき) ちょうどいいとこにパソコンとか詳しそうな人おるやん、教えてもらおうぜ

細かいことどうでもいいから結論だけ読みたい人

エンジニアはただで何でもやってくれる便利屋じゃねぇ分を弁えろ

何が悪いのか

PCに詳しい人、特にITエンジニアと呼ばれる部類の人たちの飯のタネは

  • プログラミングなどの技術
  • 専門分野に関する知識

の2つが大きくあります。

ここで、飯のタネである専門分野に関する知識を、正当な対価を払うことなく要求していることが問題です。

喩え話で理解してみる

絵師の場合

絵師にとっての飯のタネは絵を描く技術でしょう。 正当な対価を払うことなく絵を描く技術を要求する事はつまり次のようなことになると思います。

あ、ちょうどいいとこにイラスト描ける人がいた!イラスト描いて!金は一切払わんけど!

よくTwitterなどでも話題になるやつですが、まぁ嫌ですよね。

(他にも例を挙げようか迷いましたが、なくてもよくねと思い始めたので取りあえずやめときます)

エンジニアに質問するときは必ず対価が必要なのか

基本的にはそうだと思いますが、ごく限られた場合のみ対価を払わなくてもいいかなと考えています。 その限られた場合とは以下の時です。

追加で情報収集の必要がなく、その場でぱっと答えられるような質問の場合

エンジニアといえど、専門知識を全て暗記している人はかなり少ないと思います。 大抵の場合は、必要になった情報をその場でググるなりしていろいろな場所から集めてくるということをしています。

また、質問者が答えるために必要な情報を提供できていない場合、追加で聞き返したりして必要な情報を集める手間があります。

これらの手間がない、つまり

  • 質問者が答えるために必要な情報を全て提供している
  • 答えるエンジニアがそのことについて知っており、追加で情報を集めなくてもよい

場合にのみ対価を払わず質問しても大丈夫かな、と私は考えています。

なお、これは絵師でいうところの、絵を描くために必要な資料や構図を考える手間がないという点で 「1分で描いた落書きでいいならタダであげるよ」に近い感覚かなと思っています。

質問の仕方について

ここまでの内容を踏まえた上で、質問するときはこういう情報を渡してくれると答えやすい、といったことを以前まとめた記事を書いているので、参照していただけると嬉しいです。

ケーブルを持ち歩く生活

お久しぶりです、鏡華です。

がっつりテスト期間なうなんですがネタが生えたのでブログでも書いとこうと思います。

ケーブルを持ち歩く生活

みなさん日常生活でケーブル、持ち歩いていますか?

  • スマホの充電ケーブル
  • PCの充電ケーブル
  • HDMIケーブル(営業マンやオタクだけ?)
  • LANケーブル
  • その他各種ケーブル いろんなケーブルを持ってると思います。

ところでみなさん、これらのケーブルについてこう思ったことないですか?

>>邪魔<<

ケーブル、邪魔

僕は普段から

のケーブルを、こんな感じのケーブル束ねる奴でまとめて持ち歩いていました。 f:id:mirror_kt:20210202223407j:plain

リュックの中にいれて居たのですが、かさばって邪魔になってきたのでどうしようかなと考えました。 考えた結果、長いケーブルを持ち歩くから束ねる必要が出るしかさばるのでは?と思い至りました。

短いケーブルを使おう

ということで善は急げ、短いケーブルを用意しました。

AINEX HDMIケーブル AMC-HD03V20 [0.3m]

AINEX HDMIケーブル AMC-HD03V20 [0.3m]

  • 発売日: 2015/12/22
  • メディア: Personal Computers

HDMIは15cmのケーブルが見つからなかったのと、15cmだと使い勝手悪いかなと思い30cmにしています。 手に取ってみて分かったんですが、15cmってほんとに場所とらない、それこそ筆箱にでも入れておけるんじゃねレベルで短いです。

以上、ケーブルをいっぱい持ち歩く方、短いケーブル、いいですよ、ということをいいたかっただけのブログ記事でした。

"わからないこと"の減らし方&人への聞き方(プログラミング編)

お久しぶりです、鏡華です。

この記事はNITKC ProLab Advent Calendar 2020 13日目として書かれています。

 

☠️注意☠️

この記事は著者の個人的な思想が多く含まれます。

気分を害することが想定される方、害された方はとっととブラウザバックをお願いします。 

 

プログラミングを学ぶときに、皆さんは何に一番苦労しますか?

私の周りでは、「プログラミングの本やサイトに書いてある、先輩が言ってることがさっぱりわからないから怖い」という話をよく聞くように思います。

今回はこれを解決する方法を、(私の個人的な思想ですが)書いていこうと思います。

状況設定

具体例を出しながら説明していきたいので具体的な状況設定をとりあえずしときます。

Aさんはプログラミング初心者です。

Aさん「プログラミングの勉強がしたいです。バックエンドに興味があります。」

先輩「手始めにGo言語でTODOアプリのバックエンドサーバーを書いてみようか。」

とでもしておきます。

「わからない」との遭遇

A「授業ではC言語しかやったことないや」

A「Go言語って初めて聞いたけどどんな言語だろ。C言語と何が違うんだろう。」

 

AさんはGo言語について知りたいようです。

A「せんぱーい、Go言語ってどんな言語なんですか?C言語と何が違うんですかー?」

 

意地悪な先輩はこう返します。

先輩「調べるのも勉強のうち。ググってわかんなければ教えるからとりあえずググっておいで。」

 

先輩に意地悪されたAさんは泣く泣くGoogle先生に助けを求めます…。

A「えーっと…。『Go言語とC言語の違い』でGoogle検索っと。」

A「なになに…」

…Go言語はJavaと違い中間言語にではなく各プラットフォームのネイティブバイナリへとコンパイルされ…C言語よりもメモリ安全性が確保されており…goroutinesと呼ばれる機能で並行処理を言語レベルでサポートしています…

A「?!?!?!?!?!?!?!(パニック」 

Aさんは知らない単語がたくさん出てきてパニックを起こしてしまったようです。

 

「わからない」をわかろう

先輩「おいおいおい、大丈夫か…?」

A「先輩助けてくださいぃい、何を言ってるかさっぱりわかりませんんんn」

 先輩「そうかそうか。じゃあまずは自分が何をわかってないのかをわかろうか。」

 

先輩「じゃあまずさっきの説明、『GoはJavaとは違い中間言語にではなく…』の文章を読んで、最初に 『あっこれわかんない』ってなった単語は何?」

先輩「読んでいてわからないなって思ったら、全部を読んで全部わからないって思うんじゃなくて、細かく区切って読んでいって、自分はどこまでわかっててどこまでわからないのかを見極めたほうがいいと思うよ。」

 

Aさん「んーと、まずJavaって何者ですかってとこからかなぁ…」

先輩「じゃあJavaについて調べてみよう。」

先輩「Javaについて調べてるうちにまたわからないことが出てきたらそれについて調べてみる。これを繰り返すことで、「なにがわからないかわからないから調べられなかった』ことを調べることが出来るようになる。」

先輩「ここで注意しとくのが、別にわからなかったことについて完全理解者になる必要はないということ。」

先輩「元の文の意味が何となくわかるぐらいまで理解できたら、またもとの文に戻って次のわからない単語について調べてみよう。」

先輩「何度も同じキーワードがいろんなとこで出てきたり、何となくこれ重要そうだなというところに出てきたらより詳しく調べるようにしたらいいよ。」

Aさん「はーい!」

小ネタ

Aさん「せんぱーい、プログラムを書いてたんですけど動きません〜。」

先輩「おっ、そうか。」

Aさん「『おっ、そうか。』じゃないですよ助けてください!!!」

先輩「最初からそう言えよ…動きませんといわれても「あぁあいつは今プログラムを書くのに苦労してるんだな」ってのを伝える現状報告でしかないじゃん。」

先輩「教えて欲しいなら『こう動かないのでどうしたらいいか教えてください』ってお願いするべきだよ…」

 

わざと書きましたがたまにこういう人いるし正直著者はちょっとイラってするので気をつけてくれると嬉しいです。 *1

 

ということで次はプログラムが動かないときに誰かに聞くときのお話です。

 

あなたは今何してた?

Aさん「せんぱーい、プログラムを書いてたんだけど動きません〜。教えてください〜。」

先輩「一体全体、今この文章だけで得られる情報からどうやって助けろと…」

先輩「動かないプログラムについて教えるとき、必要になる情報ってだいたい決まってる。」

先輩「もちろんこちらからも詳しく聞いたりするけど、最初から教えてくれてたほうがお互いの確認が減ってよくなるよ。」

 

と、その前に…

エラーが出たときにやるべきチェックリストを書いておきます。

エラー文は読みましたか?

英語で普通に「Error: file or directory hoge does not exists.」とか書いてあっても読まない人がよくいるように思います。

中学英語レベルで書かれてること多いから読んでください。

ぱっと意味がわからないならGoogle翻訳なり使っていいです、取りあえず意味を掴みましょう。

エラーの内容でググりましたか?

書いてあるエラーの意味はわかっても解決方法がわからない場合があります。

表示されてるエラーの内容でググってみて、自分と似たような状況の人を探しましょう。

あなたが困ったことは大抵世界の誰かも困ったことがあります、その人がどうやって解決したかをネットに書いてることも多いので探してみましょう。

ただ、同じ困ったを体験した誰かは日本人ではないことも多いので、やはり英語を読む/翻訳ツールを使うことは重要です。

 

先輩「じゃあ次の項目について教えてー」

 

チェックリストを確かめたら早速質問に行きましょう。

プログラムについて教えてもらうときは、次の点を最初に伝えることでかなりスムーズにことが進みます。

(全体的に)何をしようとしていたか?

例: 〜というサイトを参考にコードを書いていた

(細かめに)何をしようとしたか?

例: 書いたプログラムを実行しようとした

どうなって欲しかったか?

例: 期待通りの動作をして欲しかった

思ってたのとどう違ったか?

例: エラーを吐いて終了した

(エラーが吐かれた場合)吐かれたエラーは?

吐かれたエラーを基本的に省略せずに全文貼ってください。

動かない原因がわかってない人が省略して大丈夫な場所をわかってると思わないほうがいいです。省略した場所が動かない原因だったりします。

エラーメッセージが長いときは

pastebin.com

などといったサイトを使って共有する方法もあります*2使い方は簡単ですがググってください。

(Pastebinはネット上に公開されるので、本名などが含まれる場合は<User>などに置換し、その旨を質問する人に伝えるのが無難です。)

書いたプログラムのソースコードは?

これがないと回答者はエスパーすることになります。はっきり言って無理です。

最低でもエラーメッセージにて指示されているエラーの直接的原因の周辺、できればプロジェクト全体を共有して欲しいです。エラーの原因を探すのにほかのファイルとかも見ることになることがあるからです。

プロジェクトを共有する方法として有名なのはGitHubです。

Gitというツールを使ってファイルのバージョンを管理することができ、ネット上で共有することが出来ます。数ファイルしかないなどの場合はGitHub Gistなどを使うことも出来るので調べてみてください。

 

Aさん「〜というサイトを参考にしながらTODOアプリのバックエンドサーバーを書いてました。GitHubリポジトリはここです。」

Aさん「書いたプログラムを実行しようとしたらlibrary hoge cannot loadとエラーが表示されました。全文は後で送ります。」

Aさん「hogeというライブラリが入っていないのかなと思い、入れる方法について調べて実行してみました。参考にしたページはこれで実行したコマンドはこれです。」

Aさん「しかし実行する前と同じく動きませんでした。エラーメッセージも変わっていません。」

 

先輩「うんうん!最初からそのように伝えてくれると、こちらから確認する手間が省けるからお互い楽だよね!」

先輩「じゃあ〜〜〜っていうコマンドを打って……」

(続く…かもしれない…?)

 

最後に

著者が個人的にこれが出来たらもっと伸びる人がいるのになと思うことがいくつかあったため、アドカレの場を借りて記事にしました。

わからないことの減らし方、質問するときに伝えるべき項目、こんなのもあるよなどあればコメントにいただけると嬉しいです。

長々と駄文を読んでいただきありがとうございました。

*1:見守っていて欲しいのか教えて欲しいのか、著者に対して何してくれるのを期待してるのかどうとでもとれるので…

*2:Pastebinとはこういったコピーした内容を共有するようなサービスの総称です。pastebin.com以外にもPastebinと呼ばれるサービスはあります。

キャンプハッカソンに参加しました!

初めまして!

日常的なことも技術的なこともひっくるめてアウトプットする場が欲しくなったのでブログを始めることにしました。

まずはちょっと自己紹介

鏡華という名前で活動してます。久留米高専機械科2年です。プログラミングもちょっと触っています。

キャンプハッカソンに参加しました

今回の記事では、9/23~9/25にあったハックツ主催のハッカソン「キャンプハッカソン」に参加したことを書いていきたいと思います…!

キャンプハッカソンって?

camp.hackz.team

ハックツという会社が主催した、短い期間の中でプロダクトを完成させるというイベント「ハッカソン」を、油山という自然の中でやるイベントです。

BBQなどもやるということで何それめっちゃ楽しそう…!ってのと、ハッカソンに参加したことが今までなかったので、いつか参加したいな…と思っていて、もうこれ今しかないでしょ…!とノリと勢いで参加しました。イベント参加するときは勢い大事です、マジで。

ということでチームも組まずに野良で参加しました!(同じ学校のgunjouさんと同じチームになりました)

 

以下、何をしたのかってのをつらつら書いていきます。

1日目

東油山って言うバス停の目の前のマルキョウ集合でした。

Zoomでの事前説明の時から思ってたけど、ハックツのどりーさんの髭がめっちゃ印象的だった…w

1日目の昼ご飯は用意されていなかったのでマルキョウでその日のお昼ご飯と、夜食やおやつを買い込みました。

食べてないと活動できない人なのでなんだかんだで2000円ぐらい買い込んだかな…。

 

その後は車を持っている人に同乗させていただいて会場である油山市民の森まで移動しました。

 

f:id:mirror_kt:20201006213830j:plain

入り口らへん

会場に着くとまずは受付をしました。

コロナ対策で検温をした後名簿に名前を書いて写真を撮ると、なんとRed Bullとステッカーが貰えました!

 

 (Red Bull、好きじゃないのでチームメイトに押し付けました)

 

受付をした後はチームごとに割り振られたテーブルに座りしばらくして、オープニング(開会式)と協賛企業さんの会社紹介がありました。

それぞれ特徴があって面白かった…!

 

開発開始

企業説明の後、いよいよ開発開始です。

僕たちのチームでは事前のミーティングで位置情報を使った鬼ごっこを作るの楽しそうじゃね、自分たちで遊びたい、というアイディアがでていたため、これをもとにプロダクトを作ることにしました。

まずはお互いの考えているプロダクトの完成図をすり合わせて、まず最初に作るべき最小設計を考えました。

 

その後データベースのスキーマを考えたりして、各自の実装に入りました。

私はバックエンドを担当したので、その技術スタックを書いときます。

言語: Kotlin

使用ライブラリ:

  • Ktor
  • Ktor-WebSockets
  • Ktor-Auth
  • Exposed
  • HikariCP
  • kotlinx-serialization-json
  • koin-ktor

github.com

猛速で実装したので結構汚いです。

バックエンドの実装言語にKotlinを選ぶのは珍しいとスポンサー企業の方に言われました…

私たちは3人でチームを組んでいたのですが、バックエンドを担当したのは私一人でした。

複数人で開発するならメンバーによって技術を選定しますが、私一人であれば私が一番得意な言語で書くのが一番かなと思いKotlinで参戦しました。

JavaでのバックエンドがあるのだからKotlinがあったっていいじゃないという考えです。

 

 

そんなこんなで開発を進めた後、お風呂に行きました。

私は女性チームの方の車に乗せてもらいました…!

 

風呂から戻ってきて限界開発をしていた後、晩ご飯…の予定だった、のですが。

19時からご飯のはずだったのに2時間たってもご飯にありつけませんでした。夜食の予定だったおにぎりがだんだん減っていきました。

21時30分を回った頃にやっとご飯…

f:id:mirror_kt:20201006233113j:plain

画像の向き直すの忘れてた…

かなり待ったけどカレーはおいしかったです!

 

その後一度23時ぐらいに寝に行こうとしたのですが、一緒に寝床に連れていってくれたどりーさんが鍵を忘れたため一度ホールに戻りそのまま開発を続ける…

その後1時過ぎにチームみんなで寝にいき、5時ぐらいまで睡眠をとりました。

計画的睡眠、大事。

2日目

午前中は限界開発を極めてました。

体力的に限界も近い中、ごりごりコードかいてる人が多くてびっくりした。

お昼はみんなでお弁当を食べました。

WebSocketリクエストを投げるとinsertされるときとされないときが会ってうなったりしてたけど何とかサーバー側は動くとこまで実装できました。

お風呂は開発進捗やばかったので諦め。

その後フロントのSwiftの進捗報告を聞きながらいろいろいじくってた中で開発時間終了。

 

さて、その後発表会。

全体的にSwift使ってるチームが多かった印象。どのチームも完成度がすごくてびっくりした。

さて、うちのチームは…

…完成、しませんでした、ごめんなさい!!!!!!!!

フロント・バックエンド間の通信の実装が間に合いませんでした…!多分それぞれの実装はほとんど終わってたはず…!

 

んで、気になる優勝チームは…!

 女性のみで構成されたチーム「塩パン」でした!

実はこのチーム、1日目に温泉に行くのに同乗させてもらったチーム…!すごい!

 

実はまだオチがあって

ところでこのイベントは3日間の予定で、もう1日あるはずでした。

でした(重要)。

f:id:mirror_kt:20201007000359p:plain

追試が突然生えました。テスト期間中に諸事情により受けれなかったやつが。

ということで急遽帰宅することになりました…

コロナ対策の関係でBBQのかわりにピザパーティすることになったんですが、その途中で現地に来てたスポンサーさん達と一緒に帰宅しました…マジで申し訳ない…。

まとめ

煮え切らない感じになってしまったけど、めちゃくちゃ楽しかったのと精神的にしんどかったの両立です。

今度は余裕のあるときに参加したいな…。

 

以上、参加記でした!