システムプログラミングはまるでパズル
ボケ防止のつもりで、カジュアルゲームなんかやってるけど
そんなのやめて、システム作りでコードを書いてる方がましなのにね。
どうせ何も残らないけど、日曜大工でキャットタワーを作るようなものかな。ネコもいないのに・・・。
もっとシンプルな構造にできないかを考えると
せっかく動いていたのについScrap and Buildしてしまう。
で、最初のアルゴリズムの方が良かったかなとか
はじめからこれで作ってればとか。
ただ今「パズル」と称しているのは、プログラムをジェネレートする機能を持ってるフレームワークのだから。
普通のアプリケーションプログラミングはパズルでは困る。
シンプルじゃなきゃ。
そのためにフレームワークなるものがある・・・
はずなんだけど。
「プログラム言語フレームワークはいくつあるか?」
ChatGPTに訊いてみたけど、答えられない。
世の中にはAIをもってしても”数えきれないほどの”フレームワークがあり、まださらに開発され続けてる。
バカか・・・
例えばこんなコード
JavaScript:
const salesData = [
{ department: '部署A', salesperson: '担当者1', date: '2022-01-05', amount: 100 },
{ department: '部署B', salesperson: '担当者2', date: '2022-01-10', amount: 200 },
{ department: '部署A', salesperson: '担当者1', date: '2022-02-15', amount: 300 },
{ department: '部署B', salesperson: '担当者2', date: '2022-02-20', amount: 150 },
{ department: '部署A', salesperson: '担当者2', date: '2022-02-25', amount: 250 },
];
// 集計結果を格納するオブジェクト
const aggregatedData = {};
// 集計
salesData.forEach((sale) => {
const date = new Date(sale.date);
const yearMonth = `${date.getFullYear()}-${date.getMonth() + 1}`; // 年月の形式を取得
if (!aggregatedData[yearMonth]) {
aggregatedData[yearMonth] = {};
}
if (!aggregatedData[yearMonth][sale.salesperson]) {
aggregatedData[yearMonth][sale.salesperson] = 0;
}
aggregatedData[yearMonth][sale.salesperson] += sale.amount;
});
// 集計結果の表示
for (const yearMonth in aggregatedData) {
console.log(`年月: ${yearMonth}`);
for (const salesperson in aggregatedData[yearMonth]) {
console.log(`担当者: ${salesperson}, 金額: ${aggregatedData[yearMonth][salesperson]}`);
}
console.log('---');
}
Python:
from collections import defaultdict
sales_data = [
{"department": "部署A", "salesperson": "担当者1", "date": "2022-01-05", "amount": 100},
{"department": "部署B", "salesperson": "担当者2", "date": "2022-01-10", "amount": 200},
{"department": "部署A", "salesperson": "担当者1", "date": "2022-02-15", "amount": 300},
{"department": "部署B", "salesperson": "担当者2", "date": "2022-02-20", "amount": 150},
{"department": "部署A", "salesperson": "担当者2", "date": "2022-02-25", "amount": 250},
]
aggregated_data = defaultdict(lambda: defaultdict(int))
# 集計
for sale in sales_data:
year_month = "-".join(sale["date"].split("-")[:2])
aggregated_data[year_month][sale["salesperson"]] += sale["amount"]
# 集計結果の表示
for year_month, data in aggregated_data.items():
print(f"年月: {year_month}")
for salesperson, amount in data.items():
print(f"担当者: {salesperson}, 金額: {amount}")
print("---")
Ruby:
sales_data = [
{ department: '部署A', salesperson: '担当者1', date: '2022-01-05', amount: 100 },
{ department: '部署B', salesperson: '担当者2', date: '2022-01-10', amount: 200 },
{ department: '部署A', salesperson: '担当者1', date: '2022-02-15', amount: 300 },
{ department: '部署B', salesperson: '担当者2', date: '2022-02-20', amount: 150 },
{ department: '部署A', salesperson: '担当者2', date: '2022-02-25', amount: 250 },
]
aggregated_data = Hash.new { |h, k| h[k] = Hash.new(0) }
# 集計
sales_data.each do |sale|
year_month = sale[:date].split("-")[0..1].join("-")
aggregated_data[year_month][sale[:salesperson]] += sale[:amount]
end
# 集計結果の表示
aggregated_data.each do |year_month, data|
puts "年月: #{year_month}"
data.each do |salesperson, amount|
puts "担当者: #{salesperson}, 金額: #{amount}"
end
puts "---"
end
PHP:
$salesData = [
['department' => '部署A', 'salesperson' => '担当者1', 'date' => '2022-01-05', 'amount' => 100],
['department' => '部署B', 'salesperson' => '担当者2', 'date' => '2022-01-10', 'amount' => 200],
['department' => '部署A', 'salesperson' => '担当者1', 'date' => '2022-02-15', 'amount' => 300],
['department' => '部署B', 'salesperson' => '担当者2', 'date' => '2022-02-20', 'amount' => 150],
['department' => '部署A', 'salesperson' => '担当者2', 'date' => '2022-02-25', 'amount' => 250],
];
$aggregatedData = [];
// 集計
foreach ($salesData as $sale) {
$date = new DateTime($sale['date']);
$yearMonth = $date->format('Y-m');
if (!isset($aggregatedData[$yearMonth])) {
$aggregatedData[$yearMonth] = [];
}
if (!isset($aggregatedData[$yearMonth][$sale['salesperson']])) {
$aggregatedData[$yearMonth][$sale['salesperson']] = 0;
}
$aggregatedData[$yearMonth][$sale['salesperson']] += $sale['amount'];
}
// 集計結果の表示
foreach ($aggregatedData as $yearMonth => $data) {
echo "年月: {$yearMonth}\n";
foreach ($data as $salesperson => $amount) {
echo "担当者: {$salesperson}, 金額: {$amount}\n";
}
echo "---\n";
}
同じロジックでも、それぞれこうなる。
独りよがり以外の何物でもない。
何も構造的には違わず、些細な書き方が違うだけ。
この一字一句を取り違えれば動かない。
ちなみにそれぞれの言語の平均所得
↑ここによると
①JavaScript 663万円
⑥Python 608万円
⑩PHP 545万円
⑭Ruby 450万円
らしい。
ソースによってはかなり違うけど
200万くらいの格差がある。
こんなこといつまで続けるんだろ。
さっきのコードはChatGPTに書かせたんだけど
この程度のものはAIですぐかける時代。
でも要件が複雑になると、言葉で説明するより自分で書いた方が早い感じも。
ある程度説明は簡単だけど、作るのに専門知識が必要なモジュールをオーダーするといいのかな。
おっと長くなっちまった。
「パズル」解かなきゃ。
このパズルをChatGPTに頼むのと、自力で何とかするのと
どっちにしても自分の頭を悩ませそうだ。
ちなみにさっきのロジック
SQLならこうなる。
SELECT
DATE_FORMAT(date, '%Y-%m') AS year_month,
salesperson,
SUM(amount) AS total_amount
FROM
sales_data
GROUP BY
year_month, salesperson;
まぁ適材適所ということ。
この記事が気に入ったらサポートをしてみませんか?