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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

7回答

4583閲覧

プログラマの「深く狭く」と「広く浅く」について

ryogaelbtn

総合スコア42

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3グッド

2クリップ

投稿2016/09/11 11:44

プログラムを学んでいくうえで少しスランプ気味になっているので質問させていただきます。

多くの言語を浅くか、一つの言語を狭くか

自分の趣味で色々なものを作ってみたりするのですが、UnityやXamarinではC#を、競技プログラミングではC++を、たまにHTMLとCSS(プログラム言語と呼ぶかは別)、普段はPythonを書いていますが、それぞれを浅くしかやっていないので、C#ならLINQ、C++ならSTLという言語の主要の機能がやっと使える程度しか書けません。

でもそれじゃあまりに使えない人になるのかなと思っているのです。

大人になった時にはどっちのほうがいいのか教えていただけると嬉しいです。

matobaa, DrqYuto👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

ベストアンサー

「深く狭く」と「広く浅く」

「深く狭く」か「広く浅く」か、というよりも、
言語は手段なので、目的に応じて選びます

たとえば、Webサイトが作りたいなら、
HTML、CSS、JavaScript、Python(やPHPなどのP言語)、
さらにSQLやjQueryなどのJSライブラリなど、
いわゆる「フルスタック」を覚える必要があります。

あるいはもし、(3Dなど計算量の要る)ゲームが作りたいなら、
C++やC#一本、ただし画像も音楽も
制作する(あるいは調達する)必要があります。

はたまた流行の機械学習がしたいのでしたら、
Python一本ですが、数学の勉強も必要になります。
計算量を稼ぐために関数型プログラミング、並列処理、
さらにGPU計算やハードの知識も必要になるかもしれません。

(もちろん、各例はほかの言語でもできますが、
例でしかないので、単純化しています)


ですから、言語単体だけで決めても仕様がありません。

たとえればこれが外国語なら、
とつぜんフランス語を覚えるか、スペイン語を覚えるか、
という前に、どこの国に行きたいかがまずあるでしょう。

大人になった時にはどっちのほうがいいのか

ですから、それは質問者の方が
何がしたいのか」「何になりたいのか
によって違ってきます。

投稿2016/09/11 17:28

編集2016/09/11 17:30
LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryogaelbtn

2016/09/11 17:55

回答ありがとうございます。 今やりたいものでいうのであれば、人工知能だったりスマホのアプリを作ったり、ホームページを作ったり、OSを作ってみたり、言語を作ってみたり、、、と一つに定まらないのです。 例を借りて言うのであれば、「世界各地のそれぞれに別々の魅力があり、全てに行ってみたいけど、すべての言語を覚えようとすると、どれも中途半端になってしまう」みたいなことでしょうか? そのため、「どの国に行っても、辞書(リファレンスだったりググったり)を見ながらなら、日常会話ができる」みたいな状態なのです。 ですが、それは「数日間しか旅行をしない」からであって、GitHubで他のOSSにコミットできるだとか、みんなに多く使ってもらえるようなソフトを作れる。というレベルにはいたってないのです。
LLman

2016/09/11 18:54

そうですね、やりたいことが多くてまだ絞れない段階でしたら、 世界各地で広く通用する「英語」のようなプログラム言語が適しています。 質問で挙げられたPythonがそうですし、ほかにはJavaScriptも万能な言語です。 なぜそうするかというと、最初から「深く狭く」は難しいからです。 一本の言語で「広く浅く」なら学習量に余裕ができ、やりたいことを見つけやすいです。 そして、やりたいことを見つけてから、いくらでも「深く狭く」掘り下げられます。 もし、この順番を逆にすると、「今掘り下げているところは、 本当に自分のやりたいところなのだろうか?」と疑問が浮かんだりします。 逆に、本当にやりたいことがあれば、言語は自然と覚えられます。 ですから、人工知能か、スマホアプリか、どこか住みつきたいところが できるまで、さしあたりPythonを使うのは妥当だと思います。 新しい言語を覚えるより、自分のテーマを見つけることが優先でしょう。 (もしこれが職業PGの人なら、そうも言ってられないでしょうが)
ryogaelbtn

2016/09/11 19:09

やっぱり一つないし数個に絞るべきなのでしょうか? Pythonで広く浅くやろうとしても、スマホアプリはC#やネイティブの方がいいでしょうし、Webサイト構築にはHTML、JavaScript、CSSは必須です。となると初めに戻ってきちゃう気がするのですが、、、
LLman

2016/09/11 20:36

「ネイティブの方がいい」というこだわりを捨てれば、 スマホもWebもJavaScript一本で行けますね。 というか「SL4A」や「Pythonista」があるので、Python一本でも行けます。 HTMLやCSSも必須ですが、簡単ですし、フリーのテンプレートがありますよね。 逆に、Webを捨ててネイティブアプリに特化しても、それはそれで良いのですが。 何が言いたいのかというと、ばくぜんと複数の言語を覚えると中途半端になりがちです。 一般的な「良さ」に振り回されるのではなく、目的意識を持って選んでください。 まずは英語一本で世界を旅して、移住する際に、その土地の言葉を覚えれば十分です。 何度も移住してるうち、自然と複数の言語を覚えますが、最初から複数は難しいです。
ryogaelbtn

2016/09/12 04:52

とてもわかりやすい回答ありがとうございます! 初めはC++とWeb系のものから始めていこうかなと思います!
guest

0

まずは一つの言語を追究し、仕事が
受けられるようにすることが一番
重要です。

そして必要に応じて新しい言語を
覚えていく。プログラミングの基礎が、
固まっていれば二つ目、三つ目の
言語は簡単に覚えられるはずです。

私の場合でも
CがわかればjavaもわかりVBAもわかり
html,javascript,phpもわかり
ついにはRubyもわかりという風に
どんどんと広げているわけです。

仕事で強制されているのでなければ
興味のある所から手をつけられると
良いと思います。

ご健闘を心よりお祈り申し上げます。

投稿2016/09/11 13:06

Yatsurugi

総合スコア1628

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryogaelbtn

2016/09/11 17:41

回答ありがとうございます。 どの程度から仕事を受けられるのか、という基準が学生である以上わからないのですが、どのくらいの基準なのでしょうか?
guest

0

こんにちは。

プログラマとしてつぶしが効くのは広くそこそこ深くですね。
広く浅くもありですが、プログラマとは少し方向性が異なるだろうと思います。
逆に、狭く超深くもありですが、特定の分野に特化することになるのでその仕事に出会えないと中々辛い思いをするかもしれません。良い仕事に出会えれば幸せになれると思います。

まだ学生さんなら、中々歯ごたえがありますがC++をある程度極めておくと後々強いと思いますよ。
ポインタや数値の内部表現から、オブジェクト指向をそこそこ使えるようになれると強いですよ。
社会にでると中々まとまった時間を取ることが難しくなりますから。

投稿2016/09/11 12:29

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryogaelbtn

2016/09/11 17:37

回答ありがとうございます。 お答えづらいとは思うのですが、極めるというのはどの程度なのでしょうか? もちろん際限なく極めることは可能だと思います。 例に挙げられているものであれば、ポインタは自己参照ポインタを用いて、木やグラフなどを構築することは可能です。数値表現であればdouble型が符号部+指数部+仮数部からなっていることは知ってますし、オブジェクト指向ならデザインパターンを少しかじった程度には知っています。 ですが、学生なのもあり、それを活用する機会は多くないのですがその程度でもいいのかな?と思いまして 正直、デザインパターンなりポインタなりは覚えれば使えてしまうのではないかと思って、自分はまだダメダメなんじゃないかと思ってしまったり、、、
Chironian

2016/09/11 18:32

> 極めるというのはどの程度なのでしょうか? なかなかやりますね。基本はクリアできているような感じがします。 折角そこまでできているのならば、もう少し高みを目指すとよいと思います。 Effctive C++と言うたいへん有名な本があります。これを一通り理解できたら、強いですよ。 > ポインタなりは覚えれば使えてしまうのではないか ボインタは意外に使えない人が少なくないので、ここは山の一つですね。 C++にはポインタより遥かに高い山が多数あるので歯ごたえあります。 Effective C++を半分以上理解でき、それに基づいたプログラムを開発できるようになったら、C++をある程度極めたと考えて良いと思いますよ。 テンプレート・メタ・プログラミングとかboostとか先を見ればキリがないですが、そこまで極めようとすると狭くて超深い世界なので、食べていくためには良し悪しです。 > 自分はまだダメダメなんじゃないかと思ってしまったり、、、 学生でポインタやデザインパターンをある程度使えるのであれば、素質があると思いますよ。上記の内容は実はかなりハードル高いです。でもryogaelbtnさんならクリアできる可能性があるように感じます。
ryogaelbtn

2016/09/11 19:11

テンプレートは、複雑なものは全くですが、ジェネリッククラスを作る程度には使えたりだとかですかね? Effective C++は聞いたことがありますね。ぜひ見てみたいと思います。
Chironian

2016/09/12 01:55

単純なテンプレートは簡単なので直ぐにできると思いますよ。 特殊化は少し複雑ですが頑張ればなんとかなると思います。実体化との違いで悩むかな。標準規格が直感的でない名前をつけてますし。 部分特殊化は比較的簡単なものでも特殊化との相違に悩むでしょう。 そして、部分特殊化の高難度な使い方まで含めたテンプレートは鬼です。 簡単な部分特殊化まで使えたらプログラマとしてなかなか優秀と思います。
ryogaelbtn

2016/09/12 04:54

部分特殊化というのはvectorがbool型の時だけ別のアルゴリズムで動いているようなものなのでしょうか?
Chironian

2016/09/12 06:37

それは特殊化です。 部分特殊化の簡単なものは、例えば、指定された型がポインタなら別のアルゴリズムで動くような感じです。難しいものはトコトン難しいので割愛します。
ryogaelbtn

2016/09/12 13:57

奥が深いですね。。。 ありがとうございます。
guest

0

今やっている感じのままで良いと思います。
大人になった時というのが、仕事のことを指しているのか、趣味として新しいことをやることを指しているのかはわかりませんが、いずれにしても知らないことをやるときに、「知らないからできない」と簡単に匙を投げるのではなく、「知らなくても調べて行動に移す」ことができればそれでいいと思います。
ただし今やっていること、知っていることだけを追求していってももったいないので、プログラミングに関する情報収集はしていた方がよいでしょうね。
言葉の意味くらいは知っておく、その中から興味があることは追求してみる、というのがよろしいかと思います。

投稿2016/09/12 00:30

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryogaelbtn

2016/09/12 04:50

回答ありがとうございます。 大人になるというのは、自分の趣味だけで物を作るのではなく、仕事としてプログラムをするようになったときのことです。
guest

0

「プログラミングをどう使うか」に依存します。見たところ、十分のコーディング能力をお持ちのようですが、「作りたいもの」が先に確定しないことには適切な言語や環境を選択できません。

**以下、話が反れるので不要であれば無視してください。
**

「大人になった時」とありますが、(冷たい言い方かもしれませんが)現在の社会においてプログラミングは「手段」としか考えられていません。これだけで生活できる人間など一人もいないでしょう。それどころか、「ファイル共有ソフトを作製、公開した」というだけで逮捕されたプログラマも実在します(東京大学元助手、故・金子勇氏)もっとも、判決は当然の無罪であり、この「判例」は日本の全技術者の重要な遺産であるといえます。死してなお、先生は生きているといえるしょう。

「大人になった時」のことを考えるならば、「少なくとも自分ひとりの生活を支えることができる資源、環境を確保すること」が大事です。もちろん、家庭を持つ(または人を動かす立場になる)ならばそれ以上が必要です。社会は「プログラミングは手段」としか考えていない以上、「不都合な副作用」や「代替え手段」が重なれば容易に切り捨てられることが想定されます。これは「技術者の立場」としては対処できない課題です。

例を挙げます。録画媒体として「VHS」と「ベータ」が規格争いしていたことがありました。結果的には前者が勝利しましたが、「技術的には後者に理があった」という意見も多々あります。勝因は「売り込み方」や「ユーザの囲い込み」にあったと言われております。つまり、『ベータは「非技術要素」によって社会から消えていった』ということができます。このように技術の探求のみでは社会に生き残ることができません。それどころか度を越せば迫害されうることを肝に銘じなければなりません。

投稿2016/09/11 19:25

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryogaelbtn

2016/09/11 19:41

回答ありがとうございます。 やっぱり、何か一つのことに対してやる気を持つことが大事なんですね。 何か一つでも「作りたいもの」が確定しないことには何も始まらないということですかね。 複数やりたいことがあるときにはどのようにしたらいいですかね? もちろんどれも同じようにやりたいのですが、優柔不断な性格も相まって決められなかったりするのです。 それでも一つに絞るべきか、それとも平行してやるべきか、もしくは折衷案か。 プログラムは手段というのはわかります。 というのも、結局世の中に出るプロダクトによってその会社なりの評価が決まるというの所があるからだと思うのですよね
HogeAnimalLover

2016/09/11 19:58

お返事ありがとうございます。 ただ、一つ気に留めてもらいたいことがあります。『「目的ない技術」の存在を公にはしないほうがいい』ということです。社会はこのような存在を危険視しますし、あらぬ疑いの元にもなります。もちろん、あなたに悪意や敵意はないでしょうが、「危険因子は敵になる前に潰す」と考え迫害する人は少なくないです。
ryogaelbtn

2016/09/12 04:51

目的ない技術とは例えばどのようなものでしょうか?
HogeAnimalLover

2016/09/12 06:43

具体的には「悪意を疑われるようなもの」です。例えばWinnyがこの例です。これは作成者が逮捕されました。当人は悪用せぬよう呼び掛けていたはずなのに・・・もちろん、これは正しい目的が別にありましたが、当時の社会からは理解されず「危険因子」と認知されていたというのが実情です。
ryogaelbtn

2016/09/12 13:57

確かに、ありましたね。。。
guest

0

多くの言語を浅くか、一つの言語を狭くか

この質問であれば、「多くの言語を浅く」の一択です。私もここで門外漢の言語(一行もコーディングしたことのない言語)の質問に答えてますが、どうやってるかというとググってます。質問にこたえるだけではなく、もし、その言語とフレームワークで仕事しろと言われればググりながらこなせる自信があります。

それは、プログラミングにおける概念モデルを知ってるからです。 Java では XXX と呼ばれてる、 C++ ではYYYと呼ばれてる、でも私は最初に覚えたのは C++ なので頭のなかで YYY と呼んでいるけどすぐに翻訳できるみたいな感じです。

言語仕様、フレームワーク、ライブラリを勉強するときに Intrduction に書いてある、その仕様の意味付け、背景などを熟読することをおすすめします。

C#ならLINQ、C++ならSTLという言語の主要の機能がやっと使える程度

いや、 STL とはまたマニアックなものを・・・

今、新しく勉強するなら JavaScript をおすすめします。原理主義者からは嫌われてますが、一方で「もっとも(悪い方向に)誤解された言語」とも言われてます。キーワードとしては c10k、クロージャとかです。

投稿2016/09/11 13:37

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mugicya

2016/09/11 14:17

ググりながらでもある程度なんとかなる事が多いですが、僕の場合はシンタックス。つまり、記述について解決出来ることが多い…ですかね。 DirectShow を使用したアプリを受注したときは、あまりにもグラバーなどの情報が無さ過ぎて、半泣きでこなした記憶があります。5年くらい前ですが…。
ryogaelbtn

2016/09/11 17:48

回答ありがとうございます。 C10Kだったりクロージャだったりは名前のみ聞いたことあるものと言った感じがしますね。 今の現状としましては、プログラム言語の後ろにあるパラダイムはある程度理解しているのですが、幾つかの言語をやるせいで文法の混乱だったり、この言語ではどう書くんだっけとなってしまう結果、プログラムができないと思ってしまうのです。実際にググりながらでもいいのでしょうか?
mit0223

2016/09/12 00:21

私の場合は、言語をたくさん覚えすぎて、シェルとかPerl でちょっとしたツールを作るだけでも毎回 if 文の書き方からググっている状態です。ただし、本格的にコーディングをはじめると、そんな基本的なところでは困らなくなるので、大丈夫です。ライブラリとかの仕様はどうせググったりソース見たりするわけですから。 それより、世の中の移り変わりに素早く対応していくほうが自分の価値を上げやすいと思いますよ。最新のテクノロジー(というと大げさですが新しいOSSのリリース)を試してブログを書くとか。
ryogaelbtn

2016/09/12 04:53

自分の価値を上げるためにはそういうようなHowtoだったり経験談を書いていたりするといいのですか、、、
mit0223

2016/09/12 06:02

あ、ブログに書くのは、どちらかというと、モチベーション維持の手段です。見慣れないものにチャレンジして苦労すると、そのことが将来役に立つことがあります。苦労することが自分自身への投資になるわけです。
ryogaelbtn

2016/09/12 13:56

ほうほう、モチベーション維持ですか。。。 確かに、自分の頑張った証があったりするとやる気も続きますものね
guest

0

設計したアプリがちゃんと完成させられるレベルの言語が1つでもあればいいと思います。
(アプリは商用レベルです。)

投稿2016/09/11 12:51

mugicya

総合スコア1046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryogaelbtn

2016/09/11 17:40

回答ありがとうございます。 設計したアプリというのはどの程度でしょうか? 電卓レベルでもでしょうか? それこそ、ただのTodoリスト程度であれば、プログラムの技量よりかは、そのOSが用意しているAPIに対する理解度の方が大事だと思うのですが、、、
mugicya

2016/09/11 18:01

アプリは商用レベルです。と記述したように、販売できるレベルのソフトウェアの事を考えていますが。もちろん、電卓でも購入してまで使用したい機能が搭載されていればいいのかもしれません。 OSやフレームワークのAPIの理解度ももちろん含んでいます。 下請けの話になりますが、発注者の機能要件をどうすれば満たせるのか? その場で出来る出来ないが、ぱっと思いつくには言語仕様というよりは、それの理解度が重要になってきます。 広く浅くだと、出来るかもしれないけれど、やってみないとわからない…では恐ろしくて受けられません。 なので、僕は1つでもハイレベルに使用できる言語を持っていればいいと思っています。
ryogaelbtn

2016/09/11 19:44

この「ハイレベル」というのがまた曖昧でわかりづらいですね。 また、商用レベルというのが、購入してまで使用したい機能というのであれば、それを思いつくかどうかのアイデアなりの力も大事になってくると思うのですが、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問