はてなキーワード: unixとは
これでどうやってゲームを作ったり、検索エンジンを作ったりするんだとなってくる。
つまり言いたいことは、実際に動くアプリケーションというのを作りたいのにも関わらず
プログラミング入門書は、これで判定と繰り返しという基礎ができますと言うだけ。
これがもう滅茶苦茶イライラする。
検索エンジンを作るとしても、検索エンジンにも色々あるのだけど、仮にGoogleを作るとする。
そうすると、まずページランクの論文を読むのは必須だと思われるが、
論文読まなくても日本の大学の授業の内容などが公開されてるので、それで分かりやすい解説を探したとする。
そうするとマルコフ連鎖とか、少なくとも高校、大学学部の行列計算の知識は必須となる。
ここで受験勉強なんて何の役に立つの?といった詰め込み教育に反対していた人達は挫折する。
英語も数学も単なる道具であって、詰め込み教育というのは理由はともかく先に道具を持たせる教育である。
必要になれば必要性を感じるのだから、必要になってから学べばいいというのは往々にして遅い場合がある。
例えば、敵が襲い掛かってきてから初めて剣や盾の使い方の必要性を感じても遅いのである。
よく分からんが学校や塾で装備をくれるというのだから貰っておこう、と思えなかった人はここで脱落する。
プログラミング言語の本でよくあるパターンは文法の説明などで始まり、ファイル入出力などで終わるというのがある。
なぜ、ファイル入出力で終わるのか?
これはUnix哲学とも言えるのかもしれないが、現在になってもコンピュータの世界では、すべてをファイルと考える、というのがある。
と思う人がいるだろうが、それは半分正解であり、半分ちょっと違う。
文字とかバイナリと呼ばれるものが入っているファイルはファイルの一面に過ぎない。
例えば、ディスプレイに図形や文字を表示する、プリンタに出力する、別のコンピュータと通信するための仮想的なつなぎ口を作る、
https://b.hatena.ne.jp/entry/s/www.itmedia.co.jp/news/articles/2011/11/news066.html
AppleSilliconの話だけど、ARMでDockerのイメージねぇとか言ってるけど、ラズパイで動いてるDockerはなんだよみたいな。
https://hub.docker.com/search?q=arm64&type=image&architecture=arm64
っていうか、技術者なら乗れよ。ビッグウェーブに。UNIXどーのこーのいうなら苦労しろよ。ばーか
損したらどうしようとか、ケチしかつけられねーのかアホ。90年代はイチバチでボーナス突っ込んで買ってたし、自作だって何万するGPUあるし、カメラとかiPhone目じゃねぇから。
ので、unixbenchの結果を貼っておく。
========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)
System: thinkpad-x260: GNU/Linux
OS: GNU/Linux -- 5.4.0-45-generic -- #49-Ubuntu SMP Wed Aug 26 13:38:52 UTC 2020
Machine: x86_64 (x86_64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (4999.9 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
CPU 1: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (4999.9 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
CPU 2: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (4999.9 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
CPU 3: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (4999.9 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
21:26:57 up 1:01, 2 users, load average: 0.00, 0.00, 0.15; runlevel 2020-09-04
------------------------------------------------------------------------
Benchmark Run: Fri Sep 04 2020 21:26:57 - 21:55:00
4 CPUs in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 38124852.7 lps (10.0 s, 7 samples)
Double-Precision Whetstone 6422.0 MWIPS (9.9 s, 7 samples)
Execl Throughput 4264.8 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 515046.2 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 140474.5 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1617517.8 KBps (30.0 s, 2 samples)
Pipe Throughput 697605.3 lps (10.0 s, 7 samples)
Pipe-based Context Switching 170352.7 lps (10.0 s, 7 samples)
Process Creation 10427.0 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 9734.6 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 2353.1 lpm (60.0 s, 2 samples)
System Call Overhead 398924.8 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 38124852.7 3266.9
Double-Precision Whetstone 55.0 6422.0 1167.6
Execl Throughput 43.0 4264.8 991.8
File Copy 1024 bufsize 2000 maxblocks 3960.0 515046.2 1300.6
File Copy 256 bufsize 500 maxblocks 1655.0 140474.5 848.8
File Copy 4096 bufsize 8000 maxblocks 5800.0 1617517.8 2788.8
Pipe Throughput 12440.0 697605.3 560.8
Pipe-based Context Switching 4000.0 170352.7 425.9
Process Creation 126.0 10427.0 827.5
Shell Scripts (1 concurrent) 42.4 9734.6 2295.9
Shell Scripts (8 concurrent) 6.0 2353.1 3921.8
System Call Overhead 15000.0 398924.8 265.9
========
System Benchmarks Index Score 1152.9
------------------------------------------------------------------------
Benchmark Run: Fri Sep 04 2020 21:55:00 - 22:23:04
4 CPUs in system; running 4 parallel copies of tests
Dhrystone 2 using register variables 103355568.3 lps (10.0 s, 7 samples)
Double-Precision Whetstone 22425.8 MWIPS (9.9 s, 7 samples)
Execl Throughput 10514.5 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 878593.5 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 237997.4 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 2896282.9 KBps (30.0 s, 2 samples)
Pipe Throughput 1718493.4 lps (10.0 s, 7 samples)
Pipe-based Context Switching 381500.2 lps (10.0 s, 7 samples)
Process Creation 26280.8 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 18979.1 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 2716.0 lpm (60.1 s, 2 samples)
System Call Overhead 951109.4 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 103355568.3 8856.5
Double-Precision Whetstone 55.0 22425.8 4077.4
Execl Throughput 43.0 10514.5 2445.2
File Copy 1024 bufsize 2000 maxblocks 3960.0 878593.5 2218.7
File Copy 256 bufsize 500 maxblocks 1655.0 237997.4 1438.1
File Copy 4096 bufsize 8000 maxblocks 5800.0 2896282.9 4993.6
Pipe Throughput 12440.0 1718493.4 1381.4
Pipe-based Context Switching 4000.0 381500.2 953.8
Process Creation 126.0 26280.8 2085.8
Shell Scripts (1 concurrent) 42.4 18979.1 4476.2
Shell Scripts (8 concurrent) 6.0 2716.0 4526.6
System Call Overhead 15000.0 951109.4 634.1
========
引きこもりから抜け出し25歳で就職してから今年で35歳になる。
引きこもりから抜け出した後に情報系の専門学校に通ったものの、「C言語ができない人間はエンジニアで非ず」と言う
講師の影響でプログラミング嫌いになり中古のルーターやサーバーで遊んでばかりいた(上記の講師が担当していた資格取得の講義もやる気も出なかった)。
よって3年で身に付いたスキルはネットワークとCiscoルータとUNIXとLinux(RHEL系)に関する知識のみだった。
その専門学校で自分に紹介されるのはプログラミングが嫌いならと言う理由で特定派遣会社(中小規模)ばかりだった。
就職後、新卒で入った会社では銀行系の現場に派遣されたものの営業がやらかしたのか「新卒が来るなんて聞いていない」と
騒動になりウチの会社と旧知の仲である1次受けの現場担当の部長が間に入って落ち着いたものの現場の社員からはOJTをして貰えず
突然「死ね」とか「消えろ」とか「こんなクズがココにいるなんて」と暴言を吐かれたり、業務の進め方を聞くと胸ぐらを掴まることがあった。
そんなこんなで「仕事をしない」と言ったクレームが自分が所属する特定派遣会社に入り雇用契約が打ち切りとなった。
打ち切りになってからは会社から同じ系列の工場派遣の会社に異動を命じられ拒否したら、自動的に自己都合退職となり辞めることになった。
その会社には2年半いたが教えてもらった事はない・・・今更ながらにさっさと辞めればよかったと思っている。
そのころに鬱病を発症して3年ほど療養した後に、リベンジで転職活動したがスキルのなさで再び特定派遣会社に就職することになった。
その会社は保守とサポートメインの会社だったネットワーク重視と聞いてはいたが、ネットワークのネの字も出てこないような
24時間365日年中無休のコールセンターとヘルプデスク業務がメインだった、そこでは障害の1次切り分けや
電話対応スキルで大いに学びがあった・・・・・が技術的な学びは一切なかった。
その会社には2年ほどいたが、仮眠も取れないような環境で日勤と夜勤が続く過酷なシフトに嫌気が出てきて辞めた。
初めて引き留めにも合い給与を今(手取り11万)から手取り19万に上げると言われたが丁重にお断りをして円満退社だった。
そして次は転職エージェントを利用してみたもののスキルの低さから今の特定派遣会社に入った。
そこはネットワークの運用と保守・監視をメインとしているため給与は微妙(手取り20万)けれど
通信・ネットワークをメインとする大手企業や中堅企業に派遣されるため今までの会社よりは学びがある。
今年で会社に在籍して3年が経つ、自分の年齢も35歳になった。これまでの業務経験から得た能力は
「極度のストレス環境で業務を追行する能力」「お客様相手の電話対応能力」であったが今の会社にいたおかげで
「Cisco機器の障害復旧やコマンドに関する知識」と「サーバーの障害復旧やコマンドに関する知識」が加わった。
しかしながら、はてなで見るような輝かしい経歴も開発経験もないため35歳でコレではゴミクズと言われてしまうレベルだ。
知り合いの中では部長や子会社の副社長に抜擢された奴もいる・・・・・それに比べたら俺はゴミクズだ。
ゴミクズと自覚をした上で、今度どうするかは未だにわからない。
特定派遣の正社員になって10年が経った・・・・このまま手取りが20万程度で何とか働けると言う現状では
年齢による首切りにあった瞬間に生活保護申請になってもおかしくない、何度も親に迷惑を掛けただけにあまり心配もさせたくない。
エンジニアのスキルは掛け算でなんて話も見たが元々がゼロかマイナスな人間には当てはまらないだろう。足し算をするにしても
タイトル通りなんだが、
「初心者にはmacおすすめ!」「世の中のプログラマはみんなmac使っている!」
というバカなことを言っているアホが仰山いて笑える。
しかも、最近、OS事情が大きく変わっているのに、未だにwindowsはunixコマンドガーとか言っているやつが居る。もうね、言葉を失うよね。
まず、最近のOS事情の移り変わりなんだけども、windowsが最近かなりLinuxに近い触感になるような機能が多く追加され続けている。
例えば、wsl(コマンド関係)やwinget(CUIインストール)が挙げられる。
他にそれらを取り巻くプログラミング事情としては、vscodeがある。vscodeは、powershellやsshだけでなく、wslのコマンドも使えるようになっている。
そのため、従来はpythonやらjsはめんどくさ。とおもっていた点もある程度は改善されている。
ちなみにmacは特に最近はプログラミングに関する話を聞かない。
自分が、プログラミング環境の次に、大事な要点だと思っているのが、一般人の使用含めたシェア率。
正直、作っても誰にも使ってもらえないという状況では、全く意味がないので、シェア率は非常に大事だと思っている。
最近のデータでは、88%ぐらいがwindowsであるという統計がある。web系やiosアプリならまだしも、パソコン一般人に使わせたいソフト(特にゲームとか)を作りたいなら、windowsしか選択肢ないと思う。
そんなわけで、元からmac使いなら、まだしもわざわざwindowsから乗り換える必要は全くない。
ただ、mac使いでも全くwindowsでないと非常に困るということは、ある程度は…無くなってきてはいるですよねー。
ほれ、クロスプラットフォーム開発が盛んで、ライブラリなどの環境から障害は、少なくなってきているので…ただし、ios開発お前だけは許さない。
1点目は、web系からプログラミング始めたいとかいう奴に釘差したい、
web系はある程度セキュリティやらデータベース、コマンド知識やらないと爆死する。そんなわけで、GUIオンリーでパソコンを楽しんできた奴には、マジでお勧めしない。
まずは、webからではなく、統合開発環境上で実行ファイル(メモ帳とか)を作れる方面から始めろ。そして、linuxとかネットワークとかセキュリティとかの本を片っ端から読め。webを始めるのは、それからだ。
webでも実行ファイルを作ることは、星の数ほどあるし、別に必要ない知識はないぞ。
2点目は、勉強用とはいえ、いつも使っているOS上で、コマンドが使えるからと鯖建てるな。(windows・macどちらも)
かならず、仮想OSでやれよ。ミスって、apacheインストールできないとか言われても、周りは困る。とりあえず、わけわかめになったら、スナップショットでリセットしとけ。
プログラミング言語を印象批評している記事に触発されて、自分も印象批評してみようと思う。
JavaScript以外にもブラウザ上でぐりぐりするのにはJava AppletとかFlashとかSilverlightとかいろいろあったけれど、結局標準化を成し遂げたHTML5に淘汰されちゃった感じがする。LiveScriptからJavaScriptに改名されたり、規格を話すときはECMA Scriptだったりといろんな別名を持つ。一応、プロトタイプベースのオブジェクト指向言語なんだけれど、それを意識してコードを書く人がどれくらいいるかは謎。
Pythonは小さいコードを書くのには楽だけど、これで大きなコードを書くと思わぬ変更で思わぬことが起きるのでつらい。しばらく使うとPythonイヤイヤ病にり患し、goを使うようになるらしいとか、ならないとか。pythonで大規模なコードを万一書こうと思うなら、カバレッジが高いテストを書いてくれと思う。
Javaは初期のころオートボクシング / アンボクシングもなく、ストイックなオブジェクト指向言語だった記憶がある。ただ、staticを多用してオブジェクト指向とは程遠いコードも簡単に書けるので、Javaで書いているからと言ってオブジェクト指向だと思うのは禁物である。
PHPはWebネイティブな言語で、初期のころHTTP POST/GETなどで渡された変数がそのままプログラム中に出てくる機能や初期化していない変数を最初に使うと空文字列あるいは0で初期化するという機能があった。また、文字列と数字を臨機応変に切り替える機能もあり(今もそうかは知らん)、数字と文字の比較を比較演算子(==)でシームレスにできる。パスワードチェックみたいなコードで===ではなく、==を使っているとPHPを知らないバカ扱いされる。
C#はHello Worldくらいしか書いたことないから知らん。monoのような互換環境があるのは知っているけれど、わざわざPC Unix上でmonoを使う気分にはなれなかった。
C++は黎明期に使った感じと、C++11以降に使った感じが驚くほど違う言語。今はかゆいところには大抵STLで手が届くし、autoを使えばイテレーションで腱鞘炎になることもない。PC Unixにも最初から環境がインストールされているか、簡単にインストールできるので毛嫌いせず使うとよいと思う。
Rubyはぎょっとする変更をよくやるというイメージ。これで書かれたプログラムを長年愛用してきたが、ぎょっとした変更を入れられて動かなくなったのでgoで書き直した。その点ではpythonも3でおいていかれたので嫌い。
TypeScriptは書いたことないから知らない。JavaScriptだと大規模コードを書くとつらいのでTypeScriptを使おうという人がいるのは知っている。大規模なコードを書くとしたら、インタフェースに合った呼び出しかコンパイル時にチェックしてくれるような強く片付けされた言語のほうがよくなってくるというのはわかる。
Cは片付けし、構造化したプログラムを書きやすくしたアセンブラ...というイメージだったんだけど、C99くらいから便利機能がいろいろ入ってそうでもない感じになった印象。昔はCのコードを見たら最適化した後のx86アセンブリが見えていたんだけれど、最近は見えなくなってしまった。子供のころ、本屋で秘伝C言語問答 ポインタ編に出会ったのがこの業界に入るきっかけだったのかもしれない。ほかの言語でいろいろ楽に書けるから、カーネルをいじるか、システムコールをたたくかするときくらいしか自分の中では出番がなくなってしまった。
これ以下のランキングのもその気になったら書こうかな。