コーディングを学ぶ:旅のための知恵とツール
公開: 2022-03-11プログラミングは持っている素晴らしいスキルです。 それは個人的レベルと専門的レベルの両方で非常にやりがいがあり、あなたに構築し、いじくり回し、発明する能力を与えます。 それは、立派な給料、好きなときに好きな場所で働く自由、または上記のすべてであろうと、大きな利益を伴うあらゆる種類のキャリアパスへの扉を開くことができます。
あらゆる種類のバックグラウンドから、ますます多くの人々がコーディングを学ぶことを決定しているのは当然のことです。 しかし、タスクに取り組む各人はすぐに不快な現実に直面します:プログラミングを学ぶことは難しいです。
複雑で紛らわしいのですが、最初は、コーディングの多くはまったく意味がありません。 予想に反して、「わからない」という気持ちは、旅の途中でも衰えることなく続く可能性があり、明るい目の初心者は、絶望的で、迷子になり、諦める準備ができていると感じます。
物語の教訓はこれです:準備してください。 プログラマーパラダイスへの道は長いものであり、最初に正しい考え方がなければ、すぐにその魅力を失う可能性があります。
この記事では、あなたの旅で何を期待するか、それをどのように進めるのが最善か、そしてその過程でどのようなツールやリソースが役立つかについて、いくつかのガイダンスを提供しようと思います。
何を期待します
当たり前のことかもしれませんが、頭を包み込むようにするために最初にすべきことは、プログラミングは本質的に技術的な分野であるということです。 あなたが学ぶ最も早いスキルは多くの「正確さ」と「正確さ」を必要とします、そして、角を切り取ろうとすることはあなたをどこにも連れて行かないでしょう。 少なくとも少しの数学だけでなく、手続き型ロジックなど、数学のように感じるかもしれない多くのことを学ぶ必要があります。
重要なのは、プログラミングの基礎を学ぶには、多くの焦点と練習が必要だということです。 しかし、技術者も非技術者も同様に、数え切れないほどの人々があなたの前にこの旅をしたので、落胆しないでください。 これから説明するように、プロセスをできるだけ簡単にするために、あなたと同じように人々のためのリソースが豊富にあります。
プログラミングの学習曲線は、最初は最も急です。 プログラミング言語のさまざまな部分(式、変数、データ型、演算子、ループ、条件文、関数、クラス)や、コンピューターのどの程度を理解するための手法など、吸収する必要のある「基本」は膨大な量です。コードが使用する時間とメモリスペース(複雑さ)。 初めて機能しないコードをたくさん書くので、すべてのプログラマーの存在の悩みの種であるデバッグに同意する必要があります。
コードの書き方を学べば、堅牢なコードの書き方を学ぶことができます。 コードを効率的で、読みやすく、理解しやすく、拡張しやすいものにすることは芸術であり、常に進化しています。 さまざまなソフトウェア哲学を探求し始め、単に「コーダー」から「ソフトウェアアーキテクト」になることができます。 これも多くの時間と練習を要するプロセスですが、上手くいくほど、より多くの機会が開かれます。
コーディングを学ぶ方法
プログラミングの楽園への旅は人それぞれですが、すべての旅行者が恩恵を受けることができるいくつかの良い原則があります。 始めたばかりの場合に推奨する基本的なプロセスは次のとおりです。
1.目的地を選択してください:言語を選択してください、任意の言語
コーディングの学習に真剣に取り組んでいる場合、選択する言語はそれほど重要ではありません。 最も人気のあるプログラミング言語は同じ基本概念を共有しており、最初の言語でプログラミングのコツを実際に習得するまでに、新しい言語を選ぶのは初めての場合よりも簡単になります。 あなたが大学の学位プログラムなどを通して学んでいるなら、あなたの言語はおそらくあなたのために選ばれるでしょう。
いずれにせよ、長期的に何をしたいのかを正確に理解していない限り、私が検討することをお勧めする言語は5つだけです。これらの言語は、学習のしやすさ、得られた知識の多様性、および豊富な長期的な仕事のバランスを取ります。見通し: Ruby 、 JavaScript 、 Python 、 C 、およびJava 。
決定に役立つ、それぞれに関する一般的な注意事項を次に示します。
通訳言語
インタプリタ言語は、から始めるのが簡単です。 これは、ソースコードが記述されるとすぐに実行できるためです。 対照的に、コンパイルされた言語では、コードの記述と実行の間に追加の手順が必要です。
その結果、インタプリタ言語はより高速なコーディングを可能にしますが、コンピュータリソースを効率的に使用せず、バグが検出されなくなる可能性が高くなります。 これらは、パフォーマンスが優先されないアプリケーションに最適です。 これらの言語は、Web開発で非常に人気があります。 実際、そのうちの1つであるJavaScriptは、Webブラウザーで直接実行できる唯一の言語であり、最も収益性の高い言語の1つとして急速に成長しています。
言語 | 長所 | 短所 | 一般的に使用される |
ルビー |
|
|
|
JavaScript |
|
|
|
Python |
|
|
|
コンパイルされた言語
コードがコンパイルされると、実行前に人間が読めるコードから最適化されたマシンコードに変換されます。 結果は、インタプリタ言語よりもはるかに高速かつ効率的に実行されます。 これを行うコンパイラは、その仕事の一部として、コーディングされたすべてのものが「意味をなす」ことを確認する必要があり、その結果、解釈された言語が影響を受けやすい多くの種類のバグを識別して防止できます。
このため、これらの言語の間違いや悪いコードを回避することは困難です。 彼らはあなたに「内部で」実際に何が起こっているのかをより深く理解することを強制し、あなたはコンピュータが実際にどのように機能するかについてもっと多くを学ぶでしょう。 その代償は、これらの言語はより労働集約的であり、通常、初心者にとって学ぶのがより難しいということです。
コンパイルされた言語は、リソースの制限が厳しいハードウェアで実行される可能性のある組み込みアプリケーションや、小さなバグでも大混乱を引き起こす可能性のある大規模で複雑なアプリケーションなど、パフォーマンスと信頼性を必要とするアプリケーションで使用されます。
言語 | 長所 | 短所 | 一般的に使用される |
C |
|
|
|
Java |
|
|
|
HTMLとCSS:プログラミング言語ではない
これまでに存在したほとんどすべてのWebページで使用されているHTMLとCSSは、プログラミング言語ではないことに注意してください。 それらは表現言語であり、何かがどのように見えるか、何が含まれるべきかを定義するために使用されますが、どのように動作するべきかは定義しません。 それでも、それらは拾いやすく、正しく入力する方法を教えてくれるので、始めるのに良い場所かもしれません。 さらに、Web開発を計画している場合は、とにかくある時点でそれらを学ぶ必要があります。
2.スモールスタート
学習には時間がかかり、吸収することがたくさんあります。 初日に完全なアプリケーションを作成しようとしても、うまくいきません。 欲求不満を避けるために、小さくて単純な問題を解決することから始めて、上に向かって進んでください。
たとえば、新しい言語を学習するときに伝統的に作成される最初のプログラムは、「HelloWorld」という単語を画面に出力するだけの「HelloWorld」プログラムです。 ほとんどの言語では、より単純なプログラムを作成することはほとんど不可能であり、明らかにこのプログラムは実際にはほとんど使用されません。 ただし、それでも言語の基本的な部分の多くが組み込まれているため、言語の入力方法を自己紹介するのに最適です。
ここから、いくつかの数値を加算または減算するものを記述し、次にユーザーからの入力を受け取るものを記述できます。 次に、決定を下す方法である条件文と、反復的なタスクを実行するループについて学習できます。 すぐに、最初のオブジェクトを作成する準備が整います。その時点で、完全なアプリケーションの作成を試すことができます。
3.辛抱強く
プログラミングのコアコンセプトは非常に難しい場合があります。 コンピュータがより深いレベルでどのように機能するかをまだ知らない場合、それらの多くはまったく直感的ではありません。
たとえば、私が始めたとき、デバッグは腹立たしいプロセスであることがわかりました。 プログラミングのようには感じませんでした。 かっこいい新しいことをする新しいコードを書く代わりに、私は一日中、自分が書いたものを精査し、「今回はどうやってそれを作り上げたのか」を理解しようとしました。 頭をかいてあきらめる準備ができました。 最終的に、どこかにセミコロンを1つ残したか、スペースの代わりにタブを使用したことに気付き、コードが再び機能するようになるまでに、それは1日の終わりになります。 私は完全な馬鹿のように感じます。 そんな時間の無駄のように感じるでしょう。

この種のことがあなたに起こりそうです、そしてそれはあなたを絶対に狂わせるでしょう。 ですから、成功への鍵の1つは、これです。辛抱強く、自分で気楽に進んでください。 このテーマに関する最良のアドバイスのいくつかは、目標ではなく、プロセスに焦点を当てることを推奨しています。 最終的な目標(「6月末までにウェブサイトを構築したい」)に集中すると、落胆し、失敗のように感じます。 進歩するのにかかる時間だけ自分自身をとらせることによって、あなたはより成功するでしょう。
4.練習練習練習
他のスキルと同様に、それを上手に習得することは実際に練習することになります。 それを行う方法を学ぶために、何かをすることに勝るものはありません! 週に数時間しか余裕がない場合でも、定期的に練習を続けると、いつの日か、プログラミングの仕方を知っていることに気付くでしょう。 最終的には、物事に対する直感が発達し、最初は1日かかっていたもの(バグの追跡など)が、今では数秒しかかからない場合があります。
プログラミングの基本をある程度習得したと感じたら、最初のプロジェクトを開始するのが練習の良い方法です。 やることリストや電卓(ここでも、小さく始めてください)など、作成したい単純なアプリケーションを考えて、試してみてください。 これにより、アーキテクチャと設計の問題を解決し、さまざまな部分を構築して、それらが一緒に機能する全体に収まるようにする方法を学びます。 これらは、あなたが本当に自分自身をプログラマーと呼ぶことを可能にする重要なスキルです。
資力
目標、学習スタイル、および手段に応じて、旅の途中でさまざまなリソースを使用することをお勧めします。 どの方法が自分に適しているかを判断するのに役立つように、ここでは、より構造化された学習からより構造化されていない学習まで、大まかに順序付けて使用できるいくつかのツールの概要を示します。
構造化された学習
これは、インストラクター、宿題、テスト、成績、締め切り、および研究を最優先にしない場合の実際の結果を提供するオプションのカテゴリです。 これらは、クラスに行くか、プログラムから抜け出さなければならないオプションです。
正式な大学の学位
最も費用がかかるが、多くの場合、最も価値のあるオプションである正式な大学の学位は、プログラミングとコンピューター技術で繁栄するキャリアのための最良の基盤を提供します。 あなたはあなたの学位の形であなたの業績に対する認識を受け取ります(プロの市場に参入するときの主要な足がかり)。 しかし、もっと重要なことは、コンピューターのすべてを深く完全に理解することで、真に一流の効果的なソフトウェアを作成する能力がこれを反映することです。
ここにあなたがまともな大学のプログラムから深く学ぶことを期待できるいくつかの事柄があります、そしてそれは他の場所のための完全な指導を見つけるのがより難しいかもしれません。
- 電気回路-事実上すべてのコンピューターハードウェアの基礎となる基本的な物理学。
- デジタル論理回路-回路で真理と論理構造を表現する方法。
- マイクロプロセッサとコンピュータシステム-論理回路を組み合わせてプログラム可能なコンピューティングマシンを作成する方法。 それらすべての小さな金属ピンと印刷されたワイヤーで何が起こっているのか。
- オペレーティングシステム-コンピュータをプログラムして、それ自体を管理、整理、保護し、複数のアプリケーションの安全な操作を可能にする方法。
- データベース-大量のデータを紛失したり、破損したり、検索できなくなったりすることなく、大量のデータを保存およびコピーする方法。
- ネットワーク-異なるコンピュータシステムと無関係のコンピュータシステムがどのように相互に通信できるか。
- 高等数学-微積分と線形代数を含みます。 先進的または最先端の分野でのキャリアに不可欠です。
- 信号処理-アナログからデジタルの世界へ、またはその逆の境界を越える方法。
- 数値的方法-現実の問題がコンピューターにうまく適合しない場合。
コンピュータサイエンスとエンジニアリングの学校はあなたのお尻を蹴ります、そしてあなたはそれを完了するために犠牲にしてあなた自身を捧げなければならないでしょう。 しかし、報酬はそれだけの価値があります。 私は自分の学位を取得するのに苦労しましたが、それを受け取った日は私の人生で最も誇りに思う日です。
ブートキャンプ
いわゆる「ブートキャンプ」プログラムは、正式な学位を取得するための時間やリソースがないが、一生懸命働き、少なくともソフトウェア開発のキャリアを開始するために必要な最低限のことを学ぶ人々のニーズを満たすために登場しました。 コストと必要なコミットメントの両方で、それらは正式な学位と以下で説明する自主的なオプションの間にあります。
ブートキャンプには通常、8〜12週間の集中的な調査が含まれ、費用は約10,000米ドルです。 それらは短時間で多くの資料をカバーし、その間に他のほとんどの追求を犠牲にする必要があります。 しかし、彼らは実際のソフトウェア開発の準備をし、プログラミングのキャリアへのファーストトラックにあなたを置くことを約束します。 多くのブートキャンプは、キャリアの日に最高潮に達するか、そうでなければ卒業後すぐにあなたを有給の仕事に就かせようとします。
ブートキャンプは比較的最近の爆発的な現象です。 そのため、彼らの成功率を測定することはまだ困難であり、多くの人は卒業生を就職させた確かな実績をまだ開発していません。 そうは言っても、この急成長している新しい産業が成長し続けるにつれて、利用可能なプログラムはより良くなることが期待できます。 あなたが注意深く研究をしている限り、あなたはこれがあなたにとって完璧な選択肢であると思うかもしれません。
ほとんどのブートキャンプはローカルプログラムであるため、町で何が利用できるかを確認する必要があります。 あなたが大都市に住んでいるなら、おそらくあなたはあなたが探しているものをこのリスト、またはこれで見つけることができます。
半構造化学習
構造とガイダンスの要素を最大限に活用しているが、正式な学位やブートキャンププログラムに取り組む時間やリソースがない人のために、毎日ますます多くのリソースが利用できるようになっています。 これらのオプションは通常、完全にオンラインで提供され、多くは完全に無料です。 このようなサービスに対する高い需要が明らかになるにつれて、これらのツールは高度化され、提供される価値が急速に高まっています。 ソフトウェアを介してソフトウェアを学び、教えることには明らかな利点があるため、ソフトウェア開発のコースは当然この進化の多くを推進してきました。
大規模オープンオンラインコース(MOOC)
MOOCは素晴らしいリソースであり、質の高い手頃な教育のための競争の場を平準化する上で大きな進歩を遂げています。 彼らは世界最高の正式な大学のクラスの構造とガイダンスの多くを提供しますが、インターネットに接続している人なら誰でも、どこでもオンラインで利用できます。 多くの人気のあるMOOCも完全に無料ですが、追加料金(および学習への取り組み)で、大学の単位と同等の正式な単位を多くのクラスで取得することもできます。
オンラインで利用できる一流のMOOCプラットフォームは数多くあり、世界で最も有名な大学の教授が教えるコースや、世界中のクラスメートが互いに学び合うことができるコミュニティプラットフォームがあります。 最もよく知られているプロバイダーのいくつかを次に示します。
- コーセラ
- EdX
- Udacity
宣伝されているように、これらのコースは大学レベルのコースワークを提供しているので、それらを乗り越えるために一生懸命働く準備ができていることに注意してください!
ガイド付きチュートリアルWebサイト
構造とガイダンスは好きだが、締め切りは好きではない場合は、さまざまな配信方法を通じて自動化された段階的なトレーニングを提供する優れたオンラインプラットフォームがたくさんあります。 ビデオチュートリアルによって駆動されるものもあれば、テキストによって駆動されるものもあります。 多くの場合、ブラウザで練習できるインタラクティブなコードエディタが含まれています。 これらはあなたにあなた自身のペースで学ぶための大きな柔軟性を与えます、それが毎日の終わりに30分の練習であろうと週末の10時間のマラソンであろうと。
これらのプラットフォームの多くは、すべてのコンテンツにアクセスするために有料のサブスクリプションを必要としますが、ほとんどのプラットフォームでは、すぐに開始して、それが機能するかどうかを自分で判断できるように、無料の試用版を提供しています。
- カーンアカデミー
- Udemy
- Codecademy
- コードアベンジャーズ
- コードスクール
- 樹上の家
- リンダ
- Pluralsight
これは単なる短いリストなので、周りを検索して、他に何があるかを確認してください。
非構造化学習
構造化されたレッスンのプレッシャーなしに、自分の道を見つけたい、または自由な時間に関する知識を向上させたい人のために、以下のツールは自主的なアプローチを提供します。 上記のアプローチのいずれかを採用する場合でも、これらのリソースの多くは、学習を補足したり、実践するためのプラットフォームを提供したりするのに役立つ場合があります。
ウェブサイトをドリルする
あなたの目標がプログラミングの問題を解決する練習をすることだけであるなら、インターネットはもう一度、あなたをカバーしました。 次のサイトでは、問題を解決し、ソリューションをその場で評価し、他のユーザーのソリューションとどのように積み重ねるかを比較するために、インタラクティブなコーディングインターフェイスとともに、拡大し続ける一連のコーディングの課題を提供しています。
- Exercism.io
- CheckiO
- CodeChef
- CodeEval
- Codewars
- Codility
- HackerRank
ビデオ
プログラミングを受動的に学ぶことは実用性に限界がありますが、会議の合間に、または夕方にグラスワインを飲みながら、より深い概念のいくつかを吸収したい場合、これらの講義シリーズはそこにある最高のもののいくつかです。 この種のものが好きなら、YouTubeやウェブで他に何が利用できるかをチェックしてください。
- MIT OpenCourseWare
- スタンフォード大学レクチャーシリーズ
本
利用可能なテクノロジーのすべての驚異があっても、多くの人々にとって、トピックに飛び込んで深く理解するための良い本のようなものはまだありません。 この方法を学ぶのが好きなら、Toptalのトップ無料プログラミング本のリストをチェックしてください。
最後に
コーディングを学ぶことは非常に個人的な旅です。 誰もがさまざまなリソースとさまざまな目標から始め、その過程でさまざまな課題と機会に直面します。 他の人が何をしているのか、どうやってそこにたどり着いたのかを心配する必要はありません。 経験豊富なプログラマーでさえ、学ぶべき新しいことが常にあるので、旅自体は決して終わりません。
だから、あなたへの私のアドバイスは、ゆっくりと旅を楽しんでください! 探索することがたくさんあり、驚異の世界があなたを待っています。 千マイルの旅は、一歩から始まります。 ここにいくつかの良い靴があります。 幸運を!