学校で一般的に教えられていないプロのプログラミングには、どのようなスキルが不可欠ですか?[閉まっている]


14

私はコンピューターサイエンス専攻の1年生です。私は就職説明会に行き、履歴書を配りました。驚いたことに、面接を受け、最終的に開発者としてのインターンシップを得ました。

私はインタビュアー(上司になる)に、私は最初の1年であり、プログラミングの経験があまりないことを説明しました。彼は私に数学の強いバックグラウンドを持っているので(数学の学士号をほぼ取得していることに加えて、ベルトの下にいくつかの大学院課程があるので)、彼は私がうまくいくと自信があると言った。

私はすべてのプログラミングコースでうまくやっていますが、それでも私は不利な立場にいると感じています。今、私は本当にこの仕事を始めたときにうまくやりたいと思っています。仕事は主にC#を使用しますが、明らかにC#を学習することに加えて、実際のプログラマーになる前にあなたが学びたいと思っていたスキルは何ですか?

アドバイスは大歓迎ですが、本をお持ちの場合は教えてください。ありがとう!


8
この質問は、このサイトでさまざまな方法で何度も尋ねられています。最初に検索してから質問してください。FAQをご覧ください。Programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/...
tgkprog

3
私は検索を行いましたが、これらの質問の両方を見ました。しかし、私はデザインやウェブ開発の学習には関心がありません。私は、多くのプログラマーが学校で本当に学ばなければならないと感じていることを学ぶことに関心があります。これらの質問にはいくつかの素晴らしいアドバイスがありますが、私が探しているものではありません。ありがとう
エリック

+1フルタイムのプログラマーになる前に習得したいスキルの1つは強力な数学スキルです。なぜなら、数学スキルは問題を解決し、新しい概念を学び、プログラマーとして心を鍛えるため、最も重要なスキルだと言えるからです。主に私が毎日やっていることです。
アンソニー

3
ワークフロー。そして、コードがユニコーン固有のスノーフレークではないことを認識しています。設計時には、最小の驚きの原則を適用します。あなたがする前に考えてください。複雑さの管理は非常に重要な側面になります。
sleeplessnerd

1
実際、数学のスキルが高い人と働くことはあまり好きではありません。ソフトウェアエンジニアリングの原則を適用する代わりに、すべてを数式に変えます。ソフトウェアは数学ではありません。理解しやすいようにコードを書くことが重要です。
ロブK

回答:


21

学校では、コードの記述について学びます。あなたが学ばないのは、ソフトウェア開発の残りの部分です。学校で学んだことのない主なものは次のとおりです。

  • 開発チームの一員として働く
  • バージョン管理を使用する
  • バグトラッカーを使用する

これらはどの開発者にとっても非常に重要なスキルであり、残念ながら教室でそれらを取得する可能性は低いです。


4
開発チームの一員として働くことは、確かに微妙で複雑な芸術です。しかし、バージョン管理とバグ追跡が常に新しい開発者にとって大きなハードルとしてフレーム化されている理由はわかりません。これらは確かに重要なツールですが、新しい人にmanページ、O'Reillyの本、またはオンラインチュートリアルを参照させると、数時間でパンとバターの使用方法を理解できます。なぜあなたはそのようなことのために教室の時間を無駄にしますか?
チャールズE.グラント

1
@ CharlesE.Grantバージョン管理はプログラミングと似ていますが、比較的短時間で基本を理解できますが、効果的に使用するには経験が必要です。そして、gitやMercurialのようなDVCSは、svnのようなCVCSよりも理解するのに時間がかかります。
イズカタ

8
確立されたコード(開発チームの一員として働くことの主要な部分)を維持するクラスがなかったし、コードをテストする方法に関する教室での経験は最小限でした。
ヴェロキラプトル

1
@ CharlesE.Grant:数年前から、プログラミングと関連トピックの大学院レベルのコースを教えてきました。大学院生でさえ、何らかの種類の改訂管理システムを使用する理由を理解するのに苦労しています。そして、彼らがしぶしぶそれを使い始めたとき、彼らは非常にすぐにそれによって非常に混乱するようです。重要な未学習のトピックとして取り上げたメイソンに+1。
ピーターK.

1
+1 +1 +1、各ポイントに1つ。彼らはあなたにこれらのことを教えないほど愚かな...または少なくともあなたに教えるようにしてください。
ラドゥムルゼア

20

開発者として、ビジネスにおいて非常に重要な役割を担っていることを、キャリアの早い段階で知っていればよかったです。私は単なるコードモンキーではありません。

開発者として、あなたはあなたが取り組んでいるソフトウェアに関連するビジネスの部分に大きな手を持っています。

会社がコードのテストを作成していない場合は、今すぐテストの作成を開始してください。

バグを追跡しない場合は、適切なバグトラッカーを今すぐ見つけてください。

上司がスプレッドシートアプリのスプラッシュスクリーン用の派手なアニメーションの作業をすぐに開始することを望んでいるが、次の顧客リリース期限までに修正すべきバグがまだたくさんあり、いくつかの重要な未完成の機能がある場合は、作業の優先順位付けについて正しく話し合う。

たとえあなたが「普通の従業員」であっても、コンサルタントのように振る舞うことは、コードを書くだけでビジネスに既得権益を持っているように振る舞わない他の開発者とは一線を画す素晴らしい方法です。


9

私の学校は、問題の解決方法を教えてくれませんでした。彼らはコーディングの仕組みを教えてくれましたが、問題を研究し、それを理解し、解決策を思い付くことができるようになることは、彼らが教えなかったものです。プログラミング言語の理解に加えて、忍耐、厳格さ、直感が必要です。

また、チームワーク、バージョン管理、および保守が容易なコードを書くことの重要性についても教えませんでした。また、ソフトウェアのテスト方法についてもあまり教えませんでした。彼らは単体テストに触れたかもしれませんが、受け入れテスト、回帰テストなどの概念を深く掘り下げていませんでした。

免責事項:私は80年代に大学に行きました。しかし、私が今日採用している人々、つまりプログラミングの実際の世界についてほとんど知識のない新卒者:バージョン管理、テスト、クリーンコーディング、デバッグスキルなどで、このことの証拠を見ています。


テスト部分に+1。私の大学では、彼らも教えていません。私は1つのクラス(はい:1つ)を持っていて、そこで先生はユニットテストについて言及しました...約3分間。それでおしまい。
ラドゥムゼア

私はこれが遅い応答であることを知っていますが、それは私の数学の学位を私の雇用者にアピールさせたものの一つでした。この見解は雇用主の間でも間違いなく共有されています。
エリック

多くの学校では、アルゴリズム(別名「問題解決」)が適切に教えられていない、まったく教えられていない、またはプログラミング言語でそれを適用する方法を教えられていません。
umlcat

うーん....あなたの答えは、私が経験したこととは正反対です。学校全体の目的は、問題を効果的に研究し、理解し、解決策を考え出すことができるように、背景を提供することです。新しい卒業生は、学校から出たばかりの「良い」とは言えないかもしれませんが、彼らは確かに訓練され、それができるはずです。私の学校では、彼らはプログラミングをまったく教えていませんでした。コースがあなたに教えようとしている情報を学びながら、あなた自身でプログラムする方法を学ぶことが期待されていました。だから、彼らは「コーディングの力学」を教えるだけで、私を超えています
ダンク

...まともな学校では、単にコーディングの方法を学ぶだけでは信用を得られません。バージョン管理を使用するのが難しいと感じる場合、あなたははるかに深刻な問題を抱えており、学校教育のどれも助けられません。保守しやすいコードを書くための決定的な方法を思いついたら、本を書いて豊かになってください。誰もまだその問題を解決していません。テストするためにあなたのプログラムを提出しなければならなかった学校の部分を見逃したに違いありません。受入/回帰テストは業界固有のものであり、学校よりも会社のやり方で行う方がより適切に教えられます。
ダンク

7

私の意見では、学校で学ばない(または適切に学ばない)最も重要なことは次のとおりです。

  • IDEの適切な使用方法。最新のIDEのフルパワーを使用すると、自動リファクタリング、コードナビゲーション、VCS統合、コード分析、コード補完などの生産性が大幅に向上します。
  • デバッガーを適切に使用する方法:リモートデバッグ、マルチスレッドアプリケーションデバッグ、エクスプレス評価など
  • バグ修正とメンテナンス。大学ではこれについてほとんど何も教えていませんが、業界ではバグを修正することは非常に一般的です。
  • 大規模なチームや大規模なプロジェクトで働く方法。基本的に大学では、大規模な産業プロジェクトと比較して、プロジェクトは一種の小規模です。
  • 良いコードを書く方法と読みやすさにアクセントをつける方法。これには経験が必要ですが、基本(コードの完成、コードのクリーンアップなど)を教える本がいくつかあります。
  • カスタマイズを使用して、フレームワークを最大限に活用する方法。大学では、非常に基本的なシナリオでいくつかのフレームワークを使用する方法を学んだかもしれません。業界では、コーナーケースに到達します。
  • 指定後にコードを理解して記述する方法。おそらく仕様の書き方を学びますが、今ではその読み方と解釈の仕方を学びます。

VCS、バグ追跡システム、ビルドツールなどは、チームと連携できるようにするために学ぶ必要があるツールです。基本的なレベルで習得するのに多くの時間を必要とせず、その後(少なくとも最初は)かなり簡単です。上記のリストには、既知の場合、生産性を高める微妙な要素が含まれています。


別名「プログラミング」はプログラミング言語を知っているだけではなく、「環境」、「エコシステム」、「フレームワーク」があります
...-umlcat

4

新卒者が見落としている最大のことは、バージョン管理をよく理解していることです。

ソースコードリポジトリ(GitHubなど)を使用したオープンソースソフトウェア開発の経験がある場合mostは、仲間のクラスの仲間よりも一歩進んでいます。

2番目は、複雑さを理解することです(big O)。大学のほとんどの人はそれについて聞いたことがありますが、実際に使用されるソフトウェアをまだ開発していないため、その本当の重要性を理解していません。

データセットが非常に大きいため、ブルートフォースではデータをカットできず、他の手法を理解することが有用であり、状況に応じてブルートフォースがうまくいくと推測できる場合は、経験を積んでミスを犯すことです。


1
バージョン管理教育の欠如が変わり始めていると思います。私の学校ではバージョン管理に大きなストレスがかかっていました。
サウスポーうさぎ

@SouthpawHare:私はそれが存在しないと言っているのではなく、彼らは私の時代にそれを教えさえしました。ただ、この経験を持って大学を出た人はまだ少数です。そして、そのようにそれを持っている人々はより貴重です。過去20年間で大きく変化したことに同意しません。
マーティンヨーク

3

うまくデバッグする方法、特にデバッガを使用し、バグに取り組むための適切なアプローチをとる方法、すなわち、何が原因であるかを見つけ、それが原因である理由を見つけ、ソリューションが単に物事を試みて期待するのではなく解決する理由を理解します。

ほとんどのコンピューターサイエンスの卒業生はデバッグが非常に貧弱であり、その結果、物事を修正するのに必要な時間よりもはるかに長い時間がかかり、そうすることでより多くのバグを作成します。

バージョン管理、バグ追跡などの他のことは言及する価値がありますが、デバッグへの賢明なアプローチの欠如ははるかに大きな問題であり、より多くの学習が必要です。


2

あなたが本当のプログラマーになる前に学べたらいいと思うスキルは何ですか?

私の経験では、私の学校は問題の解決方法を教えてくれませんでした。

私の経験では、プログラミングはすべて問題を解決することです。私の学校では、構文エラーなしでプログラムを書くことができるかどうかだけをチェックしていました。実際に必要なものは、入力として提供されません。構文は、必要に応じて任意の書籍から検索できるものです。しかし、問題を解決する能力をどこからでも達成することはできません。ただし、あなたはそれをうまく練習し、そのために自分自身を訓練します。

どんなタイプでも、可能な限り多くの質問に答えてみてください。そうすれば、自分に自信を持てるようになります。あなたの心に情熱を持ってそれをやってみてください、あなたは確かに通過します。


2

ファクトリー、シングルトン、アダプター、コマンド、オブザーバー(私の大学はそれらを教えませんでした):

会社がソフトウェア開発にアジャイル手法を使用している場合、それをある程度理解することは価値があります。


2

あなたがプロのプログラマーとして必要とするスキルの多くは、大学/アカデミックな環境ではほとんど不可能です。

彼らは現場で直接働いた経験からのみ得ることができます。

  • グラフィックデザイナー、プロダクトデザイナー、マネージャーなど、「職業」以外の人々とのコラボレーションとコミュニケーションの方法を学びます。

  • あなたの仕事はコードを書くことではなく、製品に命を吹き込むことだと理解する。言うより簡単だ。

  • 適切なコーディングの実践と実際的な考慮事項のバランスをとる方法を知っている。コードが「十分」、「過剰設計」、または「リファクタリングが必要」であるかどうかを判断する能力を獲得する。

  • 自分の弱点や不安を克服することを学ぶ。批判に耐える能力を獲得する。自我を手放す 個人的な責任を取ることの意味を学び、それからそれを取る。

これらすべてについて読むのは簡単です。これを実際に実行することはまったく異なります。唯一の方法はそれを行うことです。あなたは何度も噛まれ、おそらく痛いでしょうが、あなたはより強く、より良くなります。

関連資料:見習いパターン


1

それはすべて学校に依存しています。私の大学では、多くの実用的なプロジェクトがあります。多くの場合、チームでさまざまなソース管理を使用しています。ですから、いくつかの学校はそれらに焦点を合わせていると思います。

しかし、学校が教えないことの1つは、詳細です。学校が何らかの技術や実践(Web開発、JAVA UI開発、高度なデータベースなど)を教える場合、ほとんどの場合、実際のビジネスでこの技術や実践を使用するために必要なのは表面をひっかくだけで、詳細には触れません。あなたはあなたの問題を解決する方法の一般的な概要を得ますが、あなたはあなた自身に必要な詳細を学ぶ必要があります。

学校が何かを詳細に教えているのは、何かの背後に強力な数学的または理論的な背景があるときだけです。正式な言語やSQLデータベースなどは、数学の基礎に基づいて構築されており、コンピューターサイエンスまたはエンジニアリングのいずれかで多く使用されているため、学校のカリキュラムのコア部分であることがよくあります。


1
  • 要件-それらを間違って取得し、残りはほとんど無駄です
  • 優先度(どのリリースのどの機能)
  • 箱から出して使用する(購入/フリーウェア)
  • チームワーク
  • プロジェクト管理-要件、品質(製品のデータサンプル、テストケース、テスト方法、コーディング前のカバレッジ、コストに似ていますが、関連性はありません。PMIブックを読む
  • コミュニケーションツール(メール、会議:カレンダープランナー)
  • ソースコード管理

0

全体的なプログラマーになり、さまざまなこと、言語、データベース、プラットフォームを学び、最終的にウェブ開発者になりたいかどうかをゲームの早い段階で決定したか、1つのCMSに特化すべきか、または、スペシャリストであるPhotoshopに特化するだけでも、実際のプログラマが知っておくべきことを実際に知っていれば、あなたのスキルも同様に価値があり、有益です。言い換えれば、良いお金を稼ぐ必要があるだけなら、一つだけに特化してください。あなたがコンピューターを愛し、問題を解決したいなら、プログラマーになりましょう。

[4つまたは5つの異なるjavascript 'frameworks'のような学習を行った後、JQueryが実際に強力になり、Javaで認定され、Javaの地位を得ることはなく、複数のプラットフォームで作業した後。AS400- rpg、>。NET-c#、およびPHP。Photoshopを習得して、バグを修正したりソフトウェアを作成したりせずに平等にお金を稼ぐことを望みます。]

幅広いトピックを知っていることには一定の満足感がありますが、Photoshopの現金を知っている人が同じ給料を現金で見ていると、満足度が低下します。


2
はい、しかしその種の専門家は自分の店を開くことは決してありません。あなたの夢が将来いつかあなた自身のスタートアップのCEOになることであるならば、あなたは膨大なスキルの配列を必要とします。
DavorŽdralo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.