はてなキーワード: コマンドラインとは
$ oppaiopppaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiikawaiikonooppaiopppaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiopppaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiii -bash: oppaiopppaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiikawaiikonooppaiopppaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiopppaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiii: command not found
コンピュータ言語って世の中に山ほどあるけれど、それぞれの言語ごとに特徴がある(特徴のない言語は廃れていく)。
あまり言語に詳しくない人相手に、俺の考えるそれぞれの言語の特徴を書いてみようと思う。
なお、取り上げるのはある程度広く使われている言語に限りたいと思う。
言語名 | 概要 |
---|---|
C言語 | 高速動作するバイナリ生成を目的としたコンパイル言語。だいたいどんな環境でも使えるがバグ出やすい |
C++ | マニアック言語、高速、習得大変 |
Java | サーバで高速かつ安定に動作するコンパイル言語、大規模でよく使われる |
C# | 主にWindowsクライアント用のバイナリ生成に使われるコンパイル言語 |
Perl | 広く使われていたが今は若干時代遅れのスプリクト言語。汚い |
Python | Perlにかわって主流になりつつあるスクリプト言語。綺麗 |
PHP | Web開発にフォーカスされたスクリプト言語。一世を風靡した。 |
Ruby | とても綺麗なスクリプト言語 |
JavaScript | ブラウザで実行出来る唯一の言語。言語自体はいまいちだが、ブラウザの事情で需要あり |
Go | サーバサイドで安全かつ高速動作するバイナリ生成を目的としたコンパイル言語 |
メモリに直接アクセスして書き換えるといったコンピュータの機械語に近い言語構文を持つため、高速な処理が可能な言語。
コンパイラの歴史も古く環境も整っており、組み込み系などを含むほぼ全ての環境で利用可能な万能言語。
一方で、メモリの確保や解放といった基本的なことも自前で処理する必要があるため、コーディングの効率が良くなく、多種多様のバグを生みやすい側面も持つ。
ある程度以上のエンジニアであれば常識として知っておきたい言語だが、初めて覚える言語としてはあまり適当ではない。
C言語にオブジェクト指向を導入した言語。C++言語とはあまり呼ばれず、しーぷらすぷらす、もしくは略してしーぷらぷら、しーたすたす、などと呼ばれる。
C言語の速度を維持したままオブジェクト指向やテンプレートなどの効率的な記述を可能にしようとした意気は真っ当だったのだが、
当時最先端だった色々な技術や思想を叩き込んだおかげで、あり得ないほど複雑化した言語としても有名。
「C++を理解しています」という人はほぼ初級者で、本当に理解していくほど「C++には自信がありません」となっていく。
速度を追求する分野では良く使われている。完全に理解するのは難しいとしても、テンプレートくらいまでは理解しておくと仕事上なんとかなる…かもしれない。
サーバサイドで安全にコードを実行する目的でよく使われる言語。長い歴史を持っており、比較的高速に動作する。
当時は画期的だった「バーチャルマシン」や「ガベージコレクション」という機構を備え、CやC++でよく問題になるメモリの解放忘れというバグを生まず、
サーバサイドなどで何千時間と動作するソフトウェアに適した言語として受け入れられた。
必然的にエンタープライズ用途で利用されることが多く、各種ツールなども豊富。人海戦術がしやすい言語という側面も出てきた。
一方でブラウザにHello Worldを出すだけでも大変な労力を必要とするので、スタートアップなどではあまり使われない。
ガラケーのアプリや(ちょっと違うが)Androidなど、クライアントサイドでも使われることがある。
プログラミング言語で最初にJavaを覚えるという人は結構多いが、仕事としてJavaを使うのは大抵SI系の業務になり、なかなか辛い労働を強いられる可能性が高い。
クライアントサイドで安全にコードを実行する目的でよく使われる言語。こちらも比較的高速に動作する。
元々はWindowsのクライアント用の言語であり、Javaとは違ってクライアント向きのAPIが多数ある。
マイクロソフトが開発した言語ということもあり、マイクロソフトの優れた開発環境が利用出来るので開発効率は非常に高い。
Unityなどでも利用可能であるが、基本的にはクライアントの実行形式ファイルを生成する目的が大きく、サーバサイドではあまり使われない。
自作のゲーム開発をしたいのであればうってつけの言語。初めて覚える言語としても十分に良いだろうが、C#を使う仕事は近年無くなりつつある。
ほぼ全てのLinux系ディストリビューションに含まれており、ツールや様々な用途で使われていた。
上に紹介したC、C++、Java、C#のようなコンパイル言語とは違い、(少し語弊はあるが)1行ずつ実行してエラーがあれば止まるスクリプト言語である。
ちょっと開発してすぐに実行ということが出来るのと、コマンドラインでワンラインのコードを読み込ませてちょっとした処理が出来るなど応用範囲の広い言語である。
20年近く前にWebでCGIが普及した時には、ほぼどのようなサーバ環境でも実行可能だったこともあり、Perlを使うことが極めて多かった。
しかし、主に読みづらい言語仕様のせいで、近年新規ではほとんど使われなくなった。既存のコードもどんどん別の言語に置き換えられていることが多い。
日本の大手Web企業の一部が使っているので、そこに就職するために覚えるのもアリっちゃアリだけど、今からPerlをわざわざ覚えるのは強くオススメしない。
後発のスプリクト言語。こちらもほぼ全てのLinux系ディストリビューションに含まれており、それゆえに広く使われている。
インデントまで言語仕様で規定することで、誰が書いても読みやすいコードになるように考えられている言語である。
Perlの代わりに使われることが増えていて、周辺ツールなども充実しており、小規模から大規模までカバーする勢いがある。
ただ、Python2とPython3のバージョン間での非互換性があまり綺麗に設計されていなかったため、そこで混乱を招いていたこともあった。
最近だとマシンラーニング系のライブラリでPythonが使われていたり、海外ではPerlに代わる言語として受け入れられつつある。
Web開発に特化したスクリプト言語。CGIの代わりに使われ始め、一世を風靡した。
以前CGIでWebに何かを表示するには比較的大変な労力を割かなければいけなかったのが、PHPを使うと誰でも即座にWeb開発が出来たので爆発的に普及した。
またphp.netの豊富なドキュメント&スニペットのおかげもあり、開発初期の効率が大変に良い言語である。
残念なことに、言語やAPIの設計がいけていない点が多く、一部の人からは蛇蝎の如く嫌われている。
今でも根強い人気があり、海外でも小規模プロジェクトの最初の開発にPHPを選ぶのは比較的よくある選択肢であるようだ。
Webアプリを開発をしたいという明確な目的を持つ人が、最初に学ぶ言語としてPHPを選ぶのは理にかなっていると思う。
なおこの言語を本気でディスってる人は大体視野の狭いエンジニアであることが多いので、地雷エンジニアを見分けるのにも役立つ。
綺麗なスクリプト言語。日本発で世界的に普及している数少ないIT技術の一つ。
言語仕様が美しく、それゆえにファンが多い。Ruby on RailsというWeb用フレームワークの登場で、Webアプリでの採用例も一気に増えている。
基本的には他のスクリプト言語と同じくサーバサイドでのプログラミングに用いられることがほとんどである。
スクリプト言語で何かを作成するのであれば、Rubyを選んでおけばそう失敗することはない万能言語。
サーバサイドで何かすることに興味を持っているならば、最初に覚える言語としてはとてもオススメ出来る。
一方で、なぜかRubyが採用するWeb側のフレームワーク(具体的にはprototype.jsやCoffeeScript)はいつもクソなので、そちらは深入りしないのが吉。
ブラウザで動くスプリクト言語。ブラウザ戦争が勃発していた18年前、奇跡のようなめぐり合わせでベンダー間の合意が取れ実装された言語。
言語としてはプロトタイプベースのオブジェクト指向という少しめずらしい形式を取っているが、実際にはあまりその特徴は利用されていない。
言語仕様がイマイチで、大変バグを生みやすい言語であり、また関数のスタックが深くなる特性もあり、あまり積極的に使うべき言語ではないが
ブラウザで動く言語が現在これしかないので、大きなシェアを持っている。
一部の物好きがサーバサイドでこの言語を使おうと(主にnode.jsで)四苦八苦している(とはいえ、1つの言語でWebとサーバが完結するのは大きなメリットだ)。
ブラウザで動く唯一の言語のくせにとにかく書くのが面倒ということもあり、多数のAltJSと呼ばれるJavaScriptに変換される別言語を生み出されている。
まあJavaScript本体人が手で書く言語ではない…というのがECMAScript5までの印象だったが、新しい規格が順次導入されており、今後に期待。
Web業界で生きていくならば、好むと好まざるとにかかわらず覚えなければいけない言語である。
最初に覚える言語としては、ブラウザ上でゲームなども作れるし、node.jsでサーバサイドもできるしで、意外とオススメだったりする。
C、C++やJavaと同じでコンパイル言語。サーバサイドで高速かつ安定なバイナリを出力することを目的とされ設計されたGoogle発の言語。
その目的においてはかなり高性能を誇るので、特に速度を要求されるサーバサイドでのプロジェクトでは導入が進んでいる。
それ以外の目的ではあまりこの言語を採用するメリットはないが、ニッチな用途をピンポイントで抑えており、これから広く利用されることも期待される。
コミュニティも活発であり、初めて言語を覚える人が参入すれば喜ばれるだろう。言語としても美しい言語なので、サーバ系のプログラムに興味があればオススメである。
繰り返しだけれど、それぞれの言語ごとに特徴があり、特徴のない言語は廃れていく。
ここに挙げた言語は何らかの特徴があり、何らかの用途で必要なので生き残っている。
その背景を知った上で、ここにある言語は全部ある程度読み書きが出来るようになると素晴らしいと思う。
そろいもそろってクズ
能力が低いくせに自信だけは一人前で自分の言い分が通るまでは喧嘩腰。
たとえば「私はプログラムのソースコードは読まないよ!だから全行にコメントいれて!コメント入れるのは当たり前の事だよ。私はソースコードを読むときにコメントを英文よ読むように読んで理解から全行にコメントいれて!」
みたいなよくわからん要求を押し通してくる。(ソース読めない人がプログラマか?あほかと)
これやらないとそれを言い訳に文句をいってそもそも仕事してくれない。
SingletonもしらないMVCもしらないJenkinsもしらないコマンドラインもろくに使えない、そんな状態で私はソフトウェア工学を学んだプロみたいな言い方をしてくる。
その自信のせいか人の意見は聞かない。
仕事は終わらせないで帰る、昼飯は二時間戻ってこない、そもそも会社でYoutubeばっかり、ミーティングはずっとスマホいじってて話を聞けと言っても「きいてるよー。私はマルチタスクだから両方できる」などといってミーティングが終わったらさっきは何の話だったの?と聞いてくる始末。
そして浮気!仕事には関係ないからどうでもいいけど、結婚してるのに出会い系サイトで出会った女の子に片っ端からあって遊んでる。そして写真にとってそれをいつも自慢してくる
私はチームにいる誰よりも女の子を抱いた事あるよ!なんて自慢してくる
しるか、しね
二人目、
企画者がもってきた仕事にめっちゃ切れて文句いって仕事しない。
ミーティングしても「いつまでこんなミーティングつづけるんですか!!!!」みたいに
ソースコードの問題をみんなで指摘しても「これはこうじゃないとダメなんです!!!」みたいに
基本自分が正義で自分の意見に反論してくる奴はみとめないのがフランス人
しね
三人目、
四人目、
社員旅行にいったのに飽きたのか途中で誰も言わずに一人で帰ってくる
みんないなくなって大慌て
旅行が終わっていきなり新幹線の切符もってきて開口一番「先に帰ってきたからこれ清算して!」
しね
五人目、
昼頃会社に出社してくる、PCをたちあげるなりおもむろにゲームを開く
夕方までそのまま
そして帰る
あとのフランス人はしらない
ただでさえ働かないのに本当赤ちゃんをあやすかのごとく機嫌を取ってあげないとダメ
フランスはこんな奴らばかりでどうやって経済なりたたせてるんだ?
クズすぎだろ
まぁそんなやつらを見抜けず採用してるうちの会社がダメなだけか。フランス人以外は外れ少ないんだけどなー
言いたい事はやまほどあるが面倒になってきたのでこれくらいで
telnet というか SSH 必須だね。コマンドラインでログインしていろいろ実行するカタチになる。
Let's Encrypt を使うと無料でSSLが導入できてラッキーと思ったのだが、どうも世の中そう単純ではないらしい。
・Let's Encrypt の使い方
を読むと、まず訳が分からん。コマンドラインが書いてあるから「Telnet必須」なのか?
で、どうも「定期的にサーバを再起動させる必要がある」みたいなので、共有サーバでは話にならなさそう。
専用サーバでないといかん模様(しかも基本的にroot権限は必要)。
だったら「root権限付の専用サーバに乗り替えようか」と探してみれば、安いところでも3,000円くらい。
ナウでヤングな月300円弱の安物サーバで独自SSLを使えば+1,500円だから、そっちの方が安く付く。
…そういうものなのか。
※2016/04/14追記:
トラバ感謝。「年額1,500円くらいのドメイン認証」があるという記述を読んで探してみた。
ナウでヤングなところだと「月額」1,500円だが、さくらやエックスサーバーだと「年額」1,500円なのな。
そっちで行くのが絶対に安くて楽だよね。
vimは変態紳士用と言われるだけあって慣れるのにかなり時間がかかり、学習コストも高めだが、
慣れてくると非常にコーディング速くなる。
体感的にはvimにしてからコーディングが2倍〜3倍程度は速くなっている気がする。
しかもまだまだ、プラグインや設定を突き詰めることで、もっと速くなるであろうことも感じられる。
そのほかにもvimを使い始めてからコマンドラインに恐怖感を感じにくくなったし、よりlinuxに親しめるようにもなった。
そんなことから個人的には vimに移行してよかったと思っているのだが、その反面あまりうれしくない副作用も出ている。
vimの操作ではカーソル移動をhjklキーで行うのだが、vim以外のソフト(特にエディタ)の時もhjklでカーソル移動をしようとしてしまう。
また、他にも、モード切り替えのiやjj打鍵、ddで行削除、xで一文字削除、oで改行空行挿入、yyで行コピーなどなどが出てしまう。
vimの操作は体に染み付くと考える前に操作してしまう中毒性があるようだ。
vimで日本語を打つのはあまり便利ではないので(まだ日本語打ちを便利にする設定を知らないので)、
ブログなどを書く時はマークダウン形式のブラウザエディタなどをつかっているが、操作体系の意識的な切り替えが大変だ。
強い薬には強い副作用ということか。
2chなんかでIT系の採用の話があると「学生のときに勉強してた新人は変なクセがついてつかえない。なにも知らない新人のほうが伸びる」みたいな人がよくいるんだけど、こういう事を言ってる所は地雷だよな。
これを言ってるのは、言ってる本人が勉強したことなくて、職場のガラパゴス化した技術しかしらなくて自分自身に変な「クセ」がついてるんだと思うわ。(実際にはスキルにクセなんてないんだけど)
で、自分が劣ってるんじゃなくて「勉強してるやつは変な癖がついてダメだ」って合理化してんの。
「クセ」といえばよく、はじめに学んだ言語が○○だとクセがついてダメだとか、最初にIDEでやるとダメだとかいう説があるじゃん。
プログラミングのスキルをスポーツのフォームみたいに捉えてるんだろうけど、こういうのも言ってる本人がダメっぽいな。
世の中には言語を一個覚えるのがやっとみたいな人と、簡単に複数の言語を覚えられる人がいて「プログラミングのスキルはクセがつく」という発想をしてしまう人は、前者のほうなんだろうと思う。
自分が言語一個覚えるのに四苦八苦するのを、世の中みんなそうだと思って「クセがつく」と称してるの。
CのベテランがJavaの現場にきて、悲惨なコードを書いてるとかあるけど、それはCのクセがついてるからじゃなくて本人にJavaを勉強する気がないからだよね。
「クセ」と言われてるのは、学習曲線が一年くらいで伸びなくなって複数の技術を身につけるのが困難な人が、最初に学んだ技術しか使えないのをそう言ってるだけで、そういう人からしたら確かに「クセ」が存在するんだろうけど、そういう人を前提に新人教育を考える必要はないと思うわ。
IDEから入るとコマンドラインが使えなくなるって話も、そういう人はコマンドラインから入ってもすぐ学習曲線は頭打ちになって、どのみち大したこと技術者にはならないだろうし。
http://jvn.jp/jp/JVN81094176/index.html Android OS がオープンリゾルバとして機能してしまう問題
ってやつね。
報告者の森下さんが「とある方から私個人宛で報告をいただき」と言っているので、その「とある」人として少し背景を書いてみようと思う。
https://twitter.com/OrangeMorishita/status/581314325853306882
発見のタイミングは、Android 4.2 のソースコードが出て少しして、ぐらい。この時点では、Android全てが修正されていなかった。当時、 CVE-2012-3411 (dnsmasq が libvirt の特定の config で使うときにオープリゾルバとなる) が発表されていて、これと同じ問題があるのでは、と調べた結果だった。Android のテザリングは、framework の指示を netd という daemon が受け取りネットワークの設定を変更して実現されている。で、テザリングのクライアントにDHCPでプライベートアドレスを配りDNSのリゾルバを提供するために、必要に応じて netd から dnsmasq が起動される。
そのころ、Android端末の製品開発で、スケジュールに珍しく余裕があり、わりと好き勝手できる状況だったので、AOSPのソースコードを精査していた。
いくつか、セキュリティ問題をみつけて、ものによって単に修正、修正と並行して Google に会社から報告、あるいは単に Google に会社から報告、ぐらいの対応をした。
この問題は、Google に報告だけ、の対応をとった。なぜかといえば、 次のような事情があった。
で、この報告の結果なのか、他の報告もあったのか分からないが、Android 4.3 のリリースに修正が含まれていた。もっとも、国内のほとんどのスマートフォン端末は Android 4.3 はスキップした。森下さんへの個人的な連絡の最初は、Android 4.3 発表より前。
正直、この問題のリスクは、端末ベンダ、および端末ユーザにとっては相当に低いものに見えた。3GやLTEの国内キャリアで、外から端末へ DNS query を許すところはほとんどないだろう、というのは直感的には思っていた(これが間違っている場合は、影響がケタ違いに大きくなるところだった。上流も下流も Wifi という構成のテザリングをAndroidは持っていないので、上流を Wifi と仮定すると、残るのは USB と Bluetooth だけになる) 。NAT される場合ならなおさら。
ただ、ネットワークインフラにとってのDDoSというのは、個々にとってはリスクが低くても、それが何百万台、何千万台とあれば影響が出てくるんじゃないか、という気もした。ちょうどそのころ、森下さんが DNS リフレクション攻撃に関してベンダ等への啓発を始めていたのが目に留まったので、森下さんに連絡してみた。脆弱性対応としてハンドリングするのがIPA や JPCERT/CC になるとしても、ネットワークインフラへの影響ということであれば、表に出ない話も扱える方が報告したほうが適切だと思った。私は原理的には分かってもネットワーク運用に関しては業界の外にいるからね。
事情は知らないけど。
ひとつの可能性としては、「対応未定」の端末、おそらくは対応しないことになるのだろうけど、それらの現役感がなくなってきたからじゃないかな。Android 4.2系が端末のラインナップとして長生きしすぎたせいで、けっこうOSバージョンアップではなくセキュリティ修正としての対応をする製品が多くなったのかなぁ、という気もするけど。
もうひとつの可能性としては、当初よりもインフラへのリスクが上がっているのかもしれない。Android 4.2系の端末で修正リリースが去年の秋とか、これからの近未来とかのが多い、という状況からするとね…。
コマンドラインって何?
そもそも論、コマンドラインってかターミナルから直接作業できるなら、
screenとか使えば1つで書きながら片方でコンパイル、テスト、みたいなことも可能なわけで、
そういうこときちんとなにしてるか覚えろよ、と言う意味だと思うんだけども?
あんたみたいなIDEから覚えちゃったバカのせいで、新しい言語には全く出来ない、IDEが変わったら何も出来ないただのIDEロボットが生まれてしまったんじゃない?
初心者がプログラミングを始めるのに、コマンドラインで始めるべきかIDEを使うべきかって話で「IDEを使って楽して覚えるとろくなプログラマにならない。敷居は高いけどコマンドラインで覚えるべき」みたいなことを言う人いるじゃん。
掲示板とかで「プログラミングをやりたいけどどうしたらいいですか」「とりあえずMSのサイトからVSをダウソしろ」とか言われて、VSをインストールして起動してもなにしていいかわからないだろうし、eclipseなんかインストールの段階でつまづくんじゃないの。
あと、2chあたりで10行や20行くらいのコードを貼って「動きません。教えてください」みたいな書き込みしてる人がいるけど、こんなのもデバッガで変数の中身見ながらステップ実行すれば簡単に分かるのにって思うようなのばっかり。
こういう人は、学校でコマンドラインで教えられてデバッガの使い方を知らない学生なんだよね。
コマンドラインを薦める人のイメージとは違って、コマンドラインからの入門は敷居は低いけどイージーに始められるからデバッガの使い方も知らないようなプログラマを生み出してる結果になってる。
これまでプログラミングがうまい人,下手な人,どちらでもない人をたくさん見てきました
見てきた中から,プログラミングがうまい人の特徴を上げていきたいと思います
ぶっちゃけ,これが一番の特徴です.とにかくプロトタイプを作るのが早い早い
変数名がどうとかオブジェクト指向がどうとか,まるで関係ないです.
コマンドライン引数で変数の調整ができるようにしようとか,なるべく標準ライブラリを
使うようにしようとか,最適な書き方は再帰だろうか,for文だろうかなどといつまでも考えています.
そういうことを考えること自体はとてもいいと思うのですが,この調子でいつまでたっても
誰も後から読めないコード書いたってしょうがないだろ!っていう人もいると思いますが,
大体↑で書いたようなうまい人はリファクタリングも丁寧です(経験上).
コードを書き始めたらとにかく集中しています.周囲の物音やらには全く動じません.
そして集中しはじめるのはいつからいつまで,と決まっているわけではなく,気分が乗ったら
何時間でも集中して書き,乗らなければ書かないという人が多いですね.
下手な人は,集中が続かないか,人並みです.
Windows PowerShellは、ご存じですか?
なるほど知りませんでした。*.batが近代的になったようなもんかと思ってた。
http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner03.aspx
コマンドライン編集時にファンクションキーや矢印キー押させる神経がわからないけど、
Windowsらしいという感じですかね。