パスワードを忘れた? アカウント作成
16338 story
プログラミング

プログラマーはマシン語を理解しておくべき? 310

ストーリー by Oliver
そこのあなたにパタヘネ本 部門より

Fatalwedge 曰く、

shi3zの日記にて

当然のことながら、プログラムというのは、マシン語を理解して初めて「書ける」と言うのです。
から始まる文章に対して波紋が広がっているようです。
タレコみ子は現在プログラミングとはほど遠い業務に居ますが、マシン語まではいかないもののPCアーキテクチャの基礎原理を理解しておいて良かった、と感じる場面には多々遭遇します。ましてやプログラマーであれば確かにマシン語(レベルでの理解)をしておいた方が望ましいと思うのですが、さて/.に集うエンジニアの皆様はどれだけマシン語を理解していますでしょうか?また必要性を感じた場面は?
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by sayuporn (33927) on 2007年09月21日 17時59分 (#1222647) 日記
    旅行者はその国に1日でも先に着くと、後から来た旅行者に先輩面するのです。
    自分が機械語解るからって、先輩面しちゃいけませんね。

    ショクレー先生に「コンピュータは半導体を自分で接合してから初めて『使える』と言うのです」と
    説教してもらいたいです。あとこのコピペも。

    696 :Mr.名無しさん :2007/01/09(火) 22:53:01
    電車のボックスシート(2人掛けの席が向かい合っている)で、
    隣に座ったオヤジが激しくふんぞり返って股を広げきっていたので、
    わたし「狭いんですけど」と言ったら、
    オヤジ「しょうがないだろう!これ以上どうやってよけるんだ?」
    わたし「どうやっても何も、他の人はきちんと座れてるじゃないですか」
    オヤジ「女の癖にうるさい!」
    わたし「女の癖にって、あなただって女から産まれてきたんじゃないんですか?」
    オヤジ「屁理屈を言うな!大体、それが目上の者に対する態度か!」
    わたし「目上と年上は違うと思うんですけど。
         バカでも死にさえしなけりゃ年はとれますから」
    オヤジ「目上も年上も同じだ!年上の言うことは黙って聞け!」
    その時、向かい側に座ってた初老の男性が、

    「じゃあ俺の言うことなら黙って聞くんだな?」

    と一言。
    オヤジは返す言葉がなかったらしく、席を立って
    次の駅で降りてしまいました。
    • Re:旅行者の法則 (スコア:5, おもしろおかしい)

      by leiqunni (8779) on 2007年09月21日 19時11分 (#1222705) ホームページ 日記
      ここでインテルの開発者が現われて、
      「昨今のCPUはマシン語からμopに変換するので、マシン語は相対的に高級言語だ。
      だからマシン語はμopを理解してから初めて云々」
      と言って欲しいですね。
      親コメント
      • 昔のZ80とかは制限が多くて書きにくかったみたいだけど、i386以降はバカみたいに書きやすいから、マシン語のマシン語っぽいところはほんとマイクロコードのほうに行っちゃったんだろうね。

        じゃあプログラマがマシン語のようなものを通じて知っておくべき知識ってなんだろう?

        ・スタック
        ・ポインタ(アドレス)
        ・ビット演算

        正直どれも要らない。

        プログラミングの基礎として知っておいて欲しいのはこんなところじゃないかな。

        ・無駄なリソースを使いまくらない。
        ・実際にどうやって処理されるか考えて書こう。

        特にSQLなんかだと、テキトーに書いて一生終わらないクエリがよくあるので、データベースの中でどのように処理されるのか想像できるぐらいの知識が欲しい。
        親コメント

        • ・スタック
          ・ポインタ(アドレス)
          ・ビット演算

          正直どれも要らない。

          Javaやスクリプト言語でWeb系開発するくらいなら、概ね同意ですが、
          CやC++を生業としてる人や、組み込み系な人は、上記3項目は基礎知識として必要じゃないですかね。

          プログラミングと一口に言っても、ワンマイコンチップのファームウェアから、ビジネスロジックまで、
          いろいろあるから、こればかりは、分野によるでしょうなあ。
          そういう意味では、SQLの仕組みの知識についても、分野次第で、必要だったり不要だったり。

          私の場合、C++でSQLクエリエンジンを実装したことがあるので、どちらもやる羽目に。。。

          親コメント
      • Re:旅行者の法則 (スコア:3, すばらしい洞察)

        by pharmer (32222) on 2007年09月22日 0時34分 (#1222926)
        ここでインテルの開発者が現われて、
        「昨今のCPUはマシン語からμopに変換するので、マシン語は相対的に高級言語だ。
        だからマシン語はμopを理解してから初めて云々」と言って欲しいですね。

        理解できるよう努力しますんでぜひとも公開してください。
        親コメント
    • Re:旅行者の法則 (スコア:3, すばらしい洞察)

      by Anonymous Coward on 2007年09月21日 19時35分 (#1222720)
      なぜ、マシン語などという狭い世界の話に落とし込むのかがわかりませんね。
      時代によってCPUも変わるし、プログラム言語の流れだって変わってる。

      なにで書くかなんて飾りです。それがご老人にはわからんのですよ。

      むしろ、数多くのアルゴリズムを知識として蓄積したほうが、 よっぽど「書ける」プログラマの素質なんじゃないかなと思いますけどね。 実際に、指定された言語で書けるかどうかはわからないけど、 学習は早いと思いますよ。
      親コメント
  • 参考リンク (スコア:5, 参考になる)

    by Anonymous Coward on 2007年09月21日 18時03分 (#1222653)
    機械語ではマシンの挙動は理解できない [hatena.ne.jp]は押さえておくべきでは。

    肩が凝った人のためにネタ [bogusne.ws]も置いておこう。
  • by Anonymous Coward on 2007年09月21日 18時10分 (#1222657)
    タレコミ子はわかっているようですが、必要なのは「マシン語(レベルでの理解)」であって「マシン語」ではない。
    • by Anonymous Coward on 2007年09月21日 19時23分 (#1222713)
      同意。
      「プログラマはアーキテクチャを理解して一人前」とか言い直したら評価はかわるのかな?
      僕含め、賛同する人はみんな「マシン語==アーキテクチャ」に変換してますよね。

      純粋に「マシン語」であるというのであれば、僕も要らないと思う人ですが、
      アーキテクチャを理解する事はプログラマとして、必須でしょうとも思う。
      そして、マシン語はアーキテクチャに直結しますから。ねぇ?
      親コメント
  • by SNT (23129) on 2007年09月21日 18時20分 (#1222665)
    AthlonXP2500+で900秒かかったプログラムが
    Pen4 2.8G HTで2000秒かかった。
    (プログラムはとある画像処理のプログラム)

    何でかなぁと思ってソースを眺めていたら (注・他人が書いたコード)、
    ifの嵐になっている部分があり、なおかつそのifの分岐確率がほぼトントンのようだった。
    そのため、分岐予測が失敗して、パイプラインストールが大量に発生していて、
    パイプラインの深いPen4が圧倒的に遅くなってしまったようだ。

    これマシン語じゃなくて、CPUの中の人の話か……。
  • by Anonymous Coward on 2007年09月21日 20時52分 (#1222762)
    どこにぶらさげようか迷ったので新規で。

    一応CAD屋やってます。
    最近のCADはパラメCADと言って、形状を手順で表現するのが普通です。たとえば、円柱を表現するときに、円を軸方向に平行移動した軌跡であるとか、長方形をその1辺を軸にして360度回転させた軌跡だとか、いろいろ表現できるわけです。
    これは形が複雑になってきても同じで、いかに簡単な図形を組み合わせて形状を作っていくかという勝負になります。この時に必要なのは「物事を整理してひとつずつ順番に組み上げる」という考え方です。その手順は何通りもありますが、目的に応じて選択する力も要ります。

    実は、CADは持って生まれたセンスというか得手不得手があるので、モデリングが下手な奴(でもパソコンは自称得意な奴)は、業務をサポートするマクロを作るほうに回そうとしたのですが、これがちゃんとしたマクロも組めない。実は必要とされるのはCADモデリングと同じ「物事を整理してひとつずつ順番に組み上げる」ことだったのです。

    そう思うと、アセンブラというのは一番プリミティブな道具しかないので、「物事を(r」練習には向いています。アセンブラを知らないからその考え方ができないとは言わないけど、逆にアセンブラをやってればそういう練習は嫌でもしたはずですから、そういう人のほうがプログラミングも上手だし、ひょっとしたらCADモデリングも上手かもしれません。

    そういった意味でアセンブラやれってのは賛成。
  • 言語と目的によるだろ (スコア:3, すばらしい洞察)

    by hylom (27448) on 2007年09月21日 17時59分 (#1222649) ホームページ 日記
    Cで書くなら、マシン語とまではいかなくてもパソコンの動作原理(メモリにデータと命令が混在していて、CPUは指定したメモリ位置の命令を読んで・・・とか。いわゆるチューリングマシンの話)は知っておくべきだろうし、JavaとかPerlとかPHPとかだったら別にそんなのよりも必要な知識はいっぱいあるだろうし。

    もしかしてJavaとかPerlとかPHPとかでのコーディングははプログラミングじゃねぇ!とかいいたいんじゃ・・・とか思って元記事を見たらそうではないみたいですが。

    # 学生時代に実習でマイコンのプログラミングをしたとき、「サブルーチンをアセンブラで書いてもいいですか」と教官に聞いたら「そんな無駄なことする必要はない」とか言われたことをふと思い出した

    • by km (11453) on 2007年09月21日 18時25分 (#1222669) ホームページ
      ×「そんな無駄なことする必要はない」
      ○「そんな(オレが知らないアセンブラをを見るという時間の)無駄なこと(をさせる気か?だから)する必要はない(ただでさえ…)」
      親コメント
    • by kicchy (4711) on 2007年09月21日 18時38分 (#1222676)
      ># 学生時代に実習でマイコンのプログラミングをしたとき、
      >「サブルーチンをアセンブラで書いてもいいですか」と教官に聞いたら
      >「そんな無駄なことする必要はない」とか言われたことをふと思い出した

      無駄です。

      あなたが聞いたと言うことは、あなたが出来るからです。
      なのでわざわざ書く必要がないということです。
      カリカリチューンしろという課題ならともかく、
      そうでない部分の学習だとしたら教師の言うことはもっともです。

      # ただ「必要はない」だけで書いてもよかったんじゃないですかね?
      # 完璧を期すなら、アセンブラを使うバージョンと使わないバージョンを作りましょう。
      親コメント
    • by Anonymous Coward on 2007年09月21日 19時19分 (#1222710)
      どんな時でも知っておいてソンは無いですよ。

      だってコンパイラやCPU自体にバグが無いって訳では無いですから。

      親コメント
    • by i-nak (13217) on 2007年09月21日 22時37分 (#1222828) 日記
      バッファオーバーフローを利用したマルウェアを書く人には必須かもね

      # 実際に書いたことはないので本当に必須かどうかは知らない
      親コメント
      • by Anonymous Coward on 2007年09月22日 2時24分 (#1222982)
        逆もしかり。
        食い扶持でCやC++でコードを書いている人は自分の書いたコードがどういう風に
        機械語に変換されて実行されているか位は少なくとも知るべき。
        自分の書いたプログラムに脆弱性が発見されてもどこをどう直せば直るのか全く
        わからないという屈辱を味わう事になるよ。

        #そして無能な開発者は本来はお礼を言わなきゃならない報告者に逆ギレするわけだ
        親コメント
  • たとえば (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2007年09月21日 18時47分 (#1222686)
    最低マシン語の知識が不要だと言うためだけのためにも、
    マシン語の知識は学ぶ価値がある。
    マシン語の知識をまったく持たない人間に、
    マシン語の知識の要・不要など論じる資格はない。
    マシン語の知識はそういうものだと思う。
  • by Anonymous Cowpat (32210) on 2007年09月21日 19時06分 (#1222704) 日記
    コンパイラのバグに遭遇した時~♪

    --
    C++ でプログラムを書いていて、C++ レベルでは間違っていないはずなのに動作がおかしいという事があり、アセンブリ言語(≒マシン語)レベルで調べてみると、コンパイラ(Visual C++ 6.0)の最適化処理がバグってた…orz

  • Binary Hacks ─ ハッカー秘伝のテクニック100選 サンプル PDF [0xcc.net]で読める「本書に寄せて」が好きですね。表向きの部分でも、それ以外でも。
  • by aSilo (34754) on 2007年09月21日 22時06分 (#1222812) 日記
    エラーを出して赤バッテンと共にレジスタの中身を表示したり、
    デバッガで動かすと何事もなかったかのようにマシン語コードの中にステップインしたりするのを見ていると、
    「マシン語ぐらい常識だよなっ!」
    と、マイクロソフトの中の人が主張している気がする。

    もう若くないので勘弁して下さい。
    せめて疑似コードぐらいにまからないものか……
    --
    -- Where your reading book is, there will your heart be also  天戸 司郎 (Silo Amato)
  • by k.kmn (29899) on 2007年09月22日 8時21分 (#1223038)
    学部学生にコンピュータアーキテクチャを教える事もあるんだけど、

    授業で学生にキャッシュやパイプラインの話をしても、上の空。
    でも、これらの話と関連させて自分のPCの性能測定と考察をやらせると、
    関心の度合いがぜんぜん違う。
    すごい単純なプログラムで、性能が100倍も違う場面を見せられたら、
    気になるでしょうね。

    知識って、役に立つ場面が思いつかなければ、不要だと思って
    しまうんです。

    # /.Jで 薀蓄を語るって言うのも、十分役に立つ部類かと、
  • それなりの期間仕事してると、高負荷状態が長時間続くとか、
    そんな感じの障害が突然発生して、それを最優先で復旧しなきゃいけない、
    とかそんな事態があるわけですよ。

    で、そういう障害の原因を調査すると、ソフトウェアが原因だったりすることが多いわけ。
    デバッガとか使いながら原因と思しきプログラムのソースコードを見ると、一目で
    「ああ、俺だったらこんなアルゴリズムにしないのに…重くて当然だよ…」
    と感じるわけです。実際、そこを修正すればすぐに障害復旧できたりする。

    んで、なぜ自分がその原因箇所を理解できたか? …と考えると、やっぱりマシン語レベルというか、
    そういうところの知識を利用してるんだよね。
    マシン語まで理解している奴が職場にいなかったら、
    この障害は長期間持続することになったかもしれない。
    そもそも、開発者がマシン語を理解していれば、障害は発生しなかったかもしれない。
    そういう経験を何度かすることによって、「プログラマはマシン語を理解しておくべき」という
    信念が形成されるわけだ。

    逆に言えば、障害時に原因箇所を特定できる能力を養える他の方法があるのなら、
    別にマシン語を理解しなくてもいいと思うんだよね。
    ま、そんな方法思いつかないから、現状ではマシン語を理解するのはベストの方法だと思うけど。

    そんなわけで、全員とは言わなくても、
    アプリケーション開発者の10人に一人くらいはマシン語まで理解している人がいて、
    その人を開発のリーダー的なところに置いておいたほうが品質が向上するんじゃないかと思います。
    --
    # mishimaは本田透先生を熱烈に応援しています
  • そりゃそうだろ (スコア:2, すばらしい洞察)

    by chaoruko (5485) on 2007年09月21日 18時32分 (#1222671) ホームページ 日記
    でも理想かも。

    常識だ!とかいってもしょうがないものがいっぱいあるように。

    メールの仕組みなんかしらなくたって
    携帯電話からメールは送れるし
    その人たちにメールの仕組みを知るべきとかいってもしょうがないし

    というレベルぐらいまで
    しらないままに書ける言語がでてきているからしょうがないとおもう。

    自分はいろいろ開発しているけど
    プログラマもどきだしSEでもない
    そんなふうに自分が足元がおぼつかないことは
    文系の女子は自分自身が一番よく知っている

    そんなことにわざわざ突っ込みいれるのは
    モテないかも

    それぐらい

    • Re:そりゃそうだろ (スコア:2, すばらしい洞察)

      by dummyk (31080) on 2007年09月21日 23時07分 (#1222852) 日記
      学生時代、講義中に『SMTPを理解していない人間はEメールを使う資格はない』などと
      のたまう講師がいました。
      これを聞いて、「SMTPを理解していない人が居るからこそ、SMTPを理解している人に価値があるんじゃねーの?」と思いました。

      遙か昔は「読み書きできる」ってだけで仕事になったのに、今では読み書きなんて(少なくとも日本では)仕事が出来る最低限のライン。
      少し前は「コンピュータが使える」だけで仕事になったのに、今では表計算/ワープロソフトは最低限使えることが必須となりつつある。
      これで「SMTPを全ての人が理解している」状況になったら、そのテの仕事は無くなりはしないけど激減するのだろうなぁ。

      #記事は「技術者なら」とのことだろうけど、あの講師は「使うなら」だったからなぁ。。。
      #それが本望ならばいいけど、自分で自分の首を絞めている気もする。

      ##リンク先を読んでたら、同じようなことを叫んでる人が他にもいると知りました。
      ##あの講師の言動はその受け売りだったのかな
      親コメント
  • by mission_if_possible (11120) on 2007年09月21日 18時36分 (#1222675) 日記
    MIPSアーキテクチャがステータスレジスタ [wikipedia.org]を使えないのは高級言語での使用を前提としているからだと書いてあって
    機械語命令まで知る必要はないかなと思いました。
    その後SoftwareDesignでPowerアーキテクチャのコンパイル後の逆アセンブル結果を見ながらチューニングする記事があって
    機械語で書けなくても流れが読める能力は必要かなと思い改めましたけど。

    #でもデバッグは主にprintf
  • by hi-kin (11760) on 2007年09月21日 19時37分 (#1222725)
    マシン語っていうより、プロセッサの知識はあった方がいいと思う。
    組込み分野にいて、ソフトもハードもやってるとプロセッサの知識は役に立つ。
    HPCの分野の人なら、キャッシュとか分岐処理とかの知識があれば高速化の手がかりになるだろうし。

    でも、大学の情報工学科を出た人ならたいてい、授業でパタヘネ本とか使ってプロセッサや論理回路の
    勉強したんじゃないのかなぁ?
    特に、論理回路を勉強しないなんてことはないと思うんだけど……
  • by Anonymous Coward on 2007年09月21日 20時36分 (#1222756)
    そもそも、高級言語は「プログラマに低級言語を意識させないこと」を目的に作られているので
    機械語を理解しなきゃいけない高級言語は欠陥言語です。
    この前提からすると、プログラマはマシン語を理解する必要はない!
    理解しなければならないとすると、使ってる言語が悪い
  • by foobar2006 (30156) on 2007年09月21日 21時38分 (#1222792) 日記
    OSから離れ、僕のマシン語プログラムが走り出す・・・

    不快な他人のコードは1bitたりとも走らない。
    メモリを蹂躙し、デバイスをひれ伏させる。
    マシンのすべては我が物だ。すべてが我が掌に乗っている。

    そのとき、僕は神になる。
  • 量子力学を知らなければ化学ができない、なんてことはない。
    化学を知らなければ生物学ができない、なんてことはない。
    生物学を知らなければ社会学ができない、なんてことはない。

    量子力学を修めて社会学者として成功した人なんていないだろう。

    Java、PHP、Rubyなど最近のプログラミング言語を使うときは、マシン語(量子力学)よりもオブジェクト指向やデザインパターン(社会学)の方がよっぽど重要になって来ている。マシン語に拘っている人は、得てして「木を見て森を見ず」になっていることが多いように見える。
    • by Anonymous Coward on 2007年09月22日 2時57分 (#1222994)
      ジョークを一つ思い出しました。

      哲学は、実際には心理学である。
      心理学は、実際には生物学である。
      生物学は、実際には化学である。
      化学は、実際には物理学である。
      物理学は、実際には数学である。

      数学とは……哲学そのものである。
      親コメント
  • by uxi (5376) on 2007年09月21日 23時20分 (#1222872)
    昔はアセンブラじゃないと出来ない事も多かったので、
    積極的に手を出す動機付けも多分にあったけど、
    今じゃ Kernel, boot loader, compiler を作る以外では
    そうそう必要にはならないはず、、、

    下手に使っても、ポータビリティは落ちるし、
    最適化コンパイラじゃないとまともなパフォーマンスも得られんしで、
    68 から移行した時に、もう必要ないや、、、って捨てちゃった、、、

    そもそもマシン語とは言え、
    所詮は数ある命令セット(つまりはプログラミング言語)の1つに過ぎないわけで、
    どうせ覚えるんなら、
    OOPとか、AOPとか、λとか、etc, etc,,,
    優先して覚えた方がメリットが大きいものは他にいくらでもあるだろう。
    # つまり、アセンブラ修得の優先順位は相対的にかなり低い、、、

    多分、元記事の主旨は、
    プログラムカウンタやスタックなんかのイメージを持つべきって意味だろうけど、
    それは無理にアーキテクチャを特定したアセンブラである必要はない。
    # あくまで概念だけでも十分、、、
    # どうせ変数がレジスタと同じ数しか定義できん C みたいなもんだから、、、

    しかも今日日の一般的なプログラマって、
    インタプリタ系の言語使ってる割合がかなり増えてるわけで、
    唯一メリットになりそうなデバックの効率化という理由でも覚えるメリットは少ないだろう。
    --
    uxi
  • C/C++使いなら (スコア:2, 参考になる)

    by SAY (54) on 2007年09月21日 23時48分 (#1222895) 日記
    知っておく方が良い、というレベル。

    少なくともエンジニアなら「何故?」と疑問に思えば追求するでしょう?
    例えば__stdcall, __cdecl, __thiscallが絡んだエラーや、printfの可変引数のからくりは
    アセンブラがわからないとわかりづらい。

    最近質問されたものだと、Callback用メソッドには何故staticを付けるのかというのがあった。
    それでstaticを付けない形のCallbackの記述法を示してメソッド名を書いて呼び出す際と関数
    ポインタの場合とでアセンブラレベルでどういった差が出てくるのか、thisポインタがどのよう
    に処理されるのか説明したんだけど、何らかのアセンブリ言語の知識が皆無の相手へ説明して納
    得してもらうのは難しいと思う。

    でもブラックボックス的に納得して先に進むのもありだし、「理解しておくべき」じゃないね。
  • by Anonymous Coward on 2007年09月22日 0時31分 (#1222925)
    引き出しとして「マシン語」を持っているならば効率的なコードを書く可能性が高いという事でしょうかね。

    自分の恩師が以前こんな事を言っていました。

    先生「今、メモリがすごい安くなっているでしょう?」
    自分「そうですね。128で1万円切っていますからね」
    先生「その内、256や512で1万を切る時代が来ると思うんだよ。その時はメモリを効率的に使うプログラムよりもメモリを無駄に使って高度な事をする技術が広がっていくようになると思うんだ」
    自分「メモリって大切じゃないですから。ちゃんとリソースを使い切らないように管理しないと」
    先生「でも、別に管理しなくても回収できるような仕組みが出来たらそれも考える必要がなくなるんじゃないかな。むしろ、そういう 『無駄遣いする技術』って今後増えてくるような気がするなぁ」

    当時64Mでひーこらマシンを動かしていた自分には衝撃的な話でした。
    んで、実際今になってまさにメモリを無駄遣い(してるよーにしか見えない)OSでメモリを無駄遣いする言語(所謂Script言語)を使ってゴリゴリ面白いコードを書いています。
    先生の予言というか、予見はまさに的中。
    詰まる所、必要とされる技術は状況や時代によって変わる訳でして、「マシン語」が「絶対」なんて事はないんです。
    少なくとも開発効率という点を考えるならばらマシン語より遙かに効率の良いプログラム言語なんていっぱいある訳ですよ。
    どうしてもスピードを重視しなければいけないような仕事(組込系とか?)をする時に、マシン語という引き出しを持っているならば有利に仕事を進めることが出来ると思います。

    今後、今回のタレコミにあった「マシン語」には「C言語」「Java」「Perl」「PHP」「Ruby」「JavaScript」「オブジェクト指向」「デザインパターン」なーんて言葉が入るようになるんじゃないかなぁ。

    それだけ引き出しとなる物が増えたことにもう少し喜ぶべきでは?
  • とりあえず勉強して理解してみたらいいとおもいます。
    そうすれば、言っていることが正しいのか間違っているのか自ずとわかると思います。
    理解していない人には解らないでしょう。
    わからなくていい人は、そもそも関係ないので、議論に参加する必要もないと思います。
  • by Anonymous Coward on 2007年09月22日 3時02分 (#1222995)
    知らない人は”その時”がやってきても気づくことができない。
    知っている人はそれができる(可能性がある)。

    ただそれだけ。
    でもそれがでかいんだよな。

    -----------
    くるみ「学校で習ったことなんて社会に行ってから役に立たないってお父さんが言ってたよ~」
    ベッキー「教育を役立てられなかった負け犬の家庭か」
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...