hiroktsのブログ

IT開発系の勉強会の感想とか雑記とか

ソフトウェアエンジニアとはどういう人が多い?

  • 一緒に働くとき
  • 採用するとき

「ソフトウェアエンジニアとはどういう人が多いのか」という内容に気を配るといいかもしれない。

または、逆に自分が説明するときの備忘録として。

概要

プログラマー三大美徳」「UNIX哲学」みたいな価値観を大事にしている

「コードを書くことによるものづくり」状態が整っていると楽しいし、そのことに集中して静かに働きたいと思っている。

ソフトウェアエンジニアはどんな価値を大事にしているか

プログラマー三大美徳」

  • 短気
  • 傲慢
  • 怠惰

これの反対側の価値も大切だということは理解しつつ、これらの感覚もプログラミングでの課題解決にとって非常に大切にしている

例えば、矛盾していると感じられるかもしれないが、「こんなダルいことはやりたくない。楽をしたい。楽するためには徹夜してでもコードを書く」というようなこと

UNIX哲学」

  • 小さいものは美しい。
  • 各プログラムが一つのことをうまくやるようにせよ。
  • できる限り早く原型(プロトタイプ)を作れ。
  • 効率よりも移植しやすさを選べ。
  • 単純なテキストファイルにデータを格納せよ。
  • ソフトウェアを梃子(てこ)として利用せよ。
  • 効率と移植性を高めるためにシェルスクリプトを利用せよ。
  • 拘束的なユーザーインターフェースは作るな。
  • 全てのプログラムはフィルタとして振る舞うようにせよ。

Wikipediaより

OSSに対する敬意

好き嫌いはあるかもしれないが、基本的にOSSに対しては敬意を払っていることが多い

それに加えて

多分このへんは好みになるが、ローコンテキストであること。

ソフトウェアエンジニアに必要な環境

静かに、自由に働く

背景として

複雑な問題に対するコーディングは基本的に思考や試作が分岐、分岐、分岐という感じで深く深くなる傾向がある

ある程度まとまった時間に集中してやらないと解決できないことが多い

環境

  • 広めの机、座りやすい椅子
  • 細切れの会議などがたくさん入る状況でなく、静かであること
    • 物理的に静かである、ということよりも意味の薄いインタラプトがないことでコンテキストのスイッチを最小にする
  • インターネットでの検索が自由にできたりするのは必須
  • 散歩したり、場所を変えて「コードを書いたり、ホワイトボードの前で議論する」ことができる環境であることもいいと思う

何を道具にしているか

  • terminal
    • コンピュータにソフトウェアを実行させるのに使う
    • 最小のソフトウェアを連結することで、簡潔にコンピュータを問題解決のために動かすことができる場所
  • editor, IDE
    • コードを書くのに使う
  • git
    • コードをバージョンごと、機能ごとに管理するのに使ったりする

ソフトウェアエンジニアの一般的な開発フロー

WEBアプリケーションの場合の一例

  1. 要求 -> 要件
  2. (システム構成設計)
  3. (開発環境構築)
  4. モデル設計 - 現実的な物事の意味構造からのプログラミング的な意味構造の設計
  5. プロトタイプ
  6. コーディング+テスト
  7. レビュー
  8. (本番環境構築)
  9. (デプロイスクリプトなどの構築)
  10. デプロイ
  11. (公開, ロギング、分析などの設定)

※ ()内は最初期のリリース ※ デプロイとはプログラムのコードをサーバーに配置して動かすこと