はてなキーワード: コンパイラとは
Lightweight Languageが流行ったころはそうかもしれないけど、最近はコンパイラ言語が再び脚光を浴びてると思う。
ならないんだよなあ。
そもそも数学とプログラミングはモチベーションが違うんだよね。数学における証明に構成的証明と非構成的証明があるように、「手続き」というのは数学のごく一部でしかない。それに対して、プログラミングは「手続き」が全てだよね(って言うと関数型とかの人があれこれ言ってくるけど、関数型言語だって結局コンパイラが手続きに落とせる範囲のものでしかない)。
機械学習については、論文書いてる奴も含めて大多数はプログラミング脳なので、最初からコードで発想してそれを論文にするために無理矢理数式で書いてるだけというものがほとんど。無理矢理書いた後付けに過ぎないから意味不明なものも多いしコードに落とせないものも普通にある。だから数式は無視して著者のリポジトリにあるコードだけ見てればいいよ。実用の観点ではコード公開されてない論文は全無視で何も問題ない。
MATLABを使っているが、どうも中途半端な存在になっている。
①言語的な競合はもちろんPythonになるが、Pythonとの差別化が出来てない。
Python側は純粋なPythonだと遅いが、今はC++のラッパーとして使うのが多くなっており、Pythonの方が速いということが起こる。
最近のMATLABはJITコンパイラによって昔ほどfor文を気にしなくても良くなっているが、それでも遅さは気になる。
GPU、分散コンピューティングにMATLABは対応しているが、使いこなすのに苦労する。
GPU使う場合だと、CUDAをそのまま使いたくなるし、GPUメモリーとのやり取りといったオーバーヘッドが加わるので、
単純にGPU使うようにしたら速くなるってことはなく、処理時間を測りながらトライアルを繰り返すことになる。
MATLAB側のエディタは機能が増えているとはいえ、Python+VSCodeとの対抗となると辛いものがある。
toolboxを追加で課金してCコードを吐き出すことはできるが、劇的に速くなるわけではない。
②toolboxは沢山あるが、使い始めると色々足りておらず、Pythonのエコシステムが欲しくなる
toolboxが多くなりすぎていることと、手を広げすぎているのかtoolboxを買って使ってみると色々足りないことがある。
買う前に調べるわけだが、色んな事ができそうだと思って購入し、実際使っていくと、嘘は言ってないが事あるごとに使いにくい所が出てくる。
GUI周りに関しては不満が多い。
③GUIが重い、使いにくい
事あるごとにGUIが重たいのが気になって仕方ない。
また使いにくいのが多い。デザインが良いというのはコンシューマ用ではないので気にしないが、重たさと使いにくさで嫌になってくる。
④plotや可視化周りが重い
エクセルが普通になっている今、エクセルで出来ないことが出来て欲しいが、そうなっていない。
MATLABの言語仕様上、処理が遅い(JITコンパイラで改善されているが)
→ わかる
GUIが基本モッサリ
→ ライセンス料高いのでなんとかして欲しい。
→ライセンス料高いのでなんとかして欲しい。
Image Processing Toolboxの画像データの値を表示するGUIが使いにくい。
→ 追加でtoolbox代金払ったのに何故ってレベル
音の再生、停止、動画の再生、停止、コマ送りなどのGUIが使いにくい
→ なんとかして欲しい。
プロットの細かい調整に時間がかかる。GUIはあるが不親切だったり、誤操作しやすい
→ なんとかして欲しい
→ 今どきディスプレイ前提のことが多いので、論文印刷用以外のプロット方法も準備して欲しい
言語によるけど
関数の引数は原則レジスタに入れて渡すことになってて、でも計算結果はほっといても必ず一度レジスタに入るわけだから、ほとんどのケースでは変わらない
forの条件判定に計算式を入れる場合は念のため変数に入れておいた方が安全
単純な式だったら最適化されるから変わらないと思うけど、コンパイラに「forの中身の進行に応じて条件式の結果が変わるかもしれない」と判断されると最適化の対象にならず、ループごとに計算し直される可能性がある
特に for ( i=0; getNanika(i) < 100; i++) みたいに条件の中に関数が入ってたら100%毎回関数が実行されるので注意
・機械工学は大学で学んだ。機械系4力学のさわりだけなら大体やったがもう忘れている。
・切削加工はけがき、フライス盤、ボール盤、くらいならできるが複雑な形状は作れる気がしない。そういえば旋盤は使わなかった。耐久性を考えなければ3Dプリンタでなんでも作れるらしいが、3Dプリンタは触ったことがない。
・CADは大学の演習でSolidWorksを触った程度。もうすっかり忘れている。手書きの製図とかは調べて思い出せば簡単な形状ならできるかもしれない。
・シミュレータはANSYSをマニュアル通り触った程度。動力学解析とか連成解析とか仕組みは全くわかっていない。
・電気工学はだいぶ勉強不足。簡単な回路図はチップの製品情報を睨めっこしながらINとOUTと接地をどうすればいいかくらいはわかったが、複雑なものになるとダメ。ArduinoとRasberryPiは買ってみたが埃かぶっている。論理回路の読み方はすっかり忘れているが調べれば思い出せると思う。
・化学系は全くの無知。大学受験で知識は止まっている。物性物理的なところも無知。
・数値計算はPythonやMatlabでちょっとできる程度。ライブラリを使った行列計算や簡単なニュートン法くらいなら書けるが、精度や速さが必要だったり複雑になるとダメ。解析は微分積分や常微分方程式を調べて思い出せばできる程度。測度論とか特殊な積分とかいわゆる大学数学的な道具が必要になる解析はできない。
・競技プログラミングはちょっとかじったがやめてしまった。むずかしすぎた。
・機械学習や統計はなんとなく知識はついているが、手を動かして何か作ったことはない。この前統計検定1級落ちた。
・バックエンドはSQLをそれなりに書いてとりあえず動くものなら書ける程度。可用性とかパフォーマンスとか考えられるレベルではない。JavaはJavaEEを横展開的に書いた程度。理解できている自信はない。保守性高めたりデザインパターン的に綺麗な書き方とかできない。C++は一瞬だけ触ったことがあるが、環境構築ハマった&謎のSegmentation Faultで苦手意識を残したまま。Go?Rust?なにそれおいしそうだね。
・クラウドはAWSをマニュアル通りに使っている程度。1から設計なんてできない。なのでAWSのソリューションアーキテクトを勉強中。AzureやFirebaseは触ったこともない。
・ネットワーク系とかセキュリティ系は全く勉強不足。応用情報をギリギリ合格できる程度の知識しかない。わかるようにはなりたい。
・フロントエンドはFlutterを勉強中。Flutterむずかしい、どんな言語でもそうだけどチュートリアルから業務レベルまでの乖離がありすぎてよくわからない。javascriptはjQuery一強時代にちょっと書いた程度。VueとかReactとかなにもわからない。TypeScript?なにそれおいしそうだね。
・ハード系だったりファームウェア系だったりコンパイラ系は何もわからない。わかるようにはなりたい。
全部中途半端だな、、、
女とコンパイラは意外と似ているのではないだろうか
おめー、セミコロンが文末にないやろ、とか言いがかりをつけられても、
文法はどこも間違っていなくて、
よくわからんが、MSのコンパイラはUTF-8のソースコードも勝手にShift-JISに解釈するらしくて、
Visual Studioは「ビジュアル」なはずなのに、
わざわざプロパティーダイアログ開いて、コマンドラインに書くオプションをそのまま書かされて、
なんか不満をもらしたり、言いがかりをつけてきても、
女も客とか上司とかも、本音の部分はどこか別のところにあって、
わざと本音を隠してるのなら人として?まだ分かるのだけど、
意外と多いのは、本人自身も不満の原因の場所をちゃんと理解しておらず、
頓珍漢な場所について文句をたれるので、そういう人はほんとに困る
でも、意外と多い
わざとはぐらかすにしろ、自分で自分自身を理解できてないにしろ、
まあ、わざとだろうが不愉快だが、わざとの方はまだ頭がいい
分野横断的な人材を育成するということだが、マネジメントやコンサルティングの立場が近い。
制御工学や最適化と言った工学の基礎分野は抑えているが、演習もなく、定着しづらいと思う。数理的な面での基礎を学びたいのであれば計数工学の方が適している。
プログラミングもプログラミング言語演習の他、アルゴリズムや計算量理論などの基礎は教えるが、OSやコンパイラ、ネットワークを深く掘り下げることはしていない。演習の難易度は低い。
エンジニアとして技術を学びたい人よりは、プロジェクトマネージャーやITコンサルタントになりたい人向きだろう。
巨大なシステムを扱うため、数理的に扱いづらいのか、テストではなく、小論文のレポートの講義が多い。
社会人になると、技術以外の立場から問題を捉える重要性は理解できるが、大学の講義の中でそれを習得できるようにすることは難しい。
私も工学を製造業以外の分野に広げていく必要がある、経営学やマーケティングの知識をエンジニアが持つべきであると考えているが、エンジニアの技術習得との両立が難しい。
新しい社会に立ち向かおうとする熱意ある人材が集まってくると思うが、方向性が違っていたりすると悩むことになると思うので注意して学科を選択した方がよい。
カリキュラムはもっと情報学、数学、統計の講義を増やすべきだと思う。データ処理の重要性は今後増々伸びていくだろうから、これらの知識もより重要になるだろう。
計数工学科と似てくるという問題はあるが、それらをツールとして扱う立場から学ぶということで差別化していくのがよいとだろう。
いろいろしくじってきたが、その後のことも考えると、人生で一番大きなしくじりだったと思う。
を検討していた。
コンピュータと人工知能に関心があったということが候補を選んだ理由だった。
当時、LinuxやFirefoxなどのオープンソース活動に興味を持っていた。
また、脳科学や認知科学、人工知能など人間の知能に関する分野にも興味を持っていた。
研究分野としてはOS・コンパイラなどのコンピュータの基礎研究という印象を受け、
工学の方が自分の嗜好に近いと考えて工学部の学科を検討することにした。
工学部機械情報学科はロボティクスを中心とした情報を扱っていて、
ロボットのハードウェアへの興味が低かったことから優先順位を下げた。
そして、
を候補として考えた。
機械系のカリキュラム・研究も含まれていて、2つの学科が扱っている分野が共通していた。
違いとしては、システム情報工学では応用物理系の内容を中心に扱い、
知能社会システムでは機械系から社会工学・経済工学まで扱っているという違いがあった。
そして、次の理由から知能社会システムコースを候補として考えた。
私は教養学部での講義からゲーム理論やシェリングの分居モデルなどの話題に触れ、
また、当時行動経済学や経済への物理学の応用などの書籍を読み社会科学系にも興味を持っていた。
人工知能やマルチエージェントや進化計算などの複雑系にも興味を持っていた。
また、自分の関心がある講義が他学科にも分散していたことから、
講義を取りやすいことも良いと考え、自立して科目を選択できると考えた。
また、製造業や電器メーカーの不調から従来の工学系学科に進んでよいのかと悩んでいた。
できて数年の学科だということで新しいことができるのではないかと無根拠に考えていた。
そうして工学部システム創成学科知能社会システムコースに進むことにした。
そうして、システム創成学科知能社会システムコース(PSI)に進学したが、
思うようにはいかなかった。
幅広い分野を扱いつつ、講義数が少ないということで全体的に内容が薄く、未消化気味だった。
また、講義間の関連性が薄く、体系的に学べることが少なかった。
などの工学の基礎となりうることは扱うのだが、基礎に留まっていた。
また、講義を受けてのレポートが中心で理工学の演習は少なかった。
工学部だから機械や電気ではなくても理数系を基礎として扱うのだろうと考えていたが、
予想とは違い少なかった。
統計は理工系でも社会系でも重要なものだからもっと力を入れて欲しいと思う。
そのため、ディスカッションやプレゼンテーションなどの機会があったが、
幅広い分野を扱っているということもあり、学生層が広かった。
その分、興味が合いそうな同級生を見つけにくかった。
カリキュラムが少ない分、就職活動を頑張って学部で外資などに就職しようという
学生も多かった。
全員が全員そうだということはなく、修士も進むことを考えている学生もいた。
他学科聴講は思ったよりもできなかった。
受けたいと思った講義の時間が被っていたり、前提知識が不足していたりして、受講が難しい場合があった。
学科での講義に関心が持てず、モチベーションが下がっていたということもあった。
研究室には学部3年後期に配属される。カリキュラムの少ない分をそこで補う想定らしい。
しかし、私が所属していた研究室では、学部就職する学生が多く、
他大学からの院生やポスドクが中心であまり教育が受けられなかった。
システム創成は機械情報学科や計数工学科と違い、情報理工学系研究科ではない。
進振り時点ではそこまで差を考えていなかったが、講義の内容やPCなどの設備が違っていた。
大学院でより専門性を高めたいと考えて情報理工学系研究科に進んだが、
実力の不足から、大した実績を上げることができなかった。
学部では幅広い内容を身に着けて、大学院で専門性を高めるということを考えていたが、
他の研究室に進学するならば、その研究室と密に連絡を取って、院進学前から
必要な勉強・研究計画作成をしないと、講義や就活で研究に必要な時間が取れなくなる。
このようなことから、大学院では成果を出せず、就職活動もあまりうまくいかなかった。
振り返ると、それまでの人生で初めて大きな意思決定をする機会だったが、そのことを十分に認識できていなかった。
取捨選択するということができず、幅広いカリキュラムがあるということから選択肢がありそうな道を選んでしまった。
安易に考えず、具体的にメリット・デメリットを書き出して、検討すべきだった。
それまでどれかができるということではなく、どれもできるようになろうとしてきたことがあり、
立花隆さんの影響を受けていて、文理ともに学ぶことに憧れていたが、
その難しさを分かっていなかった。
意思決定をするために必要な情報を集めて、裏を取るということができていなかった。
まあ、サークルに工学部の先輩がほぼいないという事情もあった。(普通工学部は忙しいからな。)
もう少し聞けていれば、進学先を再検討していたと思う。
自分が目指すような幅広い分野を学ぶということを行うのであれば、基礎を幅広く身に着けることを
念頭において進学先を選ぶべきであった。
そう考えると、情報科学科や計数工学科に進むことを考えるべきだったと思う。
理学部情報科学科については小中高からプログラミングを扱っている人が多いと聞いていて気遅れしていた面もあった。
独学で学ぶようにはしていたが、学科に進学した方が教育や同級生など成長できる機会は多かった。
学部で情報系の基礎を身に着けて、大学院で応用に広げることも十分考えられたが、当時はその想定ができなかった。
あと、当時情報科学科や電子情報学科が進振りの最低点(底点)が非常に低く、避けた方がよいかなと思っていたところもあった。
進振りで高い点のところを目指していたわけではないが、つい点数に左右されてしまった。
今の機械学習やディープラーニングは自分が当初やりたかったことに非常に近かった。
大学院でそちらに進もうとしたが、実力不足から挫折してしまった。
情報科学科や計数工学科に進学していれば、その分野に進むチャンスが大きかったと思う。
教養学部時代に自分がやりたいことについて、教授に相談したり、一般書籍ではなく学会誌を読むなどしていれば、
進路を明確に決めて、進振りでの失敗も避けられたのではないかと思う。
進振りでは点が足りなくて進学できなくて失敗したという話を良く聞くが、
これは進学先の選択を誤ったという話である。その分、あの時選んでいればという後悔が大きい。
システム創成について、自分の失敗から悪い面ばかり記載してしまった。
私の進振りでのしくじりを具体的に書くことで何か参考になればということで書いたものである。
自由度が高い分、自分で計画を立てて行動できる人にとっては良い面もあると思う。
私自身は進路・キャリアを良く決めないまま進学してしまったため、うまくいかなかった。
など学科の色がはっきりしてきて、その方面に目指す人にとっては良い学科と思う。
(カリキュラムはあまり変わっていないらしいという話も聞くが。)
失敗したと思っても、将来どうなるかは分からない。
現に情報系学科は過去は非常に底点が低かったが、今は高騰している。
システム創成ではないが、大学院で他分野に進んで研究者として業績を上げている知り合いもいるので、
あまり後悔せず、前を向いて進んで欲しい。