WindowsでVisual StudioなどのIDEを使用するよりも、テキストファイルまたはターミナルを介してプログラムを作成する方が(読みながら)より良いオプションであるのはなぜですか? IDEが提供する機能はそこに存在しますか(たとえば、コンパイルエラーを表示する)、または手動プロセスですか?
この種の仮説は、 Programmers.SE の方がうまくいく可能性があります。そうは言っても、私は数年間.NET開発者であり、Visual Studioに依存するようになりました。それはあなたのために多くのことをし、はい、私は特に統合デバッガが好きです...しかし、私は人々がLinuxを選ぶいくつかの理由があると思います:
Ubuntuは無料です。 WindowsとVSは非常に高価になる可能性があります。
Ubuntuはfreeです。 WindowsとVSでは、それらの使用方法をほとんど制御できません。
Ubuntuは、すぐに使用できるプログラミング環境です。 Bash、grep
、sed
、awk
などのツール。歴史的に、Windowsはスクリプトを作成する上で大きな苦痛です。バッチファイルはひどく、PowerShellを使用しても、Windowsのコマンドラインエクスペリエンスは、BashやGNUツールと比較すると、取るに足らないものです。その一部をWindowsに移植できますが、同じ体験ではありません。
複雑なセットアップは、apt-get
、 Puppet 、 Chef 、 Juju 、 Fabric および簡単なスクリプト。
複雑なIDEを必要としないものもあります。私は最近Python開発者であり、独自の組み込みツールとデバッガーに完全に満足しています。テキストエディター、コマンドライン、およびファブリックを使用します。単一のFabricコマンドでwebappをビルド、テスト、コミット、デプロイできます。
だからといって、モノリシックなIDEがないわけではありません。 EclipseおよびNetbeans。 MonoDevelop。 KDevelop4およびQT Creator。彼らはすべて、彼らに誓うユーザーを持っています。
Ubuntuの方が良いですかあなたにとって?知るか。これは、非常に機能的でカスタマイズ可能なシステムです。チャンスを与えて、あなたの役に立つようにワークフローを変更したら、それを固めることができるはずです。
ただし、もう1つの重要な理由を追加します。 Ubuntuは、新しいライブラリ、言語、IDE、およびコンパイラの実験に最適です。すべてが簡単に逃げられます。
あなたは Haskell と呼ばれる派手な言語について聞いたことがあります:
Sudo apt-get install ghc
nano hello.hs
<copy-paste hello world example>
ghc -o hello hello.hs
./hello
Hello World!
ああ、Haskellの素晴らしいエディターを聞いたことがあります:
Sudo apt-get install <fancy-editor-for-haskell>
C / C++ ライブラリと同様に、ライブラリをapt-get install
するだけで、バイナリとヘッダーが適切なフォルダに移動し、#include
ソースファイルでそれらを配置する場所を確認する必要もありません!
本質的には、日々の作業環境をどれだけ速くセットアップできるかということではありません。また、実験環境を非常に高速にセットアップできることも重要です。それがLinuxでの学習体験を加速するものだと思います。
主にマイクロソフトのプラットフォーム開発者からの意見です。 .NETエコシステムを対象にしていない場合、最善の選択肢はUbuntuであると主張します。 Windowsの代わりにUbuntuを使用している場合、他のほとんどすべてのプラットフォーム/言語のツールを取得、構成、および使用するのがはるかに簡単になります。
Microsoftのツールチェーンの価値は、高度に統合されていることです。 IDEからソース管理、プロジェクト管理、ビルド、展開、データベース、クラウドインフラストラクチャ、ad nauseumへ。マイクロソフトは、プラットフォームを徹底的に使用する場合に非常に簡単にします。
一部の人が述べたように、Microsoft Wayから逸脱することは苦痛です。コードに.NETを使用し、データベースにOracleを使用するのは大変です。
.NET Webアプリケーションを作成して、それをAmazon Web Servicesにデプロイしたい...それほど単純ではありません。
しかし、マイクロソフトエコシステム内にとどまると...その赤ちゃんはあなたのためにbird笑の鳥のように歌います。有能なソフトウェア開発者の手に渡れば、Microsoftプラットフォームは才能あるアスリートのPEDのようなものです。アマチュアのプログラマーが次のFacebookを作成できるようにするつもりはありません。しかし、それにより、各要素がどのように組み合わされるかを理解している才能のある開発者にEdgeが提供されます。
Ubuntuを始めるための無料の(ビールのような)コストの議論は出ていません。Microsoftが無料でツールを使い始めることができるプログラムがたくさんあります。スタートアップ企業に3年間のライセンス(ツールの製品使用ライセンスを含む)を付与するBizsparkを含みます。そして夢sparkは学生に無料で提供します。
そうは言っても、新しい言語とプラットフォームを探索して学習したい場合は、Ubuntuを使い始めるためのより良いツールが見つかります。Microsoftエコシステム以外の仕事を探しているなら、慣れる必要があります。 Ubuntuで。
Command-_ l _でIDEとテキストエディタの両方のツールを使用しますineInterface (と呼ばれる) CLI)、プログラムを作成します。
Linuxが提供するのは、デフォルトのインストールから始まる有用なCLIです。あなたがそれを必要とせず、とにかくIDEを使用しているだけなら、もうほとんど違いはありません(IMHO)。
私はしばしばテキストベースのツールを使ってプロトタイピングを行います。後で、管理するファイルが増えたら、 リファクタリング IDEが提供するツールを評価します。
私は答えをリングに投げます(これらはすべて良いものでもあると思いますが)。
あなたが得ることができる最も基本的な答えは、それは哲学に関するすべてだということです。
マイクロソフトの世界では、それは少し宗教的です-あなたは山に神を持っています。何か実装したい場合は、請願しなければならないレドモンド。時々彼らは耳を傾け、別の時にはあなたの犠牲と嘆願は耳が聞こえないでしょう。おそらく彼らは狩りをしていました。マイクロソフトはエコシステム全体を制御します。彼らはOSを所有し、IDEを所有し、SEネットワークで話すにはおそらく不適切な方法でそれらを結合します。 IDEピース内でも密結合されています-integratedと呼ばれることもありますが、結合の方がより正確だと思います。少し変更したい場合、Gatesは、WindowsまたはVisual Studioのデザイナーが明示的に許可していない方法で何かを変更することを禁じます。そして、IE、IIS、Microsoftサーバー、MS SQL Server、Officeなどのテクノロジーを投入すれば、すべてが素敵で幸せな家族です。しかし、家族の一部を置き去りにしたい場合はどうでしょうか? shudder!
一方、あなたはLinuxを持っています。LinuxはUnixの哲学を継承しており、各ピースはそれぞれの小さな責任範囲に責任を持つべきです。それはoneのことをすべきであり、うまくやるべきです。そして、できれば、テキスト文字列を介して通信を行う必要があります。他の人が指摘したように、sed
、awk
、grep
などは、この完璧な例です。彼らはone彼らがするように設計されていることを行い、彼らはそれを非常にうまくやる。 twoを行う必要がある場合は、2つのツールを組み合わせます。これは非常に簡単です。
sed
は入力されるテキスト以外は何も期待しないので、テキストを生成できるanythingはホイールを再発明する必要がないことを意味します。単にsed
を使用できます。また、sed
はテキストを生成するため、readread(---)できるものはすべてsed
からの出力を使用できます。テキストは非常に普遍的であり(これにはいくつかの例外があります)、これらの種類のことを組み合わせるのは非常に簡単です。
それらを組み合わせるのは簡単であるだけでなく、それらを分割することも非常に簡単です-ストリームを編集する必要がなくなったと判断した場合、テキストをsed
に渡すのではなく、結果をフィルタリングしたい場合は、代わりにgrep
に渡します。
現在、これはLinux環境での開発の背後にある基本的な哲学です。したがって、そこから進んでも、多くのツールが同様の種類のインターフェースを提供します。これらを使用すると、それらを部分に分解したり、コマンドライン、ポート、またはHTTPを介してインターフェイスしたりできます。
そして、それがではない場合でも、オープンソースソフトウェアもあります。 Linuxプラットフォーム上のほとんどの(すべてではないにしても)ソフトウェアはオープンソースです。そのため、作成方法が気に入らない場合は、ソフトウェアを完全に、完全に、絶対に変更することができます。これは非常に強力です。 IDEを思い通りに分解することはできませんか?変更を行ってアップストリームに送信するか、プロジェクトを分岐します。何かがそのように振る舞う理由がわかりませんか? ソースを使用、ルーク! コマンドラインから何かを自動化できるようにする必要がありますか?プロジェクトをハックして、変更を反映します。バグやセキュリティの問題に遭遇しましたか?推測できる-自分で修正できるので、SP3.432vb89234.startdate1eQが出るのを待つ必要はありません。
必要なツールを組み合わせることができます。そして、あなたの邪魔をしているものがあれば、それを100%変えることができます。あなたが能力を持っていなくても、あなたは確かにその変化を開発するために誰かにお金を払うことができます-または、ノウハウを持つ他の誰かにそれを提案することさえできます。
これがプログラミングに適している理由は、 friction に出会うと、ワークフローからそれを削除できるからです。開発はhardであるため、成功したプログラマーになるために考えなければならないことがたくさんあります。 他のことを考えるのは難しい 。
摩擦をなくすことが重要です。
マイクロソフトの場合 エコシステム宗教は家庭で感じる場所であり、ツールを非常に楽しんでいるので、あまり/何の摩擦もありません...まあ、それはおそらくちょうどいいです。
しかし、特許申請中のMicrosoft Mold(tm)に適合しない場合は、摩擦が発生します。開発は苦痛になります。 wishするたびに、何かできることがありますが、できません。それは貴重な認知リソースを浪費します。その場合は、おそらくLinux開発環境が最適です。
私は質問に対するより一般的な考えを提供したいと思います:
「なぜLinuxはプログラミングに適した環境なのですか?」
Linuxで開発する最も重要な理由は、ほとんどのソフトウェア内部について完全な洞察を持っているからだと思います。興味があれば、物事が実際にどのように機能するかを学ぶことができます。これにより、実際の動作を確認することで、良いプラクティスまたは悪いプラクティスを学び、適応させることができます。これにより、アイデアの多様性が高まります。
Visual Studio および特定の目的に役立つXcodeに加えて、最も一般的なIDEはマルチプラットフォームです。数十の言語に膨大な数のIDEがあるように見えるかもしれませんが、最終的にはそれらのほとんどは Eclipse 、 IntelliJ IDEA または NetBeans のいずれかに基づいています=。共通点は、すべてJavaベースであるということです。 Javaは、同じハードウェア上の他のOSよりもLinuxでより効率的に機能します。実際、Javaは、同じハードウェアのOS XよりもLinuxで20%も高速です。これらのIDEの多くは、Ubuntu Software Centerでワンクリックでインストールできます。
GCCは非常に業界標準になりました。疑いの余地なく、その主要なプラットフォームはLinuxであり、最もよくサポートされています。そして、無料でロイヤリティフリーです。
Linuxは、たとえば Valgrind (メモリデバッグ、メモリリーク検出、およびプロファイリング用のツール)など、他のプラットフォームでは利用できない独自のツールを提供します。 Linuxには、 strace や ltrace などのデバッグツールも付属しています。これらのツールは、本番コード(デバッグシンボルを使用してコンパイルされていないコード)でもデバッグできます。 Windows用の同等のツールは、存在しないか非常に高価であり、同じ機能を提供しません。
Ubuntuには優れたパッケージマネージャーがあります。ほとんどの場合、ソフトウェアのインストールはapt-get install package-name
だけです(Ubuntu Software CenterまたはSynapticのGUIでも実行できます)。一度インストールすると、バグ修正リリースでシステムによって自動的に更新されます。また、パッケージシステムは自動的に依存関係を追跡するため、他のパッケージが必要かどうか心配する必要はありません。それらは自動的にインストールされます。
一方、Windowsでは、パッケージを手動でダウンロードしてインストールする必要があり、他のパッケージが必要な場合は、それも手動で行う必要があります。システム全体の更新もありません。各ソフトウェアパッケージは、独自の迷惑なアップデータを実装するか、まったく更新しません。
バックエンド、Web、クラウドなどのプログラミングを行う場合、ターゲットマシンがLinuxである可能性が非常に高くなります。ターゲットマシンと同じ種類のOSで開発している場合、意外な驚きはほとんどありません。
もちろん、Windows用のデスクトップアプリケーションを開発しているかもしれませんが、今日では、これはプログラマーにとってはニッチな仕事市場です。
WindowsでVisual StudioのようなIDEを使用するよりも、テキストファイルまたはターミナルを介してプログラムを作成する方が(読みながら)より良いオプションなのはなぜですか?
そうではありません、私はそれが全く反対だと主張することができます。しかし一般的に、人々は得意なツールを好む傾向があります。使用するツールの種類は、プログラムの作成が簡単になるという利点があります。したがって、たとえば、vimでJavaプログラムをうまく書くことができますが、EclipseやIntelliJのような本格的なIDEとは対照的に、それは本当に生産的ではありません。 Jon Skeetは、質問に対する素晴らしい回答を提供しました なぜIDEを使用する 。
元の質問に戻りますが、Linuxの長所はCプログラミングだけです。 Linuxでできることはすべて、Windowsでもできます(その逆も同様です)。 Cプログラミングは歴史的な理由でLinux上で優れており、優れたツールセットを提供します(Windows BTWで入手できますが、そのためにLinuxをセットアップする方がはるかに簡単です)。同様に、C#を記述していて.NETを好む場合は、明らかな理由からWindowsの方が適しています。他のすべては完全に主観的であり、両方の長所と短所を聞くことができます。
プログラミングに使用するツール(テキストエディターまたはIDE)は選択の問題です。一般的に言えば、初心者や非常に小さなプロジェクトでは、崇高なテキストやgeditの修正版など、より優れたテキストエディターを使用する傾向があります。プレーンテキストエディターを使用する場合にさらに多くを学ぶからです。 IDEは、物事を自動化することで学習プロセスを台無しにすることができます(Visual Studioのように;))。
多くのツールや言語をいじり回す専門家の場合、IDEを使用すると、より多くのことができるため便利です。プログラミングする言語に応じて、選択できるIDEが多数あります。より優れたIDEがありますが、利便性が低いものもあります。
私の個人的な経験では、Ubuntu OSはWindowsよりもはるかに速く、開発用のセットアップが簡単です。これは、使用しているツールやプログラムのほとんどがLinux上でビルドされているため、インターネットでお気に入りのプログラムへのダウンロードリンクを検索する必要がないためだと思われます。 「apt-get install program1 program2 program3」だけです。それに比べて、プログラミングに必要なものすべてを含む新しいWindowsインストールをインストールして構成するには3営業日必要です(プライベートではなく、会社の方が高速です)が、Ubuntuでの同じタスクの場合は1日です。
私の経験では、プログラミングのためにLinuxに切り替えたプログラマーは(ほとんどの場合)技術的なコンテキストと基本がどのように機能するかをより深く理解しています。 MacとWindowsのユーザーは、何かがこのように機能する理由とそうでない理由を知らない傾向があります。 Linuxを使って実際に何かを学ぶことができるのか、それともLinuxに切り替えたいという意欲があるのかはわかりません。
私の「blafasel」が少し役立つことを願っています...
LinuxディストリビューションはIDEであると主張します。
最初に、Unixは開発環境として最初から設計されました。それはプログラマーのためにプログラマーによって書かれました。ほとんどのUnix、およびLinuxには、デフォルトの構成で開発ツールが同梱されています。また、欠落している部分は、apt-get
(または同等のもの)だけです。一方、WindowsはIDEをインストールするまでひどい開発環境です。IDEは安価ではなく、簡単なプロセスです。
IDEは、GCC、Git、およびVi(たとえば)を使用するよりも、IDEがより多くの 密結合 であるという意味で、より統合されています。密結合により、「インテリセンス」などの機能が向上します。しかし一方で、疎結合には多くの利点があります(柔軟性、互換性、ロックインの欠如など)。
そして、コンパイラー設計(LLVMなどの簡単に分離可能なフロントエンドを備えたコンパイラー)の進歩により、ゆるやかに結合した環境でも構文エラーの強調表示などの機能のサポートが改善される可能性があります。
哲学の問題:Ubuntu/Linuxでは、コンピュータープログラマーが内部およびハードウェアに直接アクセスできますが、Windowsは一種のゲートキーパーです。これは、プログラミングに関しては重要な哲学的問題です。したがって、哲学的に言えば、この機能が利点であるかどうかは、ユーザーがその重要性を十分に知っているか技術的に認識しているかに依存します。
プログラミングの問題について:buntu/Linuxのシステムアーキテクチャ全体は、1つのことを実行し、それらを一緒にパイプしてより複雑なことを行うというUnixの伝統に基づいていますプログラマー向けこのアーキテクチャは非常に強力であり、私の見解では、Unixが長期的に、すべてのプラットフォーム上の他のすべてのソフトウェアアーキテクチャに対して勝つ理由です。 Unixが現在支配的でない数少ない場所の1つはデスクトップですが、それは時間とともに変化します。 Ubuntuのようなディストリビューションは、この進化を見るのに役立ちます。
ただし、Windowsには非常に優れたプログラミング環境があることについては異議を唱えません。企業環境内でのプログラミングでは、これらが支配的です。
あなたの本当の質問は、「Ubuntu上で実行されるVisual Studioの代替品はありますか?
MonoDevelop。
それは実行可能ですが、VSとすべての機能に慣れているなら、あなたはそれを嫌います。
テキストエディタを使用する利点はありません。 Intellisenseと呼ばれる素敵なものを覚えていますか?発生していません(ただし、MonoDevelopにはそのようなものがあります)。お役に立てれば。
速度がソートの答えです。
Visual StudioやQtCreatorのようなグラフィカルIDEを使用すると、ショートカットを使用する必要があるときにマウスを使いすぎることがわかります。コンテキストを切り替えるたびに、脳を一時停止し、ターゲットに集中してアクションを待つ必要があります。 F5を押すと、無限に速くなります。
これで、vim、Emacs、または見た目の良いボタンを持たない他の何かを使用している場合、キーを押すことに集中します。
エラーはコマンドラインインターフェイスでより詳細な方法で表示されますが、これは私が好むものであり、コンパイル中にフィードバックを提供します。私がVisual Studioで嫌いなことの1つは、デフォルトではコンパイルを実行していることを示す小さなアイコンで、エラーリストが表示されることです。
狭いビューでは、読みやすくするために80列幅を維持しますが、200列幅に及ぶコードを見てきました。 80列に適合するコードを使用すると、一度に4/5のウィンドウを開くことができます。
CLIエディターを使用すると、Visual Studioへの遅い(テキストに比べて)RDPセッションを必要とせずに、リモートでコーディングできます。 GSMリンクを介してコーディングできます。
視覚的なフォーム開発の一種の悪口。 GUI IDEを使用する利点の1つは、画面を描画できることと、その画面がより高速になることです。ただし、私の経験ではプロトタイプとしては問題ありませんが、多くの場合、コードで手動で行うとより良い結果が得られます。 VS2012コードアナライザーは、今朝、Visual Studioによって自動生成されたコードに関する200以上の問題について警告しましたか?!?!?