ソフトウェア・エンジニアにキャリア変更する 経歴作りのためにコンピューター・サイエンスを専攻する
ソフトウェア開発分野では雇用が大幅に伸びています。基本的なプログラミングの仕事と比較して、ソフトウェア・エンジニアリング分野は特に好ましい雇用条件が整っているので狙い目かもしれません。ソフトウェア開発者の平均収入は、米国では年間約840万円〜1千50万円ほどです。 実用的なソフトウェアの設計とコーディングを習得することが最優先課題です。習得方法は色々ありますが、次にいくつか紹介しましょう。  インターネット上で公開されている指導書やビデオなどを通して学ぶか、友達に教えてもらいましょう。 インターネット上で誰もが無料で学べる大規模な開かれた講義（MOOC）を受けてみましょう。 プログラミングの経験が多少あれば、GitHubサイトで他のプログラマーたちとの共同作業に挑みましょう。 時間と資金を費やせるなら、プログラミングを短期集中で学べる「コーディング・ブートキャンプ」に参加しましょう。ただし、ブートキャンプに参加する前に業界の評判を調べましょう。評判の良くないブートキャンプへの参加は出費の無駄になる可能性があります。 ソフトウェア開発は専門分野と言えますが、これまでのキャリアがコンピューター専門ではなくても優位に立てる可能性があります。ソフトウェア・エンジニアリングは、分析力、問題解決能力、更にチームワークの精神に大きく依存します。また、１つの業界に精通していると、その業界向けのソフトウェアを設計するのに役立つ場合があります。  趣味や副業として関心を持つだけでも、ネットワーキングの機会を広げることができる上、少なくとも仕事にやりがいを感じ情熱を注ぐことができます。ゲームアプリ、デジタル音楽の組曲、またはビジネス用ソフトウェアの開発などはすべてその例です。 できれば、仕事の一部を自動化してみましょう。作業を高速処理し、物事を簡単にできるツールを構築しましょう。ソフトウェア・エンジニアリングの中核は問題解決です。ソフトウェアを書くという作業は、開発者にとっての問題解決法にすぎません。あなたの周りにも解決すべき問題がたくさんあるはずです。すぐに始めてみませんか。 １〜２年間働きながら学校で勉強するだけでも、または数か月間だけでも集中して学習すれば、プログラミングの仕事に就くことができるでしょう。すでに他の分野で学士号を取得しており、多少のコーディングのスキルも持ち合わせているなら、ソフトウェア・エンジニアリングの修士号を取得することを検討しましょう。 これは非常に高額な選択肢です。しかし、独学が難しい場合やコミュニティーに参加したり、趣味として挑戦したりするのが困難な場合は、これが最も効果的な選択肢でしょう。 ほぼ全ての業界がソフトウェア開発者を必要としているので、これまでのキャリアで培ったネットワークは非常に貴重です。また、IAENG Software Society of Software Engineering（IAENGソフトウェア工学国際会議）、IEEE Computer Society Technical Council on Software Engineering（IEEE コンピューターソサエティ）、Association for Computing Machinery（計算機科学の国際学会）などの専門家協会への参加も検討しましょう。また、地元の交流会やオンラインコミュニティーも確認しましょう。ソフトウェアの世界は驚くほど小さく、適切な人脈を見つけることで無数の機会を開くことができます ソフトウェア・エンジニアの職はほとんどが学士号を必要とします。コンピューター・サイエンスのコースでは、ソフトウェアの設計及び製品化に最も有用な知識を提供します。就職の面接ではほぼ必ず、データ構造やアルゴリズムに焦点を当てた質問がなされるので、従来のコンピューター・サイエンスのコースで学習する理論的背景を知識として持っていると大変有利です。ただし実際には、コースで習う理論的概念をソフトウェア作成に適用できなければならず、その為には授業以外でかなりの時間を費やしてコードを書く必要があるでしょう。 準学士号や独学の場合でも、ソフトウェア・エンジニアとして採用されることは可能です。ただし、その場合には、自分の書いたコードやプログラム、メンバーとして貢献したプロジェクトなどをGithubなどのウェブサイトにポートフォリオとして保管し、いつでもスキルを示すことができるようにしておくことが重要です。どんなアプリやゲームを作ったら良いか独自のアイディアがない場合には、オープンソースプロジェクトに参加して、微修正や新機能を提供するという方法もあります。オープンソースとは、ソフトウェアのコード（ソースコード）が公開されている（オープンである）ことを意味します。 プロジェクトの管理者の承認が必要ですが、大抵、誰でもプロジェクトにコードを提供することが出来ます。基本的なスキルを見につけた後で、参加可能なソフトウェア開発者のグループオープンソースのプロジェクトを見つけられれば、かなりのスピードでスキルを上達させることができるでしょう。 小学生でもプログラミング言語を学ぶことで有利なスタートを切ることができるでしょう。  ソフトウェア・エンジニアリングはコーディングだけに焦点を合てるわけではありませんが、少なくともプログラミング言語を２〜３つほど理解し、機能についても深い知識を持つ必要があります。どの言語が最も有用かについて幅広い意見の一致はありませんが、一般的な選択肢を次に挙げましょう。  Python（パイソン） Ruby（ルビー） JavaScript（ジャバスクリプト） C#（Cシャープ） Java（ジャバ） C++（Cプラスプラス）   プログラミング言語によって、どんなタイプの問題に対して解決能力が優れているかが異なります。ある言語が他の言語よりも優れているということはありません。また、ある言語が他の言語よりも簡単だと言うことも出来きません。ほとんどの言語が、特定のタイプの問題を念頭において書かれており、その解決が得意であっても、他の問題を解決することは苦手です。色々な言語を学習して自分に合った言語を見つけましょう。まず、特定のプログラミング言語の基礎に焦点を当て、その言語に慣れたら２つ目に挑戦しましょう。すべての言語を学ぶ必要はありません。得意な言語を見つけて、技術を驚異的に上げましょう。 マサチューセッツ工科大学では若者がプログラミングを学習できるように、プログラミングツールを作り、ウェブサイトを立ち上げて誰でもアクセス出来るようにしています。このツールでは難解な文章ではなく、ビジュアルキューを使ってプログラミングの概念を説明します。抽象的な概念や文章よりも視覚的指示の方が分かりやすいと感じる大人にも役立つでしょう。 「アルゴリズム」とは、問題解決のための計算式または手順です。例えば、２つのポイント間の最短距離を見つけるための経路探索、大量のデータセットから特定のデータを見つける探索アルゴリズム、あるいはデータを一定の順序で並べ替える並べ替えのアルゴリズムなどが最も一般的です。「データ構造」とは、特定の問題を解決しやすくするためにデータを一定の形式に系統立てて格納する形式です。一般的な例としては、データ項目が一定の順序で配列している構造と、単なるデータの配列ではなく「キー」に対応する値を素早く参照できるハッシュテーブルが挙げられます。ソフトウェア・エンジニアの仕事に就いたら最善を尽くせるように、スキルを磨き維持することに焦点を当てましょう。  数学を勉強しましょう（任意）。数学はコンピューター・サイエンス専攻の必須科目の１つです。またアルゴリズムとデータ構造に関する知識の多くは数学に由来します。数学の深い知識が不可欠ではありませんが、持っていれば新しいアルゴリズムの分析や、ソフトウェア設計に必要な中核のスキルが強化されます。最先端の研究開発を専門とする企業に就職したいと考えている場合は、数学の知識は必須です。楽で割りのいい仕事に就きたいなら、高次元の数学にざっと目を通しておくだけで良いでしょう。 離散数学はソフトウェアの知識を習得できる数学のコースと同様に、特に役に立つ学習分野です。 教育システムはしばしば時代遅れの所があります。 教科書の改訂は、ソフトウェアの更新に追いついていないのが現状です。しかし、教育機関は学生が将来良い仕事に就くために不可欠な理論的概念や考え方を提供する場所なので、軽視できません。ただし報酬を得るには、理論を元にソフトウェアを作ることが肝要であり、ここが、学習が更に必要になる所以です。  「StackOverflow（スタック・オーバーフロー）」を参照しましょう。「StackOverflow」は、開発者向けに作られた質問とその回答から成るウェブサイトです。タグを利用して、テクノロジーや問題空間、向上させたいプログラム言語を特定することできます。他の人の回答を読むことで、エンジニアがどのように問題を解決するのかの見識が得られます。巧妙な解決方法（ソリューション）をブックマークすることで、自分自身の問題解決ツールキットを構築することができるでしょう。 コーディングの学習には練習サイトを利用しましょう。「CodeWars」や「CodinGame」などのサイトでは数多くの問題を提供していて、自分のスキルを試すのに役立つでしょう。 志を同じくするコミュニティーを見つけましょう。周りから常に良い刺激を受け、繋がりも深めることができ、スキルアップを目指すための学習方法なども教えてもらえるでしょう。交流会（ミートアップ）などは恰好のサイトでしょう。ソフトウェア・エンジニアを見つけて、彼らの仕事について詳しく知ることが出来ます。エンジニアリングのための一般的なミートアップが見つけ難い場合には、特定の言語またはテクノロジーに焦点を合てると良いでしょう。また、ソーシャル・メディア・サイトもチェックしましょう。 スキルアップには、持っている技術を活用することが最善の方法です。仕事であろうと個人的な趣味であろうと、実際にソフトウェアを設計し、コードを書くことで大きなメリットがあります。企業の多くは、学校の成績（グレードポイントアベレージ）や理論的知識よりも、実践的成果を重要視します。 自身が構築したソフトウェアで収益を得ようとは考えていないなら、インターネットで公開しましょう。ソフトウェアの完成度やコーディングのスキルを企業に評価してもらえる機会になります。また、フィードバックも得ることができ、更なるスキルアップに最適です。 ソフトウェア・エンジニアを目指す学生の中には、学校に通いながら企業でインターンとして働くケースが多く見られます。インターンは、将来の雇用者と密接な情報交換をしたり実地訓練を受けるのに最適な方法です。求人情報のウェブサイトやネットワークを通じてインターンシップの機会を探しましょう。 ソフトウェア・エンジニアリングは急成長の分野です。プログラマーとして仕事を開始してソフトウェア開発に取り組むチャンスを掴むこともできますが、すぐにソフトウェア開発の仕事に就ける可能性は十分にあります。学位取得前に仕事を見つけましょう。  既に社会で活躍している卒業生に仕事探しの手助けをしてもらう大学もあります。教授や所属する学部またはキャリオフィスの職員に相談してみましょう。 就職は大方、色々な人との情報交換やネットワーキングによって決まります。知り合いや友達などに仕事の機会を尋ねたり、ミートアップや会議、シンポジウムなどに参加してネットワークを広げましょう。 求人サイトを定期的に確認しましょう。職務経歴書や履歴書を用意して求人サイトに掲載してみましょう。あるいは、ネットワーキングに利用したり応募書類として使っても良いでしょう。 ソフトウェア業界は常に変化しています。最新の知識習得を心がけ、実践的なスキルも即使えるように常に磨いておけば、色々なキャリアの方向性が見えてくるでしょう。仕事を見つける上でのヒントをいくつか紹介しましょう。  業会団体に参加してネットワークを広げましょう。 長期的な計画がある場合には、修士号の取得を検討しましょう。修士号を必須条件とする仕事はほとんどありませんが、修士号があれば、業界のリーダーの下で、あるいは管理職として、または組み込みソフトウェア開発部門で働けるチャンスを大幅に向上させます。また、修士号を持っていると、給料の面でもかなり優遇されます。 ある特定の業界や地域によっては資格も役に立つでしょうが、他業界での自己アピールには「今一歩」かもしれません。資格取得を目指すのであれば、プログラムに登録する前にその専門分野のエンジニアに相談してみましょう。昔ながらの企業では資格や証明書を重視する所が多くありますが、新興企業や革新的な新しい企業などは、証明書を取ることを時間の無駄だと考えることがあります。ただし、常に例外があることも忘れないでおきましょう。証明書や資格は、国によってもまた見解が異なります。就職を考えている地域の業界の動向について、その地域のソフトウェア・エンジニアに相談して情報を得ると良いでしょう。
就職の見通しについて理解する　 プログラミングを習う　 自分の経験を引き出す　 学位取得のためにプログラムに登録する（任意）　 ネットワークを使って仕事に就く　 コンピューター・サイエンスまたは関連分野の学位を取得する　 プログラミングを開始する　 データ構造とアルゴリズムを学習する　 授業以外でも自主的に勉強する　 ソフトウェアを構築する　 インターンシップに挑戦する　 仕事を見つける　 キャリアの目標を考える　
https://www.wikihow.com/Become-a-Software-Engineer https://www.wikihow.com/Become-a-Software-Engineer
Switching to a Software Engineer Career Entering Computer Science as Your First Career