初心者エンジニアに送る中堅エンジニアに近づくために必要なこと

テクノロジー
スポンサーリンク

どうも、Monagaです。

エンジニアとして活動したはいいものの、いつまでも初心者から抜け出した感じがしないという方いらっしゃるのではないでしょうか?

先輩エンジニアのように息を吸うようにコードを書いたり、どうやったらこのコードを考え書けるのだろう?など。

僕自身が過去に通った道でもあります。

未だ中級エンジニアと胸を張って名乗れるかは不安ですが、いまのところフリーランスとしてコードを書いてきてそれなりに案件の継続を依頼されたりするので、おそらくある程度のラインは超えていると判断頂けているのだと思います。

そんな僕が考える中級エンジニアに近づくために必要だと思うことを紹介します。

リーダブルなコードを意識する

コードを書く際、このリーダブルなコードを意識するというのはとても重要です。

基本、プロジェクトでコードを書く際は自分一人で全て書ききることはほぼ無く、他者と一緒にコードを書いていきます。

この時、変数名が意味わからなかったり、メソッド名がどういう挙動をするのか予測出来ないといちいちコードの中身を全て追わないといけません。

これは多大な労力であり、とても非効率です。

そこでリーダブルなコードを書くことが大事になってきます。

リーダブルなコードは↓の書籍を読んで学ぶと良いでしょう。


リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

また、この書籍の内容を要約してくれている記事がありますので、そちらも併せて確認すると良いでしょう。

リーダブルコード要約とリーダブルコード要約の活用方法 - Qiita
# リーダブルコード要約とリーダブルコード要約の活用方法 !(

読んで頂けるとわかってくるのですが、適切なものに適切な名前をつけようという内容がとても重要だとご理解頂けると思います。

ただ、エンジニア英語だったり、そもそも英語が苦手だという方もいると思いますので、英語の品詞等をまとめた記事もご紹介しておきます。

モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう - Qiita
## はじめに 他の人が書いたコードを読んでいるときに時々気になるのが、英語の間違いです。 特に動詞、名詞、形容詞の使い分けが間違っていたりすると、かなり違和感を感じます。 そこで今回はモデルやメソッドに名前を付けるときの基本的な...
うまくメソッド名を付けるための参考情報 - Qiita
( あるメソッドを定義しようとするとき、そのメソッドを使う人達が名前からどんなことをするか理...
関数名によく使われる英単語(動詞)の意味とニュアンス | PHP Archive
PHP に限らず、プログラミングで使われる多くの関数名は「動詞+目的語」という命名規則になっていることが多く、「insertPost()」であれば投稿を挿入するという意味が名前から読み取れます。 では投稿を削除する場合はContinue reading

デザインパターンを習得する

リーダブルコードに続くのですが、こちらもコードの可読性、保守性、拡張性などに繋がる内容となります。

デザインパターンとは、コードを書く際に、こういった要望がとあるシステムでは必要になるということを過去の事象から洗い出し、その要望を叶える際のより良い設計方法をまとめたものとなります。

詳しくは↓をご確認ください。

デザインパターン (ソフトウェア) - Wikipedia

 

開発者はこのデザインパターンを知っておくことで、「このコードはこのパターンを適用している」とコードの理解がしやすかったり、デザインパターンを用いることで保守性、拡張性を高めることが出来ます。

デザインパターンをまとめて下さっている記事を紹介します。

Rubyデザインパターンまとめ
GoFのデザインパターンとは、「プログラミングのベストプラクティスを体系化したもの」です。このベスト・プラクティスをしっかりと理解して設計すれば、ソフトウェア設計の効率を高めることができます。またデザインパターンが「プログラミングの思想」の共有をよりスムーズにしてくれます。先人たちの試行錯誤の結果を効果的に利用して、プ...
morizyun/ruby_design_pattern_sample
Contribute to morizyun/ruby_design_pattern_sample development by creating an account on GitHub.

全て網羅しなくても必要最低限、デザインパターンの以下の5原則は知っておきたいところです。

  • 変わるものを変わらないものから分離する
  • インタフェースに対してプログラミングし、実装に対して行わない
  • 継承より集約
  • 委譲、委譲、委譲
  • 必要になるまで作るな(You Ain’t Gonna Need It./YAGNI)

プログラミングの原則を知る

プログラミングにて、多くの優秀な方が成功と失敗を積み重ねており、その知見が溜まっております。

その知見は原則としてラベリングされており、普遍的かつ有用な知識として受け継がれています。

最初は全てわからなくても内容を頭の片隅に置いておき、経験を重ねていくうちに理解出来るようにしましょう。

何かのときにすっと出したい、プログラミングに関する法則・原則一覧 - Qiita
# エンジニア組織を強くするための本を出版しました Qiitaでエンジニアリングをめぐる様々なコミュニケーションの問題とその解決策や考え方を書いてきた。それらの背後にあるエッセンスをこの度書籍として出版するに至りました。 [エンジ...

特にデメテルの法則、驚き最小の原則、YAGNI、DRY、KISS、SOLIDは大きくプログラミングに関わっているので知っておくと良いでしょう。

ネットワークの知識を身につける

プログラミングする際、主にWebが関わってくるのはモダンなシステムとして多いと思うのですが、Webというのはネットワーク上に構築されており、ネットワークを介しています。

このネットワークの知識というのは重要でWebアプリ開発などする際、ネットワークも意識してプログラミングする必要があります。

HTTPメソッドだったり、暗号通信だったり、通信プロトコルやポートなどネットワークの知識は幅広くWeb開発に関係しています。

最低限、以下のどちらかでネットワークの基礎を習得しておくと良いでしょう。


マスタリングTCP/IP 入門編 第5版


ネットワークはなぜつながるのか 第2版

アルゴリズムとデータ構造を学ぶ

アルゴリズムはプログラミング言語のライブラリなどで用意されており、基本自身で実装する機会などは少ないのですが、DBのIndexの仕組みの理解だったり、位置情報を使用し最短距離を計算するなど少し手の込んだ実装をするときに使ったりとちょくちょく必要になってきます。

また、アルゴリズムを知っているといないとではプログラミングする際の思考にも大きく影響してきます。数学的読解力や思考力が鍛えられます。

最低限、ソートのアルゴリズムや再帰、二分探索など基本的な部分は抑えるようにしましょう。

↓の書籍などおすすめです。


プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

テストの大事さを知る

テストはとても大事です。

実装して終わりでは、コードを変更するときや追加するときなど、毎回影響範囲を全てチェックしておかないと行けなくなり、改修が大変になります。

テストを書いておき、ある程度の部分はテストで品質が保たれているという安心はプロジェクトを進めていく上でとても有意なものとなります。

毎回コードを書く際はテストありきで実装していくことを念頭におきましょう。

【初心者向け】テストコードの方針を考える(何をテストすべきか?どんなテストを書くべきか?) - Qiita
## はじめに 「テストコードを書きましょう」とはよく言われるし、テストコードが大事だってことも理解できるんだけど、何をテストしたらいいの?どんなテストを書いたらいいの?と迷っている初心者プログラマさんは意外と多いのではないでしょう...

情報を常にキャッチしていく

プログラミングなどの技術のトレンドは日に日に変化していきます。

去年流行っていたものが今年流行っていないなど大いに起こり得ることです。

初心者のうちは基礎をまず学べばよく、トレンドを追いかける必要はありませんが、中級を目指すのであればトレンドを追い、今後何が必要になるか?を知っておく必要があります。

また、最新のものというのは基本過去の不便を解決する目的で作られていることが多く、便利で効率がよくなるものが多いです。この便利なものを取り入れ開発効率をあげる工夫はとても大事な姿勢だと思います。

おすすめのキャッチ方法をいくつかご紹介します。

Twitterで強いエンジニアの方々をフォローする

強いエンジニアというのは情報に敏感です。Twitterで権威あるユーザーとも繋がっており情報を拡散してくれます。

この強いエンジニアをフォローしエンジニア界隈の最新の情報や考え方をキャッチアップするようにしましょう。

何人か僕が実際にフォローしている方をご紹介します。

他にもたくさんの強い方々がTwitterにはいて、もっと紹介したいのですが長くなってしまうのでこれまでとします。

また、もっと多くの強い方々をフォローするコツとして、上記に挙げたような強いエンジニアの方々がフォローしている人たちを見ると良いでしょう。強いエンジニアというのは強いエンジニア同士で繋がっていることがよくあります。

Qiitaのトレンドをチェックする

Qiitaの1日のトレンドをチェックしましょう。

良い考え方やコードの書き方、初心者に向けての記事などで良質なものがトレンドにあがってきます。

トレンドにあがってきた記事はチェックして、内容をメモしておきましょう。またコードであれば実際に書いて動かしてみることをおすすめします。

Githubで強いエンジニアの方をフォローする

Githubはフォローしているユーザーがどういった行動を起こしているか確認することができます。

強いエンジニアが普段どういったリポジトリを確認してて、どういったリポジトリを作成しているかなどを知ることができます。

この内容を参考に自身でも同じように行動しましょう。何事も最初は真似から入ると成長速度も速いかと思います。

さきほど例にあげたTwitterの強いエンジニアの方々もGithubのアカウントはあったりすると思うのでぜひフォローしておきましょう。

獲得すべき技術を知る

技術のトレンドの移り変わりは早いと述べましたが、ではどの技術を学べば良いのか?と不安になります。たくさんの種類がありますので。

そこで強いエンジニアの方々がロードマップという形で記載してくれています。

これにならい、自分が習得すべき技術を絞り込んでいきましょう。

kamranahmedse/developer-roadmap
Roadmap to becoming a web developer in 2020. Contribute to kamranahmedse/developer-roadmap development by creating an account on GitHub.

Webエンジニア基本

Webエンジニアは大きくフロントエンドとバックエンドに分けられるのですが、どちらにしても基本的なスキルは必要でこの基本的な部分を図解しています。

そもそもフロントエンドとバックエンドとは?がわからない方は↓の記事を参考頂ければと思います。

【エンジニア必見!】バックエンドとフロントエンドエンジニアの役割と将来性 | アトオシ
「フロントエンドとバックエンドエンジニアはどっちが需要や将来性がある?」などと悩んでいる方も多いと思います。そこで、それぞれのスキルやどのような仕事があるか調査しました。この記事では、バックエンドエンジニアとフロントエンジニアの役割や将来性について解説していきます。

フロントエンド

バックエンド

紹介したロードマップは上から下へ下っていく流れとなります。

最後に

初心者の頃は、プログラミングして実際に自身で作ったWebサイトを見てプログラミングの楽しさを知ると思いますが、どんどんコードを書いていくとプロとしてのプログラミングというものが見えてきてとても難しく感じると思います。

良いコードほど抽象度が高かかったり、幅広い知識のもと書かれているものです。

その奥深さや覚えることの多さに辛いと感じることもあると思います。

しかし、強いエンジニアの綺麗な哲学のあるコードを見て、憧れたりするのもまた良いものです。

自分なりの楽しさを忘れずに、奥深く楽しいプログラミングの世界で生きていけたら良いですね。