質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.89%

何を学ぶべきか

解決済

回答 7

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,490
退会済みユーザー

退会済みユーザー

何を学ぶべきか迷っています。

表題の通りプログラミングの勉強方法で迷っています。

私の簡単な経歴を紹介します。

25歳
文系大学卒
大学四年の時にR言語に触れてそれを機に、プログラマーを目指す。
4年生の間数ヶ月間独学で C と JAVA を学ぶ。(基礎ですが)
コンピュータサイエンスの基礎の基礎の基礎も本を読んで勉強しました。
新卒でシステム開発会社に就職
COBOLの研修を3日間受けさせてもらう。(簡単でした。)
キャリアに不安を感じ転職のためにwebの勉強を始める。(新卒1年目)
HTML5とCSS3とJavascriptを独学で勉強。
webサイト制作会社に就職
HTML5とCSS3とJavascriptの基礎はできるようになった。
本格的にプログラムを組みたくなったため、システム開発会社に転職。
現在,JSを使用しています。(転職して2ヶ月め)

以上を踏まえて

私としては、ラズパイを始めるのがいいのかな〜と思っています。
ハードウェアやC、Linuxを初めて、基礎を固めるのがいいかなと・・
ただ、JSも満足にできていないし、GOやScalaとかも人気だしな〜と。

今後どうなりたいかというのは特にありません。
ただただ、何でもできるプロフェッショナルになりたいという漠然とした考えしか無いです。

以上、よろしくお願いします。

追記

質問が悪く申し訳ありません。

「この言語は求人が少ないし将来性も低いからしないほうがいい」ではなく、
「優れたプログラマはこういった経験をしているから、こういったことができる。だからこれを勉強したほうがいい。」または、
「私はこういう勉強をしたから、今役立ってる。今そのレベルなら次はこれを勉強するといい。」といった感じのことを教えていただきたい。といった意味の質問でした。

何かやっておいてよかったもの等あればぜひ教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • toutou

    2017/05/10 16:09

    「自分は今これだけのことができるんだけどほかにおすすめはないですか?やっててよかった実体験などがあれば教えて欲しいです」とかにしとけばよかったですねw

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/05/10 16:21 編集

    yohhoyさん 何度もありがとうございました。荒唐無稽な質問で呆れさせてしまったみたいですね。また何かありましたら回答お願いします。

    toutouさん
    アドバイスありがとうございます。質問が悪かったですね。追記で伝わるかと思ったのですが、伝えるって難しい。

    キャンセル

  • yohhoy

    2017/05/10 23:17 編集

    (はてなダイアリーにコメントいただきましたが、Teratailの回答なのでこちらに)Q:これは皮肉ですか?/A:少なくとも皮肉意図ではありません。文字通り、あなたの質問とコメント内容への返答にすぎません。私は純粋にあなたの考え方や質問意図を理解できませんでした。

    キャンセル

回答 7

checkベストアンサー

+5

こんにちは。

ハードウェアやC、Linuxを初めて、基礎を固めるのがいいかなと・・ 

「コンピュータの仕組みを把握すれば、様々なプログラミングをする際に応用が効き、より優れたプログラムを開発できるのではないか?」とのお考えでは?

「より優れたプログラム」は2つの方向性があると思います。

①よりユーザの作業を、省力化したり信頼性を上げたり簡単化したりするプログラム
②より省資源でより高速に動作するプログラム

日本では(残念ながら)①の方が需要は多く給料も多いようですが、②も重要でこれを置いてけぼりにすると悲惨なことになります。両者のバランスを取ることが大事です。

①についてはIT企業に属している限り逃れられないと思います。特に優秀な人にはそのような仕事の機会が嫌でも回ってきます。
②については自分から求めて学習しないと置いてけぼりです。ここはお金になりにくいせいと思いますが、この分野の教育に熱心な会社は多くはないように感じます。

そして、コンピュータの仕組みを把握していると②にたいへん有用です。特にマルチ・スレッドや排他制御の経験があると、性能と開発工数のバランスの取れたプログラムを設計できるようになります。(この辺を知らないと、コールバック地獄か、再現性のないバグに悩まされることが格段に増えます。)

ここを学習するには、非常に単純なコンピュータ(マイコンと呼ばれるようなもの)で、アセンブラ、もしくは、C言語で低レベルな割り込み駆動プログラムの開発経験があると強いです。特に割り込みが頻発するようなものならば、排他制御不具合が再現しやすいので効果的に学習できます。
更に、ごく簡単で十分ですのでスレッド切り替えの開発経験があると非常に力強いです。(これは割り込みの延長線にあり、仕組みは極簡単です。レジスタを退避して、スタックを切り替えてreturn。)

ラズパイも良いのですが、マルチ・コアですしlinuxが稼働してますし既に「複雑」なコンピュータに該当します。もし、アセンブラを多少なりとやってみようと言う気概があるのでしたら、AVRはお薦めです。個人負担できる価格帯ですし、自作派の方々が多数の情報を公開されています。C言語も無償のものがありました。たぶん今もあると思います。(私は業務で使ったことありますが、無償Cコンパイラでも十分でした。)

プログラミング言語の学習で手一杯で、コンピュータの仕組みを理解しようと言う気概を持っている人はあまり多くはないように感じます。ここは直接お金に結びつきにくいですが、縁の下の力持ちになるスキルですので是非頑張って下さい。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 14:39

    回答ありがとうございます。

    ラズパイよりもさらにシンプルなコンピュータで勉強したほうがいいということですね。
    そのほうがよりコンピュータサイエンスの勉強には最適だということですよね。

    ありがとうございました。
    だんだん何をすべきか見えてきた気がします。

    キャンセル

+3

何でもできる、は正直、非常に困難です。陸上選手でも短距離走と長距離走では両立しないように。
コンピュータ業界というのは非常にすそ野が広い分、全然違うノウハウを必要とするものが並立しています。
※Web関連技術と組み込み制御系では全くと言っていいほど異なる

それでもそれなりに何でもこなせる人はいますが、それは知識の吸収が早いがゆえに「何でも勉強して対応できる」といったほうが近かったりします。(知識の吸収が早いのも、培った経験という土台があればこそですが)

正直、今の貴方の経歴からすると、まだまだひよっこですし、若者特有の壮大な夢を言ってるなー、くらいにしか捉えられません。

また、プログラミングだけならまだいいのですが、システムエンジニアというか設計にもかかわるとなると、業務知識(会計だったり電気回路だったり幾何学だったりセキュリティ関連だったり法的知識だったり)も必要となってきますので、それらの勉強もまた必要になってきます。

まずは情報処理技術者試験の問題集(過去問や解説も公式サイトにあります)から、技術者が持っていてほしいと思われるものが何か見てみるのもよいかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 12:00

    回答ありがとうございます。

    質問が悪かったです。
    今後どういった方向に進むか決めては無いけど、仰られた「それでもそれなりに何でもこなせる人」になるにはどういう勉強を重ねていけばいいかという質問でした。
    「それでもそれなりに何でもこなせる人」になるためのある程度の決まった道筋があるのであれば、
    今私はその道筋のこの辺だから今後のために「〜を勉強すればいいよ」
    といったようなことを教えていただきたい。という質問でした。

    回答ありがとうございました。

    キャンセル

+3

プログラムを書けるのであれば、まずは1つの言語を基本からしっかり習得するのがいいと思います。
1つ自分の中で芯となる言語があれば、他言語への入門はそんなに難しくありません。
ベストプラクティスに到達するまでは、どの言語もしんどいとは思いますが。

ラズパイを始めるのがいいと思う理由は何ですか?
ハードウェアやC、Linuxを始めたいのとラズパイとは関係がないと思います。
まぁハードではありますが、別にそこらの使っていないPCでもいいです。

R、C、Java、COBOL、HTML、CSS、JavaScriptを知ってはいるが全て触りだけ、
ハードも分からない、Linuxも分からない、ミドルウェアも分からない、ネットワークも分からない、
そんな状態でもGolangやScalaも気になる。

気持ちは分からなくはないです。
でもやっぱりまずは自分の中で、これだけは自信がある!ってものを身につけるべきだと思います。
ではそれを何にするか?ってところですが、今の仕事に関係あるものでいいんじゃないですかね。
JavaScriptを書いているようなので、まずはJavaScriptをしっかりやってみてはどうでしょう?
JavaScriptはものすごく奥が深い言語です。
プログラミング言語の中で言うと、僕的にはかなり難しい部類に入ります。

あれもこれも手を出すけど、どれも深くはやらないってのは決して悪いことではないです。
「なんとなく知っている」という分野が多いことはけっこう重要なことだからです。
しかし全てがそれではいけません。仕事になりません。
プロとして対価をもらうに値しません。
「何でもできるプロフェッショナルになる」ためには、結局1つ1つやっていくしかないじゃないですか。
しょせん人間はシングルスレッドです。しかも容赦なく忘れていってしまう程度の生き物です。

まずは目先の仕事で、分からないことをなくしてみてください。
分からないことがあるうちは、今の仕事はあなたにとって無駄ではありません。
やりたいことでなかったとしても、分からないのであればやる価値はあります。
必ずどこかで役に立ちます。
「こんなのやってても仕方がない」ってことは案外ないものですよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 12:23

    回答ありがとうございます。

    ラズパイを始めようかと思った理由は、
    ・IOTで成果物を作りやすいのでは無いか(何か作ったほうがモチベーションが上がるから)
    ・コンピュータサイエンスも学べるのでは無いか
    といった理由からでした。
    おっしゃる通り、CやLinuxを学ぶためなら必要ないですね。
    ありがとうございます。

    「一つの言語を極める」についてですが、
    実はJSの勉強で行き詰まってます。
    私も「一つの言語を極める」ことは重要だと思うのですが、どう極めればいいのだろう・・と迷ってます。
    仕事もそんなに困るような場面はないし、かといって作りたいものがあるわけでもない。
    JSの本を買って読むぐらいしかしてません。
    仕事でやっていることが無駄ではないと思うのですが、仕事だけやっていれば成長できるのかなって疑問が湧いてきてしまってます。
    他の言語をやれば何か見えてくるんじゃないか・・・みたいな感じです。
    焦りすぎですかね・・・

    まとまらない文になってしまいました。すみません。
    参考になりました。
    回答ありがとうございました。

    キャンセル

  • 2017/05/10 12:46 編集

    仕事でぶつかる壁を逃げずに1つ1つ超えていけば、それだけでかなり成長します。
    結局、技術力ってのは色々を手を出して勉強するから身につくのではなくて、
    どれだけ逃げずに挑んできたかってところが重要なんですよ。
    でも、大体の人間が追い込まれると、体調不良だ、鬱だと言いながら戦線離脱していきます。

    勉強だけしてても、悲しいぐらい忘れていくだけです。
    まぁそれを分かっているから、何か作りながらって言っているのだと思いますが。

    逃げずに挑むと、その時に超えたことが身につくのもありますが、
    未知なものに挑むことへの耐性が身につくのですよ。これがかなり重要です。
    それはおそらく仕事でしか身につきません。予算に追われ、期限に追われ、もう最悪ですw
    それが身につけば技術力は後からついてきます。
    その時には勉強癖もついていますから。

    分からないことや知らないことをやる時ってのは、仕事であれば恐怖でしかありませんし、
    プライベートであれば億劫でしかありません。
    しかし、1つ1つ壁を超えてきた人間は、そのどちらもあまり感じなくなります。
    「次はこれか。いつものように本から買うか」程度のノリでできちゃうわけです。

    キャンセル

  • 2017/05/10 13:42

    コメントありがとうございます。

    すごく為になります。
    すぐに身につく技術ではないから、
    長い目で見て一つ一つ確実にこなしていくことが重要ということですね。
    ありがとうございます。

    私も体を壊さないように、頑張ります!

    キャンセル

+2

一例ですがHow to become a hackerという文書があります。

http://cruel.org/freeware/hacker.html#basic_skills

私は二十歳くらいの時に大学の図書館にあるパソコンでこれを読んで以来、これを指針にしています。以来十数年間、今のところ「ここに書いてある通りにして間違いだったなぁ」とか「もっと良い方法があったのになぁ」とか思った事はありませんでした。個人の望む方向性によりますが、読めば得るものはあると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 12:45

    回答ありがとうございます。

    サイトを見てみます。
    すごくためになりそうです。
    ありがとうございました!!

    キャンセル

+1

システムにしろ、プログラムにしろ
問題解決の為の手段です。
で、
1.何をしたいのか?
2.それが、どうあるべきなのか?
3.そして、どの様に解決すべきなのか?
が、プログラムって? に答える時の大雑把な回答です。
質問からは、
1.の部分が見えていないように伺えます。

取りあえず、やる事が見つからないと云う事出れば、
A.マイコン系での、アセンブラから、OSとは辺り
⇒アセンブラは忌避される傾向がありますが、
基礎として重要なんですけどねぇ。   
BIOS一つ作るもの、仕様書だけで実装すると、
かなーり大変ですよぉ。
実装用の仕様書が無い状態では、、、
B.WEB系の環境構築やら、開発環境整備やら
例えば、Linuxの開発環境を整えるのは、
ディストリビューション毎の癖があったりして、
知らないと、間抜け落としに嵌ったりします。
C.古くからの基礎としては、
電卓、エディタ、ペイント&ドロー を作れるようになったら
初級編終了みたいな感覚がありますけど?
今だと何になるんでしょうねぇ。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 11:46

    回答ありがとうございます。
    おっしゃる通り、何をしたいかが見えてません。
    よく海外の人がフレームワークやps3のハッキングをするのをみて、こんなのできたら便利だろうな〜
    こんぐらいの技術レベルに近づきたいな〜
    って感じです。

    casl2はやったことあるので、アセンブラの重要さはよくわかります。
    頂いた回答から考えるに、ラズパイは結構いい選択肢な気がしてきました。
    回答ありがとうございました。

    キャンセル

+1

求めている答えとはたぶん違うものですし、しかもとっくに習得されていることかもしれないので恐縮ですが

「とにかく速いタイピング」

こそがソフトウェアエンジニアとして成長し続けるための汎用的技能であると確信しています。

どんな技術を吸収するにしろ、もしくは良いプログラムの書き方を身につけるにしろ、
そこには必ず成果物の数倍の試行錯誤が発生します。
このとき、書いたプログラムをあっさり消すことを惜しまずに試行錯誤できるか、というとここで速いタイピングが効いてくるのですね。あっという間に打ち込めるならあっさり消すのも惜しくありません。結果として、多くの試行錯誤をして多くのことを吸収することができるという寸法。

これは決して私一人の頭から出た考えではなく、30年ほど前のPC入門本で紹介されていた教えで、今もまったく陳腐化していないことです。
(西田雅昭/邦好「最新はじめてのMS-DOS」 1988)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 14:03

    回答ありがとうございます。

    経験者の方の考えなので参考になります。
    作業自体を億劫に感じない為に必要なスキルだと私も思います。
    (タイピングの速度で世界を狙う!とかは違うと思いますが)

    回答ありがとうございました。

    キャンセル

0

言語に満足していないとのことですが、言語に満足度を求めるのは良く分かりません。単に使いやすいかということでしょうか?それともその言語で出来る事の幅に満足していないという事でしょうか?
基本的にやりたい事があってそれに関する言語を学ぶのが一般的だと思います。

やりたいことがなくただ全てを出来るようになりたいのであれば以下の、

・フロントエンド
・バックエンド
・クラウド,サーバ
・組込み
・AI

などその分野で使われている言語、技術等を調べて勉強されてみてはどうでしょう?何でもできるプロフェッショナルというのは憧れはしますが大変難しいことだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 11:50

    回答ありがとうございます。
    言語に不満は無いです。
    おそらくそのレベルにまで達して無いです。
    言語に不満を覚えるのって、いくつもの言語を一定レベルまで習得しているからだと思うんですよね。
    なので、私がそのレベルに行くには他の言語に挑戦するのがいいんじゃ無いかと思い、今回質問しました。

    回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.89%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる