コンパイラ、言語、フレームワークが賢くなると、プログラマはバカになるのでしょうか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/428571

  •  06-07-2019
  •  | 
  •  

質問

タスクを自動化したり、特定の複雑さを私たちから隠したりする、ますます高度なコンパイラー、言語、フレームワークが増えれば増えるほど、最終的に私たちは愚かなプログラマーになってしまうのでしょうか?

ジムC 電卓の例としては次のようなものがあります。

紙と鉛筆を使用して、最近平方根を抽出しますか?計算機を使用するか、お気に入りのプログラミング言語で関数を簡単に呼び出します。計算機が何をしているのか、あるいは関数さえ何を知っているの?

では、私たちは皆、子供たちに数学の勉強を忘れるように教えてみてはいかがでしょうか。そのために電卓があるのです。それは本質的に子供たちを愚かにするのではありませんか?

役に立ちましたか?

解決

彼らは優れたプログラマーを馬鹿にせず、生産性を高めます。しかし、彼らは愚かな人々がプログラムを作成し、彼らが素晴らしいプログラマーであると考えることができるようにします。

明確化:口がきけないという正確な定義はありません。愚かから私は一般的に、本当にプログラマーであってはならない、または重要なことを学ぼうとするべきである人々を意味します。私は実際にコードを書いたり、あちこちからコピーしたりすることができない人をたくさん見ました。ソフトウェアの品質評価は簡単なことではありません。彼らは最終的に、(良いツールの存在により)何らかの形で機能する安っぽいソフトウェアを構築し、仕事を失うことなく、彼らは良いプログラマーだと思っているので、何も学ぼうとしないでください。私を信じて、すべての優秀な開発者に私が見たことが一つあります。「彼らは決して学習を止めず、彼らは仕事を完了するために必要なコードだけを学びに行きません」私が話した人々は、彼らが必要とする以上のことを何も学ぼうとせず、素晴らしいツールがこの「必要性」を減らします。

これは、IDEが悪いという意味ではありません。私はそれらが大好きで、できる限り開発されるべきだと思います。

他のヒント

私は彼らが愚かなプログラマを許可すると思う、彼らは愚かなプログラマを作らない。

自動機械を使って作物を植え、収穫し、維持する農民は愚かなのでしょうか?

優れたタスク自動化は、プログラマーをより有能にするだけであり、愚かになるのではありません。

では、私たちは皆、子供たちに数学の勉強を忘れるように教えてみてはいかがでしょうか。そのために電卓があるのです。それは本質的に子供たちを愚かにするのではありませんか?

電卓は、特定のタスクを実行できるツールです。確かに、複雑な数学や多変数積分を実行することはできますが、数学を学ばずに、特定の時間にそのタスクを実行する必要があることをどうやって判断できるでしょうか?

プログラミングや SDK についても同様で、事前定義されたコードを使用して多くの追加機能を追加できますが、問題を解決するために何かを記述する必要があるとき、世界中のツールや自動化はすべて役に立ちません。そこにあります (AI はまだそこまで進歩していません ;)。

平均で、はい。 :)

彼らは、私たちの愚かなプログラマーを作りません。彼らがやることは、より多くの愚かなプログラマーを可能にすることです(平均して、私たちは愚かなことを意味すると思います)。最終的に動作し、有用な何かをします。アセンブリに書き込む場合は不可能ですが、たとえばVBに書き込む場合は可能です。 (もちろん、経験の浅い人が貧弱なアーキテクチャの重みで最終的に崩壊する大きなアプリを書いているとき、最終的にWTFスタイルの大惨事になる可能性が高くなります。)

確かに、「ダム」ここで使用する炎症性の言葉です。誰かが少ないことを知っているからといって、彼らが愚かになるわけではありません。しかし、ポイントは理解されています。

Visual Studioは心を回転させますか  -チャールズペツォルド

高速なマシンはプログラマを悪化させると思う。...最近では、ほとんどのプログラマは最適なコードを書くのにほとんど時間を費やしていない。コンパイラは、悪いコードを良いコードに最適化することはできません。

高速マシンとは、悪いプログラマーが悪いコードを理解できないことを意味します。昔は、実際に許容できる方法で動作するのに十分な速度で実行されるように、コードを処理して洗練する必要がありました。

トニー

いいえ、

スマートコンパイラにより、スマートプログラマは、優れたソフトウェアの設計など、本当に重要なことに集中できます。

s/make/allow/

glibの少なさ:それらはツールです。 ツールは何も作りませんし、職人を良くも悪くもしません。強力なツールも、特定の職人の能力(またはその欠如)を増幅するための単なるレバーとして機能します。

一部のプログラミングツールには、ソフトウェアエンジニアリングの専門家でなければ、少なくともアプリを実行するために、参入障壁を下げる効果があります。動作する(または「動作する」)アプリを作成するために必要な思考の量を短縮すると、両方の方法が削減されます:有能な専門家は、カット作業から解放され、素晴らしいことをするかもしれません「スマート」なしでは機能しませんでした。ツール。後者の効果は、おそらくBASIC、VB、PHP、および最近のWeb向けMVC急速開発フレームワークの評判の形成において、前者よりも大きな影響を与えたでしょう。 p>

スマートとは、自動化を意味します。反復的な仕事をしてもだれも賢くはならないので、答えはいいえです。

電卓の例を使用して展開します。ペンと紙で平方根を計算する手法は、学習できるプロセスにすぎません。このプロセスを知るのは賢いのではなく、計算機がなくても平方根を計算できるようにするだけです。

今、平方根を計算するアルゴリズムを発見した場合、今ではそれが賢くなります。

プログラミングツールでも同じことが言えます。あなたのためにメモリ管理を行う言語はあなたを愚かにせず、またあなた自身でメモリ管理を行うことができるのであなたは賢くなります。

これにより、スキルの低いプログラマーが簡単にフィールドに入ることができます。それは良いプログラマーを馬鹿にしない。効率を潜在的に高める可能性のあるツールを無視した場合、彼らは馬鹿げているでしょう。

コンピューターは強化装置です。だから、物の言えない人はだめになり、賢くなります。

許可した場合のみ。

ハードで気難しいもの(私のTandy 102ラップトップなど)を学んだ場合でも、よりスマートなツールを使用してもそのモードで考えることができます。

確かに、あなたの仕事をするのにツールに頼るのは簡単です。そして、その多くに感謝しています。

たとえば、テーブルソーやドリルプレスで木工をする方法を人々に教えることはありません。まず、ハンドソーとオーガーまたは小さなハンドドリルで始めます。このように、電動工具に移行するときは、Something Stupid(tm)を実行しません。

ツールに依存することは素晴らしいことですが、ツールなしでそれを行う方法を知ることも重要です。

いいえ、しかしそれはより良いプログラムとコードを作ります。

高レベルの言語ではスキルが異なると思います。抽象化についてもっと考える必要があり、心配するAPIがもっとたくさんあり、人々はソフトウェアのより高いレベルの品質を期待しています。上記の結果として、プログラマーはさまざまな課題に直面し、ツールはそれらの課題に対応しています。

彼らは必ずしも愚かなプログラマーを作るわけではありませんが、プログラマーを怠laにすることができます。私は自分でこれを行うことがあります。コードを急いで実行し、コンパイラに頼って最初の場所でそれを行うのではなく、すべての間違いを見つけるのを助けます。

ところで、これは推奨される方法ではありません。通常、もっと時間がかかります。

Ok、私が最初に所有した2台のコンピューター、私は自分で構築しました。それは当時賢明でした、それが今私の時間の良い使用になるかどうかはわかりません。 80年代初期にアセンブラーとBASICを組み合わせてプログラミングしましたが、今も賢く、今はそれほど賢くありません。

ここで得ているのは、コンテキストが変化したことです。コンピューティングでは、知識の深さと知識の広さを交換する必要がありました。 「今日のコンピューティング」でカバーされるアプリケーションの巨大な複雑さと幅広さをサポートするために、私たちはまた、はるかに高い抽象化レベルで作業することを余儀なくされています。一方では、非常に優れたソリューションを提供するために高度に抽象化されたツールを使用するドメインアプリケーションのスペシャリストがいます。どちらの側の愚か者を呼ぶことは炎症であり、おそらく議論で唯一の愚かなことです。

この文脈では、大勢の人が現代のコンピューターの効果的なツールを利用できるようにするだけです。これは良いことであり、ハードコアプログラマーはそれによって脅かされるべきではありません。

平均して、はい、プログラマーを馬鹿にします。しかし、それは、私たちほど賢くない人々にとってプログラミングがより親しみやすいものになり、平均的な「スマートさ」が低下するためです。

:-)

現代の開発環境の利便性を否定する賢いプログラマーは、おそらくそれほど賢くはありません。

ダンバー?必ずしも。前述のように、よりスマートなツールを使用すると、開発者はアプリケーションを適切に機能させるなど、より重要なことに集中できます。私自身のキャリアからの関連逸話:

私は熟練した数学者ではありません。私は事前計算から脱落しました(もちろん、宿題をやったことがなかったためです)。これは、私がまったく練習していないからです。これは単にそれを使用したことがないからです。

たとえば、派生物を取ります。関数の導関数を見つけてほしいと頼まれた場合、TI-89にたどり着くでしょう。ただし、これはより重要であると私は主張します-私はそれを使用する方法を知っています。私はそれがどこで役立つか、なぜ使われるべきかなどを知っています。ドット積は別の例です。私はそれを使用して3D空間の表面の鏡面反射を計算する方法を知っていますが、それを手動で計算する方法はわかりません。必要がないからです。

私は自分を馬鹿だとは思わないでしょう。たぶん練習はしていませんが、同じように機能します。

いいえ、それはステロイド(および他のパフォーマンス強化薬)に似たものです-彼らは偉大なアスリートをさらに良くしますが、私が薬の全部を食べても10メートル未満で100mを走らせるような人を作ることはできません。ですから、神のIDE、言語、またはフレームワークはあなたをより優れたプログラマーにすることができますが、それだけに頼って仕事をしているのであれば、あなたは困っています。

いいえ、多くの人がいる(非常に賢明な人)は違うと思う

この講義を本当にお勧めします。非常に興味深い意見であり、非常に良いエッセイです

そうは思いません。より洗練されたツールは、私たちの心をより興味深い問題に集中させます。

前述のタスクを実行することを学んだ、または過去に前述の複雑さについて学んだ私たちにとって、それは私たちをより効率的にするだけだと思います。他の/より重要なことを心配する必要はありません。 「当時のハードさ」を忘れがちです。または、今日の新しいプログラマーの幸運を訴えます。

まだ始まったばかりで、そのような詳細を学んでいない人にとって、それは単に私たちを別の品種にするだけだと思います。愚かではなく、異なる光で異なる問題を見るだけです。

ただし、エントリのハードルが低くなるため、プログラミングが大衆にとってアクセスしやすくなります。それが良いか悪いかは議論の余地があります。

はい、しかしそれは問題ではありません。最近、紙と鉛筆を使って平方根を抽出する人はいますか?電卓を使用するか、お気に入りのプログラミング言語で関数を呼び出すだけです。電卓の機能や機能を知っている人はどれくらいいますか?

物事がどのように機能するかを知っておく必要があります。より良いプログラマー、または他の何かになりたいなら、もっと知る必要があります。ただし、1日の時間は非常に長いです。

より良いツールは私たちをより良くします。トレードオフは、プロセスをほとんど制御できなくなることです。

ある意味で

例えば、私は私のためにそれらを作るツールを持っているので、私は演算子オーバーロードを書く方法を知りませんし、気にしません。私が持っているツールがC ++ dllプロジェクトと私のC#プロジェクトの [DllImport] を自動的に作成するので、P / invokeがどのように動作するかさえ覚える必要はありません。 ClickOnceがほとんどのプロジェクトであるため、プロジェクトの自動アップデータを作成する必要はありません。 (そして、それがどのように「ボンネットの下で」動作するのか見当もつかない。)

そうです、C ++プログラマーが知っている多くの低レベルのものについて何の手掛かりも持っていないので、私は賢くありません。しかし、それでも私は勝者の側にいると考えています。プレゼンテーション、品質管理、および顧客が本当に必要としている機能により多くの時間を費やすことができます。また、.NETフレームワークを深く掘り下げるには、ある程度の学習が必要なので、少しトレードオフが必要です。

私は彼らが必ずしもプログラマーを馬鹿にしているとは言いませんが、私が言うことはこれです。今日の日と年齢で開発を始めている人々にとって、私たちのために行われている舞台裏でどれだけのことが起こっているのかを完全に理解しないでください。最近プラットフォームには多くのライブラリが組み込まれているため、今日始めようとしている人たちは、このすべてをある時点で手作業で行う必要があるという概念を持ち合わせていません。

ただし、IntelliSenseなしではコードを1行も書くことはできません。

複雑さから抽象化されたレイヤーを持つためには、よりスマートなツールが必要だと思います。しかし、これらの抽象化層へのアクセス権を変更できる必要があると思います。 プログラマーの生産性は向上すると思いますが、多くの基本概念の概念を簡単に失ってしまうでしょう。それはトレードオフです... 優れたプログラマーは、プログラミングの基本を理解し続けるプログラマーです。その他は、「コピーアンドペースト」およびレゴプレイヤーです。

それどころか、よりスマートなコンパイラーは、コンピューターとの戦いを少なくし、あなたが何かをしようとしている方法についてより多くの考えを与えられることを意味します。

アセンブラーに苦労している場合、匿名メソッドを使用することはほとんどありません。

私はノーと言うでしょう。

よりスマートなプログラミング システム (コードを自動的に修正するツールのようなものではなく、より高いレベルの抽象化を考えています) IMNSHO は実際には使いにくいです。私が思いついた例えは、それらが長いレバーとして機能するということです。あなたが押す 本当に 短い方では少し動かすと大きな変化が起こります。

何をする必要があるかを理解するのはより困難ですが、最終的にそれを実行するときにそれを台無しにすることもはるかに困難です。

よりスマートな言語、コンパイラ、およびフレームワークにより、プログラミングが可能になります。私たちがまだアセンブリ言語の使用に制限されている場合、プログラミングの状態を想像できますか?ちょっと、それを傷つけてください。 CまたはC ++に制限されている場合、プログラミングの状態を想像できますか?

コンパイラー、言語、およびフレームワークの改善により、プログラマーの学歴が十分であるか、セマンティクスが十分に理解されていると仮定すると、プログラマーの効率が向上します。

これが古いスレッドであることは承知していますが、それでもここに私の意見を投げたいと思います...

彼らは私たちを愚かにします、ここで反応している人のほとんどはすでにまともな方法でプログラミングする方法を知っています。なぜ?フレームワークがほとんど使われていなかった時代の出身だからです。

教育システムでは、クラスで使用されるフレームワークがますます増えています。フレームワークが使用されていないクラスでは、プログラミングを始めることは奨励されません。このすべてを実行してくれるツールがあることを頭の片隅で理解しながら、このコードをすべて学習してください。現場やワークフロアでは、迅速に作業を進めるためにフレームワークを使用する必要があることはご存知でしょう。では、なぜコードの学習にこれだけの時間を費やす必要があるのでしょうか。

それで:短期的には、すでに言語を知っている皆さん、いいえ...それはあなたを愚かにするものではありません

長期的に見ると...低レベルのプログラマはより優れ、優れたプログラマはレベルが上がるにつれて悪くなるのがわかります。

私が言ったことを覚えておいてくださいね!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top