はてなキーワード: アセンブラとは
恐ろしく雑に言うと
thread_lockって micorosleep(33)
thread_lock
i=true;
thread_unlock
ってmicorosleep(66)
ぐらいの 遅さ
おれたちは よくアセンブラでいわれるけど
どういう処理が どのぐらいの速度になるとか
ちょっと早くなる
とか
かなり
練り込んでやっていて
Pythonなんかがそうだけど
なおせるって思うんだろうな
おれなんて 1行なおすのに1週間かかったことがあるけど
むちゃくちゃ大変だった
なんかさ
とか書くだけで 結果は大きく変わるのがプログラムの世界なんだよって
100万行のプログラムの中に//が1箇所だれかが書き換えた 2文字だから直すの2千円もあれば できるよね みたいな人がいっぱいいて
プログラミングが好きで、高校の頃にアルバイトしてパソコン買いました。
KotlinでAndroidアプリ書いたり、最近では10年ぶりにSpringFrameworkのコードを書きました。
展示会の説明員やったり、セミナ講師であちこち出張したりなど、思いも寄らない仕事もいただきました。
楽しい思い出も、つらいこともいっぱい有りました。
でも、もういい。もう疲れた。
1日2時間の残業とか、片道1時間の通勤ですら耐えられなくなりました。
直近の案件は、契約延長のお話を頂いていたんだけど、9月に体調を崩し、体重が9キロも減ってしまってとても続けられないので、打ち切ってもらいました。
残業ありません。通勤しなくてもリモートワークで良いですよって仕事があれば良かったのですが、そんな都合の良い案件はなく、今後の展望も見込めないので、辞めようと決めました。
なにより、辞めると決めたら、とても気分がスッキリしたんですね。
プログラミングは好きなので、これからもアマチュアプログラマとしてプログラミングは続けたいです。
あとはプログラミング始めたい方のための入門サイトみたいなの作ろうと思ってます。
新人教育とかOJTなどの評判は良いので、果たして私が説明上手なのか、ちょっと試してみたいのです。
そこから2年経って、この2年間でTypescriptだったり, M1だったりとソフトウェア開発者の中では大きなトレンドなりニュースに触れられた。
今となっては、始めて聞いた&触った時には???だったトレンドも随分消化できるようになってきた。
そこで、太古、昔、ちょっと前、の大きなソフトウェア業界の変化やニュースを体験した先駆者がその時にどう感じたのかを知りたくなったので教えて下さい。
大昔ならCの登場とか?
ソフトウェアないしIT業界で実際に手を動かしている1個人としての大きな変化やニュースに接した際の感想を教えてほしいです。
どの会社が~とかはあんまり興味ないです。開発者個人の経験がいいです。
宜しくお願いします。
例えば、黒い画面に白い1ドットの点を打つとする
ここでハードウェアのVRAMと画面が直結していれば分かりやすい
ポインタには確保したメモリ領域の先頭のアドレス番地が入っている
ちょっと語弊があるけど、そのアドレス番地に1を入れれば画面に白い点が表示される、みたいな感じである
自分が子供の頃のMSXとかZX Spectrumだったらそうだった
あと、PC-9801も文字のためのVRAMと画像のためのVRAMがあったんだったかな
98も同じようにメモリに何か直接書けば画面に表示されたはず
あと、その画像のVRAMの上に文字のVRAMを表示させることで、
例えば背景を輝度を下げて表示させ、その上でテキストエディタで作業するとかできたはず
ファミコンとかのカートリッジも挿入すればあれは何らかのメモリ空間に格納されるのだと思われる
カートリッジが挿入されていれば、そのメモリ空間の最初からCPUに実行させればいい
そうすればカートリッジの中のROMに書かれているゲームが動くはずだ
しかし、近年のOSで例えば生のVRAMを直接いじるなんてことはあり得ない
生のVRAMはグラフィクスカードの中などに入っており、それは近年のグラフィクスカード上のGPUやOSによって複雑に管理されている
だから、Windowsなどでゲームを作るときは、まずOSにお願いして、仮想的なVRAMのような領域をもらわなければならない
何をするにもまずはOSのお伺いを立てて、OSがメモリなどのリソースを切り出して与えてくれる
返すときも図書館のように返すのが礼儀であるが、ぶち切りしてもOSは尻拭いをしてくれる
が、尻拭いをしてくれない可能性もあるため、ぶち切りした後に挙動がおかしくなることもあるかもしれない
そう、なんかよく分からんが調子悪いなあ、みたいなことが起こりやすくなった気がする
マシンが重いなあと思ったら、別のプロセス、Windowsで言うタスクマネージャーをチェックする
そして、CPUの使用率やメモリを食っているプロセスを見つけ、殺していい場合はkillしてみる
マルチプロセスで動作することで重くなることもあるし、何か共通のリソース、ファイルなどを奪い合う、デッドロックとかそういうことも起こり得る
しかし、プログラムから直接ハードウェアを動かしている、と実感することは減っている気がする
それはそれで良いことなのだけど、その実感がないことが初学者を混乱させていないだろうかと思った
ハード寄りと言っても、Arduinoでもラズパイでも自分にはあまりそういう実感がない
特にラズパイはLinuxが動いている時点でLinuxが良きにはからってくれるためことさら実感がない
今までの自分のスキル関係なく、今日からスクラッチでソフトウェア開発するとしたら、どんな環境がいいんだろう?という問いかけです。
ちなみに自分は以前組み込み系のエンジニアでWeb系は詳しくない&ここ1年ソフトウェアの仕事から離れてましたが、最近Webアプリ作りたいなと考えてます。
・組み込みソフト・・・基本C言語、最適化するとこはアセンブラ、マイコンのコンパイラが対応してたらC++
・Windowsアプリ・・・C#(.net framework)、nodejs(electron)
・スマートフォンアプリ・・・3DだとC#(Unity)、Dart(flutter)、javascript(React)、作り込むならネイティブ(iOSはswift、androidはKotlin)
・Webアプリ・・・nodejs、ruby(on rails)、Dart(flutter+firebase)、python(Django)
・社内アプリ・・・社内がマイクロソフト環境(outlookとかteams)ならPowerApps
・AI開発・・・python(TensorFlow、scikit-learn)
スーパーのポテトサラダや冷凍餃子はいまどき手抜きとは思わないけど
Wikipediaのコピペやヤフー知恵袋で聞いた内容でレポート出すのはNGって人たぶん多いよね?
どのあたりに線引きがあるんだろう?
そんな手抜きしてたら本当の実力がつかない、とか言ってしまう努力観がそろそろ破綻してきているように思う。(餃子の皮で餡を包む実力?)
惣菜が時間を買ってるというなら、課題のレポートはコピペで済まして研究なり就活なりに時間を費やした方がよかったりしない?
追記:
自分もWikipediaコピペが良いと思ってるわけじゃなくて、さすがにここまでいったらダメだろうという最悪例として出した感じ。
ちなみにイメージしていたのは「○○について説明せよ」みたいな学部レベルのレポートで、理系の場合、表現の差異はあれどほとんどおんなじ内容になる。
なかには「〇〇について独自のアイデアを根拠とともに述べよ」みたいなレポートもあって、それはコピペでは無理。
今まで頭のいい大学の学生もFラン大の学生も見てきたけど、頭のいい学生は先輩なり同期なりからレポートの内容のアドバイス(というか元ネタ)を貰って要領よく効率的に半ば機械的にレポートを書いてるイメージがある。
もちろん頭がいいからそれでも身になってるんだけど。で、先輩学生や同期のできる学生とWikipediaのどっちが信頼に足るかというとケースによるとしか言えない。心配ならちゃんと自分で裏をとるべき。
先輩学生に聞くのと、専門の研究者に聞くのと、昔よりずっと充実した検索サービスを使って文献を検索するのとなにがどう違うのかも時代とともにあいまいになってきたように思う。
貧弱な検索しかできなかった時代は、それっぽい文献をかたっぱしから見てひとつずつ内容を吟味するうちに実力もついたんだろうけど。
あと進歩の激しい分野では文献の内容が古くなっていないか確認する必要もあって、そういうのは人に聞いた方が正確だったりする。
それから前から思ってるんだけど、文献の探索とまとめのスキルを、レポートという形式で評価するのはちょっといまいちなところがあって、
探索スキルなら「〇〇について信頼に足る文献を5個探して列挙せよ」とか、まとめスキルなら「列挙した5つの文献から〇〇についてまとめよ」とすべきで、
それを一気に「○○について説明せよ」みたいな課題にするから、すでに誰かがきれいにまとめたもののコピペの方が良い内容(≠良い作成手段)になるおそれがある。
内容を吟味せずにコピペという行為がダメなのであって、結果として得られたレポートの内容(餃子の味)がダメかどうかは別の議論だよね。
一見、内容の課題に見えて、実はやりたいのは手段の評価で、でも提出させるのは内容部分のみで、評価者の勘と経験で手段を予想して評価するというのは、検索コストが極端に低くなった時代に合わなくなってきたような。
話が逸れた。自分が興味があるのは両極端の事例ではなくて、その中間のOK/NGラインについて。
たとえば公式の導出はできた方がいいけど、応用的な分野では公式を使えれば十分で、(必要になったら調べられるくらいのぼんやりした理解で)公式の導出スキルがないことは非難されるくらいダメなことなのか否かってあたり。
アセンブラは書けた方がいいけど、複雑なプログラムを書いてサービスを作る仕事や、プログラムを書いてなにかを研究する分野でアセンブラが書けないのはダメかってあたり。
以下、プログラミングは出来ない俺の認識が間違っている場所があったら教えて下さい。あと、疑問2つを教えて下さい。
【俺の認識】
1. コンピューター(というかCPU)が実行する命令は【機械語】で書かれている。たとえばx86CPUの場合、0x04ならば『imm8をALに加算する』命令、0x90ならば『何もしない』などである。
2. 流石に機械語のままでは人間がプログラムするには不便なので、機械語をそのまま人間にも意味が分かるように1対1対応で書き直した【アセンブラ言語】というのがある。0x04ならば『ADD AL, imm8 』、0x90ならば『NOP』と表記される。
3. アセンブラ言語のように機械語と1対1対応している言語を【低級言語/低水準言語】と言う(この呼び方、4で書く高級言語が出来てから生まれたレトロニムか?)
4. アセンブラのままでプログラムするのも困難である場合が多いので、機械語と1対1対応していないプログラミング言語もある。このような言語を【高級言語/高水準言語】と言う。
5. 高級言語で書かれたものはそのままではコンピューターには実行できないので、【コンパイラ】というソフトによって機械語に変換している。
6. 高級言語で書かれた状態を【ソースコード】と言う。このソースコードをx86用のコンパイラでコンパイルすればx86で動くソフトになり、SPARC向けにコンパイルすればSPARCで、PowerPC向けにコンパイルすればPowerPCで動くソフトになる。
【疑問】
a. 認識6が正しいのであれば、(サポートするファイル形式の問題などを置いておけば)windowsとmacは現時点では同じCPUを使っているのだから、同じコンパイラでコンパイルしたソフトはwindowsでもmacでも動くのではないか?
20年以上プログラマーをやりかつ大学で専門の教育も受けてはいるが、あるいみ半導体の素子の工学まで見切って、半導体がこの物質でできているからアセンブラはこの順番でよんでいく、などまではまだできないといういみで 不勉強であるとはいっているが、ハローワールドができないといういみではいってないし、それはキャリア見ればわかるだろという世界
ごめんな、つまり
俺たち専門家の中では、できなくてなやんでいるといういみだが、それは野球でもサッカーでも同じだろ?どこも壁は厚い。
雑に言えば世界No1とくらべてるとか、そう考えるとわかりやすいし、まぁ、実際、プログラマーは世界の有名なコードがそこにある世界だからな
ちょっとちがうけど
Dの音をこうだしたいから
バイオリン右に
あと、こうして こうして
みたいな話はある
IntelのCore i7ようとCore i5ようとXeonようではそもそもコンパイラが吐き出すコードも変えることはできるが、
積んでいる命令セットの違いごとにアセンブラを変えておくことができる
それをC++から呼び分けていく いまJavaのバイトコードを勉強している別の言語では1ど作ったつぎはJava シンプルな構造のVM
Googleと同じことをすればいい。ARTと同じものをつくればいい。ここは規模があまり大きくないから ひとりで 勉強がてらつくれる おもしろい でも ひとりでやった実例が ふえていくと
みんなにも できるんだ という自信が増える
ようやく 人数がそろってきている 層が あつくなっている