ぶっちゃけ始めるのにいい言語て何 part3
■ このスレッドは過去ログ倉庫に格納されています
前スレより 790 1 名前:デフォルトの名無しさん Mail:sage 投稿日:2020/08/18(火) 17:43:05.80 ID:HR/M/dGq >>765 対話的なプログラミング環境、いわゆるREPLは大事だよね たとえば「0から9までの数字で偶数のものを2乗した配列」が欲しいとする もしもこうした環境が提供されている言語であれば: $ irb irb(main):001:0> (0..9) => 0..9 irb(main):002:0> (0..9).select {|n| n % 2 == 0} => [0, 2, 4, 6, 8] irb(main):003:0> (0..9).select {|n| n % 2 == 0}.map {|n| n * n} => [0, 4, 16, 36, 64] irb(main):004:0> その場で、手軽に計算を学習できる、あたかも電卓のように こうしたメソッドチェーン(あるいは関数型言語におけるパイプライン演算子)は、 スレタイにある「ぶっちゃけ始めるのにいい言語」には必須じゃないかと思われ https://qiita.com/subaru-shoji/items/110529c2c1824633d79c 日本語や英語などの自然言語ができるのなら、それよりはずっと簡単なんだから何でもいいから始めればいい 逆に本とかで勉強するだけでは身につかず実際に日常で使っていくのが一番の勉強になる これは義務教育で英語やった人なら分かるはず。よってここはただの雑談スレ 個人的にはCで始めることができたのは運が良かったと思ってる。 もう30年くらい前だが(w)、あのときFORTLANとかCOBOLだったら 今の言語見たら目が滑りまくると思う。 今ならC#かjavaから入っとけば潰しが効く気がする。パラダイムシフト 起こったら知らんけどw >>2 selectやmapだの仮変数nだのをいちいち書かなければならなくて冗長。 ベクトル演算できる言語だとすっきり書けて小気味良い。 R: seq(0, 9, 2) ^ 2 Julia, Octave: (0:2:9) .^ 2 C# 一択でしょ。Windows、Mac、iOS、Android、ウェブアプリ、何でも作れる。型を指定してオブジェクトを宣言するから、自動補完もばっちり。 >>2 irb とか、そんな面倒なものは使わない VSCode の拡張機能・Code Runner(Run Code)で、 ファイル全体、または、コード片を選択して実行できる p range = ( 0..4 ) p ary = range.select { |n| n % 2 == 0 } p ary2 = ary.map { |n| n * n } 出力 0..4 [0, 2, 4] [0, 4, 16] pythonは人気あるけど、括弧が無いっていう他の言語との違いが気になる。 C#とかTypeScriptが良いと思う。 ・・・どうしてマキマはパワーを殺めてもうたん?(´;ω;`)ブワッ javascriptかな。htmlとcssを一緒に覚えるとブラウザで遊べて楽しい。コード例もゴロゴロ転がってる。 何をやりたいかにもよらない? 例えばWeb系やりたいならJavaScriptとか 複合文の波括弧がないということでしょ。個人的にはオフサイドルールは大好きだけど、嫌いという人がいるのも分かる。 >>17 どこまで実用を見越すかってことだろうけどね。 ついでに人気度ランキングも。 だったら、Typescriptかな。 波カッコがないとブロックを終わるときにエディタが助けてくれないのかちょっといや >>2 のお題であれば、波カッコを使えば左から右へ流れるようなコードが書ける (0..9).select {|n| n % 2 == 0}.map {|n| n * n} ところがだ、波カッコを無くしたまでは良かったけど、代わりに丸カッコを三重に入れ子にした コードを書かざるを得ないのが Python といふ言語 list(map(lambda i:i**2 , range(0,10,2)) ) 前スレ「ぶっちゃけ始めるのにいい言語て何 part2 」より引用 http://mevius.5ch.net/test/read.cgi/tech/1594883518/808/ インデントを強制することによってコードを簡潔にして可読性を高める、 と言うアイデアは決して間違いではなかったけれど、Pythonが言語設計の比較対象にしていたのは FORTRAN/COBOL/PASCALそしてPerlといった手続き型言語とそのプログラミングパラダイムだった 確かにWHILE-ENDやFOR-ENDでループ処理をゴリゴリ回すコードが比較対象であれば美しかった けれども時代はオブジェクト指向(メソッドチェーン)や関数型(パイプライン演算子 or 関数合成)といった より洗練されたプログラミング表現へと進化している たとえば古典的な関数型言語のLISPはS式と呼ばれる丸カッコの入れ子が代名詞だけれど、 最初からインデントの強制を前提に設計された関数型言語Haskellであればパイプライン演算子や関数合成は使えるし、 それどころかHaskellは型システムを前提にしたソフトウェア設計論やプログラミンングにおける圏論といった、 未来へと続く次世代プログラミングヘのパラダイムシフトへの影響をもたらしている 当初は手続き型言語として設計された(Perlと比較すれば)簡潔で美しいスクリプト言語 Python、 けれども新宿界隈の雑居ビルのごとく行き当たりばったりに中途半端なオブジェクト指向や関数型が導入された >>23 偶数のみを処理するのとイテレート時に1個飛ばしで処理するのは意味が違うから混同しちゃだめ Ruby (0..9).filter(&:even?).map{|x| x ** 2} Python [x ** 2 for x in range(0, 10) if x % 2 == 0] or list(map(lambda x:x ** 2, filter(lambda x: x % 2 == 0, range(0,10)))) # 醜いので普通は使わない >>24 > 偶数のみを処理するのとイテレート時に1個飛ばしで処理するのは意味が違うから混同しちゃだめ 前スレ808氏が苦し紛れに書いたコードでしたので、私はあえてツッコまなかったのですが。。。鬼ですね > [x ** 2 for x in range(0, 10) if x % 2 == 0] こちらの内包表記を用いたコードであれば「醜さ」は改善されていますね もっともHaskellのように、あたかも数式であるかのように書ければ、 より「美しい」と共感する人は多かったのでは無いかと思われますが [x ** 2 | x <- 0..10, x % 2 == 0] > { x ^ 2 | x ∈ S, x > 3 } みたいな数学の集合の表現が元ネタなのかもね 前スレ「ぶっちゃけ始めるのにいい言語て何 part2 」から引用 http://mevius.5ch.net/test/read.cgi/tech/1594883518/811/ では、続きまして前スレから次のお題です ・ある配列を、昇順に並べて、反転して、文字列化して、間を”-“で繋ぐ [1,4,3,2].sort.reverse.map(&:to_s).join('-') 前スレ「ぶっちゃけ始めるのにいい言語て何 part2 」から引用 http://mevius.5ch.net/test/read.cgi/tech/1594883518/791-792/ このように波カッコを使えば、先のお題と同様に左から右へと流れるようなコードが書けます たいして難しいどころか日常的に見られる簡単なお題ですから、もちろん内包表記でも書けますよね? >>25 >このように波カッコを使えば コードブロックの表現に波括弧やキーワードを使うのか それともインデントを使うのかとは関係なくない? Pythonが複数行のlambdaを書けないのはPython特有の問題だし PythonのAPI設計がオブジェクト指向的じゃないのもPython特有の問題でインデントとは関係ない 単なる癖づけの問題で、多数派の方が楽だよねって思うが。 >>26 そもそも>>25 のコードでは波カッコを使っていない、というオチは置いといて(苦笑 [1,4,3,2].sort.reverse.map(&:to_s).join('-') >>25 で書いたように、Pythonが誕生した手続き型プログラミングが主流の時代には、 > コードブロックの表現に波括弧やキーワードを使うのか > それともインデントを使うのかとは 大いに関係がありました(過去形) Pascal の begin..end を使うのかCの{..}を使うのか、いやそもそもブロック表現は 具象構文にインデントを取り込めば..といった論争です(Occamといふ言語をしていますか?) 今となっては当時を知らない若手か老害しか興味を持たないようなつまらない話題です おっしゃるように問題は、元々は1980年代の設計思想(手続き型パラダイム)で設計されて誕生し、 時代時代の流行を追いかけて後方互換性を断絶するような改変(Python2->3)を強行してもなお、 中途半端な関数型プログラミンングやオブジェクト指向プログラミングしか 書けないPythonの現状にあるわけです で、あなたはこの現状を正確に認識した上で、そんな言語を「ぶっちゃけ始めるのにいい言語」として 他人にお薦めしますか? もちろん実世界の閉じた世界で何も知らない初心者を相手にして、優越感に浸る手段とはなるのでしょうけれど 評価軸の1つとしてそういうことを気にする人もいるというのはわからないでもないけど、Pythonは普通に「ぶっちゃけ始めるのにいい言語」としては上位の方でしょ。 お勧めリストとして、RubyをPytnonより上位に位置付ける人よりも、その逆の人の方が圧倒的に多いと思うけど。 インデントしてりゃそれが制御の範囲を示すんだって頭が できちゃうのは副作用でかくないか? >>28 >大いに関係がありました(過去形) 何と何が関係あるって言ってるの? 左から右へ流れるようにコードが書けるということと コードブロックの表現に何を使うかということは関係ないってのが>>26 の指摘 普通はやらないけどPythonでも左から右に書けないわけじゃない pipe([1,4,3,2], sorted, reversed, map(str), '-'.join) 上の話と初心者にPython勧めるかどうかは全く別の話 >>30 そこまで頭の悪い人はいないでしょ。 「VBAから入ると変数宣言はDimでやるんだという頭ができちゃうから副作用がでかい」とか考えるならそうかもしれないが。 両方やった上でインデントが強制されるのは窮屈だから御免被りたいという意見は十分ありうるとは思うが。 インデントはデメリットに比べてメリットが小さすぎるから採用言語が少ない 行数が減るメリットは小さくないと思うが。閉じ括弧やendが不要なのでまず1行分減るし、開き括弧やbeginで1行使う流儀ならさらにもう1行分減らすことができる。 オフサイドルールを採用する言語が今のところ少ない理由は、メリットの少なさというよりも、インデントを強制されるのは窮屈に感じるという気質の人が、プログラマには少なくないからではないかと思う。 Pythonの人気でそれが今後変わるのか変わらないのかは分からないが……。 字下げスタイルはどれが好き? C#はオールマンスタイル、Javaはカーネルスタイルが主流だけど オールマンが見易くて好きだな 行はその分増えちゃうけど現代では困ることもないでしょう >>36 実際は閉じ括弧の代わりに空行入れるから、ネストしたブロックから一気に抜ける場合以外に行数は減らない 特にPythonだと逆に行数増えるからメリットにはなってない >>36 インデントを強制されるのは窮屈に感じるのは気質の問題じゃなく合理的な理由があるから 間違ってたらバグる、閉じ括弧に比べて間違いを見つけるのが面倒、オートフォーマットできない、改行を入れて読みやすくする自由度が低い 自由度が低いと制約を常に頭の片隅に置きながらコードを書く必要があって脳を活用できる度合いが下がる。 理由をうまく言語化出来ないことを気質の問題にしてるとロクなことないよ >>39-40 そんなに拘るつもりもないんだけど、閉じ括弧やendを使う言語でも普通はその後空行を入れるでしょ。行数が減らないというのはさすがに無理筋無批判だと思うなぁ……。 インデントミスでバグるというのは具体的にどういうケースを想定しているのかよく分からないけれど、ブロックの範囲についてプログラマの勘違い・書き誤りがあるケースなら、早めに検出してくれるほうがありがたいと思うが。 閉じ括弧と比べて間違いを見つけるのが面倒というのもあまりピンとこないような。インデント幅が違っていたら警告が出るわけだし、その後、正しいブロックの範囲を示すように直す作業はどちらでも同じでしょ。ぶら下がりelseみたいな問題が生じないのはインデント強制の言語(あるいは括弧を省略できない言語)のメリットだと思うけど。 オートフォーマットの必要性が高いのは、そもそも括弧を書く位置がバラバラだと読みづらいという問題が大きいからでは? 読みやすさのために空行を入れることはインデント強制の言語でも普通にできるし、文の途中で改行を入れるときに行継続が必要になるというのは、物理改行を文の終わりにする言語共通の特徴だろう。行継続なしで書ける方がスッキリしていて良いという感覚はありうるけれど、それはまさに気質の問題だと思うが。 インデント強制が好きではないという人が多くいるのもわかるので、あまり拘る気持ちもないのだけど、個人的には>>39-40 の挙げる理由はあまり「合理的な理由」とは思えなかったかな。 インデントでネスティングの深さを判断するのに、それをユーザ任せにすると言うのはよくないと思うけどな、人が作った奴なんてインデントを合わせるのに一苦労する。 最初からインデントをチェックしてくれるPython の方がマシ。 Pythonのインデントの関係で引っかかったことがあるのは、ヒアドキュメントとしての三連クォート文字列くらいかな。 最初、/* 〜 */コメントと同じ感覚で書いてしまったんだけど、実際には単なる文字列リテラルで式文だから、インデントルールが適用されるんだよね。考えてみれば当然のことなんだが。 引っかかったことがあるのはそれくらいで、あとは波括弧を使う言語と変わりない感覚で書けていると思う。 行数が減るのがメリットとかプログラムまともに書けない人っぽいなw Pythonのようなインデントに意味を持たず言語もデメリットを理解した上で使うならいいと思うが、全く理解してないんだね 単なる経験不足ならいいけど数年以上やってるようなら言語の弊害と言えそう デメリットの話なら、具体的な点を挙げた方が有益だと思うが。もっともな理由なら「ふーん、なるほど」となるだろうし、大したことのない理由なら「うーん、そうか?」となるだろうし。 いずれにせよ、この手のスレで>>47 のように勿体ぶるクズの気持ちは正直よくわからん。 アセンブラなら インデントなんてあまり気にしなくてもいいんだけどなぁ アセンブラーの書いたC++とか全然OOしてないよな アセンブラーできる19歳の書いたC++がこれだ https://sourceforge.net/p/winvn-jp-kinoko/code/HEAD/tree/iwas19/winvn/wvstring.cpp オブジェクトどこいったw 以下解説 スタックトレースとメモリーリーク検出ライブラリ wvglob.h wvstring.hとかもっとひどい 以下願望 C++のnew演算子もdefineとかでフックしたいぞ OvjectiveCとか一バイトオーバーフローで警告もなく クラッシュして不便すぎる v? bでした、、 プログラマーの老化とメンテナンス性能について なんてスレが欲しい まあ、80486が新進気鋭だった時代のC++だね。 レジストリで計算させてヒープメモリを使わず、 スタック変数さえスピードのネックになった時代っす。 一時キャッシュはあったが二時キャッシとヒープキャッシュメモリとか無かったんじゃ で、本題に戻る。 Visual C# 2019パーフェクトマスターって3200円の書籍かいましたが、 これGUIアプリ作るゴールとして、勉強した方がよき? JavaSwingみたいな今からは時間の無駄ってことにはならん? Javaでは途中まで、やりましたが SmallMIDIMix概要: SmallMIDIMix https://smallmidimix.seesaa.net/article/474509301.html みたいのC#で、できたら、クロスプラットフォームな ライブラリが欲しい アプリまでクロスプラットフォームでないにしてもね 過去スレ全ては読み終ってないですが、、 入りたかった会社の募集みたらC C++って書いてありましたわ、 また戻るのか私は では、、 レジストリワロタwww C#でGUIはWindowsなら色々あるけど それ以外はUnityかXamarinしかないんじゃないかな クロスプラットフォームならElectronが良いとは思うけど GUIアプリならJAVAでも悪くは無いけど今更感はあるかな アセンブラならレジストリで計算しなくても済むんだけどなぁ Pythonってどうやって支持者集めたんだろうね 言語そのものよりコミュニティの中心人物が天才だった? アセンブラの入門サイトで笑ったよ。 誰も信用できない人向けだってさ。 でも、コンピューターとは?ってところから学ぶのも良いかもな。 プログラミングやるのに言語なんかいらん 紙と鉛筆あればできる >>66 教育用言語にはインタプリタ言語が適している。 古くはBASIC 、Microsoft BASIC が一世を風靡した。 その後釜に座ったのがPython 今やほとんどの大学で教えているから、学生、研究者が高度なツールとして使うために膨大なライブラリ群が集まり今や押しも押されぬ位置を占めた。 高度な処理になればなるほどPython 一択。 例えば AI Mucro:bits は小学生用からの勉強用コンピュータ(2000円位)だが、Micro Pyhon が動く。 エディタでブロックプログラミングするとPython コードが吐き出される。 それをMicrobit にダウンなロードするとLチカやブザー、音楽、Bluetooth 、温度計、、、、などで遊べる。 イギリスでは小学生4〜5年生全員に無料配布している。 日本の検定教科書でもPythonを扱い始めた。 教育用コンピュータとして、raspberry pi が生まれた。 数千円でLinux が動く。これもPython で動かすのが基本となっている。 色んなセンサーを追加する事で機械学習とか高度な事もできる。 >>69 プログラムとは目的があってそれを実現するための手順 ピタゴラスイッチはプログラムだけど紙にコード書きこむのはプログラムじゃない >>72 >69じゃないけど、手続き型言語じゃ簡単なのしか紙面では追えない(基本情報の試験とか、コードから実行結果を予想する事自体は不可能じゃない)けど、 Haskellなら多少複雑になっても計算を進めるみたいにして実行結果を求められるよ。 Pythonは昔「こんにちはマイコン」とか本出してたゲームセンターあらしの作者のすがやみつるって人が、 「こんにちはPython」って本最近出したけど、あの人もうおじいちゃんの筈だから 基本的なことはおじいちゃんでも教えることが出来るくらい簡単なのかもしれないね。 >>70 そういう御託やら薀蓄じゃなくて「Pythonってどうやって支持者集めたんだろうね」を 求めてる質問なんだが? パソコンでライブラリAPI使うのはプログラミングじゃないので〜 >>77 プログラミングって問題を解決するためのツールだぞ、利用できるものは何でも使って早く安く解決するのがプロだよ。 1から手作りしてるのはただのプログラミングのお勉強。 逆にわざわざフルスクラッチでゼロから作るメリットってなんかある? >>66 ブームとなったAI絡みにのれた、というのが大きかったのでは それを扱う言語の中では汎用性が高かった 昔は日本だとR言語>>Pythonだったが >>1 質問させてください。 質問内容は初心者はどのプログラミング言語からはじめたらいいのか?です。 色々ググってみると、 1 求人や受託案件から逆算して○○か□□パターン。 2 自然言語のおいてのラテン語にあたるC言語、C言語をものにすれば将来的にもつぶしがきく 3 初心者だから簡単な言語、とにかく簡単な言語△△か××パターン。 4 小学生もプログラミング教育がはじまったから小学生向け教材の◎◎か●●パターン。 5 コンピューターは機械語しか理解しない、機械語から勉強すればコンピューターの動作原理から理解でき真のプログラマーになれるパターン。 こんな感じでした。 1は今のところIT系の業界に就職転職する予定はないのでパス。 2も今の段階ではイージーに始めたいのでパス。 4は簡単に見ましたがプログラム学習が主目的で実際に使えるプログラムができるのか?が不明なのでなるべく避けたい。 5はディープな世界なので後回し。 という感じで3だと思います。 やりたいこと(ゲームを作りたいなど)は特になく単純に作って動かして修正してまた動かしての中で日々の役に立つものができたらいいなくらいの気持ちです。 おすすめ言語を数個教えてください。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる