Javaの全人生:ソフトウェアアーキテクトは本当に一日中何をしているのでしょうか?

ソフトウェアアーキテクトはそれを簡単にするか、非常に多くのコーダーやエンジニアが信じています。このフルJavaライフのインタビューで、建築家の日常の作業生活が実際にどのように見えるかを調べてください。JavaプログラミングのベテランであるBruceBrouwerが、レガシーJava Webアプリケーションをサービス指向フロントエンドアーキテクチャにアップグレードするアプローチ、急速に進化するWeb UIツールキット、および厳密性の低いJVM言語を選択するよりもJavaの制約を使用することを一般的に好む理由について説明します。

多くのソフトウェア開発者のように、私は常にアーキテクトに懐疑的でした。あまりにも頻繁に、彼らは結果に耐える必要なしにコーディングの仕事がどのように行われるかについて要求をするようです。私はかつて「建築家ではない理由」という記事を書いた人で、「彼のお気に入りのIDEはMSOutlookです」と言ったことで知られています。

次に、ミシガン州にオフィスを構える家族経営の食品販売業者であるGordon Food Service(GFS)のアプリケーションアーキテクトであるBruceBrouwerに会いました。私がブルースに会ったとき、彼は実際のコードを見て、彼のコンピューター画面の奥深くにいました。彼の仕事は、GFSのRubyベースのCompassコンパイラーをJRubyを使用したアプリケーションビルドに統合することでした。彼の仕事へのアプローチは、抽象的なものではないように思われました。私は興味をそそられました。

ブルースのGFSでの仕事は、将来のWebアプリケーションのビジョンを設定することと、概念実証アプリケーションでビジョンを実証することの両方であると彼は言います。彼は通常、ロールアウトの最初のいくつかの実装で開発チームと協力します。ブルースが取り組んでいた最先端の問題は、私たちが出会った日に、GFSを従来の要求/応答Webアプリケーションを超えて、すべてのプレゼンテーションロジックがブラウザーで処理されるサービス指向フロントエンドアーキテクチャ(SOFEA)に移行する方法でした。サーバー上ではなく。

ブルースは、従来のサービス指向アーキテクチャー(SOA)を超えて、よりメッセージベースのパラダイムに移行するためのアイデアのいくつかを共有しました。これらのアイデアは紙の上で機能する必要がありますが、ブルースはそれらを機能させるために技術チームからの賛同を必要としています。アーキテクトとして、彼はチーム、テクノロジー、さらにはレガシーシステム全体にわたる実装ガイダンスを提供します。彼は魅力的な視点であり、私が共有する価値があると思ったものです。

Matt Heusser:プログラマーおよび建築家としてのあなたのキャリアについて話してください。あなたの役割は時間とともにどのように変化しましたか?ジュニアプログラマーとしての役割と、中途採用プログラマーまたはアーキテクトとしての今日の役割にどのようにアプローチしましたか?

Bruce Brouwer:大学卒業後、私は最初の本当の仕事に移りました。ほぼ最初から、私は限界を押し広げていました。このアプリケーションのデータアクセス層を更新するという面倒なプロセスがありました。すべての新入社員は、そのプロセスを実行するという苦痛にさらされました。初めての後で、私はそれを自動化することに決めました。経営陣は感銘を受けたので、データベース内のすべてのテーブルに対して実行するように依頼されました。壊れたプロセスであることが判明したものを自動化して混乱を解消するのに約1週間かかりました。

キャリアを続けていくうちに、物事をより簡単に開発できるようにする機会がもっとたくさん見つかりました。「1行のコード」というフレーズがすぐに私に関連付けられました。私は開発者にとって物事をより簡単にするために自分の仕事を押し続けました。以前は複雑だったことができるようになるまで、私は自分の仕事に本当に満足していませんでしたが、今では1行のコードと同じくらい簡単になりました。

しかし、これまでのところ、より優れたツールを作成することによってのみ実現できます。私はもっ​​と大きなスケールで考え始めなければなりませんでした。この大きな世界でプレーし始めるとき、あなたは再び限界を押し上げる必要があります。たぶんSQLデータベースは必要ありません。たぶん、そのサービスからの応答を待つことは、時間を最大限に活用することではありません。たぶん、Javaはもうそれをカットしていません。

さて、その最後の点は少し議論の余地がありますが、それは私が尋ねた質問です。しかし、単にこれらの質問をすることは、建築家の本当の仕事ではありません。絶対に素晴らしいアーキテクチャを設計するだけでは十分ではありません。そこにたどり着く方法を段階的に他の人に示すことができる必要があります。建築家は、彼らが設計したものから生じる問題を経験して、現実の世界に根ざしている必要があります。これには、技術的および社会的努力の両方が必要です。

Matt Heusser:現在どのテクノロジーを使用していますか?

Bruce Brouwer:少し前に、LinkedInのプロフィールに記入して、実際に使用しているすべてのテクノロジーをリストすることにしました。その努力の中で、LinkedInには限界があることを知りました。自慢するつもりはありませんが、それが問題だと思います。今日の世界で優れた開発者になるために知っておく必要のあることが多すぎます。仕事をするために使用するツールのリストをより適切に制約する必要があります。

主に、私が使用しているのはJavaとSpringです。私が最近取り組んでいるのは、GFSでのWebアプリケーション開発の未来を設計することです。 GFSは、StrutsやJSFのようなフレームワークが登場する前から、JavaEEを使用してWebアプリケーションを開発してきました。現在、SOFEAやレスポンシブデザインなど、これらのサーバー側Webフレームワークに挑戦するいくつかの新しいアイデアがあります。はい、これらのアイデアを現在のStruts 2インフラストラクチャに組み込むことはできますが、UIとバックエンドの間に真のブレークを入れる時が来ました。このようにして、サービスレイヤーでこのような大幅な変更を行うことなく、WebUIレイヤーの変更のペースに対応できるようになります。

「現在、SOFEAやレスポンシブデザインなど、サーバー側のWebフレームワークに挑戦する新しいアイデアがいくつかあります。はい、これらのアイデアを現在のStruts 2インフラストラクチャに組み込むことはできますが、UIとバックの間に真のブレークを入れる時が来ました。終わり。"

この新しいWebUIには、ほぼ完全に新しいツールスイートがあります。AngularとTwitter Bootstrap、そしてもちろんjQueryです。私が追求しているのは、静的リソースからUI全体を構築することです。どのUIも、動的UIコンテンツを生成するサーバーに依存しません。プレーンなApacheWebサーバーで動作する必要があります。PHPもPerlも何もありません。

サービス層に関しては、GFSには膨大なJavaレガシーがあります。そして、ほとんどの場合、それは実際にはかなり良いです。 GFSは、Spring POJOを利用して、サービス指向アーキテクチャーを長年にわたって追求してきました。サービスはSOFEAの中核です。 JSONは最近選択されているデータトランスポートであり、SpringMVCを使用するとJSONを介してこれらのPOJOを簡単に公開できます。したがって、SOFEAは実際にはGFSに非常に適しています。

ただし、難しい部分は、そのWebUIを真に静的にするというビジョンです。高速で優れたWebアプリを作成するには、他のツールが必要です。 CSSの管理にコンパスを使用しています。 JavaScriptの場合、ソースマップのすばらしい機能を備えたGoogleClosureコンパイラを使用しています。キャッシュバスティングと開発を容易にする他のいくつかの要件を投入すると、突然、テキストファイルの束になってしまうもののための完全なビルドソリューションが必要になります。

これらの課題に答え始めたいくつかの印象的なツールがあります。私はGruntとYeomanにかなり感銘を受けており、GFSに売り込みを行ってMaven forYeomanを放棄しました。少なくともWebUIについては。Mavenを捨てるのは、まだ1年も経っていないツールには少し遠すぎるのではないかという印象を受けました。そこで、これをすべてまとめるためのMavenプラグインの作成を開始しました。CompassとClosureを処理するMavenプラグインがありますが、HTMLの開発と本番を変更したり、ライブリロード機能を提供したりできる完全なソリューションは提供していません。これは実際、このMavenプラグインを作成する素晴らしい経験でした。もちろんJavaで作成されています。

たぶんすぐに、これをオープンソースコミュニティに還元できるように経営陣を説得できるようになるでしょう。

Matt Heusser:あなたはどのくらい建築家でしたか?1年前に何に取り組んでいましたか?

Bruce Brouwer:私は8年間アプリケーションアーキテクトを務めています。GFSに移行したとき、私はシニアプログラマーからアーキテクトにジャンプしました。

1年前に取り組んでいた以前の大きなプロジェクトは、GoogleAppsへの移行でした。これは私にとっても本当の学習体験でした。移行中に従来のカレンダーをGoogleカレンダーと同期するという壮大なアイデアがありました。私はJavaのGoogleAPIとSpringIntegrationを使用して、すべてを実現しました。少なくともしばらくの間。いくつかの深刻な不具合の後、私はそれがリスクに値しないことを認めなければなりませんでした。そのプロジェクトのアーキテクトと開発者の両方であることが、現実の世界を視野に入れておくのに役立ちました。

「既存のシステムと統合する際にGoogleを使用するのに適切であるかどうかについて、砂の中に線を引く必要がありました。その熱意の一部を和らげることを余儀なくされると、困難になる可能性があります。」

GoogleはGFSにまったく新しい可能性の世界をもたらします。システムの設計方法にその影響を感じ始めたばかりです。グーグルはピカピカの新しいおもちゃなので、グーグルを使いたいと思っている人とはすでにたくさんの会話をしました。既存のシステムと統合する際にGoogleを使用するのに適切であるかどうかについて、砂の中に線を引く必要がありました。あなたがその熱意のいくらかを和らげることを余儀なくされるとき、それは難しいかもしれません。

Matt Heusser:アーキテクトとして、あなたはプログラマーのごく一部しか達成できないレベルに到達しました。キャリアを始めたプログラマーにアドバイスはありますか?

Bruce Brouwer:新しいプログラマーが現状に挑戦するアイデアを思いついたとき、私はそれが大好きです。通常、彼らはタスクを簡単にするためにいくつかの新しいツールを使用したいと考えています。これが起こったとき、私は彼らが全体像を見るのを手伝うことができます。多くの場合、それはそのツールを持ち込むことに関する問題を指摘することを意味します。問題について話し合うと、新しいプログラマーはより大きな問題に目を向けざるを得なくなることがあります。

ですから、新しいプログラマーへの私のアドバイスは、先に進んでいくつかのアイデアに挑戦することです。メンターとして使用できるシニアプログラマーまたはアーキテクトを見つけて、アイデアを表明してください。アイデアがうまくいかない可能性がありますが、間違っているというだけでなく、なぜ間違っているのを見つけることで多くのことを学ぶことができます。しかし、上級プログラマーや建築家は近視に苦しむ可能性があり、追求する価値のあるアイデアを見つけるかもしれないことも忘れないでください。

Matt Heusser:あなたの顧客は誰ですか?(または、「オフィススペース」のボブから一行借りるには:ここで何をしますか?)

Bruce Brouwer:直接的なビジネスの焦点があるという意味で、私は実際にはどの顧客も直接サポートしていません。私は実際には、DBAやサーバー管理者とともに、ISのインフラストラクチャ側に配置されています。 ISの残りの部分は、ビジネスの特定の領域にサービスを提供することに重点を置いています。 Java開発者をインフラストラクチャに配置するのは奇妙に思えるかもしれませんが、他の人よりもアーキテクチャに重点を置いている問題に集中することができます。他の人がビジネスプロセスの定義に取り組んでいる間、私は再利用可能な方法ですべての人の問題を解決するために使用されるテクノロジーにもっと焦点を合わせるようになります。

人々はしばしば私に他のプロジェクトを支援するように頼みます。時には長期間。これは私が現実の世界に根ざしているのを助けます。また、他の開発チーム全体に新しいアイデアを広めるのにも役立ちます。プロジェクトのアーキテクトの役割を果たすように依頼されたとき、私の影響力はより若い開発者に限定されていたことがわかりました。すでにアーキテクトがいる他のプロジェクトに貢献することは、実際には私にとってより有益でした。なぜなら、組織の彼らの部分でより影響力のある人々と私のアイデアをプッシュすることができるからです。

Matt Heusser:Javaでプログラミングを始めてどのくらいになりますか?この数年間で、言語とJavaプログラミング自体がどのように変化するのを見てきましたか?

Bruce Brouwer:私はJava1.3までJavaを真剣に受け止めていませんでした。だから、それは約13年になります。しかし、それでも、1.5がジェネリックスで登場するまで、Javaは開発の喜びにはなりませんでした。ジェネリックの良い使い方はたくさんあり、ほとんどの人はJavaコレクションフレームワークを超えてジェネリックを使っているようには見えません。

私がJavaを始めたとき、私たちはほとんどすべてを自分たちで書いていました。時が経つにつれて、特にオープンソースコミュニティにおいて、世界中がJavaをどのように受け入れてきたかを見てきました。オープンソースの爆発的な増加は、Javaプログラミングでのキャリアの中で私が経験した最も重要な変化です。これは、最近まで他のどの言語とも一致していなかったものです。

Matt Heusser:GFSでのJRubyの使用について話してください。JVM言語についてどう思いますか。私たちは今、Clojureプログラマーになるべきですか?

Bruce Brouwer:JRubyは本当にGordonsで目的を達成するための手段でした。Compassは実際には最高のSass実装であり、たまたまRubyで書かれています。また、JVMでもRhinoとGroovyを使用しました。私はこれらの他の言語がどれほど強力で有能であるかを見てきましたが、Javaもそうです。

Scalaのような他の言語、そしてあなたがClojureについて言及したように、最近人気が高まっています。ScalaでもJavaのコードの半分のようなもので同じことができますが、Javaよりも読みやすさがすぐに損なわれる可能性があると思います。しばらく前に、ラップトップに「入力はボトルネックではない」と書かれたステッカーを貼っている請負業者がたくさんいました。同意します。あなたが書くコードの行数を減らす賢い方法を見つけることよりも、問題を熟考し、次の人のためにそれを明確にすることが重要です。誤解しないでください。コードを少なくする方がコードを多くするよりも優れていますが、何が起こっているのかを明確にする必要があります。