技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

プログラミング言語のスキルチェンジで役に立った共通スキル

私は元々COBOLC言語を主に扱っていたエンジニアでしたが、3年前からJavaC#を中心的に扱う現場で仕事をするようになり、現在ではJavaScriptを使うフロントエンド業務に従事するようになりました。
プログラミング言語に依らない共通のスキルを有していたため、経験の浅い言語や未経験の言語の仕事を頂くことができ、またキャッチアップもこれまで経験してきた言語との違いに着目するだけで良かったため難しいものではありませんでした。
 
この記事では、私の経験を元に、役に立った共通スキルを紹介していこうと思います。
プログラミング言語のスキルチェンジを考えている方の参考になれば幸いです。
 
【役に立った共通スキル】
アルゴリズムの知識
 例えば、誤差が許されない金額計算で用いられるアルゴリズムは、
 言語に依らず様々なシステムで使われています。
 また、コントロールブレイクやマッチングといったファイル操作のアルゴリズムは、
 メインフレームの基幹システムで使われることが多いアルゴリズムですが、
 基幹システムの中には脱メインフレームを果たしたシステムもあり、
 そのようなシステムではCOBOL以外の言語でそのアルゴリズムが書かれます。
 これらのようなアルゴリズムの知識があれば、
 言語の知識が無くとも設計を担当することができますし、
 キャッチアップを図る際も重点的に勉強するべきポイントを掴むことができます。
 
・メモリに関する知識
 COBOLでは16進数の文字コードを扱う機会が少なくありません。
 そのため、文字列やバイナリ文字を見たまま理解するのではなく、
 16進コードを想像しながら読む癖が身に付きます。
 モダンなシステムでは16進コードを意識する機会は多くありませんが、
 それでも文字コードの違いや入力禁止文字を考える機会はあるため、
 そのような場面で16進コードで考える癖が役に立ちます。
 (モダンな技術者は16進コードに慣れていないので、このスキルはレア度高いです)
 また、C言語ではポインタ変数やメモリ確保・解放といったことを意識します。
 C言語経験者がJavaを学ぶ際、
 ポインタ変数の知識は参照型変数(代表例はインスタンス変数)、
 メモリ確保・解放の知識はJVMのメモリ管理の理解に役立ちます。
 
RDBMSの知識
 レガシーシステムでもモダンなシステムでも、
 データの管理にはRDBMSを使うのが主流です。
 そのため、SQLやテーブル設計やチューニングといった技術は多くの現場で通用し、
 これらの技術を有しているだけでも現場で重宝され、仕事を頂くことができます。
 筆者はデータベーススペシャリストを所持していますが、
 この資格では製品に依らない体系的な知識を問われるので、
 個人的にはこの資格の勉強をするとスムーズに知識を習得できると思います。
 
・保守や運用の知識や経験
 COBOLを使用しているレガシーなシステムに携わると、
 システムの保守や運用に関する豊富な知識や経験を得られます。
 障害が発生しにくい改修作業、障害の検知、障害発生時のリカバリー、
 といったことを、設計段階から考えられるようになります。
 このようなスキルは、システムを安定的に運用したい全ての現場で求められ、
 プログラミング言語をキャッチアップする前から設計やレビューで活躍できます。
 
・リーダー経験
 システム開発はチーム戦であるため、
 10名程度のチームをまとめた経験があるとその経験自体も活きます。
 設計スキルにリーダー経験が加わると、
 チーム外との仕様調整で外部仕様を固め、それに基づいて内部仕様の概要を決め、
 内部の詳細仕様と製造を特定言語に詳しいメンバーに割り振る、
 という立ち回りができるようになります。
 仮に、現場で使われるプログラミング言語の知識に乏しかったとしても、
 この立ち回りができるだけでチームの中心人物として扱われるようになりますし、
 メンバーからプログラミング言語の知識を教えてもらうこともできます。