web-dev-qa-db-ja.com

Linuxで始めるためのどの言語ですか?

Purdueで4年間の情報セキュリティの学位を取得しようとしています。学位はプログラミングコースを必要としません。ですから、私がそれを取ることができるのは時折の選択科目だけです。ですから、私の学習のほとんどは私自身で行われます。高校3年生の初めに、完全にLinuxに切り替えることにしました。これまで、私はいくつかのLinuxとセキュリティに関することを学んでいます。ただし、いくつかのプログラミング言語を学ぶことも重要だと思います。

基本的には、Vimの使い方を学ぶことと並行してプログラムを学ぶことを計画しています。したがって、それはおそらく遅いプロセスになるでしょう。結局、それだけの価値があると思います。私が言ったように、私はセキュリティに入るので、私は主にセキュリティ関連のアプリケーションを作成し、そのほとんどはネットワーク関連になります。また、Androidアプリケーションの開発を開始したいと思いますが、それは後で行われます。

そうは言っても、私にはいくつかのアイデアがあります。 JavaScriptはクロスプラットフォームであるため、JavaScriptから始めることを考えていましたが、以前に提案されたことがあります。 Rubyについてもよく耳にしますが、Cを使用してLinuxの自然なルートに進むこともできます。どの方向に進むべきですか?

19
JD Davis

何よりもまず:bash、および一般的なコマンドラインユーティリティ。 Bashはオペレーティングシステムへのデフォルトのユーザーインターフェイスであり、Linuxシステム上の多くのプログラムはあるレベルでシェルスクリプトにラップされます。それは風変わりで、いくつかの特異性があり、しばしばまったく馬鹿げているように見えますが、それはあなたが対処しなければならないものなので、それに慣れてください。 grepdiffheadtailsortuniqなどの標準ツールシェルスクリプトだけでなく、コマンドラインでの生産性にも非常に役立ちます。

少なくともいくつかのcを学びましょう。これは、システムの最低レベルが記述されているものであり、システム全体をよりよく理解するのに役立ちます。

好きな高級言語を選んでください。 PythonRubyPerlJava、何でも-あなたがそれを楽しむ限り。ここから実際に「プログラミング」の方法を学び始めます。これからは、より多くの言語を習得しやすくなり、学習を続けます

53
JimB

誰もが自分の好きな言語をすすめるだけだということがわかるでしょう。私の好きな言語はPerlなので、それをお勧めします。 :)しかし、私の個人的な好みを超えて、Perlの使用を検討すべきいくつかの大きな理由があります:

まず、Perlは素晴らしい汎用言語です。ファイルの操作やユーザー入力に基づいた決定など、シェルスクリプトで行うのと同じ種類のことを行う簡単なスクリプトを作成することで、Perlを簡単に始めることができます。これにより、プログラミングの一般的な考え方を非常に簡単かつ段階的に紹介できます。 Perlはかなり前から存在しているので、始めるためのリソース(本やWebサイト)がたくさんあります。

第二に、Perlは、すべての最新のプログラミング機能をサポートする非常に強力で表現力豊かな言語です。私はそれを15年以上使用していて、物事をより効率的に行うための新しい方法をまだ学んでいます。たとえば、オブジェクト指向プログラミングを探求したい場合、Perlにはそれがあります(特に Moose を介して)。

第三に、Perlには、公式のアドオンリポジトリ [〜#〜] cpan [〜#〜] のほぼ無限のパワーと柔軟性が備わっています。たとえば、セキュリティソフトウェアを作成するという考えに従うために、ある種のカスタムネットワークセキュリティスキャナーを開発するとします。すべてを自分で作成する代わりに、 NMAP :: Scanner をスキャンエンジンとして使用することから始めて、その上に独自の調整と改善を作成することができます。

最後に、Webプログラミングを調べたい場合は、Perlにもそれがあります。 PerlでWebソフトウェアを作成するための一般的な最新の方法の1つは、 Catalyst です。これは、あらゆる種類のWebアプリを迅速に開発するための最新のMVCWebフレームワークを提供します。

これらすべてをまとめると、Perlの利点は、小さなコマンドラインスクリプトやプログラムの作成を開始し、徐々にフル機能の最新アプリケーションの作成に成長できることです。もちろん、この柔軟性の代償は複雑さです。物事を正しい方法で行う方法を学び、学ぶのはあなた次第です。Perlは他の言語のようにグッドプラクティスを強制しません。私は個人的にこの自由が好きで、特にPerlの使い方を学ぶためのウェブ上のすべての素晴らしいリソースと相まって好きです。

10
Phil Hollenback

3つの言語があなたをしっかりと支えます。重要度の高い順に(つまり、最初のものが最も重要です):

  1. 擬似コード。多くの場合、作業している実装は、半ダースの言語とツールの融合であり、そのうちのいくつかだけが直接知っています。ただし、実装されているパターンがわかっている場合は、ピースに渡されている入力と出力を把握し、除外してテストし、それが壊れているピースであるかどうかを判断できます。
  2. [〜#〜] c [〜#〜]。良くも悪くも、それは(Linux)ユニバースを実行するものであり、高水準言語(PHPなど)が実際に何をしているのかを理解できるように、十分に近いビューを提供します。参照渡し、またはJavaのスレッドモデル)。
  3. C++以外のほぼすべて。 SQLのような関数型言語、さらに良いことに、Haskell、またはC-eyほどではないもの-他のすべてが失敗した場合、Javaはこれで機能しますが、それでも非常に手続き的です-高い評価を得ますここで、アイデアは、以前に行ったこととは十分に完全に異なる何かに脳を巻き付けることです。これは、以前に行ったことの限界を理解せずにはいられません。純粋なユーティリティの観点から、bashおそらくこのリストにも含まれていますが、他に根拠がない場合は、Cを実際にその力を探求するのではなく、bash構文で記述することになります。
6
BMDan

あなたはいくつかの言語を学ぶべきです。 Pythonから始めることをお勧めします。習得しやすく、非常に便利であるため、広く推奨されています。優れた自習用資料が無料で多数用意されており、ITセキュリティの専門家によって広く使用されていると思います。セキュリティの専門家がデモコードを投稿するのを見るたびに、それはPythonです。

4
bgvaughan

Purdueで4年間の情報セキュリティの学位を取得しようとしています。学位はプログラミングコースを必要としません。

OMGを考えるのは私だけです!!!!この時点で?

また、いくつかのプログラミング言語を学ぶことも重要だと思います。

私はそう言うでしょう。熟練したプログラマーになることを実際に期待しているわけではありませんが、攻撃をシミュレート/再現し、プログラミングプロセスがどのように機能するかを理解するために必要なスキルが必要になるでしょう。また、データを分析し、バルクソース(ログなど)から情報を抽出するスキルも必要になります。 JimBはbashについて言及しましたが、これを使用することは間違いありませんが、重要な部分を学ぶのに数時間しかかかりません。実際、bashが表示される可能性が高いのはLinuxシステムだけですが、他のシェルは非常によく似ています。

データ処理のためにawkやPerlを学ぶことをお勧めします。オブジェクト指向ボックスにチェックマークを付ける必要があることを気にしないでください。ただし、非手続き型言語も検討することをお勧めします。

Cを学習すると、コードが実行可能プログラムにどのように変換されるかについての多くの情報も得られます(コンパイルは非常に複雑なプロセスの1つのステップにすぎません)。

Android /モバイル開発に興味のある人にとって明らかな選択はJava-しかし、Javaは、開発者がの現実に対処する必要がないように非常に懸命に努力します操作とプロトコル-これがJavaアプリでセキュリティの問題が発生する場所であるという私の経験です。つまり、最終的な目的を達成するのに役立つ可能性があり、CVでは見栄えがしますがそうではありません。学習Javaがセキュリティ知識を大幅に補完することを期待します。

4
symcbean

まず、いくつかの否定的なアドバイス:

基本的に私が計画しているのは、Vimの使い方を学ぶことと並行してプログラムすることを学ぶことです。

やめてください。本当に快適なエディターを見つけましょう。言語とエディターの両方を学ぶことは、順番に学ぶことの3倍難しいです(明らかにエディターが最初に行くべきです:-))

私が言ったように、私はセキュリティに入るので、私は主にセキュリティ関連のアプリを作成します。そのほとんどはネットワーキング関連です。

ネットワーク関連のセキュリティアプリ?ここでは、Cは簡単な選択ではありません。システムAPIレベルでネットワークにアクセスする必要があります。つまり、Cが最適です。もちろん、これはすべてがCにある必要があるという意味ではありません-Cライブラリ+ $favorite-high-level-languageラッパーは、Cを必要としない部分でのC関連の手間を省くことができます。

そうは言っても、私にはいくつかのアイデアがあります。 JavaScriptはクロスプラットフォームであるため、JavaScriptから始めることを考えていましたが、以前に提案されたことがあります。

私はそれがあなたとは異なる文脈で提案されたに違いない。 JavaScriptには長所がありますが、まだ優れた汎用言語ではありません。 JSには、C、Python、Perl、Ruby、Java&companyで利用可能なものに匹敵する標準ライブラリはありません。

$favorite-high-level-languageと言えば-私のアドバイスはPythonを使うことです。 Cとうまく連携し、多くの便利なライブラリが付属しており、アドオンとして利用できるライブラリがはるかに多くなっています。

1
Rafał Dowgird

ほぼすべてのタスクをほぼすべての言語で実行できるため、正しい選択は、解決しようとしている問題によって大きく左右されます。

次のカテゴリの言語を知ることは間違いなく価値があります。

  • コンパイルされた言語(C/C++/Javaなど)。 C/C++は、バッファオーバーフロー、スタックの破損などのセキュリティ問題を調査するのに適した場所です。
  • インタープリター言語(PHPなど)。緩く型付けされた変数の問題を調査し、それらを呼び出すまで未定義の関数を検出しないのに適した場所
  • スクリプト言語(sh/bash/csh/ksh)。多くの便利なシェルユーティリティ(/ binと/ usr/binを参照)を接着するのに本当に便利です

スタックの破損とメモリへの直接アクセスが可能になるため、C/C++を学ぶように努力します。これは、セキュリティの問題を実験する場合に重要です。多くの言語にはCのような構文(JavaScriptを含む)があるので、それは良い出発点です。

あなたがシェルでたくさん働いているなら、それはあなたがvimを学んでいるのと同じだと思いますが、副作用としてシェルの基本的なスクリプトを学んでしまうでしょう。 UNIX Power Toolsは、より高度なことを学ぶのに適した本でした。それがまだ公開されているかどうかはわかりません。

PHPも学ぶのに良い言語です。新しいプログラマーに提供される主な利点は、リンクする必要のあるライブラリーではなく、多くの機能が組み込まれていることです(これは複雑なタスクではありません)。このため、メインのドキュメントを参照すると、多くののことについて学ぶことができます。

1
Phil Lello

Linuxの世界では、2つの基本的なことを知っておく必要があります。

  1. Regular Expression。これは必須です。 RegExは世界共通の「言語」です。正規表現の使い方を知ったら、あなたの生活はずっと楽になります:-)
  2. "quick & dirty "はLinuxの世界では非常に一般的です。ソリューションがどれほど醜いものであっても、仕事を終わらせることができれば、仕事は成し遂げられます。

したがって、Linuxで言語を学びたい場合は、[〜#〜] [〜#〜]を選択する必要がありますscript languagepythonPHP、さらにはbash scripting

そして、私のおすすめはPHPです。シンプルで醜いです。詳細な オンラインマニュアル があります。 RegExのサポートが良好です。それで全部です。

1
yegle

私の推薦?うーん。さて、あなたは行くにつれて決定しなければならないかもしれません。健全でバランスの取れた範囲の場合は、通常のCS学位ルートを使用できますが、この順序ではない場合があります。

(1)C/C++-オブジェクト指向のものをダウンさせることができ、少なくともあなたは試したことがあるでしょう。 C++は「プロフェッショナル」標準です。 (2)アセンブリ(ほんの少しだけ-プロセッサ、メモリなどの実際の動作を理解するのに役立ちます-結婚する必要はありません。)(3)Python/Perl/Bash-これらを入手してくださいスクリプト言語を使用すると、Linux(4)PHP/Ruby、MySQL、およびHTMLのレベルに最も役立ちます-Webプログラミングを開始するだけです!サーバーとクライアントの相互作用プロセス全体、つまり別のレベルのコンピューティングについて理解できます。

役立つコンセプトが必要ですか? AI、ニューラルネットワーク。これらはあなたを締めくくるはずです。

これらのいずれかを選択して実行するか、すべてに触れることができます。私の言語?それらはすべて必要に応じて作成されますが、私は1984年からプログラミングを行っており、CSの学位、ゲームの作成、およびあらゆる種類の組み込みシステムアプリを持っています。それが私がしていることです。あなたはあなたが誰であるか、そしてあなたが何をしているのかを知る必要があります。楽しんでいることを確認してください。

楽しい!

0
Scott Foulk

おっと、情報システムの情報セキュリティの誤読...まあ、これのほとんどはまだ当てはまります

Java

  1. あなたの学位にカウントされるJavaベースのエントリーレベルのプログラミングコースが必要です。あなたが学んでいることのクレジットを取得するのはいつでもいいです。
  2. あなたが厳密にシステムの男であることにうんざりしている場合、またはあなたが後で働く会社がシステムがトースターのようなものであると決定した場合、そしてそれを実行する人々もそうだとしたら、それはあなたにいくらかのキャリアの成長を与えるでしょう。
  3. オブジェクト指向
  4. Android開発をしたいとおっしゃいました。これはJavaを意味します。

正直なところ、Linuxで作業していて、Javaでプログラミングコースを開始し、さらにいくつかのプログラミングコースをフォローアップする場合は、Bash sed/awkなどの他のツールが適切に機能するはずです。あなたが本当にシステムに夢中になっているなら、後でCを手に入れるかもしれませんが、それが大きな需要があるとは言いませんし、システムの人である必要があるとも言いません-あなたが本当に内部に興味がない限り。

YMMV

0
MLH

Javascriptの学習には何の問題もありませんが、ブラウザでのみ実行されるため、プログラミングはWebページ関連のアプリに限定されます。

「最初に始めるのに適したプログラミング言語は何か」に対する答えは、おそらく言語と同じくらい多くあります。私のタペンスの価値は、基本的なシェルスクリプトから始めるよりも悪いことをする可能性があるということです。シェル以外のものを使用せずにタスクを自動化するために何ができるかを確認し、Perlまたはその必要性から生まれた同様の言語を使用してそれを拡張します。その後、シェルが実行できるよりも複雑なタスクが実行されます。本当に興味がある場合は、数週間しかかからないので、Cまたは派生物の使用を開始してください。

0
blankabout