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

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

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

5回答

3108閲覧

使用言語の選択について

退会済みユーザー

退会済みユーザー

総合スコア0

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

2グッド

0クリップ

投稿2016/10/09 12:39

編集2016/10/09 13:06

現在キュレーションメディアのようなものを作ろうとしていて、サーバーサイドの言語選択で悩んでいます。
具体的にはPythonかNode.jsかです。

プログラミング初心者なので、自分でいろいろ調べてみてわかったことは以下のようなことです。
古い情報なども含まれていて、現在とは異なるものもあるかもしれませんが。

Pythonのメリット
より少ないコードで書くことができる
エラーなどを発見しやすい
誰が読んでもわかりやすく、メンテナンスしやすい

Pythonのデメリット
Node.jsと比較すると遅い

Node.jsのメリット
処理速度が速い
大量の同時アクセスにも対応できる
よりスケーラブル

Node.jsのデメリット
ネストがすごい深くなる可能性があり、可読性が低くメンテナンスしにくい
(追記、最新版ではネストが深くなるのは克服できるているらしい)

上記が自分が調べた内容ですが、これ以外にメリットデメリットはありますか?
また、東南アジアでリリースする(ネットが極めて遅い)サイトで、月間PVが1000万を超えるようなことを想定する場合、どちらがおすすめでしょうか?
個人的にはスピードは非常に大事なので、Node.jsがいいのかなと思いつつ、RubyやPythonに比べて流行っていない気がするので、質問させていただきました。

LLman, search_search👍を押しています

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

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

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

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

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

guest

回答5

0

LLman さんの回答で充分だと思いますが、

Node.jsのデメリット

ネストがすごい深くなる可能性があり、可読性が低くメンテナンスしにくい

Javascript のメリット・デメリットについては、このように単純なものではありません。他の言語と異なる点がたくさんあるの(ex. オブジェクト指向なのかどうなのかもあやしい→オブジェクト指向って本当に良いことだったのかを考えさせられる)ですが、その一つ一つにメリットとデメリットがあります。
そして、「ネストが深くなる」→「可読性が低くなる」という因果関係も単なるプログラマの慣れの問題だと思います。システムコールを呼ぶ毎に性能問題を気にするくらいのシニアプログラマからみると、Javascript ほど気持ちよく書ける言語はありません。新しく導入されたネストを少なくする仕組みは単に経験の少ないプログラマに対して敷居を低くするためだけの子供だましにしか思えません。
もともと、「シングルスレッド非同期プログラミング→ネストが深くなるけど、並列処理に対して問題が簡単になる」というメリットがあったのですが、うわさの「ネストを少なくする仕組み」を使うと、そのたびに「これは元の形に翻訳するとどうなるんだっけ?」というのを考えて使うことになり、実はあまりうれしくありません。そのプログラムを初めて見た人に対してちょっととっつきやすくなるくらいの効果しかありません。スレッドがシステムコールに対して同期的に動くことの性能問題が気にならない人には Javascript のメリットはわからないと思います。

投稿2016/10/09 13:33

mit0223

総合スコア3401

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

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

退会済みユーザー

退会済みユーザー

2016/10/09 19:19

国内外のページを読んでなんとなくわかったような感じの質問失礼しました。 いろいろ奥が深いことはよくわかり、その辺もしっかりわかるように勉強していきたいと思います。 ありがとうございました。
guest

0

ベストアンサー

どちらがおすすめでしょうか?

Nodeでキュレーションアプリを運用してみて - SSSSLIDE

上記事例を見ますと、どちらか一方ではなく、使い分けていますね。

クローラーや、言語処理とリコメンドのエンジンは、
(おそらく機械学習のライブラリが充実してるから)Python、
アプリ向けAPIは(おそらく早いから)Node.js、と併用されています。

これは「マイクロサービス」の考え方で、各言語で得意なことをやらせて、
小さなサービスを組み合わせて、システム全体を構築する手法ですね。
ただ一方で、両言語を習得して、別々にメンテナンスする負荷もあります。

ご質問からどちらか一方、という考えが強くうかがえましたが、
採用するかどうかは別に、選択肢を多く持つのは有益だと思い、ご参考までに。

投稿2016/10/09 13:01

LLman

総合スコア5592

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

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

退会済みユーザー

退会済みユーザー

2016/10/09 13:16

ご回答ありがとうございます。 言語を使い分けているところも結構ありますよね。 使い分けも大切だろうとは思っているものの、自分でやるにしても、外注するにしても、現状2つ以上の言語を使うのは難しそうだなと思っていて、一旦1つにしたいという考えが強いです。 一旦Node.jsでやって途中からPythonなどを付け加えていくというのもありそうなので、参考にさせていただきます。
guest

0

結論はLLmanさんと同じです。
どっちも良いからどっちも使おう! もしくはなんとなくで決めて良いです。

Node.jsで実装のパフォーマンスを出すためにはAltJSを覚える事が必要不可欠なので若干敷居が高いです。
汎用的なライブラリが優れているので極まったNode.jsは万能です。

Pythonは書きやすいですし、速度が足りない困ったという場面では奥の手が使えるので先にこちらを勉強するとやりやすいかと思います。
機械学習回りのライブラリが優れているので、そちらに少しでも興味があるならPythonは扱えるべきです。

Node.js: 大量の同時アクセスにも対応できる

https://www.techempower.com/benchmarks/
古今東西のフレームワークの捌けるアクセス数ランキングです。

上位層にPythonは十分食い込めるポテンシャルを持っています。
同じNode.jsでもsails.jsでは秒間500アクセス数しか捌けません。

遅い遅いと叩かれるRubyもJavaのバイトコードに変換して速度を稼ぐJRubyのような必殺技がありますし、
同様にPythonにもPyPyを使ってC言語やJavaのバイトコードを経由して爆速に動かす切り札があるのです。
Lisp使いも普段の業務をLispで書いてJavaのソースコードに変換して納品している…と言語間の速度を覆す工夫は至る所にあります。

さて、あなたの考えるキュレーションメディアは秒間何アクセスを叩き出す事を想定していますか?
上記ベンチマークでほぼ最下位として紹介されているsails.jsですが、一般的な感覚では頭おかしい程捌けます。
秒間500アクセスをピーク時に求められるサイトを、ピーク時3時間(毎秒500アクセス)、平時毎秒250アクセスと仮定して1日2,430万PV、月間で計算すると7億PVとなりますからね…!

アドセンスを入れると1PVあたり0.2円程度なので、7億PVもあれば月収1000万円超ですね!
浮いたお金でサーバーをアップグレードして強引に動かすのと、全部高速な言語で置き換えるのではどちらがコストが掛かるのでしょうね…?

…というわけで、言語の導入時に速度を気にする場合、
そのくらいPV数が見込めるくらいのサイトになってから悩んでも遅くはありません。

Python: 簡潔に書ける

スタートアップではでかいメリットです。

ただし素のJavaScriptは単なるゴミですが、こちらにもAltJSという奥の手があります。
本番環境へデプロイを行う直前にコンパイルしてJSファイルにすれば速度面でも問題は出ません。

例えばCoffeeScriptならPythonとほぼ同レベルの書き心地ですし、
それを更に改良したLiveScriptはPythonを完全に突き放しています(と勝手に思ってます)
型チェックを取り入れるならばTypeScriptやPureScript等があります。

投稿2016/10/12 03:23

miyabi-sun

総合スコア21158

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

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

退会済みユーザー

退会済みユーザー

2016/10/12 08:35

自分で調べて表面的なことしかしらなかったので、それぞれに処理速度を速くする方法やコードを書きやすくする方法があるなど知らなかったので勉強になりました。 また、具体的に秒間アクセス数の試算もしたことがなかったので、しっかり考えてみたいと思います。 今は東南アジアで活動しているので、ネット環境が非常に悪く、少しでも速くすることがユーザーの利便性に大きく影響するなという感覚だけだったので。 いろいろと教えていただきありがとうございました。
miyabi-sun

2016/10/13 07:59

> 今は東南アジアで活動しているので、ネット環境が非常に悪く サーバーを立ち上げる時はVPSやクラウドを利用したほうが良いんじゃないかと思います。 想定するクライアントの近く(想定顧客が日本なら日本やシンガポール等)に設置しましょう。 どんなに優れたサーバーを用意しても、サーバーがニューヨークにあれば日本から通信すると0.2秒以上のロスになります。 光は1秒間に地球を7週しかできないので、光は遅いのです。 例えばConoHaのようなVPSサーバー、AWSやGoogleCloudPlatformのようなクラウドのサーバーを借りる事が出来ますが、 物理サーバーの設置場所(リージョン)が選択出来るようになっています。 ConoHaならば月額900円で1台借りられるので私もポコポコ借りてます。 小さいシステムならキビキビ動作しますよ。
退会済みユーザー

退会済みユーザー

2016/10/14 07:24

ありがとうございます! サーバーに関することなど本当に知識がないので、このようなアドバイス非常に助かります。 参考にさせていただきます!
guest

0

失礼ですが、こんな意見と同じだと感じました。

「これから総合格闘技をしようと思います。
柔道と空手とどちらがおすすめですか?」

自分がどちらが向いているかが大事だと思いますし、学ぶのを片方のみと限定するのはあまり得策ではありません。

後々双方を学ぶことを覚悟した上で、軽い入門書を書店でめくってみてどちらから先にやるか決めるのが良いかと思います。

投稿2016/10/09 13:22

iwamoto_takaaki

総合スコア2883

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

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

退会済みユーザー

退会済みユーザー

2016/10/09 13:32

はい、おっしゃる通り、そのような質問に近いことは承知しています。 ただ、柔道にはどんな人が向いている、空手にはどんな人が向いている(適当ですが、例えば柔道は体幹がしっかりしていて握力が強い人、空手は俊敏性がある人)などあると思っていて、そのようなことが少しでも聞ければなと思っていました。 もちろん自分の好みや向いている方を自分で判断することは大事だと思いますが、現状知識がなく周りの方の意見を聞いてみたかったです。 おそらく、こんな質問するんじゃねーよと多少不快に思われたのかと思います。 失礼いたしました。
iwamoto_takaaki

2016/10/09 13:41

不快ではありません。 Hiro14さんがどのような能力の人かわからないし、実際に才能のようなものは本人でもわからないだろうとおもいます。ただし、それぞれのどちらかの世界で上位を目指していくわけではないので、選んでしまうこと自体が無意味なのです。 それより大事なのは時間をかけて、プログラムを始めることです。そこに迷うことはすごくもったいないという思いがあります。
退会済みユーザー

退会済みユーザー

2016/10/09 19:15

現状私に何も能力はありませんので、リリースする国のネット環境や想定PV数などを大まかに記載させていただいていました。 迷う時間はもったいなく時間をかけてプログラムを始めることの方が大事というのは、おっしゃる通りだと思います。 これからどんどん進めていきます。
guest

0

私ならメンテナンス性がデメリットにあがっているならばそれは完全に除外します。

投稿2016/10/09 12:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/10/09 13:07

ご回答ありがとうございます。 さらに調べていたところ、ネストが深くなってしまう点については最新版で解消されているようでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問