ここの例:
Webアプリケーションの構築に興味がある場合、どの言語を知っている必要がありますか?
はい、HTMLとCSSはチューリング完全ではないことを理解しています。はい、宣言型の言語であり、命令型の言語ではないことを理解しています。しかし、なぜこれらの言語について質問するとき、人々は常にこの舌な(そして間違いなく明白な)事実で頭をかかげているのでしょうか?
ここの例:
Webアプリケーションの構築に興味がある場合、どの言語を知っている必要がありますか?
はい、HTMLとCSSはチューリング完全ではないことを理解しています。はい、宣言型の言語であり、命令型の言語ではないことを理解しています。しかし、なぜこれらの言語について質問するとき、人々は常にこの舌な(そして間違いなく明白な)事実で頭をかかげているのでしょうか?
回答:
本当に違いは何ですか?
プログラミング言語とこれらの他の言語の真の重要な違いは次のとおりです。
HTMLとCSSはプレゼンテーションを記述しますが、プログラミング言語は機能を記述し ます
この違いがなぜ重要なのかを説明したいと思いますが、この問題についての注意は見当違いです。
実話:
「適切な」プログラミング言語を使用した複雑なパフォーマンス管理システムの開発に数か月費やしたことがあります。他のさまざまなシステムからデータを収集するプロセスを自動化し、そのデータに対してさまざまな操作を実行してから、結果を単純なテーブルに表示しました。
運用が開始されると、シニアマネージャーが同様のビジネス向けに作成されたツールを見て、作成したツールを代替ツールで置き換えられるかどうかを尋ねました。さらに、この新しいアプリが数日で書かれていたソリューションを開発するのに何週間も費やしていたことに、彼は怒っていました。
さらなる調査により、マネージャーの好むオプションはすべて、実質のないプレゼンテーションであることが明らかになりました。多くの色、アイコン、グラフがありましたが、それらの背後にあるロジックはまったくありませんでした。すべてのデータを手動で収集して操作する必要がありました。きれいなインターフェースにもかかわらず、アプリケーションは本質的に役に立ちませんでした。
問題のマネージャーは、私のアプローチが彼の実際のビジネスニーズに合ったアプローチであると確信していたと言ってうれしいです。
プレゼンテーションの重要性:
HTML、CSSなどのスキルは、「実際の」プログラミング言語のスキルよりも多少劣っていることを暗示することがよくあります。これは重大な間違いです。
私の話では、シニアマネージャーはデザインが彼にとって非常に重要であると感じていました。さて、もしこれが孤立した事件であるなら、私はマネージャーがただ愚かだったと示唆するかもしれません。しかし、そうではありませんでした。何度も何度も、派手なグラフィックスと奇抜なウィジェットに感銘を受けているが、生の機能と私の技術的な成果には感銘を受けていないユーザーに会いました。ここで学ぶべきいくつかのレッスンがあると思います。
そのため、プレゼンテーション指向の言語(HTML、CSS)が重要です。これらのツールを効果的に使用できる人が追加する価値を過小評価してはなりません。
実際のプログラミング言語の重要性
OPが指摘したように、「実際の」プログラミング言語はチューリング完全です。適切な悲しいオタクとして、私はこの崇高な魅力を見つけます。それはのために、ということを意味任意の TC言語で書かれたプログラム、機能的に同等のプログラムがで書くことができ、他の TC言語。もちろん、これはすべての言語が同じだということではありません。それぞれに長所と短所があり、特定のタスクに多かれ少なかれ適しています。ただし、I / Oは別として、これはすべてのプログラムをすべての真のプログラミング言語で作成できることを意味します。
(ちなみに、重要なのはTCです。宣言型と命令型は、ここでは赤字です。たとえば、SQLは宣言型ですが、TCであるため適切なプログラミング言語でもあります。)
もちろん、HTMLやCSSのようなマークアップ言語についても同様ではありません。実際、これらの言語では解決できない問題のクラスがすべてあります。レイアウトエンジンを含む、真のプログラミング言語で必要なものをプログラムできる場所では、TC以外の言語で同じことを達成することはできません。
私の話で強調したように、HTMLとその同類はプレゼンテーションの作成に使用されます。機能を生成するために、実際のプログラミング言語が使用されます。
なぜプログラマーはそれについてすべてにつまらないのですか?
つまらないことは常に適切ですか?
プログラマーとして、私たちは自然に多くのことを学んでいます。それは領土に合っています。非プログラマーが私たちの行動を理解できなかったときに、私たちの多くが火傷をしたことは助けにはなりません。
それにも関わらず(そして正直に言うと、これは私の本能に反する)、人々が小さな区別をすり抜けるたびに声をかける必要はないと思います。
ここで重要なことは文脈 と視点です。
生物学者の観点から見ると、トマトは果物だと言われています。しかし、スーパーで買うときは、野菜の中から探します。どうして?その特定の文脈では技術的な区別は重要ではないからです。さらに、区別は実際にそれらの有用性の妨げになります。例えば、フルーツサラダにトマトを入れるのに十分だったら。
コンピューター言語でも同じです。プログラミング言語と他の言語の違いが本当に重要な場合があります。ただし、多くの場合、それらをすべてまとめてひとまとめにすると、完全に効果的に通信できます。OPによってリンクされた質問の場合、どの言語が真のプログラミング言語であり、どの言語がそうでないかは実際には関係ありませんでした。区別を指摘しても、議論は決して進みませんでした。ありがたいことに、少しのノイズを追加する(そして興味深い議論の刺激になります!)ことを除けば、OPによってリンクされたペダントリーはほとんど意味がありません。最悪の場合、しかし、少なくとも私の妻によれば、学問は否定的な感情と関係を損なう可能性があります。
:-)
プログラマーのペダントリーに対処する方法
私の説教者の友人はかつて次のような説教をしました:
これは死ぬ価値のある丘ですか?
彼は、どの戦闘が戦闘に値するかを戦略的に評価する将軍に言及していました。利益はコストに見合うのですか?
もちろん、区別する必要がある場合があります。私の目的は、私が貢献するとき、それが私たちの集団的な努力に価値を加えることです。
つまり、結局のところ、すべての本当のプログラマーの仕事です。
「ソフトウェアエンジニアリング」を学んだことを土木エンジニアまたは機械エンジニアに伝えれば、「ソフトウェアエンジニアリング」は実際のエンジニアリングではないことがわかります。
F-16パイロットに、あなたがセスナを楽しみに飛ばすことを伝えてください。そうすれば、彼はあなたが本当のパイロットではないことを告げるでしょう。
あなたがカイロプラクターであることを医者に伝えてください、そして彼はあなたに言うでしょう...まあ、そこに行かないようにしましょう:-)
私は、人々が自分の職業が偽装者または本当に「価値のある」人によって浸透しているという考えが好きではないことが主な理由だと思います。
公平を期すために、HTMLとCSSがプログラミング言語ではないことは明らかです。これらは.docx形式がプログラミング言語であるというプログラミング言語ではなく、HTMLとCSSだけが確かに不正確であればプログラマーであると主張することもできません。しかし、返信の激しさの一部は、私が上で言ったことに起因していると思います。
また、リンクした質問で、質問者はHTMLとCSSを「プログラミング言語」ではなく「言語」と呼びました。HTMLはマークアップ言語であり、CSSも言語です(ただし、CSSと呼ぶ言語の「種類」はわかりませんか?)。 「...
私にとってはそれほど重要ではありません。
しかし、HTML、CSS、XMLなどとReal Programming Languages™の違いは、建築材料としての木材と塗料の違いに似ていると思います。木材でできるようにペイントで物事を構築することはできません。同様に、RPLでできるようにHTMLでプログラミングすることはできません。
ただし、一部の会話では、そのような区別をすることは無関係であり、したがって退屈で面倒なことがあります。
おそらく、一部のWebサイトのhtml / cssの部分ではプログラミングの部分と同じくらいの作業が行われるため、「重要な」区別ではないかもしれません。
しかし、それが何を意味するのか分からない人は誰でもWeb開発を行うチームに入れられないので、それは重要な違いです。
デザイナーがHTMLがプログラミングであると考えている場合は、Adobeツールでのデザインを続け、印刷関連のデザインを行うようにします。しかし、彼がウェブアプリについて言うかもしれないことを信じないでください。
開発者が「彼の」言語がチューリング完全であるために彼がデザイナーより上だと思っている場合、彼がデザイナーとうまく働くことを期待しないでください。
if ... then
コンストラクトがなく、以前は不明な回数だけ繰り返す方法があれば、それはプログラミング言語ではないという傾向があります。もちろん、定義を複雑にするいくつかの周辺言語があります。しかし、HTML / CSSはそれとはほど遠いものです。
「宣言的であり、命令的ではない」と言ったとき、あなたは頭にそれを打ちます。マークアップ(HTML、CSSなど)は物事を説明します。プログラミングの重要なポイントは、物事を行うことです。
マークアップの使用に必要なスキルセットは、プログラミングに必要なスキルセットとはまったく異なります。
マークアップを書くことによって解決される問題の種類は、プログラミングによって解決される問題の種類とはまったく異なります。
特定の人々にとって重要なのは、どちらも表面的なロケット科学ではありませんが、実際に気にしている通常5から数十の異なる環境で実装が異なるため、それらを取り巻く多くのアルカナがあります。そのような予測不可能性とクラフトへの注意は、定量化不可能なリスクに恐怖し、学位を取得した後に絶対に必要な以上のことを学ぶことによりさらに恐ろしい特定のさまざまな技術専門家を怖がらせます。
私が知っている言語を誰かが私に尋ね、CSSをそこに投げて「しかしそれは本当の言語ではない」と言ったら、IE 5、IE 6-8、IE9 +でdivを垂直方向に中央揃えする方法を尋ねます。それから、丸みを帯びたコーナー、アルファ透明度の問題、これらのすべてのばかげたテーブルの背後にある本当の犯人に移動することができます。言語を学び、10年前に大学での授業を受けることを余儀なくされたために、彼はほとんど機能的に読み書きができないと主張しています。
それらは間違いなく「言語」です。私はそれらを「プログラミング言語」とは呼びません。これらの言語でのコーディングのプロセスを「コーディング」と説明するのは安心です。
しかし、私が懸念している限り、CSSをグランドマスターできた人は誰でも、優秀なプログラマーになるためのchutzpaと仕事の倫理を持ち、オブジェクト指向思考の背景をすでに持ち、どのように彼が現在の執筆は、彼の仕事に将来25のプロジェクトに影響を与える可能性がある
HTMLとCSSはプログラミング言語ではありません。それを乗り越えます。
ただし、JavaScriptはプログラミング言語です。マシンはブラウザです。PHPはプログラミング言語です。マシンはサーバー内の仮想マシンです。
そのため、HTMLとCSSのみを使用している場合、プログラミングは実行していません(エンジニアリングを実行している場合もあります)。
ただし、JavaScript、PHP、または別のスクリプト言語を使用している場合。あなたはプログラミングをしています。
REALプログラミング言語について。マシン(実際のマシン、または仮想マシン)で操作している場合。そして、あなた自身のアルゴリズムを使用して、マシンに何かをするように指示しています。次に、REALプログラミング言語を使用しています。
プログラミング言語は、実務家や一般人でも使用される一般的な用語であるため、少し不正確な用語です。開業医は、一般の人が通常持っていない用語の微妙な意味を持っています。通常、彼らの定義は、私がすぐに理解できない面白い単語/構文があり、プログラマーがそれを使用する場合、それはプログラミング言語でなければなりません。完全に外れているわけではありませんが、不正確であることに同意できます。
宣言的、命令的、チューリング完全などの単語は、非常に具体的な意味を持つより正確な用語です。HTML / CSSがプログラミング言語ではない理由などの質問をするとき、プログラミング言語が実際に何であるかについて、より正確な定義を求めています。意欲的ではありませんが、あなたの質問に答えようとしています。たとえそれらをグーグルで検索しても、それらの意味を理解するのが難しい場合、使用するのに最適な用語ですか?依存します。短いまたは長い答えが必要でしたか。:-)
プログラミング言語は通常、プログラマーによって完全な回転と考えられていますが、それはどういう意味ですか?これは、言語が動作または方法を記述することができることを意味します。正式にロジックと呼びます。HTML / CSSは、右上隅にボタンがあるか、4列5行のテーブルがあり、最初の2行が黄色で、下の行に緑色のテキストがあり、テーブルの各セルに5ピクセルがあることを記述できますコンテンツの周りの空白スペース。
HTML / CSSができないことは、ボタンをクリックしたときの動作またはロジックを表現することです。そのボタンをクリックしても、そのテーブルから値を取得して加算し、その値をテーブルの下部にある新しい行に書き込むことはできません。振る舞いを記述することは、過度に独創的になることなく、Turning-completeとほぼ同等です。
より正確には、チューリング完全とは、言語をそれ自体で実装できることを意味します。つまり、javascriptの文字列を受け取るjavascriptプログラムを作成して実行できます(eval()関数を使用しません)。実際、チューリング完全言語で書かれたプログラムを取得して評価できるjavascriptプログラムを作成できます。それがチューリング完全であることの意味です。完全に回転するすべての言語は、プログラムを表現できるものと同等です。あなたがそれについて考えるならば、かなり驚くべき啓示。
これが私の2セントです。HTMLとCSSは明らかにプログラミング言語ではありません。そのため、「プログラミング言語」の下で誰かの履歴書にHTMLまたはCSSが表示されると、この人は何を話しているのかわからないことがわかります。
それ以外は、いや、それは本当に重要ではありません。
ちなみに、プログラマーは一般的に慢になる傾向があります。それは単に仕事に付属しています。
関係ありません。また、それは定義の問題でもあります。プログラミング言語とは何ですか?いくつかは、チューリング完全でなければならないことを意味します。他には、HTMLをプログラミング言語にする他の定義があります。(そして、あなたの例では、それらはプログラミング言語とも呼ばれず、単に言語と呼ばれていました)。
私の推奨事項:これらの種類の無意味で、多くの意味で誤った主張さえ指摘する人々を無視するようにしてください。それは単なる文法のナチ主義のバリエーションです。HTMLをプログラミング言語と呼ぶことは、意味のある意味で間違っていません。
これは、HTMLとCSSに精通している必要があるほど複雑ですが、生成されたレポートの形式として最も適したプレゼンテーション言語であると思います。したがって、これらのことしかできない人はコーダーとは見なされません。一部のコーダーは、平均的なワードプロセッサがHTMLよりもテキストをスタイルするために多くのコマンド構文を使用したことを記憶するのに十分な長さの計算を行っていることに留意してください。
一部の人が「本物の」言語と呼ぶものは、何らかの方法でデータを処理してレポートを生成する言語です。または、ゲームを書くために使用できるもの。HTMLとCSSの内と外を知ることは価値のあるスキルですが、フロントエンドのJS、バックエンドのJava、PHP、Perl、Ruby、Python、C / C ++、またはC#の知識と組み合わせることははるかに重要です。
逆に、Webフロントエンドテクノロジを使用せずに「実際の」言語の1つだけを知っている人は、コーダーとしての柔軟性を非常に制限しています。
論理的な「左脳」または創造的な「右脳」のピジョンホール/ステレオタイプは、多くの人々のスキルセットを正確に表します。私の経験では、「HTML / CSSはプログラミング言語ですか」とは、HTML / CSSが得意な人が他のプログラミングタスクも得意であるかどうかに関することです。
過去13年間にWeb開発を行ってきたほとんどのWebデザイナーは、実用的なHTMLとCSSを作成できましたが、より厳しいプログラミングの課題(最も単純なカットアンドJavaScriptを貼り付けました)。ホットショットプログラマーとデータベースデザイナーのほとんどは、HTML / CSSまたはプレゼンテーション全般で良い仕事をするために、視覚的なプレゼンテーションを十分に気にしません。ほとんどの場合、実際に試すことを拒否します。
HTMLとCSSが必要といくつかのプログラミングのスキル:実験、問題解決、慎重に検査、継承の理解を...しかし、彼らは設計スキルの少なくとも同数が必要です:色、線、間隔、バランスに対する感度を-同じのほとんど優れた写真を作成する視覚的な作文スキル。
HTML / CSSはレイアウトまたはプレゼンテーション言語であるため、データフロー図の最後にあります。他のコードは下流にありません。優れたAPI、サービス、またはデータベーススキーマを設計するために誰かが必要とする大規模な設計スキルは、HTMLおよびCSSでは使用されません。一般に、HTMLやCSSに関連する何かをモジュール化する必要はありません。もしあれば、それを行うのはグラフィックデザイナー次第ではありません。HTML / CSSで機能が作成されることはまれです。ドロップダウンメニューはおそらく最も一般的な例外ですが、コードを設計するのではなく、Webからレシピを切り取って貼り付けることで作成できます。
プログラマーが視覚的なデザインやレイアウトのスキルを持っていることや、デザイナーがプログラミングのスキルを持っていることは珍しいことではありませんが、不可能ではありません。これらの人々は、私たちのほとんどが抱えているギャップを埋めるのに役立つため、Webチームにとって特に価値があります。しかし、彼らはしばしばステレオタイプの対象となります。HTML/ CSSを実行できることは、「本物のプログラマー」には不可能であり、その逆も同様です。しかし、このスキルの組み合わせは、同じプログラマーがまともな船乗り、画家、料理人であること、または暇なときに練習する他のスキルを持つことほど不可能ではありません。
他の人が言ったように、この区別は雇用の際に最も焦点になります。クロスオーバーの才能を持つ人々はまれであるため、ほとんどの求人情報はいずれかのスキルセットをターゲットにする必要があります。プログラマーが「プログラミング言語」の下にHTML / CSSをリストすると、一般的なプログラミングタスクを達成できないか、プログラミングの定義が非常に狭い可能性があるという赤いフラグが立てられます。たぶん彼らはできるでしょう、それはただ質問を提起します。デザイナーがHTML / CSSをリストしている場合、ポートフォリオを見て、目的の視覚効果を作成する芸術的な能力があることを確認する必要があります。
HTML / CSSは、本物のプログラミング言語ではないため、彼らが代表する半球の境界線を越えることができない人々を破壊するよりも安全で社会的に受け入れられるため、繰り返し破壊される可能性があります。もちろん、一部の人々はその抑制を持たないかもしれません。私は実際に、「彼は[部門バックボーン機能をここに挿入]書いたのですか?彼はHTMLをやっただけだと思いましたか?」
いい質問です!