はじめに
エンジニアを採用したら本当にスライムだったわけではなく、期待と現実のギャップが大きくてびっくりしたという話です。
転職やフリーランスが浸透した今日、エンジニアは何を期待されているか、そして期待を裏切らないためには何が必要なのか、参考にしていただければと思います。
これまで多くのエンジニアに接した中で経験した衝撃的事実を紹介しています。
プログラマーなのにブラインドタッチが出来ない
誰も信じてくれないかもしれないが、本当の話です。左手ワンフィンガー右手ワンフィンガーでポチポチ打鍵しています。コードの生産性はとてもとても低いです。今度から採用面接ではタイピング試験を取り入れようと真剣に思いました
書いたコードがどれもレガシーコードだった
※レガシーコードの意味的定義には諸説あります
if(data1 == '10'){
・・・・なんかの処理
}else if(data2 == '99'){
・・・なにか別の処理
}else if(data2 == '505'){
・・・そのまた別の処理
} ・・・いか延々と続く
指摘したいところはいくつかあると思います
- data1, data2 ってなんなん?具体的に連想可能な変数名にして欲しい
- 10,99,505ってなんなん?文脈的にはステータスを表すコードのように使われているようでした。そのステータスが意味することがコードから読み取れない、いわゆるマジックナンバー化している
- 延々と繰り返されるif文。実際のコードはもっと長く複雑で、書いた本人でさえ見通しが悪くなり、条件が追加されるたびにデグレを起こしていました
コードをgoogle 検索したらビンゴの記事を3つ以上見つけた
ある処理を行うコードブロックを見た時に、そこに使われる変数名が前後のコードで使われるものとどことなく異なっているのが気になって、2~3行をコピってgoogle 検索にかけたところ、全く同じコードが紹介されているブログサイトを3つ以上存在することが判明。ご丁寧にコメントまでまるっきり同じだった。中身をわかっての上でのコピペなら良いんですけど、それでもねぇ。
Gitが使えない、ソースコード管理が出来ない
Gitを使わずにすむ開発現場って案外あちこちにあるのかもしれません。別にGitにこだわるわけではないのですが、ソースコード管理の仕組みは積極的に利用したほうが良いと思います。プログラムの規模が大きくなったり、何人かで分担して開発していくようであればなおさらですね。
ツールを使わずフォルダ分けした手作業によるソースコード管理をしているところを見かけます。本番リリース時の作業が煩雑、リリースしたらデグレを起こしたり、とっても非効率な現場を垣間見たこともあります。
セキュリティへの意識が無い
- パスワードは平文で保存する
- ユーザ入力値をプリペアドステートメントを利用せずそのままSQLの組み立てに使う
「体系的に学ぶ 安全なWebアプリケーションの作り方」という本は個人的に良書と思っているのですが、そこに載っている事例そのものを実際に目の前にすると、ただただ呆れるばかりです。なにがどういけなくて、どうしたら良いかは、書籍を買って読んでみてください。
フレームワークを無視する
一つのプロジェクトを始める際には、言語はこれでフレームワークはこれこれを使おうと決めます。いざ担当者が開発をすすめ、たまにコードを確認すると驚きました。フレームワークが提供する仕組みや機能を全く利用せず、あたかもフルスクラッチのように書いたコードがあちこちに散りばめられているでは有りませんか。最初にフレームワークを使おうと言ったのは聞いてなかったの?それともフレームワークの使い方を誤解したの?
フレームワークの種類は多々ありますが、一つ2つをある程度使い尽くしていれば、新しいフレームワークへの順応も早くなることでしょう。フレームワーク使いましょうね。
見てないとサボる
端末を前に座ってキーボードを触っていればなんとなく仕事をしているように見えるものです。キーボードの音が静かになり、やけにマウス操作が多いなと気になっていたある日、その担当者の後ろを通りがかりにディスプレイ上に不審な動きを見つけてしまった。しばらくマークしていたらついにしっぽを見せた。2次元キャラが活躍するTwitterを閲覧していた!けしからん、そのTwitterアカウントを俺にも教えろ。
いや、ここで言うセリフは「業務時間中の業務外サイト閲覧の禁止。」だった
テストが出来ない
とりあえず動いたから提出。結合テストや運用テストしたらバグが多発。何回も手直しすることになりその結果想定工数を大幅に超過。工数のよみって本当に難しいです。
要件が理解できない
バグの種類で言う要件誤解、要件バグというやつ。ヒアリングしているときはよーく聞いているように見えても、実際に目に見えるものになった時点で確認するとこんなはずじゃないものが出来上がっている。何を思ったのか要件にない機能をつけて、それが業務の障害になることがわかり、結局外さなくちゃいけないことも。
英語が出来ない
ここまで英語ができない人が多いのかとあらためて実感しました。変数名がローマ字だったり中途半端な英語だったり。スペルミスならまだましです。変数名を考えるのがめんどくさくなったのか、data1,data2,data3.....data99 なんてものもありました。コードを隅々まで見ても、その変数がどういう性質のものであるか読み取ることは困難です。コード解析を拒絶する難読化技術の一種かと思うほどです。データベース製品によってはカラム名をマルチバイト文字で定義することが出来るんですね。日本人でも読みやすくフレンドリーな気がするんでしょう。データベース操作をプログラミングするときに、カラムの指定のたびに文字入力モードを変えなくちゃいけなくて煩わしい思いをします。言語によっては扱えない場面がでてくるんじゃないかと思ってヒヤヒヤします。
ローマ字変数名も便利に感じるかもしれません。YUBINなのかYUUBINNなのか、SETUMEIなのかSETSUMEIなのか。ローマ字にはゆらぎがあるのがわかります。タイプミスやバグの原因になります。区分や種別、タイプといった似ているようで微妙に異なるニュアンスの属性をどう表現してよいか悩むときはローマ字にしたほうが分かりやすいのではと思うこともあります。一度命名のルールを決めてしまえば楽なんだろうと思います。基本は英語での表記としたいです。
コメントに不適切文字が
プログラム内のコメントを見ると普通は処理の説明だったり、どういう設計なのかがわかるヒントが書いてあるものですが、まさにポエムが書いてあるのを目にしたときは衝撃でした。
- こんなクソな仕様にしやがって
- 〇〇が入れろって言うから仕方なくやってやる
他にも有りましたが割愛
おわりに
ここに紹介したエピソードは私が見てきた現実です。自分的には結構衝撃的だったんですが、経験豊富な読者様にはこのくらいのことは大したこと無いかもしれませんね。もっと衝撃なことを経験したという方おられましたらぜひコメント欄でご紹介ください。
それではまた!
コメント
@c-ari47リンクをコピー このコメントを報告 1
@parrot_sリンクをコピー このコメントを報告
3
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告 0
@error_401リンクをコピー このコメントを報告 今の学生はフリック入力は出来るけどブラインドタッチができない…しかし"両手フリック入力"をする子もいてローマ字入力より早い https://togetter.com
1
@matsuyoroリンクをコピー このコメントを報告 2
@SMwwwリンクをコピー このコメントを報告 1
@fujitanozomuリンクをコピー このコメントを報告 5
@rom1000_onigiriリンクをコピー このコメントを報告 5
@A-Kiraリンクをコピー このコメントを報告
1
@error_401リンクをコピー このコメントを報告 2
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告 0
@maemaeリンクをコピー このコメントを報告 1
@tenmyoリンクをコピー このコメントを報告 1
@miyabi_takatsukリンクをコピー このコメントを報告 1
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告 1
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告 1
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告 1
@fujitanozomuリンクをコピー このコメントを報告 2
@szcリンクをコピー このコメントを報告 1
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告 0
@tennis99jpリンクをコピー このコメントを報告
0
@KuwaK(編集済み) リンクをコピー このコメントを報告 1人日・1人月で生産するStep数の平均/中央値など | deecode blog https://deecode.net
1
@tennis99jpリンクをコピー このコメントを報告 0
@error_401(編集済み) リンクをコピー このコメントを報告 1
@tennis99jpリンクをコピー このコメントを報告 Typing Practice for Programmers | SpeedCoder https://www.speedcoder.net
0
コードに書かれたSQLが動くかどうかが問題になっている場面での派遣PGさんとの遣り取り。
コードの「コンパイルは通りましたけど」と真顔で言われた事があります。
勿論そのSQLは動きませんでした...
これ、わりと珍しくないと思います
私の職場に前に居たSEの方はブラインドタッチできませんでしたし
スクール等でも珍しくないです
(それすらできない人でもスクールから斡旋されたSES等では
「○○エンジニア」としてプロジェクトにアサインしているんでしょうね…)
変数名が半角英数字なだけマシに見えてしまいます
弊社の既存のVBAツールには2バイト文字の関数や変数がぞろぞろあります
それとも意味は通じるだけ、2バイト文字の方がマシなんでしょうか?
他にもUPDBI(UPDATE BI(日)の略らしい)=更新日のような
前任者はルー〇柴だったのかと思うような変数名も盛りだくさんです
SQLを書いていたり長い長いif文がまるごとコメントアウトされて
'YYYY/MM/DD 関数fooを修正
みたいなソース、弊社にいっぱいあります
3桁行のコメントアウトや関数まるごとコメントアウトで修正もザラです
…ここで実務経験(?)積んだ私もスライムの仲間入りな感がすごいですが
会社単位でスライムな場所もあるという実例でした
@c-ari47 さん、私の想像を超えるエピソードありがとうございます!コンパイルが通ればOKと考えたPGさん。SQL単体で確認したのかな。きっとそんな事も考えないのでしょうね。
いやはや、世の中広いものです
@parrot_s さん、エピソードありがとうございます!経験豊富なことにびっくりしています。
ブラインドタッチが出来ないのは別に珍しくないんですね。私がエンジニアに求める期待値が大きすぎる?のかも。
言語仕様が2バイト文字を許容しているんですね。VBA経験がない私としては違和感しか無いのですが、それって便利なんだろうか。どこかに落とし穴がありそうな気がします。
まさにこれと同様の命名を見ました。あちこちにあるんですね。
いやはや、開発現場の闇は深いです。
最近は、大学まで(なんなら、大学卒業まで)、ブラインドタッチができない若者が増殖中のようですね・・・。
これは恐ろしい、、、!copilotを採用がいいですね!
といいつつ僕も10年以上未経験エンジニアばかりしか採用しない現場にいましたので、
共感しかありません、、汗
3年ぐらい育ててやっとという時に、いつもバイバイですw
なんかもう大体当てはまってる気がしてきた🤣
コーディングルールやテストやレビューの方法を決めて守らせソース管理にgitを使わせたいなら操作方法を簡単にでもまとめて示せば問題のかなりの部分は解決するのでは?
記事を読んだ限りではされることをしないで愚痴を垂れてる印象です。
ブラインドタッチは割とどうでも良いことだと思います。
@fujitanozomu さんのコメント支援
この記事読んだ最初の印象は「なんか窮屈そうだし、この人の理想に叶っていないとこういうふうに記事とかで愚痴られたりするんだろうなあ」でした
しかしもちろん、記事にあるトンデモエピソードに笑ったり学ぶところもありましたので、
今後はプログラム内のコメントにはこういったチクチク言葉ではなく、誰もが涙する感動的で雅なポエムを心を込めて書こうと思いました
異業種から転職したての5年ほど前の私はまさにそうでした。
その時に一週間で覚えてこいって言われて、必死にやって覚えましたね。
その一週間は、仕事以外の時間は基本的にブラインドタッチの練習やイメトレをしていました。笑
それでなんとか一週間後のテスト(笑)に合格できました。
地味に辛かったですが、今となってはその時に必死にやって良かったと思っています。
愚痴ぐらい言ったっていいじゃない
だってQiitaなんだもの
(いいのか?)
@fujitanozomu さん、コメントありがとうございます~
今読み返すと、愚痴っぽい記事でしたね。猛省しています。もっと皆さんの役に立つ記事が書けるようがんばります。
はい。操作方法の指導はします。しかしそれでも解決しないこともあるんです。
他に改善するために取り組むべきことが有りましたら、コメント欄でご教示いただけると嬉しいです。
@error_401 さん。愚痴っぽい記事にお付き合いいただきありがとうございます。共感いただけるところが少しでもあれば嬉しいです。
他人のコードを借りる時は概ね完コピしてますね。
テストした上で動作上に問題なさそうならそのまま使いますが大体は取っ払って書き直したくなります。
中途半端にコードへ混ぜ込むと他人が書いたプログラムが何処に行ったか分からなくて苦労した覚えがあるのでURLまでコメントに含めて残したりします。
コピペだと会社的にはライセンス汚染(著作権侵害)リスクが気になる。
大変に、うなづける内容でした。
大変に申し訳ございませんすべての社会人様
やろうとしたことはありますが、
上司がバリバリのエンジニアのため、思いとどまっていますw
@error_401 さん
システムを使う現場では問題になっています。職種によっては現場オペレータの採用時にはキーボードが使えることが条件になるのですが、スキルの差は当然あり、人によってパフォーマンスが大きく差が生じます。フリック入力のUIがあれば解決するのかと考え真剣に検討したこともあります。
@matsuyoro さん
共感いただき嬉しいです。
より処遇の良いところに行っちゃんたんでしょうかね。長く働ける環境を作るのも課題の一つだと考えていたところです。
@SMwww さん
このようなエピソードはどこにでもあるんですね。
お仲間がいて安心(?)しました
@A-Kira さん
私もブラインドタッチが出来ることで良かったなぁっと思いますし、同じですね。
コードを書くことはもちろん、資料作成、メールの作成も、頭に思いついたことが
スラスラと書けることで、ITのメリットを生かしていると実感します。
ノートに手書きすることもするのですが、なんでスラスラ書けないんだと我にかえって、ノートPCを引っ張り出すこともあります。
@maemae さん
私もネットで見つけたコードをコピーすることもあります。あとで引用元を参照する可能性がある場合は、ブロックのコメントにURLを残しておいたりします。同じですね。
コードを借りる時、社内の他のプロジェクトで似たような処理をしているコードが無いか調査して、次にエンジニアに聞いてみて、それでもでてこないときはネット検索するという順序です。
@tenmyo さん
ネットニュースでコピペの著作権問題になったのを思い出しました。
たしかそれは担当したエンジニアが他社に持ち出したんでしたっけ
@miyabi_takatsuk さん
たまに息抜きは良いと思います。度が過ぎるとね~です。
上司の褒め言葉を書いておけば査定も良くなる?
@tennis99jpさん、
愚痴だから悪いということではなくて、されるべきは問題解決の筈で、されるべきことをされてないよう見える記事で愚痴を垂れられても「問題解決能力のない人だな」「建設的でないな」「下で働く人も不幸だな」等思うだけです。
コーディングルールやテストやレビューの方法を決めて守らせることは是非にされるべきと思っています。この辺り上の引用部から話が伝わってる気がしません。記事中で
と書かれていることからコーディングルールを決めていない、あるいは「コーディングルール」の概念に齟齬がある気がします。同様に、
ここでされるべきは「レガシーコード」の解釈は複数あることの注記ではなく、この記事の中ではどのような意味で使っているかの説明でしょう。自分で思っていることを他者へ伝えることは自分の責任だと思いますが、その辺りの認識がない方と伺えます。認識し改めない限り他者とのコミュニケーションギャップの解消は難しいと思います。
問題はタイピングが遅いことでありブラインドタッチができないことではないのでは? ブラインドタッチができなくとも業務に支障のない程度の速度でタピングできる人は珍しくもないという認識ですが必用なのはブラインドタッチですか?
生産性が全然違うということですが、教本等用意して少し練習させれば身につく程度のことが実施できない環境ということであれば根は深いですがちょっと自分の想像が及ばない世界ですね。
タイトルは秀逸ですがクソコード自慢なんて腐るほどあるので諦めて育てるか切り捨てるかすることをおすすめします。愚痴ってる暇はないはずですよ
@fujitanozomu さん。私の駄文、ダメコメントにお付き合いいただき本当にありがとうございます。参考になるところ多々あり、頭が下がる思いです。
ほんとそうですよね。こんな私と一緒に働く人には、本当に感謝しか有りません。
なるほど、そうですよねー。ルールは決めているのですが、なかなかそのルールを守ってくれない場合どうしたら良いですか?ね。
はい、おっしゃるとおりです。コミニュケーションは本当に難しいと思っています。業務指示を的確に伝えることもそうですよね。 @fujitanozomu さんは経験が豊富のようにうかがえました。なにかコツとか、普段気をつけていることとかありますか。そのへんのことをもし記事にでもしていただければ参考にしたいと思っています。よろしくお願いします
@szcan97 さん
コメントありがとうございます。
はい。気を取り直して、自分の業務に戻ります。
ブラインドタッチが出来ないということは、手元と画面の視線移動が頻繁に行われ時間ロスが発生します。タイプしているつもりがエディターやフォーム等に反映できていなかった、IMEI切り替えが思ったとおりでなかったなど意図しない文字が入力されていたなど、手戻りの要因も起こりえます。タイピングを効率的にそしてタイプ量を多くしようとすると必然的にブラインドタッチに行き着くと思います。
ブラインドタッチに関して、
私はブラインドタッチができるかどうかはプログラマの力量とは直接関係ないかなと思ってます。
例えば以下のサイトを見ると、プログラマが1ヶ月に書くコードはだいたい500~2000Stepぐらいみたいです。
20日稼働しているとして、大体一日に25~100行ぐらい書けばいいってことですね
これぐらいの行数であればブラインドタッチなんてできなくても余裕で書けますね。
もちろん開発の際に試行錯誤してたりすると実際にはもっと書くことになりますが、モダンな言語ではたいていエディタの強力な補完機能などがあるので、タイピングが遅すぎてプログラミングできない!みたいになることは一般的な現場では無いと思います。
それよりも支配的なのは、仕様を理解する時間、コードを読む時間、設計を考える時間、書いたコードを動かす時間、うまく動かなくて「はまる」時間です。ここらへんの時間がどれだけ短いか、あるいは短くしていく能力があるかがプログラマの力量に直結するという印象です。
もちろんブラインドタッチできるに越したことは無いと思いますが、そんな些細なことよりももっと見るべき点があるんじゃないでしょうか
@KuwaK さん、コメントありがとうございます。
紹介のリンク先記事を見ました。ソースとしている「ソフトウェア開発分析データ集2020独立行政法人情報処理推進機構 (IPA)」も確認しました。
P80 SLOC 生産性では開発5工程の実績工数(人時)に対する成果物SLOCの相関を求めています。開発5工程は基本設計~総合テストを対象としています。
開発規模(SLOC)によって、開発5工程の合計工数がどのように変化するかを調査したものと読み取ります。コーディング以外の工数および人間も含まれています。このデータからエンジニアのタイプ量の実績値を判断することは難しいと判断します。
最終的に成果物として残る行数としてはそれ位かもしれませんね。
各工程で必要なドキュメント作成、検討調査書、テスト打鍵、エビデンス作成など、キータイプが発生する場面は多くあります。1日に100行のコード成果物が出来たとして、そこに至るためのプロセスで発生する成果物はどうしてもキータイプが必要ですから。タイピングは仕事の効率、生産性を計る人るのバロメーターだと思っています。タイピングがすべてというわけでは有りません。
全く同意します。漠然とですが、ここで言っているプログラマの力量とタイピング能力にはある程度の相関があるんではないかと感じています。
はい、おっしゃるとおりです。もし目の前に補完機能を使わないエンジニアがいたらどうします?キャリア豊富なエンジニアでも実際に居るんですね。もしかするとキャリア豊富だからかえって、最新のツールに親しんでいないだけかもしれませんね。
@KuwaK さん
そうでしょうか。
できるプログラマでタッチタイプできない人はほぼいないでしょうし、逆にタッチタイプできない族のなかではできるプログラマは少ないと思います。(もちろん例外あり)
全く些細なことじゃないです。
メールやチャット、仕様書やBTS、報告書や議事録など文章を入力する機会も多々あります。
想像してみてください。タイプが速い人がチャットでレスするのに1分かかるなら、5倍タイプが遅い人は5分かかるんですよ?
タイプが速い人が年間100時間タイプに費やしてるとしたら、5倍遅い人は500時間必要なんです。
想像してみてください。日本語キーボードを使っているあなたが英語配列のキーボードを使わざるをえなくなったら。ほんの少しの間作業効率が落ちるでしょう。dvorak配列で入力するのを強制されたら。相当長い間作業効率は落ちると思います。
これでも些細なことだと思いますか?
キータイプで思わぬ反響を頂いてびっくりしています。
あくまでも想像ですがプログラマーの立場からキータイプのスピードやブラインドタッチの出来るできないだけで能力を評価して欲しくないと言っているような気がしています。一方でプロジェクトのスケジュールやコストを管理する側から見れば、効率と品質とか気にしているわけで、プロジェクトに投下するエンジニアの能力をどうやって測って、作業工程にどう反映するかを判断しなくてはなりません。効率よく振る舞ってくれれば日程に余裕が生まれますが、反対ですと。。。やはりキータイプが速い(ブラインドタッチが可能)方が安心材料になります。
管理側が作業担当者の効率の良さに期待を寄せているのであれば、担当者するプログラ―ま―はその期待に応えるように努力するのはいかがでしょうか。ブラインドタッチが出来ないことを棚に上げて、エクスキューズを並べるよりもずっと気持ちがよいです。効率よく仕事ができるようになれば、より多くの経験がつめて、その結果能力が上がっていくと思います。
さて、プログラマ向けのタイピング練習ツールが無いものか調べたところ、こんな良いサイトが有るのを見つけました。
言語別にページが用意され、課題のプログラムソースを見ながらタイプしていくものです。言語の習得にも少しは役立つかもしれませんね。