shzxcv

コンピュータサイエンス、経営学など

振り返りと抱負

2022振り返り

技術

  • 丸一年間Go書いてた、たまにPython, Typescript
  • マイクロサービス(API、データ基盤)のリプレイス
  • 開発フロー整備やプロダクトの方向性など
  • 相変わらずAWSのサービスまあまあ使った
  • 仕事以外もプログラムばっかり書いてた
  • OSS作ったりしたものの、そんなに使われない悩み
  • 基本アウトプットばかり

プライベート

  • 引越し
  • 結婚

2023抱負

RedshiftとPostgresのCollate

Redshiftソート順

例えば、ORDER BY 式と、MIN、MAX、および RANK などの関数は、ロケール固有の文字を考慮に入れないデータのバイナリ UTF8 順序付けに基づいて結果を返します。

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_collation_sequences.html

Postgres

--encoding=UTF-8 --locale=C

locale=Cにすれば、binary UTF8順になるので、似た環境で開発できる

オブジェクト指向プログラミング

## 特徴と謳っているもの

- カプセル化

- 継承

- ポリモーフィズム

 

## 実態

### カプセル化

C言語においても、ヘッダーファイルでの宣言でカプセル化可能。また、クラスのメンバについてはprivateにしても、外部からファイルでの確認ができるため、カプセル化C言語の方が高い

 

### 継承

C言語でも関数ポインタを使って実現できていた。

ただ、多重継承は少し大変。

 

### ポリモーフィズム

こちらも関数ポインタを参照して可能だが、抽象インターフェースだけではなく、具象インターフェースも知る必要があるので、依存度が高い。

大変。

 

## まとめ

オブジェクト指向によって得られるもので非常に重要なのは、ポリモーフィズムの抽象インターフェースによってレイヤードアーキテクチャコンポーネント同士の結合度を下げること(DIP)、またDIでテストをしやすくすること。

 

構造化プログラミング

制御構造(実装)

goto文によるソフトウェアの破壊を危惧して、エドガー・ダイクストラが提唱した。

  • 順接
    • 上から順に実行
  • 分岐
    • If Statement
  • 反復
    • While Statement

構造化設計(設計)

サブルーチンとデータ構造の無数の組み合わせからプログラムを組み立てること
また、これらの分割によって凝集度や結合度などの考えも生まれている。

単語

goto文

ラベル名に強制移動

#include <stdio.h>

int main()
{
        int count = 0;

loop:
        count++;
        if (count >= 10) goto end;
        goto loop;
end:
        return 0;
}

サブルーチン

メインルーチンから呼ばれるコード群
(method, function, procedure...)

package main

func main() {
  subRoutine()
}

func subRoutine() {
  fmt.Println("subRoutine")
}

凝集度

クラスやパッケージ、モジュールの責任範囲の明確さ
凝集度が高い = 各パッケージが独立しており、お互いの強調度合いが高い
凝集度が低い = 各パッケージの依存や共通性が多い

結合度

あるモジュール同士の密接度

提示者

ja.wikipedia.org