AIGC の急速な発展に伴い、プログラマは外部の世界や自分自身からのプレッシャーをますます感じるようになりました。AIが急速に発展する時代に、私たちはどうすれば遅れを取ったり、取って代わられたりしないのでしょうか?プロジェクトの開発効率は重要な役割を果たします。
最初にいくつかの質問をします。
- 効率的なプログラミングを実現するにはどうすればよいでしょうか?
- 効率的なプログラミングの核心はどこにあるのでしょうか?
1. 効率的なプログラミングを実現するにはどうすればよいですか?
1) プログラミング経験を積み、自社の開発アーキテクチャへの理解を深めます。
次のシナリオを想像してみましょう:
上司から 3 日以内にプロジェクトを完了するよう要求されています。このプロジェクトを達成するのは簡単ではなく、時限タスク フレームワーク、メッセージ プッシュ、Excel のインポートおよびエクスポート機能の使用が必要です。若手プログラマや入社したばかりの新入社員にとっては、開発経験が浅く、新入社員として会社の仕組みも理解できていないため、この仕事は少し難しいかもしれません。だから何をすべきか?
そう、効率的なプログラミングを実現するには、まずプログラミングの経験を積み、自社の開発アーキテクチャやシステムへの理解を高める必要があります。プログラミングの経験を積むことは、より多くのコードを書くだけでなく、同じ穴を二度踏まないように、問題に対処する能力を向上させることにもつながります。
若手プログラマーや業界に入ったばかりの新入社員の場合、経験豊富な同僚と一緒にプロジェクトを開発することで、問題解決能力、いわゆるティーチング能力を急速に高めることができます。指導の過程では、お互いに問題を話し合って、良い技術的な議論の雰囲気を作ることも上達に効果的ですが、中級者以上のプログラマーにとっては、問題解決の過程で徐々に問題を解決していく必要があります。独自の「システム」を使用し、エラーや問題が発生するたびに独自のシステムに従って問題をトラブルシューティングし、処理が完了した後に独自のエラー データ セットを更新します。
2) コードの再利用を実現
ここで、別のシナリオを想像してみましょう。
私たちは毎日コードを書いていますが、そのために効率は向上せず、プロジェクトの数が増えるにつれて、コードの量とコーディングのプレッシャーが増大します。このような長くて複雑なコードをどのように処理すれば、コーディングの負担が軽減されるだけでなく、コードの品質も向上するのでしょうか?
効率的なプログラミングを実現するための高度な方法は、コードを再利用することです。興味深い話を聞いたことがあるかもしれません。あるプログラマーは、開発したすべてのプロジェクトを記録する USB フラッシュ ドライブを持ち歩くのが好きですが、ある日、貴重な USB フラッシュ ドライブを紛失してしまい、彼はため息をつきました。「彼のキャリアは終わった」と。
この話を見たとき、私の最初の反応は、このプログラマーは少なくとも新人ではなく、コードを保存して再利用して、その後のシステム開発を容易にするだろうということでした。しかし現実には、多くのプログラマーはこれを実行せず、一日中追加、削除、変更、チェックを書き、自分の快適ゾーンに住み、自分は「勤勉」であると考えていますが、「怠け者」であるとは決して考えていません。 。
では、コードの再利用を実現するにはどうすればよいでしょうか?
経験豊富な Java 開発エンジニアとして、私はまず、リフレクション、アノテーション、ジェネリックス、列挙、デザイン パターンなどのツールを使用してコード関数を構築することを考えます。たとえば、データが空かどうかを確認するには、まずコメントを書きます。
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotBlank {
String message() default "参数不能为空";
}
次に、リフレクションを使用して、クラスとその親クラス内のすべての DeclaredField、つまりプライベート変数を含むすべてのメンバー変数を取得し、その中のアノテーション付き変数を取得し、それが空かどうかを確認し、空の場合は例外をスローします。
/**
* 实体工具类
* @author zyl
*/
@Slf4j
public class EntityUtils {
public static <T> boolean verifyIsEmpty(T entity) {
if (entity == null) {
throw new MyException("实体类为空");
}
try {
Class<?> cls = entity.getClass();
String clsName = cls.getSimpleName();
while (!"Object".equalsIgnoreCase(clsName.trim())) {
Field[] fields = cls.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
NotBlank anno = f.getAnnotation(NotBlank.class);
if (anno != null) {
Object obj = f.get(entity);
if (obj == null || "".equals(obj)) {
throw new MyException(anno.message());
}
if (obj instanceof List && ((List) obj).isEmpty()) {
throw new MyException(anno.message());
}
String str = String.valueOf(obj);
if (str.isEmpty()) {
throw new MyException(anno.message());
}
}
}
cls = cls.getSuperclass();
clsName = cls.getSimpleName();
}
return false;
} catch (Exception ex) {
log.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
}
}
このメソッドの使用が思いつかない場合は、Spring に付属する @NotBlank アノテーションを使用して上記の機能を実現することもできます。
コードを再利用するための 2 番目のパスは、コンポーネントの作成です。これには、コンポーネントの全体的な機能の把握などのデザインパターンなど、プログラミング能力に対する一定の要件があります。しかし、コンポーネントのパッケージ化と使い方を覚えてしまえば、一般的な業務システム開発であれば効率が大幅に向上します。例えば、木材を車輪に加工するのは面倒ですが、車輪をフレームに組み立てるのは簡単になります。
より高いレベルは、コード ジェネレーターを自分で実装する、つまりコード生成フレームワークを自分で記述することです。これは難しすぎます(笑)。幸いなことに、Ali の Yidai、Baidu の Aispeed など、比較的成熟したコード生成ツールが市場にあります。
効率的なプログラミングの核心
- 繰り返されるものは標準化され、標準的なものは自動化されます。一生懸命働くことはお勧めできません。怠惰が王様になることもあります。
- 経験を積み、オープンマインドな学習態度を維持してください。