はてなキーワード: アセンブラとは
コンピュータのマシン語は命令文もデータも数値で表す。これは今も昔も同じ。
数値だけでは人間が管理しづらいので命令文を mov や add のようなわかり易い単語に置き換えたのがアセンブラ。
複数の処理をひとまとめで扱うサブルーチン・関数・プロシージャ・ファンクションと
いったものができた。
(カプセル化)
アプリケーションからOSの機能を呼ぶシステムコール・APIが生まれた
(ブラックボックス化)
複数のクラスやコード、データをひとまとめにするにモジュールができた。
(カプセル化)
プログラムを外部から操作するRPC、CORBA、SOAP、RMIができた。
IaaS / SaaS / PaaS を使いネット上のサービスにつないでシステムを構築する。サーバ管理不要に。
(ブラックボックス化)
(操作の簡略化)
Docker でWEB/DB/KVSなどをまとめてコマンド1つで扱えるようになった。
なんか書いといたほうがいいような気がしたので書いておく。
なんてところもあれば、中身はARMでLinuxですみたいなところもあるし、その中間でRTOS使ってます。ということもある。
ただ、歴史的経緯として、マイコン制御などと呼ばれていたような時代から組込みソフトウェア開発がはじまって、
時代をくだるにつれて最終製品の機能が高機能化、複雑化するにしたがってソフトウェア開発の規模も比例的に、
あるいは指数関数的に拡大しているわけで、NonOSでアセンブラやCで書くという仕事は相対的に減っている。
(なんせ、ある程度高価格、高付加価値な製品を作らなければ国内メーカーは潰れるしかない)
なので、一番規模が小さいところの仕事はなくなりはしないし、働いている人は食いっぱぐれないとは思うけど、
わざわざ新たに飛び込むのは正直オススメしない。
で、問題は規模の大きい方で、当時マイコン制御をやっていたようなベテランやそれに薫陶を受けた開発者が
「勉強」をせずにこちらの方にコンバートするとどうなるかという話だ。
コンパイラはC++11,C++14であるにもかかわらず、Cもどきのコードを書くし、プロセスは巨大だし、
強烈に古臭いアーキテクチャを擬似的にOS上に構築してしまう。
その結果出現するのは、ひたすら肥大化しアンタッチャブルになったコードと原因不明のバグである。
IoTがどうのこうのなんて言っていても、組み込みが専門じゃない人がラズパイとセンサー買ってきて
一日半あればできるようなことを、ああだこうだやっているようじゃやっぱり生き残る道はないんじゃないかなー。
組込み界では今時のプログラミング界隈の常識の多くが通用しない。最初にあなたが相手にするのはRAM 1kB, ROM 4kB、クロック 20MHzなどというMCUである。
使用する言語はC99かアセンブラである。幸か不幸かC++を使わされることもある。既にC++で書かれたプロダクトに係わってはならない。
当然フロントエンド界隈などのようなイミュータブルインスタンスを大量に使い捨てる富豪的な言語やアプローチの採用は難しいだろう。
トラブルが起きたときにプログラムだけでなく回路図を読んでハード側に問題があるこを示せないと極めて立場が悪くなる。
むしろプログラムし易いコンポーネントの選択や回路構成に積極的に口を出していかないと動かない責任だけがソフト担当者に投げられて割を食う。
開発環境はWindows上のEclipseベースの統合環境が使えれば上等であり、運が悪ければMCUメーカーお仕着せのクソIDEを使わせられる。Macで優雅に開発することはまずあり得ないだろう。
底辺企業でバージョンコントロールシステムの導入のための意識改革は簡単ではない。もし強行に導入しようとすればあなたは孤立する。
誰かがIoTだ、機械学習だの言い始めても社全体として主力製品を作るのでなければ本気で取り組んではいけない。あなたがそのテクノロジーを理解していても誰もサポートもメンテもしてくれないのだから。
君は君のスマホがどのように情報をやりとりしているか理解できているか。情報が電波に、光に、導体に、どのように乗るか理解できているか。OSが何をしているか理解できているか。アセンブラから高級言語まで、どのように組み立てていくのか理解できているか。ネットワークがどのように構築され背景にどのような理論があるのか知っているか。待ち行列理論を知っているか。情報理論を知っているか。エントロピーを知っているか。統計的機械学習がどのように動くのか理解できるか。グレブナー基底を用いた数学証明をコンピュータで構築できるか。君が情報に関わる者全てを工事現場の土方だと思うなら視野があまりにも狭い。君が土方なら私は君の何千倍も優秀な土方であり、そしてかつ何よりその前に建築家だ。
コンピュータのソフトウェアを開発、運用するエンジニアが持つべき知識やスキルの基本セットとは何か?
例えばインテル系CPUのアセンブラが書けます!と言った場合に就活で有利になる場面がどれだけ想像できるか。
UMLのクラス図書けます!とか、暗号化の理論はバッチリだぜ!とか、相対性理論なら任せとけ!とかの場合に
おうおうおう、だったら弊社のホームページをカッコよくしてくれよみたいな案件を無難にこなせるのかというと
甚だ疑問では無いだろうか。
一昔前はソフトウェアはハードウェアのおまけだったわけで、ハードウェアこそがエンジニアが抑えるべき基礎だった。
時代は変わり、ソフトウェアでできることはものすごく多くなった。スマホアプリを作るのに組み込みの知識がなくても困らない。
だからこそ、現代のソフトウェアのみのエンジニアは旧来のコンピュータ関連エンジニアと道を分かたれている事を自覚しなければならない。
今の時代の最適解を見つけるのは困難かもしれない。
だけど組み込み系やマイコン制御をしないのであればアセンブラやC言語よりも優先して学習することはいくらでもある。
html,css,javascript をある程度自在に扱えるようになるのも長期間の訓練による積み重ねが必要になる。
コンピュータサイエンスネタが無いな……これはプログラミングに役立つネタももちろんあって、構造化プログラミングやオブジェクト指向プログラミングなんかもそうだけど、表層的に関数分けました、クラス分けましたとかしてもうまくいかない。ネストが浅けりゃいいってわけじゃない。プログラミング以外のネタもある。サラリーマン巡回問題とか。
第1の理由はもちろん、高級言語の普及により本当にやりたいことだけを書けば良くなってきたことだろう。
コメントを書かない派もCやあるいはアセンブラを書くときはコメントが欲しくなるはず。
それともう一つ、最近のエディタのシンタックスハイライトにも理由があると思う。
Atomのデフォルトのテーマは黒背景で、コメントはグレーで表示される。
背景とコメントのカラーコントラストが小さいので、「コメントの部分は重要でない」という印象を無意識のうちにユーザーに与えていると思う。
自分は適度にコメントを書いたほうがよい、むしろプログラムの見出しの役目を果たすと考えているので、エディタ上でもコメントはもう少し目立つ色にしている(文章でも見出しは本文よりフォントが大きいように)。
プログラマやってるけど、昔話を聞くに、本当に隔世の感があると思わされる。
だって昔のプログラマの仕事って、入念に机上デバッグされたフローチャートを、ただひたすらCOBOLかFortranかアセンブラに翻訳して、コーディングシートに書くだけの仕事だったんでしょ?
フローチャートで書ける程度のロジックなんて全然難しくないので、シートを書き終わった時点で事実上プログラムは完成したに等しいと。
あとはパンチしてもらって、テストは大抵一回動かすだけで全部問題なく通って一丁上がりと。
そりゃ月残業300とか働くのも決して不可能じゃないし、それだってハイになった勢いでガシガシ書けるだろう。
そうやってカネがっぽり稼いで、日々のモヤモヤは酒タバコ麻雀パチンコ風俗でスッキリさせて、そんでまた思いっきり働く。それが男だろ!ってノリだよな。
仕事で懇意になってるパンチャーのお姉ちゃんと裏で仲良くなって、そのまま付き合って…なんてのも普通にアリだろう。
今はもう、あらゆることが複雑になりすぎて、設計だってUMLとER図で対処できるかすら怪しくなっている。
言語だってJavaだけじゃなく、SQLやら、HTMLにCSSにJavaScriptと心得てないと仕事にならない。
そして何より、動かして試して、都度直していかないと分からないことだらけになっている。
プログラマの脳にかかる負荷は昔と比べ物にならない。当然あまりに長時間の労働は事実上不可能。
俺は残業100まで行った所で帯状疱疹が出て、シャワーで腰をさすりながらココらへんが限界と思い知らされた。それが10年前。
勿論今はもっと無理が利かない状況。
でも、残業300可能な時代を、色んな会社で現役として駆け抜け出世した幹部オヤジ達に、今のプログラマが抱えているアレやコレやらは、多分理解できない。
それくらい、時代が変わりすぎたのだろう。見えている世界が違いすぎる。
だから今の若い奴らを根性無しとして完全に見下しているし、本音では「なんだよ急に辞めやがって使えねーなー」とか「アイツ死にやがった、ざまあwww」と思ってる、人でなしの老害ばっかり。
勿論Fortran→C/C++→Javaみたくスキルを身につけてきた人は例外だけど、本当に例外中の例外でめったにいない。
それで「昔のままのノリじゃ、今の開発は絶対に稼げない」ということに思い至らない。
アセンブラ言語、という言い方があったとしても、アセンブラ言語のことを「アセンブラ」って呼ぶのは間違いで、アセンブラは言語ではないって訂正されるでしょ
コンパイラ言語/コンパイル言語って言い方は普通に通じるけど、言語のことをコンパイラって呼んだら怒られるのと同じでしょ
ただ一時期アセンブリ言語のことを「アセンブラ」って呼んでて、途中でおかしいって指摘が入って、「アセンブリ言語」に統一されたんじゃないの
そうかぁ?
An assembly (or assembler) language, often abbreviated asm.....
って書いてあるぞ?
その昔に(今もか)アセンブラについて語っていた奴らには少なくとも
アセンブリ言語はassembly languageの正しい、というかそのままの訳
昔assembly languageをアセンブラって呼んだ馬鹿がいて広まっちまって、その訂正が「アセンブラというのは~言語ではない」