【Webエンジニアの備忘録】駆け出しエンジニアに伝えたいエンジニアとして大切だと思うこと
はじめに
ご高覧いただき有難うございます!
ソフトウェアエンジニアのKitaharaです.
本日は「エンジニアとして大切にすべきこと」をテーマに話をしていきます.
まずはインターネット上での意見を見てみましょう.
インターネット上での意見
学び続ける姿勢
普段から技術記事を読む
カンファレンスに参加する
調べる癖をつける
コミュニケーション力をつける
お客様とのコミュニケーション
社内でのコミュニケーション
時間管理能力を付ける
体調管理能力を身に着ける
どれも大切なことだなと思います.
一方で, エンジニアというよりは社会人として大切なことも書かれているように思います. そこでこの記事ではエンジニアだからこそ気を付けたいことについて絞ってポイントを挙げてみます.
私の意見
私個人の意見としてはリファレンスをしっかり読むことがおすすめです.
もっと言えば自分が何をしようか理解することが大切だと思います.
公式のリファレンスをきっちり読む
英語力をある程度付ける
変数名にこだわる
興味を持ったことは手を動かす
公式のリファレンスをきっちり読む
公式リファレンスをしっかり読むことは大切です.
少し抽象的ないい方をすると, 自分が何をしようか理解することが大切だと思います.
プログラミングとはそもそも何かを実現するプログラムを書くことです.
このプログラミングがうまく行くと自分の予想した動きをして, 失敗すると予想できなかった動きをしたり, エラーを吐いたりします.
プログラミングの動作を私たちはどのように予想しているのでしょうか?
言語や外部モジュールの機能から出力を予想をします.
つまり, 言語や外部モジュールのリファレンスをよく読み, 関数やクラスの動きを理解することはプログラミングをすることでとても大切なのです.
また, そこに数学的な概念が入っているのであればその概念も理解する必要があります. (アルゴリズムをきっちり把握できていますか?)
公式のリファレンスをきっちり読まないとどうなるか
公式のリファレンスでなくともNoteとかQiitaとかに一杯サンプルコードが載っているじゃんという方もいると思います.
試してみる分にはいいのですが, システムを作るであればNoです.
予期しないエラーが発生してしまうことがあるからです.
予期しないエラーとは何でしょうか?
それは理由を説明できないエラーのことです.
そのようなエラーには大量の時間と労力を使わされることになります.
システムのどこに異常があるのか調べて, 解決策を探し, エラーを解消できた…! と思ってもその影響でどこかが崩れるというのはあるあるです.
そのようなリスクを背負わないためにもクラスや関数は動きを説明できるものを使うべきですし, そのためにはリファレンスをきっちり読むことが必要になります.
関数の動きを理解しないで使うということは数学的背景を理解せずに統計解析をするのと同じです.
実際に数学的背景を知らないと分析をミスしてしまうということはよくあります. 例えば, 重回帰分析では変数間に相関があってはならないということが最小二乗法による導出をしたことのある人であれば知っています. ですが, 分析法の導出をしていない人はこのことを知らずに不安定な分析結果を成果物にしてしまうのです.
エンジニアも同じで, リファレンスを読まなかったり, 理解しきれないまま使ってしまうと重大なバグを起こしてしまいます. つまり, エンジニアは数学書を理解するかのようにリファレンスを読まなければならないのです.
英語力を身につける
何事においても基礎力というものは重要です.
アルゴリズムや言語の勉強の他に英語を学ぶことは私たちにとって必要なことだと思います.
日本であってもエンジニアは英語を目にする機会が多いです.
例えば, Githubのコードのコメントアウトや公式のリファレンスは英語で書かれていることが多いです. (むしろ日本語の方が珍しい)
また, バグの報告等はStack OverFlow等を参考にすることがあると思いますが, そこに関しても英語を使います.
英語の文章がある程度読めるとコードに反映するまでの速度が速くなり, 作業時間の効率化につながります.
変数名にこだわる
変数名にこだわることは重要です.
勉強をするときは一人でも, 実際に働くときには複数人になるからです.
複数人でプログラムを書くときには相手にプログラムをしたときの自分の意図をコードを介して伝える必要があります.
コードを介して自分の意図を伝えるにはどうすればよいでしょうか?
いくつかあるのですが, その一つの手として変数名にこだわることです.
例えば以下のコードではどちらが理解しやすいでしょうか?
### Python
a = input()
a = int(a)
if a >= 20:
print('you can drink')
else:
print('you can not drink')
### Python
age = input('please input your age')
age = int(age)
# People over 20 years old can drink alcohol in Japan.
if 20 <= age:
print('you can drink')
else:
print('you can not drink')
圧倒的に後者と答える人がほとんどだと思います.
後者が理解しやすい理由は変数名にあります.
変数がageと最初から分かるので読み手に伝わりやすいのです. 簡単な例でもこのぐらい違いがでるので複雑になればなるほどもっと威力を発揮します.
例えば, Webアプリケーションで自作関数を大量に使う時に名前がFunc001やget_Dataという名前では混乱してしまうことがあります.
前者であれば, Func001とFunc002だけならよいのですが, Func100まであるとしたらどれがどの機能を持つのかを把握するのはほぼ不可能でしょう. 後者は何のデータをgetしているのかが分かりません. また, HTTPリクエストのGETなのかDBからSQLで引き出しているのかが分からないです.
もし, コードで自分の意図を伝える方法をあまり知らないのであれば, 以下の本は重大な事実をもたらす可能性があります. エンジニアであればみんな読んでいる本なので是非購入してはいかがでしょうか?
(この表紙ですが, コーディングに音楽のコードを掛けていて好きです.)
興味を持ったことは手を動かす
興味を持ったことは実際に手を動かして体験しましょう.
どんな技術でも知っているのと使えるのでは雲泥の差が存在します.
動かしてみないと体験できないことは実は多いのです.
例えば, 実行時間がその最たるものでしょう.
実行時間が長ければもしかしたらローディング画面を作らないといけないかもしれません. もし, 実行時間が長いことを知らないまま, 作れるかどうかの話をしてしまった場合, 顧客の要望に沿わないプログラムができてしまう可能性があるのです.
また, 機械学習であればどのデータに対してどのぐらいの精度が出るのか, データの件数はどれぐらいいるのか, データの型の受付けは…等考えることがたくさんあります.
これらの問題はただ実行することで解決するので私たちは何かに興味を持ったらまず手を動かす必要があるのです.
ご意見おまちしております
今回はプログラミングで大切なことについて執筆しました
他にも大切なことはたくさんあると思うので我こそはという方は是非コメント欄に書いていってください!
参考になったという方はスキ・拡散お願いします!
モチベーションが上がります!
記事内で不明な点等ございましたら気軽にご連絡ください.
Twitter: @kitahara_dev
email: kitahara.main1@gmail.com
この記事が気に入ったらサポートをしてみませんか?