![見出し画像](https://assets.st-note.com/production/uploads/images/20948532/rectangle_large_type_2_983ae4149ae0ec8070ae30636518b9aa.jpeg?width=1200)
【プログラミング】学習の向き合い方
HOME / プログラミング学習 / ワークショップ / リモートワーク
プログラミングの基本 / プログラミングの応用 / 青空プログラミング / シェアプログラミング / プログラミング開発現場 / プログラミングリファレンス / SDGs:持続可能な開発目標
9'sパネル
1 2 基 本
4 プログラミング 6
7 8 その他
プログラミング定義
#プログラミング定義
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) March 13, 2020
某コンビニのCMからヒントを得て
・for文
・if文
・switch文#プログラミング基礎#プログラミング初心者 #駆け出しエンジニアと繋がりたい
定義について
定数
各構文
オブジェクト思考
ポリモーフィズムについて
プログラミング言語の型システムの性質を表すもので、プログラミング言語の各要素(定数、変数、式、オブジェクト、関数、メソッドなど)についてそれらが複数の型に属することを許すという性質を指す。 ポリモルフィズム、多態性、多相性、多様性とも呼ばれる。
プロパティ
継承について
継承とはオブジェクト指向を構成する概念の一つである。あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。
カプセル化について
データとメソッドを一つのオブジェクトにまとめ、その内容を隠蔽することを言う。カプセル化の概念は、D.L.パルナスの情報隠蔽の構成概念の一つとして見ることができる。 オブジェクト指向プログラミングにおけるオブジェクトは、クラスによる情報のカプセル化を行うことで作られる。
プログラミングの基本
オブジェクト思考にも書きましたが、最近は、オブジェクト指向プログラミングの概念の一つがポリモーフィズム。日本語では多態性・多様性などと訳されます。
このポリモーフィズムが、プロパティ、メソッド、パラメーター…などになりますかね。
オブジェクトである物体にたいして、メソッドやプロパティがあり、またパラメーターはそのメソッドに送るための引数のことですね。
JavaScriptを例にすると
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) April 7, 2020
オブジェクトは、ものと例えられて、クラスのことですね。
プロパティは、オブジェクトの値を入れる箱で変数名
メソッドは、関数やよく使う機能
プロパティにも入れることもできます。
パラメータは、そのオブジェクトやメソッドに渡される引数を示すことが多いですね。
人間でいうと
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) April 7, 2020
オブジェクトは、人そのもの
プロパティは、人の情報、つまりプロフィール
メソッドは、できること、やれること、計算や行動や思考回路
パラメータは、オブジェクトやメソッドに渡される情報の定義、例えば、年、月、日、年齢、など
オブジェクト、パラメータ、メソッドを渡せます
シェアの高さ
JavaScript とは
Webコンテンツの様々な部分で活用されるほか、バックサイドでも使用され、幅広い開発分野で活用されているため、高いシェア率を持っています。汎用性の高さがそのままシェアにもつながっています。
HTML とは
HTMLはHyperText Markup Languageの名の通り、本来マークアップ言語として開発されていましたが、HTML5の登場で高度な処理に対応したAPIを利用できるようになり、HTML4以前と比較するとより高度な機能を持ったWebアプリを開発、構築することができるようになりました。
#シェアプログラミング
HTML
HTML5
CSS とは
Webサイトを装飾するだけでなく、JavaScriptとHTML5と組み合わせることで、動的なWebアプリを構築でるスタイルシート言語です。HTMLと合わせてWebブラウザでの表示の際、事実上必須となるためこちらも高いシェアになっています。
SQL とは
RDBMS(関係データベース管理システム)において、データの操作や定義を行うデータベース言語です。RDBMSには様々な派生があり、CMSとして有名なWordPressやMovable TypeはMySQLを使用しています。SQLにはいろいろなものがありますが、DBを扱ううえで使う場合が多いため高いシェアとなっています。
Java とは
IT企業などで多く使われる傾向にあり、特に大規模システムにおける大きな需要と市場を持つオブジェクト指向言語です。Androidの開発でも使用するため高いシェアとなっているようです。
Bash/Shell とは
Unixのコマンド言語です。Unix上で様々な処理をするために使用します。開発に使用するサーバーを扱う際に使う頻度が高いものになります。
Python とは
汎用性が高く、人気の言語ですが、最近では特に機械学習やディープラーニングなどで脚光を浴びています。
C# とは
C言語系列のオブジェクト指向言語です。WebアプリからWindowsアプリまで幅広く開発できます。最近ではゲーム開発のために使うフレームワークUnityなどでも使われているため、高い順位となっています。
PHP とは
Webアプリ開発ではトップシェアともいえる汎用言語で、主にスクリプト言語として活用されることが多いです。メジャーなプロダクトにWordPressなどもあり、いまだに高い順位を維持しています。
C++ とは
C言語系列のオブジェクト指向言語で、大規模システム開発に活用されています。
世界的に見るとやはり需要に対して習得者が増えるため、Webアプリに寄りがちなのは否めませんが、一方JavaやC#といったアプリでも使える言語、PythonなどのAI系で使われることが多い言語なども上がってきているのが特徴的です
やりたいことから選ぶプログラミング言語
ここまでは全体的な立ち位置からプログラミング言語を紹介してきました。ただ実際言語を選択する際もっとも重要なのは「何を作りたいか」ではないでしょうか。ここからは「何が作れるか」という視点でプログラミング言語を紹介していきたいと思います。
スマホアプリを作る
スマホアプリを作る場合、ベースになるOSによって言語が異なります。順番に紹介します。
Java とは、Kotlin とは
AndroidOS用のアプリを開発する時の定番はJava、さらに近年はKotlinというJavaベースの専用言語が開発されました。スマホの普及に合わせて需要は今後ますます拡大するため、JavaとKotlinはAndroid用アプリ開発では必修の言語といえるでしょう。
アプリ作成に使えるサンプルソースも多く、参考になる入門書籍やWebサイトが多数あるため、簡単なアプリ作成から始めるには最適な言語ともいえます。
EclipseとよばれるIBMが開発したIDE(統合開発環境)を使用して開発できるのが特徴です。
Swift とは
iOS、MacOSを始めとするApple製品で使用できるアプリを作成するための言語です。コンパイラ言語ですが、インタプリンタとしてスクリプトを実行することもできます。
Appleが開発した統合開発環境Xcodeを使用して開発するため、WindowsOS上では開発できません。
もともとApple製OS用のアプリ開発に用いられていたObjective-CやC++に代わって開発された言語であり、まだ登場したばかりの新しい言語でもあります。2019年3月にはSwift5が発表され、Swiftのライブラリが今後すべてのMacOS、tvOS、watchOSのバージョンに含まれることになりました。これにより、以前に比べてアプリのビルドが容易になり、アプリサイズも縮小されることになりました。
Objective-C
C++
を確認しておくといいですね。
Webサイトを作る
PHP とは
PHPはWebで動的なコンテンツを作成する言語としては、現在もっともメジャーな言語です。DBとの連携能力が強く、スクリプト言語として扱いやすく高速なため、多くの動的コンテンツで使用されています。
CMSとして世界シェア60%以上を占めるともいわれるWordPressもこの言語で記述されています。
ほとんどのレンタルサーバーに標準でインストールされており、実行環境の準備に手間がかからない点も便利な言語です。
様々なフレームワークがあり、代表的なものにはRuby on Railsの概念を多く取り入れたCakePHP、Githubでも高い人気を持つLaravel などがあります。
Ruby とは
開発当時大きなシェアを持っていたPerlに対抗して開発され、パール(真珠)に対してRuby(ルビー)と名付けられた日本産の言語です。最新のマニュアルや開発情報などすべて英語と同時に日本語でリリースされるため、日本人にとっては多くの言語の中でも情報を取得し、また習得しやすい言語の一つです。
登場当初はPerl全盛からPHPへの過渡期にありシェアの伸びは大きいとはいえませんでしたが、現在はWeb開発のシーンでRuby on Railsの需要が大きく拡大しています。可読性を重視した構文構造になっており、すべてのデータ型がオブジェクトになっている純粋なオブジェクト指向言語であることが特徴です。楽しく学び、楽しく使うことを目的とした実用性の高い言語でもあります。
JavaScript とは
Webアプリ開発において避けては通れない言語です。登場当初はHTMLで記述されたWebサイト上に簡単な動的表現をする程度にとどまっていましたが、現在はサーバーサイドJavaScript実行環境や各種のライブラリが充実したことにより、Web開発全般で活用されています。
Facebookが開発したフレームワークReact Nativeのように、モバイルアプリ開発も可能です。
HTML、CSSと組み合わせることにより、よりインタラクティブなWebアプリが開発できるため、Webアプリ開発をするためには必須ともいえます。
デスクトップアプリを作る
C# とは
Windows向けのデスクトップアプリの開発言語としては鉄板のメジャーな言語です。
.NET Framework上で動き、メモリ管理が得意な言語でもあります。そのため、大きめのアプリを開発するのにも活用されています。またWebアプリの開発でも高速性を活かして使用されています。
最近モバイルやブラウザのゲームアプリ開発で人気が上昇しているUnityは、C++をベースにエンジンが記述され、Unityscript(JavaScript)とC#、Booの3つのプログラミング言語に対応しているクロスプラットフォームゲームエンジンです。
AI/機械学習
近年急激に市場が拡大しているAI開発・機械学習のプログラムを作るのであれば、PythonまたはRの二択になります。他の言語でも作成はできますが、業務レベルでの実用性ではライブラリの充実度を含め、この2つの言語に遠く及びません。
Python とは
AIといえばPythonといえるほど、ディープラーニングの分野で脚光を浴びている言語です。汎用プログラミング言語として開発され、コードの高い可読性と書き安さが特徴です。また本体は非常に小さく、様々なライブラリに対応することで豊富で膨大なツール群を抱え、目的に合わせてユーザーが環境と機能を拡張していくことができます。
Pythonは多くのOSとハードウェアに対応しており、クロスプラットフォーム開発にも向いています。また、オブジェクト指向、命令型、手続き型、関数型などの複数の形式でプログラムを記述することができます。
開発当初からデータサイエンスや科学技術コンピューティングに用いるよう開発されているため、その点がディープラーニングの要件にマッチしたことにより、PythonはAI開発と機械学習で活用されるようになりました。
R言語 とは
データ解析・統計プログラミングとして開発された言語であり、学術や研究の分野で活用されていました。設計開発の時点から統計解析言語として作られているため、データの分析や統計の解析に関して特化しており、他の言語と比較しても群を抜いて優秀な言語といえます。
R言語もPythonと比較しても劣らない拡張機能やライブラリが充実しています。RStudioとよばれるIDEがあるため、導入のハードルが低く、機械学習向けパッケージを導入することで容易に機械学習環境を整えることができます。
難易度で選ぶ
習得難易度の高い言語はどうしてもある程度のレベルに到達する前に挫折しそうになるものです。そこで、筆者の主観で難易度をリスト化してみました。
言語
難易度(筆者の主観)
備考
PHP 低
テキストエディタでも作業ができ、比較的容易にある程度の開発ができますが、DBを活用する場合SQLの知識も必要です。
Ruby 低
テキストエディタで開発が可能で可読性が高く、日本語のヘルプが充実しているため、習得までは比較的容易です。
JavaScript 低
簡単な記述はすぐに習得できますが、サーバーサイド開発まで踏み込むと習得が急激に難しくなります。
GO 低~中
シンプルな構造を持っており、プログラミング入門者にうってつけの言語です。
Java 中
ポピュラーな言語でサンプルコードも多くEclipseのようなIDEもありますが、業務レベルでの習得難易度はかなり高めです。
Swift 中
開発環境はMacOS上に限られるため、ハードウェアの面で制約があります。
Scala 中
JavaVM上で動作するハイブリッド言語なので、完全な初心者には少しハードルが高めです。
Python 中~高
可読性の高いコードとサンプルが多いものの、ディープラーニングのための統計処理には言語以外の知識も必要になります。
C# 中~高
C言語系は一般的に業務レベルでの習得が難しく、C#も例外ではありません。
R言語 高
統計プログラミング言語のため、習得の難易度は若干高めです。
言語の難易度は人によって大きく変わります。あくまでこれは一通りさわってきた筆者の体感ということで参考になれば幸いです。
勉強するには
では実際に、言語を学習する時に、どんな方法があるのでしょうか。何をどのように学びたいのか、どれくらいの熟練度を目指したいのかによっても、方法は大きく異なりますが、ここでは大きく、書籍、ウェブ、スクールの3つに分けて解説します。
書籍で学ぶ
入門からある程度の応用、熟練者向けの技術書まで様々な書籍があります。まったくプログラミング経験がない人が初めて言語に触れる場合、環境構築から言語の構造や考え方、該当の言語を取り巻く環境や需要の解説、初歩的なプログラムコードのサンプル、応用まで体系が一本にまとまっているため、1冊入門書を購入して始めるのが良いでしょう。
特にオライリー社の「はじめての~」シリーズはゼロから学べ、網羅的に書かれているためおすすめです。
ウェブで学ぶ
オンラインにはプログラミング言語によって、言語の公式サイトを始めとして様々な情報サイトがあります。基本的に無料で公開されているものがほとんどで、Software Development Kit(SDK=ソフトウェア開発キット)も配布されているため、まずは言語に触れてみたいという人はオンラインの初心者向け入門サイトを探してみるのが良いでしょう。
サンプルになるソースコードを公開しているサイトも多く、ソースコード共有サイトともいえるGithubなども活用すると中級以上のスキルを身につけることができます。ただし、必要な情報を検索する力だけでなく、より高度な情報を調べる場合は英語力が必要になる場合があります。
スクールに通う
お金をかけて一定の期間で一気に習得するなら、プログラミングスクールに通うのも手軽でおすすめです。
現在はオンラインスクールが多く、TechAcademyやCodecamp、TECH::CAMP、ドットインストール、Progate、Paizaなど様々な特徴のあるスクールが展開しています。
言語によってはクラウド上に開発環境を持つスクールもあり、SDKの導入や開発環境の下準備が不要ですぐにコードに触れることができます。また、動画やチュートリアルが用意されているスクールも多く、項目に沿って学ぶことで、短時間で効率的に言語を習得することができます。
スクールによっては入門向けの講座は無償で公開されていることもあるため、目的や自分の技術のレベルに合わせてスクールを選ぶ時に、いろいろと試すことができます。
ちなみに筆者はこんな感じで勉強してきました。
そういえば、プログラミング履歴はこんな感じ
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) March 31, 2020
・中学 JavaScript(独学)
・高校 Flash(独学)
・大学4年 C言語、Java(大学)
・一般企業:社会人2年 ObjectiveC(企業研修)
・IT企業10年:ObjectiveC/Swift/JavaScript HTML5+CSS3
書籍:100冊以上
プログラミングの応用
プログラミングの開発
プログラミングリファレンス
プログラミングの企業
求人の多さ(企業編)
Java ●●●●●●●●●○
PHP ●●●●●●●○○○
JavaScript ●●●●●○○○○○
Python ●●●●○○○○○○
Ruby ●●●●○○○○○○
C++ ●●●●○○○○○○
C# ●●●●○○○○○○
unity ●●○○○○○○○○
COBOL ●●○○○○○○○○
Swift ●○○○○○○○○○
ObjectiveC ●○○○○○○○○○
関連記事
僕たちの活動にいいなって思ったらぜサポートをお願いいたします
うちの学習方法は GitHub を使ってます#プログラミング現場 で10年続けて感じるのは、現場でそもそもあったことがないプログラマーがいると言うことですね。
— 🕯THE メディア 地域情報🇯🇵🌏🇨🇳プログラミング能力で世の中を変える 🚀 (@sunstripe2011) February 29, 2020
もし #駆け出しのエンジニアと繋がりたい
Github を通じて、プログラミングの支援をしていくので気になる方がいたらDMください
プログラミングの心得
#今日の積み上げ
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) March 14, 2020
🕯https://t.co/lfzVPTHbdN について調べる
🕯仕事10年プログラマーについて振り返る
🕯Githubに整理する
🕯購入した書籍の整理する#プログラミング初心者 #プログラミング独学 #駆け出しエンジニアと繋がりたい
🕯疲れたなって思ったら
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) March 14, 2020
休めばいいし
🕯やれたなって思ったら
呟けばいいし
🕯向いてないって思ったら
立ち止まって振り向けばいいし
🕯壁にぶち当たったら
引いて見たり、押して見たらいいし
🕯目標は7つ分割
期限を決めて#駆け出しエンジニアと繋がりたい#プログラミング初心者
プログラミングの挫折
こう感じたらぜひ過去のプログラミングを読み返してみてください。その蓄積された。プログラミング言語学習で頑張ってきたあなたの功績が残っています。プログラミングの学習において挫折は付き物です。
🕯疲れたなって思ったら
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) March 14, 2020
休めばいいし
🕯やれたなって思ったら
呟けばいいし
🕯向いてないって思ったら
立ち止まって振り向けばいいし
🕯壁にぶち当たったら
引いて見たり、押して見たらいいし
🕯目標は7つ分割
期限を決めて#駆け出しエンジニアと繋がりたい#プログラミング初心者
これがその時に呟いたメッセージです。
もう一つの方法が、プログラミングの勉強方法を変えてみることです。
そもそも毎日同じようなサイクルで同じような繰り返しをしてくるときっと飽きがきます。そんな時に僕がやった方法がこちらの
学習をHTML / CSS に書き落とすこと。
プログラミングの学習において
— 🕯【THE メディア】地域情報🇯🇵🌏🇨🇳🇰🇷プログラミング能力で時を掴む 🚀 (@sunstripe2011) March 15, 2020
HTML CSS を学びながら、PHP その他のプログラミング言語を学ぶ人は、ぜひ HTML CSS を書きながら
記事をまとめておくといいです
職場では、作業用のHTML のファイルを用意して
全ての導線をマイページにしてから作業してます。
こうすると効率がめっちゃ上がります。 https://t.co/pcI2XTVBBj
また、その繰り返し使ってるなって思ったところをPHPでプログラミングを出してみることもしてます。
僕がいろんなやり方でプログラミングを学習した方法の一つとして、購入した本を別のプログラミング言語で学習しながら復習するということです。
現在、JavaScript / PHP / ObjectiveC / Swift などの言語を習得しておりますがCGI / Parl なども勉強していたのでこの時に流行った言語などに書かれている例題を例にコーディングしてみたりアプリ作ってみるとかしてます。
リリース方法とかiOSの場合は実際に通るか通らないかは、他の企業のアプリがどうなっているのかってところではあるので、企業のパワーには劣りますが、案外隠された、ブルーオーシャンは過去に書いていた課題とかにヒントが隠されていたりするからいいと思います。
THE CARD GAME は地域活性化プロジェクト、若者応援事業、就職支援の一環のアイテムとしてもご利用になれます!