早速ですが、以下のmainメソッド内にある変数aと変数bの値を入れ替えてください、と言われたらどうしますか?
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 20;
}
}
すぐに思い付くのは以下のように変数cという一時的な変数を用意して入れ替える形かと思います(話の本質から外れるので扱いませんが、これはXOR交換アルゴリズムを使えば一時的な変数を使わずに実現できます)。
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 入れ替え
int c = a;
a = b;
b = c;
}
}
プログラマ脳とは
プログラマ脳とは、事象の前後関係の整合性を取りながら簡潔かつ効率的かつ論理的に物事を組み立てる力です。上記の例の場合、以下のようになります。
1. 一時的な変数cを用意する
2. cにaを代入する(aをcに一時的に退避させる)
3. aにbを代入する
4. bにcを代入する(2で退避していたaを代入する)
プログラマにとって、この順序を自分で組み立てられるかが非常に重要です。こういった力を身に付けないと「破片プログラマーの悲しみ」のようになります。なので、まずはこの力を身に付けましょう。
また、この力はプログラミングはもちろんのこと、人に物事を説明をする時、資料を作成する時、等プログラミング以外の業務でも必要な力になってきます。
どうやって身に付けるか?
本来であれば、業務内で0からプログラムを組み立てて先輩や上司にレビューしてもらいながら身に付けるのが一番だと思いますが、現場によってはそういった業務が割り当てられない場合もあります。
なので、そういった場合は自主的にアルゴリズムなんかを学習すると良いかと思います。アルゴリズムの中でもソートアルゴリズムなんかは比較的分かりやすいです。
いろいろなソートアルゴリズム
初中級エンジニアが【アルゴリズムを優しく学べる】本とサイト16選
自分なんかはバブルソートやクイックソートなんかを研修でやった記憶があります(もう10年前くらいですが)。
あとは、常日頃から「調べる前にまずは考える」癖をつけると良いかと思います。
ちなみに冒頭の入れ替え問題について、最近のプロセッサ事情だとXOR交換アルゴリズムの方が遅いそうです。
XOR 交換アルゴリズムと一時変数を使ったスワップ