English

お問い合わせ

採用ブログ

学生生活で学んでも損はしない技術のこと

はじめに

 はじめまして。2020年度に新卒で入社しました三嶋です。今回のブログについては普段私が仕事で関わっていて役に立っていること、学生の頃に学んでおいても損はなかった技術のことについて話していきます。今回話す内容は以下の3つです。

  1. プログラミング言語(特にC言語)
  2. Linux kernelと組み込み技術
  3. gitの使い方

1. プログラミング言語(特にC言語)

 最初に、学生の頃に学んでおいてよかったと思ったのがC言語です。新卒の研修が終わり、プロジェクトに参加して開発を行うプログラミング言語がC言語でした。
 これは、組み込み関係の案件であればC言語というのはほぼ間違いなく開発するために、必要になるプログラミング言語と思います。場合によっては違う言語で開発を行うということもありますが、ハードウェアが関わってくるようなものであればC言語で開発することになります。
 学生の頃は研究も含め、C言語で色々なものを開発をした経験もあり、スムーズにプロジェクトに関わることができたと思います。もし、C言語を書いたことがない状態であれば、他の言語で開発した経験があったとしてもかなり苦労をしたと思います。
 学生の頃は研究も含め、C言語で色々なものを開発をした経験もあり、スムーズにプロジェクトに関わることができたと思います。もし、C言語を書いたことがない状態であれば、他の言語で開発した経験があったとしてもかなり苦労をしたと思います。
 「え、でもC言語で何を開発をすればいいの?」と思いますが、次のLinux kernelと組み込み技術でお話したいと思います。
 開発以外となりますと、競技プログラミングみたいなゲーム感覚で様々な問題を解くというのを学生のうちにやっておくとアルゴリズムの勉強にもなり、プログラミング言語(C++を使う人が多いためC++言語のスキル)のスキルも習得できると思うので、ぜひやってみてください。

2. Linux kernelと組み込み技術

 次に、学生に頃に学んでおいたほうが良かったというものを紹介します。最初に紹介するのはLinux kernelです。
 現在の関わっているプロジェクトにはLinux kernelを開発しています。私自身はLinux kernelのスキルが現在ないため、開発には関われていない状態です。もし、スキルがあれば関わることができたのかなと思うと少しだけ残念だと思うことがあります。
 しかし、スキルを持っているとしても学生のときにLinux kernelを学んだこととは違う開発をする可能性もあるので「Linux kernelってどんな役割を果たしているのか?」といった仕組みを理解するだけでもOSというシステムを理解するための一歩になると思います。
 次に紹介するのが組み込み技術についてです。プロジェクトに関わっているとお客様環境のハードウェアのボードにソフトウェア開発を行う機会があります。そのときに「え、何この配線、ドコに刺すんだ?」「どうやって動かすんだ?」「SDカードのイメージ作るのどうするんだ?」とハードウェアで電子工作、開発をしたことがないと戸惑う場面が出てきます。私自身、授業などでラズベリーパイを使って適当なデバイスドライバを作った経験しかなく、電子工作の経験はほとんどありませんでした。学生の頃に電子工作をしておけば、スムーズに仕事を行うことができたかもしれません。
 この二つを学ぶために私自身が学生の頃にしておけばよかったこと「ラズベリーパイ上で自作のVPN (Virtual Private Network)を作成する」ということです。私たちが普段使っているネットワーク環境はLinux kernelを使用しているOSを使っていればLinux kernelが暗黙的に動作しています。その環境で、VPNを自作することでLinux kernelを触れるだけでなく、ネットワークというものがどういった動作をしているのかを理解できます。ここ最近(2020年10月時点)で有名な話ですとLinux kernelに次世代VPNのWireGuardが取り込まれるなどホットな分野です。

3. gitの使い方

 最後に、学生の頃に学んでおけばよかったこととしてgitの使い方を紹介します。学生の頃にgitは使ったことがあるのですが、それはチーム開発を意識した使い方ではなかったということです。
 gitを使ってチーム開発を行うときは自分のレポジトリに対して開発対象のレポジトリをforkし、開発を行った時はpull requestを送る前にコードレビューがしやすいようにrebase -iコマンドを使ってcommitの歴史改変を行う。開発を行う前にgit fetchをする。リモートの開発元がマージされたらfetch、リモート同じ状況にしたいのであればresetを行う。もし、自分のレポジトリのブランチに反映させるならfetch後にpull rebaseを行い、conflictを起こしたら、mergetoolsでconflictを解消するなど、多くの作法が存在します。「相手にとってどういったissue, pull request, commitが見やすく、わかりやすいか」といったことが最大のポイントです。
 どうやって学べばよいのかということですが、OSSのレポジトリから学ぶ、日本語になっているサイトから学ぶ、自分が開発しているもので実践してみる、本から学んでみることが良いと思います。

おわりに

 おわりに、学生の頃に学べばよかったと言っていますが、私が所属しているサイバートラストでは「業務中の空き時間にスキルを磨くことを推奨」されています。そのため、社会人になってスキルを身に着ける時間がないということはなく、スキルは身に着けることが可能です。
 学生の頃に「このブログに書いてあることをやらなきゃ」ということではなく、「面白そうだしやってみよう」という感覚でやってみることをお勧めします。

人材募集中!:ただいまサイバートラストでは、事業拡大につき、オープンソース製品のエンジニアを大募集しております。詳しくは人材募集ページをご確認ください。
サイバートラストのテレワークソリューション
採用情報ページ リニューアル
組込み Linux にプラスして 長期間の製品ライフサイクルをサポート EM+PLS