Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
この中に1人、素人がいる!
Search
Infiniteloop
August 16, 2023
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
この中に1人、素人がいる!
12月2日に行われたインフィニットループ×クラスメソッド×クリプトン合同勉強会で発表した資料です
http://connpass.com/event/20314/
Infiniteloop
August 16, 2023
More Decks by Infiniteloop
See All by Infiniteloop
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2025年版)
infiniteloop_inc
18
88k
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
1
730
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
1
1.1k
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
1
1.6k
詫び石の裏側
infiniteloop_inc
0
970
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
7
36k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
310
ADRという考えを取り入れてみて
infiniteloop_inc
0
320
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
240
Other Decks in Programming
See All in Programming
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
220
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
180
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
500
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.8k
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
350
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
540
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
350
React本体のコードリーディング
high_g_engineer
1
140
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
210
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
550
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
560
Featured
See All Featured
Side Projects
sachag
455
43k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Writing Fast Ruby
sferik
630
63k
What's in a price? How to price your products and services
michaelherold
247
13k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
350
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
270
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
640
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
430
A Tale of Four Properties
chriscoyier
163
24k
Designing for humans not robots
tammielis
254
26k
Transcript
この中に1人、素人がいる! ~素人が現場に投入されるとやらかすこと~
自己紹介 名前:桶矢秀人(おけやひでと) 前職:クライアントプログラマ(5年) ・モバイルゲーム開発(C, C++, C#, Java, Objective-C) ・少しの間PHPをかじった IL:サーバプログラマ(1年)
・モバイルゲーム サーバ側開発 (PHP)
皆様は仕事でミスをしたことがありますか?
現場にはまさかのミスをする人がいます
そういう人に出会ったときのための 心構えをしましょう
目次 日常業務編 ・事例1.質問できない ・事例2.小さなことでパニックを起こす クライアント開発編 ・事例3.後先を考えない ・事例4.自分に非があるかもしれないことを考えない ・事例5.サーバは最強だと思っている サーバ開発編 ・事例6.本番の想定ができない
日常業務編
事例1.質問できない
事例1:質問できない(1) 前職でPHPの勉強をする機会を頂いた時の話。 前提 ・PHP経験なし ・当然MySQLもApacheもXAMPPも知らない ・そもそもソーシャルゲームという単語を初めて聞いた それを踏まえて
先輩 「んじゃ、以前運営してたゲームがあるんだ けど、それをローカルで動かして。わかんな かったら聞いて」
事例1:質問できない(2) ・えー...と? 具体的にわかっていないこと ・そもそも「動かす」とはどうなる状態になればいいのか? ・ローカル?これはサーバで動いていたものだよね。自分のPCで 動くの? ・早い話「何からやればいいんですか」と聞きたいが、そんな質問 して大丈夫なのか?
事例1:質問できない(3) ・聞きたい人は別の作業をしていたりでつきっきりというわけでは ない。 ・「PCの電源のつけ方がわかりません」レベルの質問なのではな いかと疑ってしまう。「そんなのもわからないのか」と思われるのが 怖い。 ・聞いたら、すんなり教えてくれる。ただ、「わからないなら聞いて いいから」と改めて念を押される。
事例1:質問できない(4) 教える側の意識 ・「こいつあんまり質問してこないな」って人は意外と質問を溜め込 んでいる。 ・相手側から歩み寄ってくれると非常に質問しやすくなるので、最 初のうちは定期的に声をかけることで質問を吐き出させるとお互 い得する。
事例2.小さなことでパニックを起こす
事例2.小さなことでパニックを起こす(1) ILではない事例(初運営業務) 私の座席の後ろから先輩が見ている。 ・「ログを見てみて」 ・「ステージングに入ってもらえる?」
事例2.小さなことでパニックを起こす(2) ILの事例(配属初日) ・「このプロジェクトはテスト駆動開発でやってます。そんでもっ て――」 ・「バージョン管理はgit使ってますよ、と。あとは――」 ・「じゃあまずは環境構築からやってって。マニュアルはここにある から見てね」
(わ、わかんないです...)
事例2:小さなことでパニックを起こす(3) ・総じて、「できなければやばい」という気持ちから焦っている。 ・必死になってるのは結構伝わるので、察してくれることも多い。 現状できることを探し、手詰まりなら恥ずかしくても聞きましょう。 ・説明してくれてる人が不親切だとか、そういう話ではない。 ・ILが特別厳しいという話でもない(重要)
クライアント開発編
事例3.後先を考えない
事例3:後先を考えない(1) ソケット通信を利用したゲーム開発をしたときの事例。(C++) 前提 ・iOSアプリ開発で、このときで2度目 ・ソケット通信は初経験 ・クライアント1人、サーバ1人の2人での開発(=問題点を指摘す る人間がいない)
ソケット通信部分のソースコード ※ClientSocketはシングルトンクラス int ClientSocket::connection( const u8* ip, int port )
{ if( ( socket_ = socket( PF_INET, SOCK_STREAM, 0 ) ) < 0 ){ return CONNECT_SOCK_ERROR; } pthread_create( &thread_, NULL, threadHook, this ); return CONNECT_SUCCESS; } 事例3:後先を考えない(2)
事例3:後先を考えない(3) ・ソケットを1本しか作れない。ゲーム以外で通信できない ・後でプロデューサーに「チャット機能入れたいな」と言われる。私 ビビる ・必死のロビー活動によってそれを阻止する ・「リファクタリングしてなんとかしよう」という発想は無い
事例4.自分に非があるかもしれないことを 考えない
事例4:自分に非があるかもしれないことを考えない(1) 事例3と同じプロジェクト 前提 ・ゲームサーバに対してゲームデータを送信する ・ゲームサーバはあるAという処理において、1バイトのデータと4 バイトのデータを連結した合計5バイトのデータを要求している
データ送信部分のソースコード(要約) // 送信データの構造体 typedef struct { char a; // 1バイト
long b; // 4バイト } Foo_t; 事例4:自分に非があるかもしれないことを考えない(2)
データ送信部分のソースコード(要約) Foo_t bar; bar.a = 10; bar.b = 20; char*
data = new char[sizeof(Foo_t)]; // 1 + 4で5(?) memcpy(data, &bar, sizeof(Foo_t)); Connection::getInstance()->send(data); // 送信 事例4:自分に非があるかもしれないことを考えない(3)
事例4:自分に非があるかもしれないことを考えない(4) ・この構造体は8バイトになる 理想(5バイト) 現実(8バイト) ・アライメントの機能を知らない。 ・問題なのは、自分のミスを疑っていないこと。先に相手側のミス を疑って攻勢に出る。
事例5.サーバは最強だと思っている
事例5:サーバは最強だと思っている(1) 今回は課金時のエラー処理の事例。 while (true) { char* receipt = getReceipt(); //
レシートを受け取る int status = PurchaseManager::send(receipt); // ポイント追加 if (status == SUCCESS) { break; // 成功したので抜ける } }
事例5:サーバは最強だと思っている(2) ・インターバルもなしに無限に投げるのでさながらDoS攻撃状態 ・後ほどインターバルを入れるように修正したが、それほど深刻に 受け止めていなかったりする ・サーバを担当してからクライアントに同じことをされて、やばさを 再認識した
サーバ開発編
事例6.本番の想定ができない
事例6:本番の想定ができない(1) ・PHPによるソーシャルゲーム開発において、初めて一人で一つ の機能作成を任されたときの事例 前提 ・担当したのはログインボーナス機能 ・ライブラリで吸収してくれているので、自分でSQLは書かない。 楽勝である
事例6:本番の想定ができない(2) 当時の本番サーバの構造(作ってるときは知らない) マスター スレーブ 書き込み(UPDATE, INSERT) 同期 読み込み(SELECT)
事例6.本番の想定ができない(3) 当時書いたPHPのコード(要約) if (!$is_login) { return; } // 日をまたいでいるかどうか $login_bonus->add($user_id,
1); // 1日加算(UPDATE) $days = $login_bonus->get($user_id); //日数を取得(SELECT) $reward->give($days); // その日の報酬を配布
事例6.本番の想定ができない(4) ・報酬が配られた人間と配られない人間が出てしまった。 ・原因は、スレーブの更新が追いつく前にSELECTしてしまったか ら。 ・クライアントからの流れで、書き込んだものを読み込んだら、更 新された値が手に入って当然という認識。 ・ソースコードレビューのシステムがあれば防げたかもしれない。
まとめ
まとめ ・現場にいる素人に対して、「素人だから大目に見るべき」というこ とではない。 ・ただ、それでも現場で、少なくともプロジェクトが続いている間は 一緒に仕事をしなければならない相手でもある。現実として。 ・その人の数少ない強みなどを拾って、足りない部分をなんとかご まかして、使ってあげてください。お願いします。
ご清聴ありがとうございました。