コンピューターサイエンスと留学、C++

アメリカ大学(コンピューターサイエンス専攻)に在学中の筆者がC++のサンプルプログラム、コンピューターサイエンス留学についての情報を発信しています!

アメリカ・理系の大学院留学(コンピューターサイエンス )

f:id:beginner4869:20190519030525j:plain

今回はアメリカの大学院に理系専攻で留学を検討されている方を対象に、アメリカ大学院の修士課程の特徴を書いていきたいと思います。

アメリカの修士課程の種類(master of science, master of engineering)

アメリカの修士課程では大学にもよりますが最近では2種類の修士の学位があることが増えてきています。一つ目は古くからあるmaster of scienceという名前の学位です。これは日本の大学院の修士課程に似ています。もう一つはmaster of engineeringという名前の学位です。

Master of science

master of scienceの学位では、大学院レベルのコースワーク(授業) + 修士論文を書くことが求められています。それに加えて教授が行っている研究を手伝うのも一般的です。この学位の1番の魅力としては大学にもよりますが筆者が在籍している州立大学では毎月1500~2000ドル(大体20万円前後)の給料を貰いながら修士課程を終わらせることができることです。この給料とは別に授業料も全額が免除されるます。一般的にこの学位を終わらせるまでには2年〜3年ほどがかかります。

Master of engineering

一方でmaster of engineeringの学位は、大学院レベルのコースワークを終わらせるのみで終了出来ます。この学位の従来の修士課程との違いとしては、研究も論文も書く必要がなく、授業を取るのみで1年ほどで終えられるという点です。master of enginneringの学位では奨学金をもらう対象外となるため、授業料は全て自費で賄わなくてはなりません。

どちらの修士の学位を取るのがいいのか

これは目的にもよります。研究をすることや将来Phd(博士課程)に進むことに興味がないという人はコースワークのみで1年で終えられるmaster of engineeringも選択肢としてはありなのかな思います。逆に将来Phdに進みたいという人や大学で研究をすることに興味がある人はmater of scienceの一択だと思います。

また、就職を日本でするのか、アメリカなどの北米で希望しているのかによっても変わってきます。卒業後に日本の企業で就職を希望している人は殆どの日本の企業はこの二つの学位の違いもわからず、ソフトウェアエンジニアとして働く人にそもそも修士の学位を求めていないことが多いため、どちらの修士の学位をとっても問題はありません。一方で卒業後にアメリカで就職を希望している方はmaster of scienceの一択だと思います。理由としてはアメリカの企業では修士、博士と学位が上がれば上がるほど就職がしやすくなるのが一般的です。給料も最初の方では学位のレベルによって変わるため、高い学位を取っておいて損はないです。

アメリカでコンピューターサイエンス 専攻が就職をする難易度について

アメリカで現在コンピューターサイエンス 専攻などSTEM専攻の需要が上昇しているとは言われていますが、留学生が学士卒で就職をしようとしたら、割合としては4割ほどの学生しか卒業後に現地で就職をすることができません。筆者の友人でもmaster of engineeringを卒業してもワーキングビザの関係で就職先が見つからずに母国に帰って仕事を始める人の割合は多いです。一方でmaster of scienceの学位を取得している人は殆ど全員がビザの問題もクリアして、企業からoffer letterを貰っている人が多いです修士の学位を持っているとOPT期間中にH1Bビザに応募する際に優遇されるということに加えて、大学院レベルで研究をしていた経験は評価されることが多いようです。

アメリカ大学・CS専攻の1、2年次の授業(1)

f:id:beginner4869:20190301021633j:plain

今回はアメリカの大学の学生が1、2年次に履修することが多い授業の内容を紹介したいと思います。今回はCS専攻の学部生が履修する授業の内容についてになります。修士以上の授業内容については次回以降を是非ご覧ください。

続きを読む

コンピューターサイエンス 専攻の学生がアメリカの大学で選べる専門分野2

今回はコンピューターサイエンス 専攻の学生がアメリカの大学で学べる専門分野を紹介する記事の第2回目です。1回目の内容で紹介ができなかった専門分野の(5)のコンピューターサイエンス の専門分野セキュリティについて紹介したいと思います。

f:id:beginner4869:20181208151911j:plain

続きを読む

Python・2つの物体の間の重力を計算するプログラム

今回はPythonで2つの物体の間の重力を計算する簡単なコードを紹介したいと思います。最近Pythonを始めたという初心者の方に見てもらえると幸いです。
f:id:beginner4869:20180902205044j:plain

Gが万有引力定数である場合は、距離dだけ離れた質量m1およびm2を有する2つの物体間の重力引力は、以下の式によって求めることが可能です。

式に表すとそれぞれ以下のようになります。
f:id:beginner4869:20181209123234p:plain
f:id:beginner4869:20181209123224p:plain

あとはこの式をPythonのコードで実行していきます。
この関数はオブジェクト1、オブジェクト2、オブジェクト間の距離の入力をユーザーから受け取り、うえの式に当てはめて計算した結果を返します。

def get_gravitational_force(mass1, mass2, dist):
    force = 6.673 * pow(10,-8) * mass1 * mass2 / (dist * dist)
    return force

ここでは、上の関数に渡す入力をユーザーに聞いています。関数としては作っていませんがこの部分を関数した方がわかりやすいです。

mass1 = float(input("Mass of object1: "))
mass2 = float(input("Mass of object2: "))
dist = float(input("Distance between two objects: "))

最後にmain関数から1回目のの計算の結果を返すために関数を呼び出してreturnの値をプリントしています。choice以降の2行目は基本的に2回目以降のループの為のコードです。ユーザーがnを入力するまで、繰り返し計算が入力を聞いて、計算をし続けます。

#Function call
def main():
    print(get_gravitational_force(mass1, mass2, dist))
    choice = str(input("Do you want to perform another caluclation (y or n)? "))

    while(choice != "n"):
        mass1_1 = float(input("Mass of object1: "))
        mass2_2 = float(input("Mass of object2: "))
        dist2 = float(input("Distance between two objects: "))
        print(get_gravitational_force(mass1_1, mass2_2, dist2))
        choice = str(input("Do you want to perform another caluclation (y or n)? "))
main()

コンピューターサイエンス 専攻の学生がアメリカの大学で選べる専門分野

今回はアメリカの大学でコンピューターサイエンス 専攻の人たちが、アメリカの大学で選べるコンピューターサイエンス の専門分野に関する記事です。記事の内容は筆者の在学している大学の内容ですが、アメリカの殆どの大学では同じ種類のオプションもしくは今回紹介する内容以上の選択肢があります。
f:id:beginner4869:20181208151911j:plain

そもそもコンピューターサイエンス って何?

コンピューターサイエンス (computer science)は日本語では計算機科学といい、情報工学の一分野という位置付けになります。英語圏ではコンピューターサイエンス(computer science)を省略してCS(シーエス)と言われることが一般的です。日本の大学の学部の名前でコンピューターサイエンスという名称を使っている大学は殆どありませんが、日本の大学ではコンピューターサイエンスは工学部情報学科や工学部情報システム学科などの名称が多いです。

コンピューターサイエンス留学についてより詳しく知りたいという方はこちらの記事もあわせてご覧ください。
programming-computer-chinese.hatenablog.com

コンピューターサイエンス で学べる分野

コンピューターサイエンス で学べる分野の内容としては、数多くあります。筆者の在学している大学の学部課程では下記のような専門分野をコンピューターサイエンス の学位の中から選ぶことができます。いくつか翻訳がわからなかったので英語のままですみません。

  • (1) コンピューターシステム(Computer systems)
  • (3) Simulation and game programming
  • (4) Human computer interaction(ヒューマン・コンピュータ・インタラクション)
  • (7) Data science(データサイエンス)
  • (8) Robot Intelligence(ロボットインテリジェンス)
  • (9) Web and mobile development

コンピューターシステム専攻で学べる内容

このオプションではコンピューターダードウェアについて他のオプションよりも詳しく学ぶことができます。

生命情報科学(Bioinformatics)

一般的にはBiology(生物学)とコンピューターサイエンスの繋がりをイメージしたことがない人が殆どだと思いますが、近年では、コンピューターサイエンスが他の分野においても大量のデータへのアクセスを可能にすることで大きな進歩をもたらしています。

今日では、コンピューターサイエンスが生物情報科学の分野での生物情報を分析し、統計をとる為のスピードをあげるのに貢献しています。それに加えて、2003年に完成したヒトゲノム計画(ヒトのゲノムの全塩基配列を解析するプロジェクト)では、コンピューターが大量の遺伝的データを解析する過程なしには達成することは不可能だったとも言われています。

このように生物科学とコンピュータサイエンスの融合した分野はbioinformatics(バイオインフォマティクス)またはcomputational biology(計算生物学)と呼ばれています。

生命情報科学を専門にする学生が履修することが可能な授業(英語)

CS 434 (Machine Learning & Data Mining)
CS 440 (Database Management Systems)
CS 453 (Scientific Visualization) or CS 458 (Introduction to Information Visualization)
BI 212 and BI 213 (Principles of Biology)

この他に選択可能な授業としては、生物学の授業などがあります。

Simulation and game programming

この分野では、おもに将来ゲームを開発するエンジニアとして仕事がしたいという方を対象にしています。この分野ではコンピュータグラフィックス、数学、物理学、ニューメデイアなど複数の分野への理解が求められることが一般的です。

Human computer interaction(ヒューマン・コンピュータ・インタラクション)

この分野ではおもに人間とコンピューターの関わりについての内容を学べます。人間がどのようにコンピュータの使い勝手を高めるための技法を開発し、その運用法を考えるための研究を行う分野です。この分野ではコンピュータサイエンスのみならず、心理学、社会学など多方面の分野が交錯した分野の内容を取り扱います。

この分野を選択した学生は、将来User Experience(UX)やインタラクションデザインといった分野に従事することが多いです。主な仕事内容としてはグラフィックユーザーインターフェースのデザイン、開発。フロントエンドに関わる内容などを扱います。

それに加えて、Webデザイナーとして働きたい人もこの分野を専攻する人は多いです。

この分野を選択した学生がおもに履修する授業(英語)

CS 419 (HCI Research Methods) or CS 468 (Inclusive Design)
CS 453 (Scientific Visualization) or CS 458 (Introduction to Information Visualization)
CS 464 (Open Source Software)
CS 496 (Mobile & Cloud Software Development - no longer offered on campus)
CS 492 (Mobile Software Development)
PSY 340 (Cognition)

この他に選択可能な分野として下記のような心理学の授業を履修することなども可能です。

PSY 350 (Human Lifespan Development)
PSY 360 (Social Psychology)
PSY 370 (Personality)
PSY 426 (Psychology of Gender)
PSY 434 (Brain and Behavior Methods)
PSY 440 (Cognition Research)
PSY 442 (Perception)
PSY 444 (Learning and Memory)
PSY 454 (Cognitive Development)
PSY 456 (Social Development)
PSY 464 (Social Cognition)
PSY 494 (Engineering Psychology)

今回は長くなってしまったので、(5)から(9)についてはつぎの記事で紹介したいと思います。

C言語・二次元動的配列を作成しランダムな数字を代入するプログラム

f:id:beginner4869:20180902094721j:plain
今回はC言語で二次元動的配列を作成し、配列にランダムな数字を代入するプログラムです。

続きを読む

Python・四則演算・二進数計算をするプログラム(初心者向け)

f:id:beginner4869:20180831141550j:plain
今回はpythonで四則演算ができる計算機のプログラムを紹介したいと思います。四則演算だけでは普通のプログラムすぎるので今回はそれに加えて10進数から2進数へ変換する機能も追加した計算機にしたいと思います。ユーザーに四則演算、もしくは二進数への変換をする計算機のどちらを使いたいかを最初に尋ねます。それぞれの細かい部分までを全て関数にしています。

続きを読む

Python 初心者向け・入力された数字から最大値を見つけるプログラム

f:id:beginner4869:20180902205044j:plain
今回はpythonのプログラムで入力された数字から最大値を見つけるプログラムを紹介したいと思います。
構成としては

  1. ユーザーから入力を受け取り
  2. 入力された数字を比べ
  3. 表示するパート

という構成になります。

続きを読む