初投稿です。よろしくお願いします。
今現在、中学3年生でIT系の大学や、将来IT系の仕事につきたいと感じています。
少し以前Swiftを学習したことがあるのですが、IT系の仕事に就くためにはプログラミングのどの言語から学習すればいいのでしょうか。オススメなどありましたら教えていただきたいです。
プログラミングにチャレンジしたく1からがんばってみようと思うのでどなたかお答えいただけましたら幸いです。
少し、こちらで聞くのは場違いかもしれませんが経験豊富な方々の貴重な皆様の意見や考えをお聞きしたくこちらに記載させていただきました。
お手数をおかけして誠に申し訳ございませんが、よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/03 21:24
2021/01/03 22:44
2021/01/03 22:46
2021/01/04 00:23
2021/01/04 01:22
2021/01/04 01:55
2021/01/04 08:40 編集
2021/01/04 12:28 編集
2021/01/04 12:23
2021/01/04 12:26
2021/01/04 12:46
2021/01/05 03:09
2021/01/05 04:28 編集
2021/01/05 04:45
2021/01/05 04:46
回答5件
0
現在高校一年生の私の視点から質問者さんになんだか似ていると思い回答しようと思います。
自分が好きと思えることを見つける
学生ならば自由に使える時間が大人に比べるとたくさんあることと思います。IT系の仕事に就くためにはプログラミングのどの言語から学習すればいいのでしょうか。とありますが、どの言語でも道は違えどその言語を使用している会社には就職することができます。なので、仕事に就きたい!ということでしたらごく一部の例外を除くなんの言語でもいいと思います。
では、数ある中でなんの言語をすればいいの?という問題に戻ってきてしまうわけですが、自分の好きと思えるものを見つけるために、色々と試してみるといいと思います。IT系の仕事と言ってもたくさん種類があります。Swiftを学習したことがあると仰っていたのでiOSアプリ開発やゲーム開発, ウェブ開発があると思います。あなたの興味のあるものはなんですか?
私の場合では主にウェブ開発を行なっていますが、その中でもたくさんの種類というものが存在します。
好きなものを見つけると言っても片っ端からしてはいくら時間があっても足りません。例えば、こんなものを作ってみたい!必要な知識・使う言語は何があるだろうか!と考え、その中の選択肢から選択していけばいいと思います。
私の場合は、身近にある問題を解決したいため学習しているという面もあります。
現状は〜であるため、〜という問題が存在する。〜を解決するには〜のようなもの・サービスがあったら問題解決することができるのではないか!じゃあ、そのサービスはどうやって実現させる?となった時に技術選定・言語選定に移ります。
時期的には遅めな予感がしますが、)高校進学に高専などを考えてみるといいかもしれないです。私の場合は普通科なのですが、似たようなプログラミングに興味を持っている生徒は周りになかなかいないです。そういった意味では、興味を持った人たちが集まる高専もいい刺激になるかと思います。普通科でも似たような仲間を探してみるのはどうでしょうか?もしかすると同じ悩みを抱えて実行できてない仲間がいるかもしれませんん。私の場合は、自分でプログラミング同好会という部活を作り、仲間を集めました。学校外でも今の時代では仲間を探すことも不可能ではないと思います。
頑張ってください。
投稿2021/01/03 17:34
総合スコア2076
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/03 22:58
2021/01/04 01:34
2021/01/04 01:56
2021/01/04 03:35
2021/01/04 08:31
0
... プログラミングのどの言語から学習すれば ...
5年後にどんな言語が主流になっているかはわかりません。
時流の影響をうけやすい "言語" ではなく、"コンピュータ・サイエンス" の学習に的を絞るとよいです。
"コンピュータ・サイエンス" って何? とおもうかもしれません。
- なぜ、プログラミングではなく「コンピュータサイエンス」なのか
https://note.com/shinya_recursion/n/n180db20428a0
中学、高校の授業で コンピュータ・サイエンスに関連が深いのは、もちろん数学です。
組み合わせ、確率、行列、多次元関数、グラフ など多くの項目が コンピュータ・サイエンスに直接 関係してきます。
数学の問題を紙の上だけでなく、コンピュータを使って解くなんてことをしてみるのも良いかもしれません。
(組合わの数をもとめるだけでなく、実際にすべての組み合わせをプログラムで列挙してみるとか
2次方程式の解をプログラミングでもとめてみるとか...)
コンピュータ・サイエンス関連の書籍を図書館でさがしたり、司書さんにきいたりすると良いかもしれません。
いろいろ調べ物をするようになると、日本語だけでは不十分です。
英語の本や wab ページを読めるようになることも重要です。最近は中国語も重要な情報源になることもあります。
(google 翻訳を使えば十分とおもうかもしれません。でも直接 英語を読めたほうが有利です。
機械翻訳では間違いがあることがあるから)
そして、一番大事なのは 国語 の勉強です。
脳をドライブしている自分の母国語を大事にしておかないと、脳の効率が落ちます。
でも、上に述べたような事とは無関係に、なにか作りたいもの/興味があるものがあれば、
周りをきにせず、その事を徹底的に攻めていくのが一番な気もします。
- 宇宙に憧れた少年が世界一のプラネタリウムを作るまで
https://www.bizcompass.jp/interview/140-1.html
追記
理系だけの勉強でなく、美術・音楽なども重要です。
美術は、Web ページのデザイン・レイアウト作業で役立ちます。
- ジョブズにカリグラフィーを教え、コンピュータ業界を変えた伝説の神父
投稿2021/01/04 01:52
編集2021/01/04 23:49総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/04 12:35
0
ベストアンサー
Haskell やろうぜ!Haskell!!
また怒られそうなので真面目なお話
ぜひまた Swift に戻ってみましょう。あの時わからなかった新しい発見があるはずです。その発見は確実にあなたのプログラミング能力を向上させてくれます。じっくり取り組んで「わからない」をなくす訓練をしてみましょう。
もちろん、一つの言語だけじゃ面白くないかもしれません。そんなときは他の言語にチャレンジしてみるのもありです。ただし自分が面白そうだと思ったものにしましょう。「将来役に立ちそうだから」なんて理由で人は学ぶことを続けられはしません。強烈な興味だけが学習意欲を引っ張り続けるのです。面白いものをやり続けましょう!
また、プログラミング言語の書き方だけではなく、プログラムの動く仕組みそのものに目を向けてみましょう。どうやってプログラムが動くのか、プログラムが動くコンピューターの仕組みってどうなっているのか。そういったことを知っていると大学に入った時他の学生と差をつけることができるでしょう(もちろん学校の勉強も出来た上でですよ)。仕組みを知っていて道具を使うのと、そうではないのでは使い方に雲泥の差がでます。ぜひ物事の仕組みを理解しましょう。
ついでにですが、プログラミング言語について理解するには「プログラミング言語そのもの」を実装してみると良いかもしれません。すごく難しそうに聞こえますが、すごく簡単な言語だったら自分の手で実装できます。そうすると特定のプログラミング言語によらない、プログラミング言語の知識がつくことになりますのでわたしとしては是非オススメしたい方法です。
「IT 系の会社」という幻想
IT 系の会社と申されましたが、将来は全てが IT 系の会社になっていくのではないかと考えています。どういうことかというと今までは IT ができる会社がそうでない会社のシステムを請け負って作ることが多かったのですが、プログラミングのノウハウが標準化され、それが日本にも広がるにつれ「普通の企業が IT を活かしてサービスを作る」ということも多くなってきました。またスタートアップという会社のあり方もこの動きに拍車をかけていますし、政府はスタートアップに対して支援も行っています。
こういった流れの中で「IT がわかること」はだんだんと差別化にならなくなってきています。もはや「IT はわかって当然」になりつつあるのです。そうした中 IT 系の大学、IT を売りにした企業に進むというのは人一倍コンピューターに詳しくないといけません。一つプログラミング言語を書けただけでは全く話にならないでしょう。数学もできる必要があります。すごくできる必要があります。
もう一つの道はコンピューターにそこそこ(プログラミング言語が 2, 3 書ける程度)詳しくなっておいて、その他になにか特別な知識を持つことです。例えば会計の知識を持てばプログラミングと合わせて会計ソフトの企業に就職したり、もしくは自分で起業するなんていうこともできるでしょう。農業に詳しかったら農家の人を助けるソフトウェアが書けるかもしれません。このように IT のやり方は「IT に詳しくなる」だけではないのです。
それでもコンピューターに詳しくなるために
とにかくコンピューターとプログラミングを好きになりましょう!いや、もうすでに虜のはずです。すぐにコードを書いて、試していじってください。今日日コンピューターはすぐ壊れません。壊れたら直すのもコンピューターの仕組みを知るよい機会です。きっとそのうち寝ても醒めてもコンピューターのことしか考えられなくなっているはずです。
具体的な方法
そうは言っても具体的な方法はやっぱり知りたいですよね。特に追加で質問をもらった「コンピューターの仕組み」とか。どうやって勉強したか書いてみます。
本
本はネットの情報と違ってそう簡単に修正できない分、まともな内容が書いてあることが多いです(そうでないことも多いが……)。おすすめの本をいくつか挙げておきます。
『CODE コードから見たコンピュータのからくり』Charles Petzold 著, 永山 操 訳, 日経BPソフトプレス
コンピューターはなぜ 0 と 1 を使うのか、0 と 1 を使ってどう整数や文字を表したりその計算を行うのか、その仕組みはどうやって実現しているのか。難しそうに見える概念を簡単な部分に分けてていねいに解説し、「コンピューター」という概念を詳しく説明してくれます。
『ネットワークはなぜつながるのか』戸根 勤 著, 日経BP
ネットワークの仕組みをブラウザに URL に打ち込んで サーバに届くまでをテーマに、上の層から下の層まで一通り巡って解説していきます。普段意識せずに使っているインターネットがどういう考え方でレイヤー化されているか、どのようにして通信を行っているかが技術自体にそれほど深入りせずにわかるようになっています。現代のプログラミングにはネットワークの知識も必須だと思われますので読んでおいて損はないでしょう。
『C言語によるはじめてのアルゴリズム入門』河西 朝雄 著, 技術評論社
昨今競技プログラミングが注目されつつありますが、そのアルゴリズム(算法)を C 言語で実装しましょうというものです。リストなどのデータ構造もポインタを使って自分の手で実装しなければいけません。アルゴリズムやデータ構造なんて便利なライブラリや実行環境に任せればいいじゃないか、と思うかもしれませんが、中身を知って使うのとそうでないのとではパフォーマンスに差が出たり、違った結果が出たりしてしまいます。また、ライブラリとちょっと違うことをしたくなって自分で実装しなければいけなくなった時困ることになります。
この本では基本的なアルゴリズムを C 言語で実装する方法が書いてあります。グラフィックなど多少毛色の変わったものもありますが、良い息抜きになるでしょう。他の便利な言語で実装するのも良いのですが、プリミティブな C 言語で実装することによりアルゴリズムとコンピュータを結びつける実力がつくと思います。
『C言語ポインタ完全制覇』前橋 和弥 著, 技術評論社
メモリを扱うプログラミングをする上で避けて通れない概念が「ポインタ」です。その中でも C 言語のポインタを徹底解説している本が本書になります。「C 言語に配列は存在しない」とのっけからぶち上げ困惑させますが、その理由をていねいに解説し、ポインタの型宣言、ポインタのポインタ、メモリ上の配置などコアな内容に触れていきます。内容は多少難しいですが、メモリの扱いを把握して置かなければプログラムの挙動を最終的に把握することは難しく、避けては通れない道であると考えます。ポインタとメモリについて理解を深め、ソフトウェアエンジニアとして差をつけましょう。
ネット
一番確実な情報源はソースコードです。ぜひ使っているライブラリのソースコードを読みに行きましょう。最初は読むのがとてもつらいかもしれませんが、エラーがでた時きちんとライブラリを追って読みに行く癖をつけるとプログラムの仕組みがわかるようになってきます。現代はソースコードが GitHub ですぐ手に入り、しかも全文検索出来たりする時代です。活用していきましょう。
次に確実な情報源はドキュメントです。わたしもめんどくさがってそのへんの記事読んで済ますことが多いですが、それで痛い目をみることがよくあります。ドキュメントを読みに行きましょう。英語を読むのが大変かもしれませんが、大学受験の良い勉強だと思えばしめたものです。
それ以外の情報源はあなたが判断するしかありません。つまり実力が無いと何が正しいのかわからないのです。オンラインスクールも下手なことは出来ないので間違ったことは教えないとは思いますが、あまり突っ込んだところまでは教えてくれない可能性があります(この回答もそうだよ)。
壊してもよいコンピューターを手に入れる
今日日 5 万円もあればそれなりのノート PCが中古で買えます。これに Linux を入れて遊びましょう。自分で Linux を入れてみるのはコンピューターの仕組みを垣間見る良い勉強になります。また、壊しても良い環境を手に入れると色々試すのに臆することがなくなります。ガンガン壊しそうなコードを書いて試すことが出来ます。その過程で得るものは大きいでしょう。
C 言語をやる
現状コンピューターの仕組みを知る上で避けて通れないのが C 言語です。世の中のほぼすべての OS がこれで書かれているからです。そうでなくともメモリを直接扱うなどの操作は C 言語がやりやすい(安全とは言っていない)でしょう。コンピューターのデータはほぼメモリを通ってやり取りされますから、メモリの操作の仕方や仕組みを学ぶということは他のプログラミング言語でも通用するコンピューターの知識を学ぶということでもあります。
投稿2021/01/03 17:07
編集2021/01/03 18:09総合スコア2853
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/03 17:14
2021/01/04 01:29
0
プログラミングは道具、使い道の能力が重要
IT関連の仕事はいろいろとありますが、プログラミング能力だけでできる仕事はほとんどありません。走る能力が高くても、それだけで生きていけるのはオリンピック出場クラスの短距離選手やマラソン選手であるのと同じです。
BeginnerTaroさんがITの世界でのオリンピックレベルを目指すのであれば別ですが、そうでなければプログラミングを使う目的となる仕事の能力を高めることを心がけてください。
スパコンであれば流体力学とか量子力学などの対象分野、経理システムであれば会計法や仕分原則、生産管理システムであれば物流・在庫、ゲームであれば他の人を楽しませる能力など、仕事の種類によってさまざまです。
コンピュータへの興味で勉強しよう
でも、中学3年生ではそこまで考えられませんね。だったら今はどんな仕事についても役立つような能力をつけましょう。そのためにコンピュータへの興味は役に立ちます。
数学が苦手だったとしても、プログラミングのためなら頑張って覚えることができます。
なぜ 1+2×3は7になるんだろう。9だっていいじゃないか。大丈夫です。計算の順序なんて約束ごとに過ぎません。右側通行と同じです。Smalltalkというプログラミング言語ではちゃんと9になります。
英語が苦手だったとしても、動かしたときのエラーメッセージを読むためなら辞書を使って調べる気になります。
プログラミング言語は複数覚えよう
プログラミング言語は複数覚えるべきですが、どういう手順で覚えるのが良いのか人によって違うので自分のタイプを見極めてください。
自然言語(日本語や英語)でもプログラミング言語でも、使う言語は考える内容に影響を与えます。同じ人が考えても日本語で考えるときと英語で考えるときは考え方が変わります。C言語で考えるとき、Prologで考えるとき、SQLで考えるときで組み立てるロジックが変わります。したがってかなり違う言語を複数知っていることで考え方の幅ができ、いろいろな発想をすることができます。一方で、バイリンガルの人にたまに見られるそうですが、どの言語の能力も十分に育たないひともいるそうです。
これまで見てきた人の中には、複数のコンピュータ言語を使いこなして自在に操る人もいましたし、最初に覚えた言語にとらわれて他の言語を使いこなせない人もいました。またいろいろな言語を知っているというのだけれども、どれもよくわかっていないような人もいました。
まず、一つのプログラミング言語を徹底的にやるか、それとも複数の言語を対比しながら覚えていくかは、その人のタイプによるような気がします。
やはり基礎が大事
どのプログラミング言語をやるにしても基礎は数学です。最近は中学校で集合論を教えなくなったようですが、プログラミングを志すのであれば集合論や論理学は勉強しておいてください。
また、ハードウェアの機能を理解しておくのも大事です。CPUについて一通りのことを読み、アセンブラ勉強してみてください。良くできるプログラマは多かれ少なかれ命令を理解していました。自分で書かなくてもCコンパイラの出すアセンブリソースを見るだけでも勉強になります。
そしてOSについても、一通りのことは理解しておいたほうが良いと思います。必ずしもシステム管理のプロになる必要はありませんが、仮想空間、プロセス、スレッドなどの理解は必要です(しとても面白いです)。
投稿2021/01/04 08:25
総合スコア24670
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/04 12:30
0
結論から言えば「Swift をやったことがあれば、とりあえずそれを続ければ良い」です。
でも、みなさん口を揃えて言われているように、「数学力・読解力」は重要です。
Androidのアプリを作りたい、あるいは Arduino で組み込みプログラミングをやりたいという感じで、そもそも Swift では難しいという話なら別ですが、そういう理由がなければ現時点で乗り換える理由は少ないと思います。
もし、既に中学生として備えるべき数学力・読解力があるのであれば、Swift を使って現実に直面している問題に挑戦するのが良いと思います。
どんな言語であっても、使わなければ意味がありません。
同じ理屈で、数学も自分の理解として応用できなければ意味がありません。
そういう意味では、例えば習っている内容を Swift で解けるかプログラミングしてることは、プログラミングに対する意識に加え、数学などに対する意識も向上し相乗効果が期待できるので、なおさら良いのではないでしょうか。
以下はその結論に至った背景(というか下書き)です。
興味があれば読んでみてください。
既に解決済みですし、katoyさんのご回答や zuishin さんらのコメントと大変似た回答になってしまいますが... Swift の話題を少しだけ。
数年後、どの分野でどの言語が主流になっているかは誰も想定できないし、これは誰もが言及していることです。
Swift というか、現状 iOS アプリ開発の主流となっている UIKIt/Swift の開発も、SwiftUI/Swift が主流となる日はいつかやってくる可能性があります。
しかし、その日がいつなのか誰も予測できませんし、そもそも SwiftUI が本当に成功するのかも予測できません。
SwiftUIが登場した一昨年はすぐにでも置き換わるという話を耳にしましたが、年末のオンラインセミナー(Swift座談会)に登壇され第一線で活躍されている方は「3-4年はかかるかもしれない」とも話していました。
こういう状況ですから、どの言語で始めたとしても、いつ廃れるかはわかりません。
なので、まずは開発言語に依らない能力をしっかりと身につけておくべきかと思います。
それは、中学・高校数学と日本語の力を付けること。
これに尽きると思います。
数学力・読解力がなければどんな言語を使っても現実の問題をコードに落とし込むことはできません。
数学力・読解力がなければ Swift から他の言語に移ってもいずれ同じ壁に突き当たるだけです。
逆に言えば、いま Swift を続けたとしても、数学力・読解力があれば違う言語に転向しなければならない日が来ても根本的な問題は少ないだろう、ということです。
国語と数学だと(いわゆる)文系理系両方じゃん、と思われるかもしれませんが、「物事を正しく理解し、筋道がたった解決方法を考え、実際に論理的な文字に落とし込む」という点では理系も文系も関係ありません。
たとえば、中学校一年生で習う文字式だと、つぎのような問題があります。
”家からxkm離れたジムまで時速6kmで歩き、ジムについてすぐにykm離れた駅まで時速10kmで走ったら、1時間かかった。”
(出典:【中1数学】「文字と式」文章で表された数量の関係を文字式で表す問題を解説!
ネットから拾った文章題ですが、中学校の教科書にも同じような内容で載ってますし、市販されている「くもんの問題集」にも載っているような典型的な文章題です。
まずは、このような文章題を論理立てて確実に解けるようにすること。
そのためには、何を解決するように指示されているのか、的確に理解できること。
これが一番重要です。
これができたら、次は Swift で書いてみることになります。
式は一つしかないので x
か y
のいずれかに具体的な値を入れる必要がありますが、決まればそれほど難しい話ではないと思います。
現状、巷で発刊されている Swift というか、iPhone アプリを開発しようというタイトルの書籍は GUI 操作を中心として執筆されているものが多いのですが、実際は上記のような問題を解くような、地道な作業が多く発生します。
たとえば、上記の文章題を解くようなアプリを作ろうとした場合、ボタン(UIButton
)やラベル(UILabel
)、あるいは x
あるいは y
に相当する値を取得するフィールド(UITextField
)をどのように配置し、どのようにしてデータを取得し、あるいは表示すれば良いのかは巷の書籍である程度理解することはできます。
しかし、それは表面的な話です。
(ユーザインタフェースは重要です。デザインは優先すべき課題ですが、それはあくまでも「正しいデータ」をいかに正確に利用者に伝えるべきか、という話なので、ここでは一旦おいておきます)。
ユーザ(利用者)が入力した値などを使って実際に計算させる作業が重要です。
ユーザが入力した値を正しく計算し、それを出力できないのであれば、アプリの意味がありません。
もちろん、巷には「アルゴリズム集」という本はありますし、具体的にコード化されたものや図解されたものもあるのでそれを見れば済む話ですが、理解し応用するためには、やり数学力・読解力が必要です。
全てを暗記する必要はないと思いますが、何らかの問題に突き当たった時、「この問題ならあの方法で解ける。あの方法はここを見ればわかる」という程度は理解しておく必要があります。
そのためにも、ぜひ基礎学力をおろそかにせず、着実につけておくようにしてみてください。
質問者さんが「競技プログラミング」というのをご存知か分かりませんが、たとえば競技プログラミングでメジャーなものの一つである AtCoder で開催された直近コンテストの以下の問題
あたりは、中学生レベルの学力でも解ける問題だと思います。
こういう問題をコツコツと解いてゆくのが一番良いと思っています。
リンク先を見てもらうと分かりますが、既知の2点を通る直線の傾きが -1
以上 1
以下のもの組み合わせの総数を出力するような問題です。
直線の傾きを求める問題ですので、中学生で理解できる内容だと思います。
まずは、設問を読み、紙と鉛筆を使って問題を解くところからやってみてください。
できるようであれば、実際にコードにしてみるといいと思います。
わからなければ、過去問であれば参加者が提出したコードを見ることができるので、それを参考にすれば良いかと思います。
ただ、現実問題として Swift で競技プログラミングに参加しようとすると、敷居が高いのも現実です。
Swift の場合、自動的に与えられる複数行の入力をどのようにして取り込むのかというあたりから戸惑ってしまうと思います(readLine()
を使えば良いのですが、巷で流通している本で解説してあるのをほとんど見たことはありません)。
そういう意味では、
の Swift 問題セットあたりが参考になるかと思います。
こちらは、自動的に与えられる値(標準入力から与えられる値)をどのようにして取り込むのか、という基礎的な問題とその解説も多少はありますので、参考になるのではないでしょうか。
Paiza あたりだと、入力された文字列を空白で区切り分解して配列に入れて操作するような問題ばかりなので、単純に見えるし見栄えもしないかもしれませんが、実はその単純な作業が一番重要なのです。
teratail の過去の質問を見てみるとよく分かりますが、実は開発言語を問わず、この基礎的なレベルで行き詰まっている人は相当います。
あと、「IT系の大学に入る」ことを目標にするのは危険だと思います。
いわゆる「IT技術」は手段です。
もう少し具体的に「このような問題を解決したい」ということを考えてもいいとおもいます。
中三なら、受験まではまだ十分に時間もありますので、ご自身が将来なにを解決したいのか考えてみると良いと思います。
投稿2021/01/05 02:38
総合スコア5086
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。