プログラミングに挑戦するなら貢献しながらステップアップしてみよう
さて、お待ちかねのプログラミングへの世界へと入っていこう。しかしいきなりコードを書くのは敷居が高い。まずは簡単なところから入っていこう。まずは「習うより慣れろ」でサンプルを試してみる。あるいは「人のコードを見て学習する」のもいい。ここで頼りになるのが大量のサンプルがあるGitHub。大抵はREADMEを読めば、どのように使うか説明がある。ぜひ活用しよう。
プログラミングスキルを高めるならいろんな方法があるものの、東村氏の提案は「プログラミングするなら貢献しよう」。Gitとともに歩むということ。ここから簡単なところから徐々にステップアップしていくための道案内をしていこう。
最初は「Issueをあげる」。Issueとは主にバグや不具合のなど問題の報告で、これもコミュニティには立派な貢献となる。
次にコードのコントリビューションへと進んでみよう。コントリビューションで易しいのはサンプルの追加だ。既存のサンプルを試してみて、「こういうサンプルもあったら便利なのでは」と思うものを作ってみよう。なおシスコに関するコードであれば、DevNet Code Exchangeに投稿するのもいい。
マニュアルの修正に協力するのもいい。pyATSはじめ多くのOSSではマニュアルもオープンだ。誤字の修正、説明が分かりにくいところを指摘するのも貢献になる。こういう協力も多くの開発者は「うれしい」と歓迎する。プログラム本体だけではなくマニュアルも含めていいものになれば発展していくからだ。些細なことだが、コード内のコメントに誤字があれば指摘することもできる。コードのコメントなら動作には関係ないものの、たまに「Cisco」が「Cissco」になっていたなどタイポが潜んでいたりするのだ。可読性向上のためのコメントを追加する、表現を変更する、コードの整形崩れを修正するのもいい。
少しずつレベルアップしていこう。ちょっとした修正や改良に挑戦してみよう。例えば2行で書かれているものを(他に差し障りがないなら)1行に短縮してみる。あるいはより最適な表現にしてみる。こういう細かな改善を探してみる、考えてみるだけでも勉強になる。
output = device.parse('show ip interface brief') return output
↓
return device.parse('show ip interface brief')
if 'R1' in output or 'R2' in output or 'R3' in output or 'R4' in output:
↓
if any([i in output for i in ['R1', 'R2', 'R3', 'R4’]])
次はAPIだ。APIは基本的に小さい関数なので、数十行から数百行と短めで理解しやすい。APIも真似して作るのが簡単だ。シスコ関連なら、ネットワークデバイス接続の設定に関するものや、ネイバーアドレスを取得するものなどがある。
pyATS CLIで使うパーサーを開発することもできる。今ではパーサーは3000以上ある。東村氏によると「コード自体は正規表現とループがメインになるため、コードとしては比較的簡単」だそうだ。開発ガイドも充実している。パワーユーザーが書くブログやYouTubeに解説ビデオも参考になる。
そしていよいよメインのプログラムの新機能に関わってみよう。まずはIssueで案を出してみて、開発者と提案について実装方法などを議論する。進めても良さそうならコードを作成しプルリクエストをオープンにして、開発チームからレビューやフィードバックがあればそれを反映する。その後は承認やマージという流れで進む。こうなると一時的に開発チームに参加するようなイメージとなる。開発プロセスの流れを把握し、理解することができる。開発者たちと直接関わる経験はいろんな意味で勉強になるだろう。
いろいろと一気に紹介したが、東村氏は「焦らないで。ゆっくりでいい」と言う。東村氏自身もすぐにはコードを書けなかったという。ソフトウェアに関わるようになった2017年は年間で134件のコントリビューションだった。これまで紹介したようにサンプル追加やドキュメント修正などを徐々に経験してステップアップを重ね、2020年には1724件へと増えた。「今では毎日のようにコードを書いています」と東村氏は言う。
なおプログラミングは属人化に陥ることがある。属人化を防ぐポイントとして東村氏は、秘密裏にやらない、外部に公開せずとも社内には公開する、他メンバーが分かる言語(Python)を使う、チーム全体でメンテできるようにしておくことなどを挙げた。
今回はインフラエンジニアがプログラミングのスキルを持ち、ハイブリッドエンジニアになる道を紹介してきた。メリットを改めて整理してみよう。まずはインフラやネットワーク知識を継続的に活用できて、プログラミング知識を新たに活用することができる。両方分かれば、双方の視点から提案することができ、仕事の幅も広がる。さらに私生活でも、スマートホームや遊びにおいてメリットがあるかもしれない。とんとん拍子に進めば起業もありうるかもしれない。
逆にデメリットやリスクも考えられる。例えば、インフラもプログラミングも日進月歩の世界なのでキャッチアップするのが大変になる。どちらも中途半端になってしまう危険もある。逆に両方分かると問い合わせや依頼が舞い込み、忙しくなってしまうかもしれない(チャンスでもある)。また、どこかのタイミングでどちらかの選択を迫られる可能性もある。こうしたことを踏まえ東村氏は「どちらか強い方を明確にしておくこと。私ならネットワークが強みです」とアドバイスする。
最後に東村氏は「ハイブリッドエンジニアになるとチームにさらなる貢献をもたらすことができて、キャリアパスも広がります。プログラミングで広がる可能性を考えると、確実におすすめです」と話した。なおネットワークとプログラミングの両方の知識を持つエンジニア向けの技術者認定試験としてDevNet認定がある。これも目標の1つとしておこう。