ライン間の典型的なITジョブの解析

たとえば、私は1つの非常に典型的な欠員を取りました。給与は表示されていないことをすぐに言わなければなりません。多くの人がそのような広告を除外します-そしておそらく正当な理由があります。しかし、それは非常に明白です。便宜上、要件をリストするために文に番号を付けました。もちろん、出典は逐語的に引用されることはありません。

1-C ++(Qt5)でのソフトウェア開発と既存ソフトウェアの改訂。2-QtWidgets / QMLでのGUIの開発。3-さまざまなシステムのアーキテクチャの設計への参加。4-C ++での開発経験。5-Qt5に関する十分な知識。6-マルチスレッドアプリケーションの開発経験。7-OOPを理解する。8-経験豊富なユーザーとしてのLinuxの知識。


それでは、ポイントを見てみましょう。むしろ、そのような提案に出くわしたときの読み方。



1. C ++(Qt5)でのソフトウェア開発と既存ソフトウェアの改訂



この時点で、すべてが正常です。ライブラリの現在のバージョンと言語は単に示されています。



2. QtWidgets / QMLでのGUIの開発



はい、QMLはQtの一部であり、誰も異議を唱えません。ただし、小さな点があります。もちろん、2つの椅子に同時に座るプロジェクトを作成することは可能ですが、両方に干渉することは、アーキテクチャが悪いことを示しています。たぶん人々はQML開発だけを意味しますか?実際、プロジェクトはQMLで記述されていますが、独自のコンポーネントが必要であり、QtWidgetsを使用してC ++で記述されています...まだ明確ではないので、読み進めてください。ちなみに、後でアーキテクチャに戻ります。



3.さまざまなシステムのアーキテクチャの設計への参加



特定のシステムとはどういう意味ですか?すぐに疑問が生じます:あなたはそれらをいくつ持っていますか?これらのいくつかのプロジェクトは、1人が同時に取り組む必要がありますか、それとも従来のQtプログラミングがQMLやその他のアプローチを使用して1つの巨大なプロジェクトに混在していますか?前の段落のQtWidgetsがQMLなしのいわゆる「クラシックQt開発」(フォームを作成し、それにクラスを作成する)を参照しているという事実から判断すると、プログラマーは同時に2つの椅子に座らなければならないことが明らかになります。



4. C ++での開発経験



それは何のために書かれていますか?人生でC ++を見たことがないQMLボクサーが来ないように?または、現在の開発者の経験では、QMLからQtWidgetsに切り替えるのに十分ではありませんか?たぶん彼らは古いコードの維持に関与したくないのでしょうか?



すべてがやや複雑に思えます。実際、標準のQML機能は通常、本格的なアプリケーションには不十分であるため、独自のQMLプラグインを作成する必要があります。 C ++が必要な場合。言い換えれば、人々のためのプロジェクトはすでに部分的にQMLで書かれていましたが、その後、機会が非常に不足しました-そして、QMLボックスは、スキルが不十分であるか、フォームの作成だけで200%の時間忙しいことが判明しましたが、QML -C ++のコンポーネント彼はどういうわけか書くことができません。これから何をするかが明確になります。これは、従来のコードのサポートと新しいQMLコンポーネントの作成です。



ただし、これは1つではなく、2つの欠員です。古典的なQtコードでは、通常、修正が難しいバグがたくさんあり、サポートに座っているプログラマーは、自分の時間の100%以上を修正するのに忙しくなります(リワークで作業します)。新しいQMLコンポーネントを「時々」作成することもできなくなります。これは常に行う必要があります。おそらく彼らは、人が主に古いコードをサポートし、時には「迅速かつ何らかの方法で」それらをQMLに置き換えると考えています。この場合、このすべての不名誉のアーキテクチャに誰が従事しているのかという疑問が生じます。ポイント3を思い出してください:「私たちはそれらの救助者です」。要するに、あなたがやりたいことをしてください、とにかく建築を扱う人は誰もいません、誰もプロジェクトアーキテクトを雇うつもりはありません、そしてマネージャーは建築家ではなく、このトピックを知らないので、すべてが私たちのせいになります。



5.Qt5に関する十分な知識



本当ですか?いいえ、何かについての知識が乏しいと、どこかに行って仕事に就けるとは信じられません。つまり、これについて書く価値は一般的にありました。そうでなければ、本当です。悪いものが付属するのでしょうか。たぶん、この時点で何かを解読しますか?彼らがこれを書いているとき、彼らは彼らの現在の開発者がQtを十分によく知らないと思います(それが意味するものは何でも)、そしてもしそうなら、彼らはすでにプログラマーにお金を節約しようとしました。



6.マルチスレッドアプリケーションの開発経験



確かに、彼らは解読しました。 Qtを使用してマルチスレッドアプリケーションを開発するには、Qtに関する十分な知識が必要です。しかし、私は個人的にこの要件で完全に異なる何かを読みました。彼らがこのフレーズを書いたときにおそらく意味されていたものではありません。まず、Qtがマルチスレッドである理由を理解しましょう。



Qtの古典的な部分は、イベントベースのライブラリです。ただし、後でスレッドを実行できる機能が追加されました。ただし、インターフェイス全体は1つのメインスレッドで機能し、前の関数からジャンプするまで、信号スロットにどのように接続しても、もう一方は呼び出されません。



マルチスレッドは通常、非インターフェイスレベルで必要です。Qtアプリケーションでは、クライアントとサーバーの分離が何らかの方法で使用されることがよくあります。サーバーがアーキテクチャ的にあまり適切に設計されていない場合(たとえば、呼び出しが厳密に同期している場合)、この場合、待機を整理するためにスレッドが必要になります。インターフェイスレベルで。空室に適用された場合、これはどういう意味ですか?



まず、クライアントとサーバー間のフロントエンドは、設計が不十分であるか、まったく存在しません。私たちはできる限り書きましたが、ビジネスロジックの少なくとも一部がクライアントコードと混同されており、システムプログラミングを部分的に処理する必要があります(システムプログラマーがサーバーレベルで完了しなかったことを終了します)。ここで私は通常、そのようなチームにはシステムプログラマーがいると言わなければなりませんが、非常に具体的です。 Windowsにシステムコードがまったくないようにシステムを設計する義務があったのは彼でしたが、TCP / IPプロトコルスタックについての質問であなたを非難するためにインタビューに来るのは彼です。そして、ちなみに、彼はすべての中で最大の給与を受け取ります-そしてあなたはマルチスレッドプログラミングを使用して、彼の不完全さのためにラップを取る必要があります。



第二に、同期呼び出しの結果として、プログラムはすでに非常に遅いため、会社の経営陣(マネージャーと混同しないでください)は投資家からユーザーフィードバック受け取りましたこのフィードバックは簡潔でしたが、非常に感情的でした...そして今ではプログラマーがすべてをスピードアップする必要があります-そしてそれをできるだけ早く行う必要があります。これがどのように起こったかは、次の段落で私たちに示唆される可能性が最も高いでしょう。



7.OOPを理解する



ああ...これは「C ++でコーディングできますが、OOPが何であるかわかりません」というカテゴリの何かです。それはそのようには機能しません。おそらく、C ++でC ++の単学期コースを作成し、年齢と欠員への対応によって即座に識別される大学院生を除きます。したがって、何か他のものを意味します。正確には?



私自身の経験から、このプログラムは私たちに失敗したことで悪名高いと推測できます。確かに、すべてがいつものように、非常にクールで、面白くて楽しいものから始まりました。正しいアーキテクチャ、抽象化のレイヤー、そして通常は有能なプロジェクトに伴うすべてのものです。しかし、その後、機能性の競争が始まり、抽象化の層がぼやけました。おそらく、プロジェクトが古いことが判明した場合、元の開発者はQtWidgetsでそれを作成しましたが、彼らは長い間離れていました-非常に昔に、QMLを作り始めた非常に若い学生が彼らの代わりに何とか働いた(上司にそれがクールであることを保証した) ..。誰がまた成長しました-そして彼らが最初に書いた麺のようなコードが最終的に抽象化からラビオリに変わったことに気づきました(アンチパターンを参照)。そして今、ウィンドウごとに、1つの通常のフォームクラスの代わりに、12個のほぼ空のマイクロクラスが呼び出されます。これらのマイクロクラスは、データを直接ではなく、ある種のブーストインジェクターを介してジャグリングします(これは数年前に流行していました)。このジャグリングは、何十もの余分なレイヤーを通過した後、同じヌードルのようなコードに遭遇するという事実で終わります。プロジェクトの人里離れた場所にある「TODO:時間が表示されたら、すべてを人間的に書き直してください」



その結果、コードを理解することができなくなり、開発することができなくなります。プログラマーはずっと前にそれをすべて理解し、より親切な場所にそれを捨てました。しかし、プロジェクト管理者は何も学習せず、現在(単純なQMLスクリプトを見た後)、別の特効薬の助けを借りて問題を「迅速に」解決できると信じています。次の点は、これが最も可能性が高いことを示しています。



8.経験豊富なユーザーとしてのLinuxの知識



最後に、プロジェクトの目的が明らかになりました。議論する人もいるかもしれませんが(コメントで)議論することはできますが、困難な時代のLinux開発は、フリーソフトウェア(おそらく私たち全員が夢見ている)の理想ではありません。ケースの99%で、これらはすべてとすべての人を監視するという考えを持つ警備員です。Linuxとしては、Astraを意味します。これは、ComradeMajorがそう言ったためです。つまり、これはIT企業ではなく、そこでの通常のアーキテクチャアプローチについては誰も聞いたことがなく、(経験からの)すべての問題は「フリーシューイング」によって解決されます。したがって、結論:給与は正当な理由で示されていませんでした。ここでは、コードを完全にリファクタリングするために3人のシニア(それぞれに適切な数のミドルと6月)を雇う必要があり、「すべての問題を解決する人」を探す必要はありません。しかし、雇用主はこれを買う余裕はありません、これは、成熟した投資市場のある通常の経済でのみ可能だからです。しかし、これは別のトピックであり、また別のトピックです。



All Articles