カテゴリー
脳内思考垂れ流し

【随時更新】脳内思考垂れ流し日記2日目(サラリーマン辞めて独立したい)

子育て

  1. 娘6カ月、3時間ごとに起きて、なかなか寝ない。
  2. トータルの睡眠時間ちゃんと見てないけど、睡眠時間不足って、発育に影響しないんだろうか。
  3. 妻もほとんど寝れず。
  4. 猫が妻の寝てるところを邪魔する。なんて猫だ。
  5. 泣き喚く娘、眠たい嫁、嫁の髪の毛を食べる猫、寝室はカオスでした。
  6. 今は朝6時30分過ぎ。会社に行こうか悩む。

個人アプリ開発(CodeBank)

  1. 今日はデータの表示部分を実装したい。
  2. 子育てでなかなか進まないってのは実は甘えで、どんなに寝れてなくても、朝4時からコーディングしないといつまでたっても終わらない気がしてきた。
  3. エディタ部分、どんな風にしようかな。Visual Studio Code 風のエディタにしたら、訴求力高まるかな。

会社の仕事

  1. 昨日も書いたけど、どうせシステム作るんなら、パッケージシステム化できる案件をやる。
  2. パッケージシステム化できなさそうであれば、積極的に後輩か派遣さんへ。
  3. 仕事を渡すときの殺し文句は、「業務知識も知れてプログラミングの練習になるから、スキルアップできる案件だと思うよ。」という。
  4. どんな時でも、相手のことを思ってますって伝わる言い方は、訴求力ありそう。
  5. プロセスで品質が向上できたらいいのに。決まった手順で進めるだけで、いいものが出来るみたいな。
  6. たとえば、車の運転で、右折の回数を減らして、左折と直進でルート案内して事故を減らすとか

新型コロナ

  1. アルコールで死滅するってよ。モノの除菌は、次亜塩素酸ナトリウムがいいんだってよ。
カテゴリー
未分類

独立日記1日目

この日記について

  1. 自分の職業であるシステム開発を通して、思ったことを残す日記
  2. どんなに忙しくても毎日更新する
  3. 書きやすいので箇条書き、短文で書く
  4. 一応、見出しを付けているのは、グループ分けしたほうが読みやすいと思ったから。

個別開発案件は、汎化してパッケージシステムにすることを考える

  1. 長い時間かけて作ったシステムが、たった一つの業務にしか使われないのは、効率が悪すぎる。
  2. すぐに出来なくても、出来るかぎり汎化してパッケージシステムにすることを考える
  3. 会社でニーズが無ければ個人開発にして、副収入にする。
  4. 有償アプリにする場合は、送金代行サービスを利用する。
  5. 例えば、Vector とか。https://www.vector.co.jp/info/web_form/webform_info.html

新型コロナウィルス

  1. 飛沫感染や接触感染はあるが、空気感染はないらしい。
  2. 物の表面の消毒には、次亜塩素酸ナトリウム
  3. 手指の消毒には、アルコール
  4. マスクを外すとき、マスクの表面に触らない
  5. 潜伏期間は不明。最大14日?
  6. 潜伏期間内に感染力があるかは不明。
  7. 自覚症状なしに感染を大規模に拡大させる患者を「スーパースプレッダー」という。
  8. 新型コロナウィルスの致死率は3%と予想。SARSは約10%、MERSは約35%、エボラ出血熱は約50%。
  9. 感染が流行しない状態に追い込むことを「封じ込め」という。
  10. SARSは2002年11月から流行し始めて、2003年7月にWHOより封じ込めが宣言された。
  11. ウィルスが生物の細胞へ進入する際、細胞側のたんぱく質を「感染受容体(レセプター)」という。
  12. 人間が衛生管理されていない野生動物と接触することは、突然変異したウィルスをたまたま拾う確立を高める行動と言える。
  13. https://business.nikkei.com/atcl/seminar/19/00030/012900076/
  14. これ以上コピペしても意味ないので、ここまで。

ソースコードを綺麗に残すウェブアプリ

https://carbon.now.sh

カテゴリー
仕事効率化 個人開発

プログラミングを効率化する方法

社内SEとして働いていると、プログラミングする機会が多くあります。プログラム本数も結構多く、プログラミング言語も一つだけじゃなく、VB.NET、Oracle、Access VBA 、ExcelVBA, VB6, COBOL, C# など様々です。

特に Oracle SQL と MSSQL の違いにはうんざりします。SUBSTR が使えなかったり、NVL が使えなかったり。全く同じSQLにしといてよ!って思います。

この記事では、プログラム本数が多かったり、様々なプログラミング言語を扱う時の効率化の方法を紹介します。

1. コードスニペットを作成する

コードスニペットとは、コードの断片のことです。そのままではビルドできませんが、ある特定の機能を実現するコードの断片をコードスニペットといいます。

コードスニペットがあると、一からコードを書く必要がなくなります。コピペするだけで実装したい機能のコーディングが完了します。

2. ラッパークラスライブラリを作成する

ラッパークラスとは、実現したい一連の機能をまとめて実装するクラスのことです。例えば、「ファイルを新規作成して開く」という機能を実装する場合、ファイルを開くまでの一連の機能をクラスにしてしまうのです。

こうすることで、コード量が削減でき、かつテスト対象のコードステップも削減できる可能性があります。

3. プログラミング言語を選ぶ

プログラミング言語はそれぞれ目的をもって生まれたものが多いです。例えば深層学習や機械学習を実装する場合、ライブラリを多く持っているのはpython です。ExcelやAccess DB を扱う場合、VB.NET や C# よりは、VBA を採用した方が効率よく開発することができるかもしれません。SAM ファイルを扱う場合は、COPY 句の概念が使えるCOBOLがいいでしょう。

このように、システムの機能要件や特徴によって、扱うプログラミング言語を変えると、開発効率が向上します。

4. ボイラープレートを使う

プログラミングでいうところんlボイラープレートとは、プログラミング言語の仕様上ほとんど変わることのない部分のことを指します。

HTMLのボイラープレートが一般的ですが、<html> <meta> <style> <script> など、一般的なHTMLファイルであれば必ず似たような記述になるソースコードをボイラープレートとして予め記載しておきます。ソースファイルを新しく作るタイミングで、ボイラープレートをコピーすることで、本当に必要な機能のコーディングに集中できるようになるのです。

カテゴリー
ライフ 仕事効率化

【社内SEのすすめ】ベンダーSEより社内SEの方がメリットが多い理由

私は自動車部品製造業の社内SEとして5年近く働いています。投資総額2,000万円を超えるシステムの要件定義から携わったり、中国やメキシコの出張も経験しました。

社内SEになる前はベンダー系のSEでしたが、社内SEの方がメリットが多いです。

この記事では社内SEのメリットについて書いてみたいと思います。

1. システム利用者の生の声が聞ける

社内SEの1番のメリットは、利用者の要望を直接聞けることです。ベンダー系SEであればユーザー企業の情報システム部門担当者とのやりとりになりますが、社内SEは利用者から直接要望をヒアリングします。

システム開発にあまり携わった経験が少ない人の意見ですので、突拍子のないことを言われたりもしますが、本当に必要な機能を要望してくれます。

今まで聞いて感じたことは、Excel VBA の要望が多いことです。まだまだExcelは現役です。殆どのユーザーはExcelでデータ入力を行います。そのデータをインプットにして、Excelをアウトプットする場合はVBAが一番簡単で早く実装できます。

2. 内製開発ができる

これは情報システム部門の方針に依るところが大きいですが、内製開発を行うこともあります。上述したようにExcel VBA 案件もあれば、ウェブシステムの案件もあります。

設計からプログラミング、運用保守まで、自分で経験できるのは、大きなスキルアップになります。

3. 外注できる

システム要件が複雑で難易度の高いものであったり、納期までの期間が短い場合、ITベンダー企業へ外注することもできます。というより、外注している企業が多いかもしれません。

外注範囲も自由に決めることができますので、要件定義からお願いすることも有れば、プログラミング〜結合試験までをお願いすることもあります。

外注範囲をしっかり考え、納期と品質と費用を最大限にすれば、自分に対する評価も上がるでしょう。

4. ある程度、納期をコントロールできる

ベンダーSEであれば、お客様からの希望納期を可能な限り守る必要があるでしょう。これが原因で長時間残業やデスマーチがおこります。

社内SEの場合、お客様は社内にいる利用部門です。社内調整ですので、納期調整がかなりやりやすいでしょう。

どうしても調整できない場合は、外注するか、リリース範囲を縮小させるなどを検討する必要があります。自分への負荷が増加しないよう、周りをうまく使いましょう。

5. 経営課題に対して、先端のIT技術・プロダクトをどう活用するか考えることができる

ディープラーニングをはじめとしたAI技術、ビッグデータ分析、RPA製品、働き方改革を実現するためのテレワーク系ソフトウェアなど、世界には本当に多くのIT技術やソフトウェアが存在します。

それぞれのIT技術・ソフトウェアは、解決したい課題をもって生まれたものですが、それらがそのまま自社へ適用できるわけではありません。

業務内容や課題を理解して、どの製品が一番マッチしているか、それらを組み合わせてシステム化し、利用者の作業負荷が軽減される。システムエンジニアの醍醐味はここにあると考えています。

カテゴリー
ライフ 仕事効率化

サラリーマン+副業が最強だと思う理由

近年では、フリーランスとして働こうとか、やりたいことで生きていこうという考え方が広まっています。それも良い生き方だと思いますが、どうしても金銭的に安定しないです。

フリーランスが金銭的に安定しない理由

フリーランスが安定しない主な理由は、

  • 受注しないと給料に結びつかない
  • 休むと収入なし
  • 健康保険や年金制度が企業ほど手厚くない
  • ボーナスもない
  • ローンなど借入審査が通りにくい
  • 年齢を重ねるにつれて、受注が難しくなる

など、様々な理由があります。

サラリーマンが金銭的に安定している理由

一方でサラリーマンは安定しており、理由としては、

  • 毎月決まった給料が振り込まれる
  • ボーナスがある
  • ローンなど借入審査が通りやすい
  • 年齢を重ねるにつれて、給料が上がる
  • 休んでも収入がある

などがあります。

フリーランスはスキルアップが難しく、メンバーの助けを得られにくい

フリーランスは基本的に1人で作業します。発注側からはプロフェッショナルとして見られますが、基本的に1人なので、困ったときに助けてくれる人が社内にはいません。

電話をしたりインターネットを介して助けを求めることもできるかと思いますが、顔を付き合わせて話しをすることと声だけで会話するのでは、情報量が圧倒的に違います。

また、スキルアップのために書籍を買ったりセミナーを受講することもあるかと思いますが、それらの費用は全て自腹で用意しなくてはいけません。

サラリーマンだと技術的な内容から人生相談までのってくれる人がいる

会社の中で働くわけですから、それはもう多くの人います。中には変な人だったり難しい人もいますが、気の合う仲間や同期、頼れる上司が必ずいます。

そんなときに軽く質問しにいける人がいると、スキルアップのスピードは早いですよね。会社の中では役職で分かれていますので、「技術的な相談をするのはこの人だ」というのがすぐに分かると思います。

また、気の合う仲間や同期がいれば、飲みに行ったり遊びに行ったりすることでストレスから解放されやすくなります。

サラリーマンのデメリット

サラリーマンもデメリットがあります。

  • 給料が安い・なかなか上がらない
  • 会社に出勤しないといけない
  • 定年退職後にやることが無くなる
  • やりがいを感じられないときがある

サラリーマンは給料が安いです。1日8時間一生懸命働いてもこんな安いのか!と思ったことが何度もあります。トータルは分かりませんが、見た目の給料だけで言えば、フリーランスの方が給料が高いです。

また、サラリーマンは定年がありますので、一定の年齢を超えると会社にいられなくなってしまいます。一方でフリーランスは定年がありませんので、自分の引退年齢を自分で決められるというメリットがあります。

サラリーマンのデメリットを副業でメリットに変える

サラリーマンのデメリット上げた点を副業として注力することで、メリットに変えることができます。

  • 副業の収入を加算して、年収を増やす
  • 在職中から副業を開始し、定年後は副業をメインで行うことで、やりがいを感じる活動をする

サラリーマン副業は、サラリーマン在職中始めなければいけません。退職後からスタートしても、何をしていいのか分からず、すぐに収入に結びつくことが殆ど無いからです。

サラリーマン在職中のうちにしっかり副業の基盤を作っておけば、在職中の収入は上がり、退職後のやりがいも感じられる、楽しい人生を送ることができます。

サラリーマン在職中の副業は、受注型ではなくプロバイダー型にしよう

受注型とは、発注者から作業を請け負い、成果物を納品することです。これも十分立派な副業で、実績も残すことができますが、「作業量=収入額」となってしまい、働かないと収入が無いという現状から抜け出すことができません。

一方でプロバイダー型とは、ブログや動画などの広告収入有料メールマガジン、セミナー講師、有料のアプリ・LINEスタンプ販売など、自分が手を動かさなくても収入を得られる方式のことです。

この「プロバイダー型」の収入が増えると、金銭的に安定するだけでなく、自由に使える時間もそのまま確保できますので、次から次に自分のやりたいことが出来るようになります。

副業は目先の収入ではなく、将来への種まき

冒頭で述べたように、サラリーマンは在職しているだけで安定した収入が得られます。そのため、目先の収入を副業に求める必要がない方もいるのではないでしょうか。そういう方も、そうでない方も、副業は目先の収入ではなく、将来への種まきとして考える方が、人生を楽しく過ごせるようになると私は考えています。

カテゴリー
仕事効率化

【プログラミング知識だけでは不十分】システムエンジニアに必要なスキルについて考えてみた

私は自動車部品製造業で社内SEをしています。その中でも主にシステム内製開発業務を行っており、要件定義から基本設計、プログラミングと単体テスト、結合試験と総合試験、システム移行・運用保守まで全工程を行なっています。

最近は様々なプログラミングスクールがありますので、プログラミングを学ぶハードルがかなり下がっています。

しかし自分としてプログラミングを知っているだけではスキルとしては不十分だと感じており、とても仕事を依頼しにくいと感じています。

この記事ではシステムエンジニアとして必要なスキルセットを記載します。

1. テストスキル

プログラミングしてある程度完成したプログラムは6割〜7割は問題なく動くと思いますが、残りの3割〜4割はバグが潜んでいる可能性があります。

テストスキルとしては以下が必要だと考えています。

  • 単体テスト・結合テスト・総合テストなど各テスト工程で押さえるポイントを理解する
  • テストケースをドキュメントとして作成できる
  • テスト結果をエビデンスとして残せる
  • プログラムの品質が問題ないことを定量的・定性的に説明できる

2. 設計スキル

画面設計だけでなく、バッチ処理であればジョブフロー設計、データパターンを意識した詳細設計、エラー制御なども必要です。

大規模システムであればシステム構成図も必要です。新たな業務手順が発生するのであれば、業務フローも必要になります。

  • 画面設計、ジョブフロー設計、プログラム詳細設計
  • システム構成図、インターフェース設計
  • 業務フロー設計

3. システム要件を聞き出すスキル

システムを使用するユーザーは必要な機能をある程度説明してくれます。ただし、ユーザー自身気付いていないが必要となる機能もありますので、上手く聞き出す必要があります。

  • システム要件を文章や図にして、ユーザーに説明する
  • 不明点を確認事項一覧として記録・管理する

4. 非機能要件を定義するスキル

非機能要件とは、処理時間や処理可能最大件数、ディスク容量などのリソースを定めることです。要求機能が実現できていても処理が遅くては使い物になりません。

非機能要件はユーザーに聞いても曖昧な回答しか返ってこないことが多いので、業務内容から予想して決めていく必要があります。

  • 処理時間設計
  • 最大・限界設計
  • リソース設計(ディスク容量・レコード件数、など)
  • 運用設計

5. システム運用設計スキル

システム運用をスムーズに行うためには、定期的な過去データ削除であったり、エラー発生時に出力するエラー情報、エラー通知方法を考慮しておく必要があります。エラーが発生したらどこからどうやってリカバリ処理を実行するのか、リカバリ手順も構築しておかなければいけません。

システムを開発する時間より運用する時間の方が多いですから、運用を意識した設計を行う必要があります。

  • エラー通知情報設計
  • エラー通知設計
  • リカバリ設計
  • 過去データ保存期間設計

6. OS概要

OS側で用意されている機能を知っていればより良いシステムを構築することができます。例えばデータベースに接続する場合はODBCを使用すると簡単に構築できます。ログはファイルに出力するよりはイベントログに出力した方が管理や発見・検索が簡単です。ログイン機能を構築する場合は、Active Directory を使用するとシングルサインオンを実現できます。

  • Windows概要
  • Linux概要

7. ネットワークスキル

今やネットワークに繋がってないシステムはありません。機能要件にTCP/IP通信がある場合は尚更必要です。通信要件がなくても、OSI7階層参照モデルと具体例を知っているだけでシステム提案やトラブルシューティング幅が広がります。

  • OSI7階層参照モデル
  • プロトコル概要
  • ファイアーウォールの仕組み

8. アルゴリズムスキル

アルゴリズムといっても複雑なスキルは不要です。キー突合や最大値・最小値・最頻値の取得、業務カレンダーに基づいた日付計算など、要件実現のために必要なアルゴリズムを書けるようになっておく必要があります。

プログラミング言語フレームワークによっては既に用意されているものもあると思いますが、言語が指定される場合は使えないこともあります。必要な言語で柔軟に構築できるようになっていると強くなります。

  • キー突合
  • レポート出力(改ページ処理)
  • 最大値・最小値・最頻値取得
  • ランク付け

さいごに

プログラミングスクールで勉強すれば確かにプログラムが作れるようになりますが、これらのスキルがあるとエンジニアとしての幅が広がり、質の高いプログラムが作れるようになると思います。

意見がありましたらコメントか Twitterで連絡いただけると幸いです。