【入社前・配属前に見るべし！】超・超・超初心者向け！開発者としての心構えとは～

# はじめに
初めまして！:clap:

私はエンジニアになって**2か月**の超初心者エンジニアです。
今後、私のように初心者エンジニアとして新たなステージへと羽ばたいていかれる皆さんにちょっとしたアドバイスもかねて「**初心者エンジニアとしての心構え**」を**3つ**伝えたいと思います！:muscle:

では、初めに、、
簡単な自己紹介として私がエンジニアになるまでの流れですが、、


>**1.高校は文系（数学は大の苦手）
↓
2.大学は法学部
↓
3.就活中は「営業職」になろうと活動
↓
4.現在の会社に入社
↓
5.エンジニアとして開発に配属**


といった感じです。


こう見ると開発に配属されるまでは「エンジニア」という職業は私から遥か彼方にある存在ですよね。:thinking:



世の中には初心者でもエンジニアになりたくて挑戦しようする猛者はたくさんいます。
ですが私は、「エンジニアになりたい！」というよりかはなんとなく「自分でもエンジニアとしてやれそうかな…」くらいの気持ちで開発に配属されました。:sweat_smile:

なので、、
```
System.out.println("hello world!");
```
こんな**簡単なコード**を見ても配属当時の私はなんのことかさっぱりわかりませんでした。:dizzy_face:（もし、このコードが分からない人がいても全然大丈夫ですよ！:v:）


ということで今回の記事は以下のような方にぜひ見ていただきたいと思っています！

>**・あんまりなりたくなかったけどエンジニアになっちゃった人 
・Javaって何？ソースコードとは？って思っている人
・エンジニアに興味あるけど全くエンジニアのことを知らない人
・エンジニアとして入社・配属されたけどこれからどうしようと思っている人**

世の中には初心者を脅すかのような記事がありますが、私もついこないだまでは初心者中の初心者でしたのでこの記事で初心者の皆さんを脅したり、やる気を失わせたりすることは一切ありませんし、したくもありません！:triumph:

また、心構えを全部守る必要は全くありません！（自分の主観も入っているので…）

気に入った心構えがあればぜひ参考にしてくださいね～といった感じです:grinning:

それでは行きましょう！！！！


<!-- ================================================= -->
# 「初心者エンジニアとしての心構え」
## ～その壱～「聞く」「調べる」「考える」を使い分ける
<!-- ================================================= -->

突然ですが、、
```
import java.util.*;

class Employee{
    int number;
    String name;
    
    Employee(int number,String name){
        this.number = number;
        this.name = name;
    }
    
    int getnum(){
      return number;
     }
     
    void changenum(int Newnumber){
        this.number = Newnumber;
    }
     
     
    String getname(){
       return name;
     }
     
     void changename(String Newname){
         this.name = Newname;
     }
     
}


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        ArrayList <Employee> emp = new ArrayList<>();
        
        for(int i=0; i<n ; i++){
            String a = sc.next();
            if(a.equals("make")){
                int nb = sc.nextInt();
                String na = sc.next();
                // Employee em = new Employee(nb,na);
                // emp.add(em);
                emp.add(new Employee(nb,na));
            }else if(a.equals("getnum")){
                int num = sc.nextInt()-1;
                Employee e = emp.get(num);
                System.out.println(e.getnum());
            }else if(a.equals("getname")){
                int nam = sc.nextInt()-1;
                System.out.println(emp.get(nam).getname());
            }else if(a.equals("change_num")){
                int number = sc.nextInt()-1;
                int numbers = sc.nextInt();
                emp.get(number).changenum(numbers);
            }else if(a.equals("change_name")){
                int name = sc.nextInt();
                String names = sc.next();
                Employee em = emp.get(name-1);
                em.changename(names);
            }
        }
        
    }
}
```
このコードを見て何をしているかわかりますか？？

分かった方がいたらもうこの記事を読まなくていいですよ（笑）
きっと大半の方はこのコードを見てもさっぱりだと思います。

ですが、残念なことに皆さんは今後いきなりわからないコードを読めと言われたり、書けと言われたりするんです…。:sob:
そんな時に皆さんはまずどうしますか？？

「調べる！？」「聞いてみる！？」「じっくり見て考えてみる！？」いろいろあると思います。

まずやってみてほしいことは「**じっくり見て考えてみる**」ことです。
「自分で考えて解決しろ！」ということではなく、何が分からないのかを考えてみてほしいということです。

もちろん、考えてわかることに越したことはありませんが、自分で考えただけで理解できる初心者なんていません。
ですが何が分からないかを明確にしないと調べたり聞いたりすることはほぼ不可能です。
まずは「**何が分からないか**」をじっくり考えてみましょう。:muscle:

そして次にすることは「**調べる**」です。
ここではGoogleなどを使って実際に調べてみましょう。
おそらく、
```
String a = "初心者”;
```
といったようなコードなら丸ごと検索しても結果が出ると思います。
ですが、今回のコードのようにとんでもなく長いコードを丸ごと検索にかけても結果はかえって来ないでしょう。:scream:

そんなときは各文の先頭の単語を調べてみましょう。
ここでいうと```if```や```String```、```ArrayList```などです。
ただ、はっきり言って調べたところで初心者が完璧にわかることはなかなかないと思います。

ですので、一番いい手段は「**聞く**」ことです。
先輩だけでなく経験者の同期などに聞いてみましょう！
おそらく考えたり調べたりするより的確な答えが瞬時に得られるでしょう。:blush:

ですが、考えてみてください。

「**聞く**」ということは聞かれた相手の時間を奪うことです。
ですので「**聞く」前に自分が何が分からなかったのか調べても分からなかったのかを明確にするために、「考える」「調べる」といった手順を踏んで**から質問するようにしてください！:star:

## ～その弐～　初心者なんだからできなくて当たり前！
「そんなこと言われなくてもわかってるよ！」と思った人もいるでしょう。:no_mouth:

私も最初はそう思ってました。
ですが、研修が進んでいくにつれて同じ初心者の中でも、できる人、できない人に分かれていきます。
もしあなたが一人だけできない側に人間になったとして、その時にも「初心者なんだからできなくて当たり前！」なんて言えますか？？:open_mouth:

正直、言いにくいと思います。

ですが、この記事を見てくれている皆さんには自分だけが初心者の中でもダントツにできていないという状況でも「初心者なんだからできなくて当たり前！」と思っていてほしいです。

それはなぜか、、

人間は周りのみんなが全員出来ないことができなくてもあまり落ち込みません。
ですが、一人だけできない状況になるとかなり落ち込みます。
自信が無くなります。
そして最後には**自分だけがわからないという恥ずかしさからわからないことを隠そうとする**のです。:sob:

初心者が数週間・数か月間の間勉強したところで、できることに大した差はありません。
飲み込みが早い人間もいれば、コツコツと努力をして少しずつ理解していく人もいます。

**初心者同士の差は自分の努力次第でどうとでもなります。**:thumbsup:

ですが、「その壱」でも言ったようにできる人に「聞く」というのが上達への一番の近道です。
わからないことを隠して「聞く」ことにも臆病になっていては、いつまでたってもできるようにはならないでしょう
むしろわからないからこそどんどん聞いて自分のスキルを磨いていくべきなのです！

ですので、どんな時も（特に最初の一年間は）「**初心者なんだからできなくて当たり前！**」という気持ちを持ちつつ、たとえわからないのが自分だけだとしてもどんどん他者へ相談して教えを乞うべきです。:dash:

## ～その参～　自分が楽しいと思える分野を見つける
「エンジニア」と一言で言っても、会社や部署によってはやっていることが全く異なります。

Javaを使っている人もいればPythonを使っている人もいるし、はたまた、AWSを使っていたり、HTMLを使っていたりと「何をするか」によって使用する言語はもちろんサービスや役割も異なってきます。（ここで出てくるアルファベットの言葉は知らなくてもOKです:thumbsup:）

初心者の皆さんはどれを使いたいのか、どれが自分に合っているのかなんて全く想像できないと思います。
**いろんなサービスに触れておくことで、自分が楽しいと思えること、いまいちだなと感じるものが出てくる**と思います。
そういったものを見つけ出してください。

もちろん、中には「自分はあんまりエンジニアになりたくなかったけど配属されちゃったから楽しいものなんてないよー」っていう人もいると思います。
楽しいものがなくても、**自分が楽しくないと思えるものの中から、これならまだましと思えるものを見つけ出せれば十分**です。

そうすることで、モチベーションも上がりますし、将来的に自分が目指す姿が見えてくると思います。

自分の目指す姿を明確にして、エンジニアライフ楽しみましょう:grin:

# さいごに
ここまで読んでいただきありがとうございました。

偉そうなことをだらだら述べていますが、私も初心者の一員です！:writing_hand:

今回紹介した「心構え」の中で参考になるものがあればぜひ活用していただきたいです。:ok_hand:

皆さんと切磋琢磨しあえるように私もこの心構えを意識して今後も頑張っていきます！:dizzy: