コミュニティに戻る

ABAP & ABAP

Lars Hvamはデンマークのコペンハーゲンに住んでいて、ABAPプログラミング言語を愛しています。ExercismでABAPトラックをまとめた縁で、Larsに話を聞き、どうやってIT業界に入ったのかを気楽に語り合いました。

Youtubeで見る
長さ 31分

Jonathan: こんにちは、みなさん、ようこそ。Jonathanです。Exercismポッドキャストのホストを務めています。そして今日はLarsと一緒にお届けします。Lars、今はどこを拠点にしているんですか?

Lars: デンマークのコペンハーゲンにいます。

Jonathan: いいですね。素晴らしい。赤道よりずっと北ですね。今の私は赤道よりずっと南にいます。今日の番組に来てくれて本当にうれしいです。こうしてお話しできてとてもうれしく思います。それでは早速、今週の番組に入っていきましょう。Lars、Lars自身について少し教えてください。どうやってIT業界に入ったんですか? どうして今の場所にたどり着いたんですか?

Lars: ええ、そうですね。今どこにいるかというと、話したとおりコペンハーゲンです。でも主に、SAPのカスタムコード、ABAPの分野でコンサルティングをしています。どうしてそこにたどり着いたかというと、いつもながら長い話です。でもIT業界の話ですから、IT業界の道のりについて話しましょうか。若い頃、もうずいぶん前のことですが。私と、一卵性双生児の双子がいて。私には

Jonathan: 一卵性双生児の双子がいるんですね。じゃあ、今日話しているのがもう一人の双子じゃないって、どうやってわかるんですか?

Lars: マイクロソフトの仕事をしていました。

Jonathan: なるほど。怖いですね。

Lars: そういうことです。だから、SAPについて彼に何でも聞いてください。すると彼はマイクロソフトについて何も聞けません。すると私は答えられません。

Jonathan: ええ。

Lars: でも若い頃、私たちは始めたんです。Commodore 64で遊ぶことから。そして、Commodore上でBASICプログラミング言語を使って、ごく基本的なプログラミングをしたのを覚えています。白黒の、とても小さなテレビ画面でした。何時間もそうして、新しいコンピューターを手に入れて、386や486でQBasicをやって。メモリを8メガバイトに増やす。当時はそれがステータスでした。ええ、それがQBasicで、Pascalのプログラミングをしていました。やがてWindowsに手を出して、Visual Basicをたくさんやりました。 ええ、私はVisual Basicが好きでした。あれは90年代のどこかで、やがてLinuxを動かすようにもなりました。 そして、ええ。古き良きLinux時代を覚えている人なら、themes.orgというウェブページがあって、そこではさまざまなウィンドウマネージャーのテーマをダウンロードできました。いかにもLinuxらしい話です。 そして、コミュニティの世界に本格的に関わったのはそれが最初だったと思います。phpでそのウェブサイトを作るのに時間を費やしました。ええ、

Jonathan: なるほど。すごいですね。

Lars: そういう経験が私に刻まれています。Visual Basic、博士課程でのプログラミング。ええ。

Jonathan: なるほど。いいですね、いいですね。ええ、それはいい話です。

Lars: やがて大学に行き、コンピューターサイエンスの修士を取って、あれこれプログラミングをして、ふとしたきっかけで小さな仕事を始めました。ええ、家賃を払うためにお金が必要だったんです。ほかのプログラミングもしました。それがこの約15年、SAP ABAPのカスタムコード開発として私に残っています。 そして、ええ。では、次の質問ですね。なぜ? なぜ続いているのか? ABAPは今どきの言語ではありません。COBOLによく似ていますが、とても面白いプログラミング言語でもあります。とても広く、たくさんの異なる文があり、いろいろなことがうまくいかなくなるからです。

Jonathan: なるほど。つまり、問題解決がたくさんあって、デバッグもいろいろあるんですね。そういう性質なんですか?

Lars: ええ。私はよく、こういう仕事をしているのはデバッグが本当に好きだからだと言います。そしてデバッグすべき古いコードは山ほどあります。つい先週も、20年前の古いプログラムを直していました。「いいね、いいね」という感じでした。何年もやっていても、古いプログラムをのぞくと必ずあるんです。 学ぶべき古くて新しいもの、使われていて今も日々動き続けている古い機能が。

Jonathan: なるほど。15年前に入られたと。同じ会社ですか、それともSAPでABAPを学び始めただけで、いろいろな会社を移ってきたんですか?

Lars: 今は、自分の会社を持って、楽しいことをしています。何をするかは自分で決めています。それから、いろいろなコンサルティング会社でコンサルティングもたくさんしてきましたし、インターンとして働いたこともあります。今はフリーランスで、フリーランスの仕事をもらって、また家賃を払えるようにしています。それは大事なことです。

Jonathan: ええ。人生でよく出てくるテーマのようですね。払うこと。家賃を払う、と。

Lars: ええ。

Jonathan: 払う方法を探す。

Lars: それなのに、オープンソースプロジェクトに時間を使いすぎて、何か挑戦的なことに脱線してしまう。

Jonathan: ええ。では、仕事の一環として一緒に働くチームはいますか、それともそういう意味ではかなり一人ですか? 日々、あるいは1週間の仕事はどんな感じですか?

Lars: 一人でやっていて、自分の会社を持っています。コラボレーションと言えば、お客様とは協力しています。それからオープンソースの世界では、オープンソースコミュニティにたくさんの良い友人がいて、ときどき何かを手伝ってくれます。私もときどき彼らを手伝います。なので、ウィンウィンの関係です。

Jonathan: ええ。ということは、ExercismのABAPトラックの構築は、間違っていなければ完全にあなたの責任ですね。あるいは高いレベルで関わっている。その辺を少し話してください。

Lars: ええ。ABAPトラックは、さまざまなコミュニティメンバーによって作られました。 主に、ABAPのGitHubオープンソースプロジェクトのコミュニティメンバーです。もちろん、私たちは少し特殊なので、独自のテストランナーをゼロから作らなければなりませんが、それはまた別の日の話です。

Jonathan: ええ、ええ、ええ。

Lars: それはまた別の話です。つまり、さまざまな人がExercismに貢献しています。しかし、ABAPトラックは少し特殊です。というのも、これは実際に始めるのがかなり難しいプログラミング言語で、JavaScriptランタイムのNodeやPythonランタイムのように、ただダウンロードすればいいというわけにはいかないからです。ABAPでは、それを簡単にやることはほとんどできません。これをやる最新の方法は、Dockerコンテナで、私の記憶では16ギガバイトもありました。

Jonathan: 16

Lars: これを動かすには、少なくとも32ギガバイトのメモリが必要です。そして、このインフラを手軽に使える人はあまりいません。 それに、こうしたインフラで動かすのは、Exercismのエコシステムの背後にあるインフラでは不可能だったでしょう。トラックはどれも、小さなDockerコンテナがたくさん起動して、コードを実行し、演習をチェックして、また終了する、という仕組みです。

Jonathan: ええ。

Lars: そして、このサイズのDockerコンテナを起動するには、軽く10分かかることがあります。

Jonathan: そんな。いや、確かに。

Lars: なので別のアプローチが必要でした。幸いなことに、私は静的解析の仕組みに取り組んでいました。数年前に始めたもので、抽象構文木があります。そこで、このコードを実際にJavaScriptコードに変換して、Node上で実行し、そこでフィードバックを返します。 それで私たちは、サポートしている公式の言語はABAPだと言っています。ABAPは、前に何度か話したように少し特殊で、ABAP言語そのものについての本当に良い公式の説明がありません。設計されたほかの言語とは違います。ABAPは主に、1970年代か、いつ始まったにせよ、そこから今の形に進化してきたのだと思います。なので、私たちは進めながら作っていくしかありません。

Jonathan: なるほど。では、そういうことが日々の仕事でどんな課題を生むんですか? 毎日、問題をまっさらな目で見て、それを作った人の考えに入り込もうとしなければならないわけですよね。というのも、参照できるドキュメントがほとんどない、と言っていいんでしょうか

Lars: ドキュメントはたくさんあります。ただ、それはテキストだけですし、いつも100%正しいわけではありません。

Jonathan: なるほど。

Lars: 正しいやり方は、コードを試して、実際に何をするのかを見ることです。 もちろん、言語には正しく書かれていることもたくさんあります。でも、人がSAPシステムの中で作業して何かを作るとき、たいていは1つのシステムに複数の開発者がいます。その1つのシステムには、2億行を超えるコードと、8万を超えるデータベーステーブルがあります。

Jonathan: まあ。

Lars: これは良いことです。私はそのうちの1つが好きなんです。特に、すべてをとても近くにまとめて作ると、たくさんのクールな静的解析で物事を結びつけられます。一方、マイクロソフトのようなアーキテクチャだと、すべてがゆるく結合されています。 どちらにも長所と短所があります。

Jonathan: では、モノリスの構成のほうが好みだ、という理解でいいですか。それとも、少し違いますか。まあ、好み次第ですよね。

Lars: ええ。私はモノリスが好きです。でも、そうですね。基本的には、モノリスを管理するほうが好みです。ええ。いいですね。それは

Jonathan: レガシーコード。ええ。長く存在してきたもの、そういうものすべてですね。

Lars: ええ。私は古いものが好きです。けっこう楽しいですよね。私はよく、年を取ったらPL/IやAPLのプログラミングをやりたいと言っています。そういうプログラミング言語です。もしかしたらMでもできるかもしれませんね。どこかで。

Jonathan: たぶんね。今の時点で、私たちは何でも揃っていますから。何があるか見てみましょう。APLと言いましたか、それともABAPですか?

Lars: APL。ああ、APLトラックはありませんね。

Jonathan: おお、チャンスかもしれないですね。

Lars: PL/Iも。PL/Iトラックはありません。コミュニティの誰かが加えられるトラックが2つできましたね。

Jonathan: おお、今それに申し込もうとしているんですね。

Lars: いえ。では、日々はどんな感じかというと、たとえばABAPトラックはどうでしょう。ABAPトラックは、正しさへの近似で、私たちは常に一歩ずつ100%に近づけようとしています。ABAP上では正しく動くのに、Exercismでは動かない正しい解答を持つ人も実際にいます。

Jonathan: なるほど。

Lars: 私が組み上げたこの奇妙な仕組みのせいで。でも一歩ずつ、日ごとに動くようになっています。バックエンドにも、Exercismのテストランナーにも、どんどんユニットテストを追加し続けています。そしていつか100%完璧になることを願っています。でも

Jonathan: 誰にもわかりませんね。そこから何が生まれるかは誰にもわかりません。では、1週間でふつう何社のお客様と仕事をするんですか? 1社か2社、3社ですか、それとも10社に及ぶこともありますか?

Lars: 1社か2社です。

Jonathan: なるほど。それはしばらく続いていることなんですね。

Lars: ええ、ええ。もう何年もコンサルティングをしています。

Jonathan: 主にコペンハーゲンが中心ですか、それともパンデミックの間に、もっと遠くからリモートで働く機会もありましたか? よく旅行しますか、それとも

Lars: 若い頃はよく旅行していましたが、今はたいてい家に座ってリモートワークをしています。

Jonathan: なるほど。

Lars: そうですね。

Jonathan: ええ。コーヒーマシンを温めておくわけですね。

Lars: ええ。

Jonathan: 物事を回し続ける。では、かなり若い頃からプログラミングをしていて、そのくらいの年齢から興味があったと言いましたね。プログラミングがある時点でしっくりきたことはありましたか? 自分にピンときた瞬間がありましたか、それとも小さい頃から自然に理解していたものですか? どんなふうに表現しますか?

Lars: ああ、どうでしょう。私はずっとプログラミングを理解してきたのだと思います。

Jonathan: ええ。

Lars: でも、若い頃はいつも手続き型プログラミングでした。 大学のときに、関数型プログラミングと論理型プログラミングの入門がありました。これはまったく異なる2つのパラダイムです。私が知る限り、Prologがあります。 ええ、Prologトラックがあります。論理型プログラミングをやったことがない人には、Prologのプログラミングを試してみることをおすすめします。Standard MLもおそらくあって、手続き型プログラミングについて自分がどう考えていたかを知る手がかりになるでしょう。でも、ほかにもたくさんできることはあります。 ええ、私は毎日新しいことを学んでいるので、ピンときたことはありません。

Jonathan: まだすべてと格闘しているんですね? いや、ただ興味深いのは、私の経験の多くがそうだったからです。言語のようなものに自分をどっぷり浸さなければならない。すると、なじみのない概念が、一夜にして何かが切り替わるんです。そして、ああ、これは完全に理にかなっている、という感じになります。ポッドキャストで話した他の何人かも、同じような経験をしたと言っていました。どうやってやったの?と聞くと、ある女性は、私はプログラムを物語のように想像するの、関数が登場人物で、みたいな感じ、と言っていました。 とても面白かったです。でも、どうやってABAPが自分が集中すべきものだと決めたんですか? ただ、これで家賃が払えるから、だったんですか、それとも、これが本当に好きで、JavaScriptなんかより好んでいる、とか

Lars: プログラミングに入るのは、いつも偶然から始まりますよね? RaymondのBASICスタイルをやって、Javaをやって、偶然から始まる。そして、とても挑戦的なプログラミング言語として際立っていました。とても大きく、たくさんの異なる文があるからです。JavaやJavaScriptには、それほど多くの文はありません。ライブラリが大きいんです。 ABAPと比べると、ABAPではライブラリ的なものの多くがプログラム言語の一部です。一方JavaScriptでは、違うものを呼び出すのに同じ言語構造を使います。 ええ。

Jonathan: なるほど。

Lars: ええ。

Jonathan: なるほど。つまり、ほとんど偶然にABAPを見つけたようなものだったんですね。では、これから先、次の10年を見据えると、そこまで考えたくないかもしれませんが。プログラミングとビジネスの面で、次の5年から10年はどうなりそうですか? こうありたい、こういうことをしていたい、という感覚はありますか?

Lars: ああ、本当にわかりませんよ。楽しいと思えるうちは続けます。もう楽しくなくなったら、やめて別のことをします。

Jonathan: なるほど、それが

Lars: 計画ですよね。私の考えでは、日々続けるには楽しいことが必要です。10年後もABAPはメニューにあるでしょうね。 そこに行き着きます。私はプログラミング言語と技術にはかなりうるさいんです。だからABAPと、JavaScript/TypeScriptをやって、それ以外の言語には手を出さないようにしています。

Jonathan: ええ、なるほど。でも、もし私がこう言ったらどうですか。Lars、今すぐABAPとJavaScriptをやめて、別のプログラミング言語を1つ身につけなければならない。どれがいいか、思いつきますか?

Lars: ええ、それでAPLの話になりましたね。とてもクールで、たぶん私より年上の言語です。よくわからないけど、近いですね。APLとPL/Iは、どちらもABAPより古いと思います。

Jonathan: なるほど、すごい。では、なぜそれらなのか、興味があります。どこに惹かれるんですか?

Lars: APLはあまり試したことがありませんが、インターネット上に試せるシミュレーターがいくつかあります。ギリシャ文字がたくさん出てきて、すべてが行列で、掛け算です。私は…とても奇妙に見えますし、ええ、馬鹿げています。でもそれもまた楽しいんですよね。何らかの挑戦でなければ。 PL/Iはただ…何か違うものです。よくわかりません。

Jonathan: 何か神秘的で、少し

Lars: ええ。そうでもありません。私は古くて古典的なものが好きで、新しい流行りのものはあまり好きではありません。だからRustと言うかもしれません。いや、たぶんいつかRustもやるでしょう。でもそれは必要に迫られてであって、やりたいからではありません。

Jonathan: ええ。それで、ABAPを使う人の数は減っているのか増えているのか、それとも最近この言語に再び注目が集まっているのか、どう見ていますか?

Lars: ええ、とても難しいです。ABAPは大企業の内部で動く大きなシステムなので、実際の数字について正確な公開データを得るのはとても困難です。でも噂では、これを暗記している開発者の年齢は上がり続け、市場から去る時期にどんどん近づいているそうです。

Jonathan: なるほど。

Lars: COBOLと同じですね。古い言語で、若い人はあまり楽しいと思わない。私のような年寄りの言語です。でも、それがABAPトラックを作った理由でもあります。もっと多くの若い人をこの言語に引き込みたいんです。Exercismはいろいろなものを試すのに良いプラットフォームです。 始めるのはとても簡単です。同期して、クリックして、ログインして。コードを書き始める。それで終わりです。

Jonathan: ええ。それで、ABAPトラックをやっている人がたくさんいるのを見ましたか? ABAPトラックは?

Lars: はい。今や5,000人近い学習者がいます。

Jonathan: わあ、すごいですね。ええ。

Lars: ええ。9月には、SAPのデベロッパーアドボケイトが主催するコミュニティコードチャレンジがありました。人々をプラットフォームに呼び込み、私たちが内部テーブルと呼ぶものを使った演習を試してもらう試みです。ほかの言語では、これはたいてい配列ですが、私たちは内部テーブルと呼んでいます。入れ子の内部テーブルは、ほかのプログラミング言語ではたいてい2次元配列と呼ばれます。

Jonathan: ええ。

Lars: そうしてたくさんの新しい学習者が参加しました。それに、GitHubでたくさんのフィードバックやバグ、イシューも得ました。これはABAPの世界ではあまり慣れていないことでもあります。 複数の組織をまたいで協力すること。実際にGitHubでコードを共有するのは、このコミュニティではあまり一般的ではありません。

Jonathan: それは、この会社はこれをやり、別の会社はあれをやる、というように非常にサイロ化されていて、開発者同士があまり話さないからですか? それぞれの特定の文脈の中にいて、共有や協力が少し少ない、ということですか、それとも理由は別ですか?

Lars: SAPシステムの性質にもよります。標準的なシステムなので、何でもできます。だから私がお客様を手伝うのはたいてい、そのお客様が何か特別なものを必要としているときです。

Jonathan: なるほど。

Lars: そしてそれは、そのビジネスをユニークにしているものに応じた特別なものです。だから、ほかのお客様には使えないでしょうし、使おうとも思わないでしょう。そのお客様は、別のお客様とは違う形でユニークだからです。 でも、コードを共有するオープンソースコミュニティも生まれつつあります。ただ、それはたいていユーティリティのレベルです。ロギングやエラー処理のようなものです。でも、いつかそこにたどり着きます。SAPの世界では、何でも5年以上かかるんです。

Jonathan: ええ。すべてが勢いを得るまでに。では、番組に出る人全員に聞いていることの1つで、おそらく送った文書を見たかもしれませんが、私たちはたいてい、テック業界で妥協せずに持ち続ける1つの意見や視点は何か、と尋ねます。あるいは、これは永遠に守り続けたい、テック業界で死んでも譲らない1つの主張は何か。フロントエンドなら、いつもCSSの後にロジックを書く、みたいに馬鹿げたことでもいいですし、すごく些細なことでも、たとえばGitHubは絶対に使わない、みたいなことでもいいです。ただ、自分の主張を筋道立てて説明できる必要があります。それで、その1つ、あなたが持つその1つの意見とは?

Lars: 1つ、1つ。1つの意見。

Jonathan: わかりました。2つでもいいですよ。2つあげます。ええ。3つ。わかりました、3つ。技術者はたいていあまり意見を持たないから、3つでいいですよ。

Lars: ええ。私のことを説明するなら、ときどきとても強い意見を持つ、と言われることもあります。ええ。私の主な意見の1つは、ノーと言うことです。これは不可能だ、解決策と技術にもっと合う別のことをしよう、と。たとえばJenkinsのようなツールを使うことにはノーと言います。Jenkinsにノーを。これは、誰も使うべきではないと私が言いたいツールの1つです。

Jonathan: なぜですか? 理由は何ですか?

Lars: パイプラインはコードの近くに置くほうがずっと簡単です。だから、私はただ時代遅れだと考えています。

Jonathan: なるほど。つまり、自分が何をしているかわかっていれば、わざわざ加える必要のない抽象化のレベル、ということですね。

Lars: ええ。それに、もっとうまくやれるツールはほかにあります。私が飛ばしたいもう1つのツールはEclipseです。Javaの世界では、5年、10年前を振り返ると、EclipseはたいていJavaコードをビルドするのに使われていました。私の見方では、今やEclipseはJavaコードをビルドするのにすら使われていません。たいていは大企業のアプリケーションで、Eclipseの上で動くようなもの、あるいはそもそも最初から想定されていなかったものをEclipseでビルドするのに使われています。ほかにやり方があまりなく、選べるツールがたくさんある、というだけです。 つまり、Eclipseは影を潜めた、というわけです。

Jonathan: なるほど。ええ、いいですね。もう1つ意見をください。3つ目は何ですか?

Lars: 空白、つまりホワイトスペースです。私のサイドプロジェクトの1つはABAPの静的解析です。ABAPでは実際、たくさんの異なる文、たくさんの異なるインデントの方法、大文字と小文字、ハンガリアン記法、何でもあります。 テキストのどこかに二重空白があると、本当に私の気に障ります。

Jonathan: それはすべてを台無しにするからですか、それとも悪夢だから?

Lars: 読む気をそがれるんです。テキストやコードを読んでいると、あ、ここに空白が2つある、と。それで気が散ってしまう。

Jonathan: なるほど、なるほど。では、Jenkinsはパイプラインをコードの近くに置くこと。Eclipseは必要ない。そして二重の空白。深刻さの度合いがさまざまな3つの意見をもらいましたが、いや、とてもいいですね。ええ、うまく自分の立場を守っていましたね。

Lars: それに、継続的インテグレーションの話で言えば、継続的インテグレーションを継続的待機にしないことです。

Jonathan: なるほど。コードをプッシュしても、それがそこに座って何かを待つ、ということですか?

Lars: 開発者にフィードバックをすぐに返すことです。1時間、2時間もフィードバックを待たせるのではなく。

Jonathan: なるほど。それは、システム的にフェイルセーフだからですか? だからそうなっているんですか? それとも、レビューできるように一時停止するためですか、それともなぜ?

Lars: ただの悪いアーキテクチャです。

Jonathan: ええ、なるほど、なるほど。興味深い。では、今日最後の質問です。ここまで楽しんでもらえていたらうれしいのですが、これを聞きたかったんです。今週、Exercismコミュニティにおすすめしたいことは何ですか? コミュニティに1つおすすめするとしたら、何でしょう? 何でもいいですよ。寿司を食べるとか、川に飛び込むとか、何でも。

Lars: もちろん、トラックを試してみてください。それがたぶん

Jonathan: それは無料であげます。無料のやつです。いいですよ。

Lars: でも、前に何度か言ったように、楽しむことを忘れないでください。楽しいことが必要です。だからときには、奇妙なアイデアでも、楽しいなら試してみてください。何が起きるか見てみましょう。 オープンソースプロジェクトを作るときにも、たいていそう言っています。とにかく飛び込んで、楽しいかどうか見てみる。試してみる。うまくいかなければ、それでいい。次のパーティーか、次のオープンソースプロジェクトか、次の言語に飛び込めばいい。

Jonathan: ええ。

Lars: テックの世界にはやるべきことがたくさんありますし、テックの外にもたくさんありますから、ずっと退屈なら、やる価値はありません。

Jonathan: ええ、確かに。いいおすすめです。では、テックの世界で楽しいことを見つけてください。最後に、今日は本当にありがとうございました。とても感謝しています。録音を止めたら、最後に少し話しましょう。でも、まずは心からお礼を言いたいです。 興味のある人は、ABAPトラックをチェックしてみてください。演習をいくつかやってみてください。どんな感じか見てみてください。しばらく前からあって、再び重要性と影響力を増しているものを学びたいなら、そう言えるかもしれません。多くの主要な多国籍プラットフォームを支えているからです。知っている人も、知っている企業もいるでしょう。内側の話を学びたいなら、ABAPは間違いなくチェックする価値があります。Lars、番組のリンクは、そこに着いたら下の説明欄に載せます。それでは、本当にありがとう。またすぐに。 ええ、重ねてありがとう。感謝しています。

コミュニティのその他のストーリー

コミュニティのメンバーの話を聞いて、学び、刺激を受けましょう。