恋愛言語


なぜすべてのソフトウェア開発者は、ポリグロット


ソフトウェア開発は、毎日新しい技術と新しい要件を飛び出すことに挑戦することができます.また、単調な仕事をすることができます-同じ言語を使用して同じデザインパターンの日と同じ問題を解決するために、日.あなたが十分に長い開発者だったなら、それはあなたがこれらの極端の両方を経験した可能性が高いです.
に関係なく、あなたの現在の責任の要求は、最高の方法のいずれかの迅速な変化と退屈な単調さを支援するための1つの新しいプログラミング言語を学ぶ時間を過ごすことです.新しい言語を学ぶことはエキサイティングです.それは新しいプログラミングパラダイムにあなたを公開し、あなたの個人的な好みに挑戦し、共通の問題への解決に移動し、迅速に新しい複雑なシステムを学ぶためにあなたの能力を向上させます.

多言語を知る利点


最初の、そして、最も明らかな利益は、新しい言語を学ぶことがあなたにその言語で生産的であるために必要とされるスキルを提供するということです.あなたが新しい仕事を探しているならば、あなたが考慮するより多くの機会が、あります.あなたがコンサルタントであるならば、あなたが支持することができるクライアントのより広い範囲が、あります.
たとえあなたが新しい仕事のために市場に出ていないとしても、現代のアプリケーション開発はまれに一つの言語で書かれるモノリシックモノリシックサービスです.多くの場合、単一の顧客に面したサービスはいくつかのマイクロサービスで構成されます.さまざまな言語を使用して複数のサービス間で動作することができることはあなたの会社やチームに貴重な資産になります.
しかし、いくつかのプログラミング言語を学ぶことを選択するだけであなたの履歴書に別の言語を追加するだけではありません.あなたの仕事は別の言語を使用する必要はありませんし、ジョブを変更することはありません(両方の平均開発者の両方の非常にありそうもない状況)を確実にしている場合でも、あなたはまだ追加の言語を学ぶの恩恵を受ける.異なる言語パラダイムにあなたの露出を増やすことによって、あなたの主要な言語で効果的で、読める、そして、維持可能なコードを書く能力は、劇的に増加します.
多くの異なるプログラミング言語でコードを記述すると、それぞれの言語を定義する優先順位のユニークなセットに基づいて、新しい視点からプログラミングを表示する機会を与えます.それは新しい問題解決技術とデザインパターンにあなたを紹介して、1つの展望だけからプログラミング問題を見ることから来ている固有の偏りによってつくられる盲目の点を公開します.
それはあなたの処分で1つ以上の言語を持っているし、あなたの主要な言語であなたのスキルを向上させるためには、おそらくいくつかの言語を学ぶの最も重要な副作用は、学ぶためにあなたの能力を高めることです.学習は他のスキルと同じように、より多くのあなたの練習を実践すると、より良いあなたはそれになります.これは特に言語の学習になるときにtrueです.つの4つの異なる言語で経験があると、別の新しい言語を学ぶあなたの能力が大幅に増加します.
それだけでなく、新しい言語を学ぶことはまた、新しいアーキテクチャパターンと技術を学ぶのに役立ちます.プログラミング言語の良いデザインのために作る支配原則の多くは、同様に他のシステムにも当てはまります.あなたがこれらのパターンを持っているより多くの相互作用は、あなたが他のものでそれらを認識し始めると、これらの種類の関連は大幅にあなたが学ぶ速度を増加します.

新しいプログラミング言語を学ぶ方法


あなたが1つのプログラミング言語だけで働いたならば、第2のものを学ぶことは難しいかもしれません-特に新しい言語が非常に異なる優先順位、構文とコードを書く慣用方法を持っているならば.これらの課題のうち、基本言語構文は一般に克服するのが最も簡単ですそれは非常に異なる基礎的な値と最大のハードルされる優先順位で設計された言語で良いコードを記述するために必要な思考の変化です.
それは、これらの課題を押しての利点は、彼らが引き起こす時間と挫折の価値が十分です.よく始めるには、あなたがあなたの主要なプログラミング言語から仮定と期待を新しいものにもたらして、そして、この固有の偏りが時々つまずくブロックであると認めることは重要です.学習を始める前にそれらの仮定や期待がどのようなものになるのかを常に知ることはできません.しかし、彼らが存在していることを認識し、学習過程において潜在的にあなたを誤解させることは重要です.それはあなたがあなたの思考を調整し、調整できるようにすぐに彼らの影響を認識するのに役立ちます.
これは実際にどのように見えるのですか?あなたの主な言語がC .あなたの期待と仮定は、失敗したアクションとNULLを表現するためにtry/catchブロックを探すためにあなたをリードします.
// in C#, handling failure and dealing with values that may 
// or may not exist involves try/catch blocks and checking 
// for null
public void HandleFailure()
{
    try
    {
        var result = OperationThatMayFail();
        if (result == null)
            Console.WriteLine("value did not exist!");

        else
            DoSomethingWithResult(result);
    }
    catch (Exception)
    {
        Console.WriteLine("operation failed!");
    }
}
しかし、F - Chornoでの同じアプローチは、まだ有効なコードを生成しながら、慣用的なfというわけではない.
let handleFailure () =
    try
        let result = operationThatMayFail()
        if result = null then 
            printfn "value did not exist!"
        else
            doSomethingWithResult result
    with
        | _ -> printfn "operation failed!"
F - Chunper開発者がオプションと結果タイプを使用するのははるかに一般的です.任意の新しい言語を学んでいるように、正しいコードについてのあなたの根底にある仮定の良心されます.ほとんどの言語に適用されますが、いくつかの問題を妨げることができます.
// in F#, handling failure and dealing with values that may 
// or may not exist involves matching on Result types 
// (either Ok or Error) and Option types (either Some or None)
let handleFailure () =
    match operationThatMayFail() with
    | Ok(Some(result)) -> doSomethingWithResult(result)
    | Ok(None)         -> printfn "value did not exist!"
    | _                -> printfn "operation failed!"

// or by using special functions from the Option and Result 
// modules for working with those types
let handleFailure () =
    let handleSuccess maybeValue = 
        maybeValue
        |> Option.defaultValue "value did not exist!" 
        |> doSomethingWithResult

    let handleFailure _ =
        printfn "operation failed"

    operationThatMayFail()
    |> Result.map handleSuccess
    |> Result.mapError handleFailure
それが未知の領域であるならば、どのように、あなたは新しい言語でものをする慣用の方法を学んでいるということを知っていますか?最良の方法は、ブログの投稿やビデオチュートリアルのように作成されたコンテンツのいずれかのディスカッションを通じて、またはオンラインコミュニティグループを通じて、またはよく書かれたと慣用的な例のアプリケーションでパブリックレポを介していずれかの質問に答えることができる経験豊富な開発者を探すことです.
ときに別の開発者にフォーラムや顔の質問を尋ねると、しようとする方法をあなたがそれをしようとしている方法ではなく、しようとしているかを伝える方法であなたの質問をフレーズ.例えば、F - Chunper開発者に尋ねる代わりに、「私は、どのようにF/Countでtry/catchブロックを書きますか?」質問は、「私はどのようにF - SEXの失敗した行動を処理しますか?」前者は、あなたが期待している答えを結果として得ます- F/Countでのtry/catchの正しい構文ですが、後者はあなたにF - CUNIでの失敗を処理するためのより慣用的なアプローチを教えます.また、エラー処理ツールキットも拡張します.

学ぶ新しい言語を選ぶ方法


多くのプログラミング言語が利用可能で、どのように、あなたは次に何を学ぶべきかについて決めますか?あなたはすぐに新しい言語を学ぶ必要がある場合は、その質問はすでにあなたのために答えられている.しかし、あなたが個人的な成長のために新しい言語を学ぶか、退屈と戦うために、重要な要因を考慮することを探しているならば、言語設計の多様性はあります.
あなたが現在オブジェクト指向設計の深い知識で味付けされたJava開発者であるならば、ClojureまたはScalaのようなJVMで動く機能的な言語を学んでください.あなたがフロントエンド開発者であるならば、あなたの意志にJavaScriptのようなダイナミックな言語を曲げることができるならば、多くの静的にタイプされた言語の1つを見てください.または多分あなたはすでにいくつかの言語を知っているが、それらはすべて同じ“C”スタイルの構文から茎.一般的なlispとschemeのようなlispファミリー言語を学習するか,ocamlとf .
最終的に、最も重要なことは、それがユニークであることを理解するために新しい言語で十分な時間を費やすということです、そして、その言語の調味された開発者が一般の問題を通して考える方法.これは一晩で起こりません.あなたがコースを維持するつもりなら、あなたが学ぶことを選択する言語は、あなたとあなたが楽しむ興味のあるものでなければなりません.

恋愛言語


あなたがソフトウェア開発者としてあなたの日常生活を揺るがす何か新しいものを探しているか、あなたが我々の産業で変化のペースに圧倒されているかどうかにかかわらず、プログラミング言語を愛していて、一貫して新しいものを学ぶことは、あなたが成長して、あなたの経歴で成功する必要があるかもしれません.あなたが知っている言語の種類を多様化することに焦点を当て、新しいパラダイムと展望に適応できるようにあなたの心を再訓練することに焦点を当て、あなただけでなく、あなたのソフトウェア開発スキルが成長することがわかりますので、あまりにもあなたの楽しさとプログラミング言語のための感謝します.