Pythonを0から学びたいなら、ミシガン大学のPython for Everybodyという講座がおすすめ

前回書いた記事で取り上げたエンジニアに求められるスキルセットから、「ひとつのプログラミング言語」と「データベースの基本知識」について自身のこれまでの経験と照らし合わせていきたいと思います。

 

現在、自分が最も使用頻度が高い言語はPythonであり、Pythonからスタートした理由としては、そもそもプログラミングをスタートしたのがAIのブームに乗っかかろうとしたミーハーな気持ちからであり、加えて最初に受講したCS101でPythonが用いられていたためです。

 

www.udacity.com

 

その後、OO設計の理解やコーディングのクイズ集を解くために、Javaへと学習派生しましたが、最初のHello, World!出力だけでも、クラスや変数の型の宣言、コンパイルですら手間を感じずにはいられなかったということから、改めてPythonのシンプル且つ明瞭な設計思想の恩恵を実感しており、初学者に最も適した言語であると思います。

 

さて、自分がPythonについて、ようやくある程度の理解をする事が出来たなと自信を持つことが出来たのは、以下のCourseraの講座を修了した後になります。

 

www.coursera.org

 

最初に取り上げた、CS101はあくまでPythonを手段として用いることによって、計算機科学分野への案内をすることを目的としており、言語習得そのものにフォーカスをされた講座ではありません。(計算機科学を始点として学び始めるのはとても良いことだと思います)TechnicalDevGuideでも、CS101の後に薦められているのが、「少なくとも1つのオブジェクト指向プログラミング言語について学ぶ」であり、自分の場合はクラスセントラルでも評判の良かった上記のCourseraの講座を選択することにしました。*1

 

このスペシャライゼーションのプロジェクトは5つの講座を1つに統合したものであり、それぞれの講座の主題を簡単に説明すると以下のようになります。

 

1.Pythonの基礎について学ぶ

2.Pythonのデータ構造について

3.PythonでWebデータへアクセスする

4.データベース(!)について

5.以上の知識を用いて、Web上でデータを視覚化するアプリケーションを作る

 

このプロジェクトの良かった点としては、あくまで言語にフォーカスされているのは1,2番目の講座のみであり、その後は「Pythonが使って何が出来るのか?」というプログラミング初学者が最も気になるであろう点を、実戦形式でレクチャーしてくれることにあります。Python以外にもjavascript,json,SQLといった言語がカバーされておりPythonとこれら他言語や外部モジュールを組み合わせることによって、プログラミングが実用的なメリットを持ち合わせていることを正確に実感することが出来ました。この中でも、当時はjsonに対しては気味の悪い言語だなと思っていましたが、今では一番「知っててよかった」と思える言語の代表です。

 

次回は、3番目の講座で取り扱われているWebスクレイピングの技術について書く予定です。

*1:ちなみに、担当する講師はミシガン大学の教授でとてもユニークな方です。

エンジニアのためのキャリア形成指南書である、CAREER SKILLSを購入しました

CAREER SKILLSという書籍を買いました。 

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

CAREER SKILLS ソフトウェア開発者の完全キャリアガイド

 

 

まだ、エンジニアとしてキャリアを進めていくかは考え倦ねている状態なのですが、先日そのための取っ掛かりとなる機会を運良く得る事が出来たことから、エンジニアという特異なキャリアの中で、(日本と海外の市場は事情が異なる事を理解しつつも)本著をコンパスのように活用させていきたいと考えています。

 

もっとも最大の動機としては、前著であるSOFT SKILLSをよく図書館で何度も読み返しており、著者に非常に影響を受けたことが大きいです。この新書の存在については前から知っていたことから、翻訳が出ないものかと待ち望んでいたのですが、ふとしたきっかけで訳書が書店で並べられていたことを知り、久しぶりに衝動買いをしてしまったという経緯があります。

 

これからは、随時各章の内容について自身の現状と照らし合わせながら、考察をしていきたいと考えています。例えば、第3章「身につけないといけない技術スキル」では、エンジニアに求められる最低限のスキルセットが記述されています。

 

・金になるスキル

・ひとつのプログラミング言語

・コードの組み立て方

オブジェクト指向設計

アルゴリズムとデータ構造

・開発プラットフォームと関連テクノロジー

フレームワーク、またはスタック

・データベースの基本的な知識

・ソースコントロールシステム

・ビルドとデプロイ

・テスト

デバッグ

メソドロジー

 

これらについては、GoogleのTechnical Dev Guideで記載されていたエンジニアになるための必須スキル群とやはり共通するものが多く、本著で記載されていなかったのは「暗号化」「機械学習」「離散数学」などの知識でしょうか。これまでの経験で何とかカバー出来ているだろうと思えるのが、以下の3つぐらいしか思い当たらないため、ひどい焦燥感に駆られてしまいますが、愚直に一つずつ進めていくのが最善であると思います。

 

・ひとつのプログラミング言語

・開発プラットフォームと関連テクノロジー

・データベースの基本知識

 

加えて、現在絶賛格闘中であるのは以下の3つです。

 

オブジェクト指向設計

アルゴリズムとデータ構造

・コードの組み立て方

 

次回は、上記必要スキル群に対応するような学習計画、あるいは経験に基づくレビューを行う予定です。

 

CodingBatに取り組んでいます

今週やったこと
CodingBatの問題を解いた
Google Tech Guideを1/4ほど進めた
 
某日、更新されたGoogle Tech Guideを眺めていると、基礎コースがあったので、基礎力を確かめるためにも、取り組んでみることにしました。
ガイドの流れとしては、まず初めにGoogleで以前出題されたinterview問題を任意のプログラミング言語で解くことになります。
自分はこの問題については、全くのお手上げ状態で、せいぜい問題の意図を理解するのがやっとで、やはり自分の実践的なコーディング技術の無さを痛感しました。
その後に、Javaの文字列及び配列についてのショートビデオを見ることになります。
そして、Coding問題へと取り組んでいくのですが、たった2本のショートビデオを見ただけでは当然出来るはずもなく。。。
出題されたのは、簡単なWarmingUp問題だったのですが、Warmupどころか自分の頭がオーバーヒートしてしまうことになってしまいました。
 
CodingBatには、それぞれの問題のページ下部にDifficultyという難易度が設定されています。
100から400のレンジで、先程のガイドで出題されているのは大体300~のレベルです。
100代の問題を眺めていると、何とか頑張れば解けなくもない、というレベルであることが分かったので、自分は一度このサイトを0から取り組んでみることにしました。(アカウントも作成した)
Javaの基本的な、if文、for文ですら、正しい記法を理解していなかったので、問題を解いていく中で、リファレンスを参考にしながら、ようやくそれなりには扱えるようになってきました。一日少しずつやっていたので、三分の一以上は終わった、というぐらいでしょうか。
 f:id:p0ny:20180528214230p:plain
 

再帰、Map、ラムダ式といったものがまだ残っていますね。

 
なお、今回CodingBatに取り組むにあたって、いつもお世話になっている知人のエンジニア君にも一緒に問題を解いてもらうことが度々ありました。(感謝)
解答したコードを見せ合って、お互い自らの解法・手法について意見を述べ合うという流れでしたが、これが意外と勉強になることが多く、これはエンジニアとしてやっていくにしても、必要不可欠なフェーズであるということを強く認識しました。
当然ですが、自分の方がまどろっこしい書き方をしていることが多々あり、如何にして可読性が高いコードを書くか、という問題に対する意識が少しずつ芽生え始めて来た気がします。
 
GoogleTechGuideの基礎編で出題されているCodingBatからの問題は、何とか取り組めるレベルにはなってきたので、今週はこちらのGuideをより進めていこうと思います。
ではでは。

ポモドーロテクニックが面白い

プログラミング学習において、ポモドーロテクニックという生産性管理の手法を試験的にですが実行することにしました。

この手法は、SOFT SKILLS ソフトウェア開発者の人生マニュアルという書籍を通じて知りました。

こちらの本は、一言で表すとエンジニアによるエンジニアのための自己啓発本です。

図書館に展示されていたのを数回読んだだけなので、改めて購入後にレビューをしたいと思っています。

 

ポモドーロテクニックというのは、25分の作業時間と5分の休憩時間のセットを1ポモドーロとして、生産性を表す単位とする手法です。

そういえば、3月に受講していたDMM英会話も1レッスン単位が25分なので、もしかすると、これに基づくものなのかもしれません。

 

自分はこれまでのアプリ体験で、明らかに生産性が向上したものを挙げるならば、ライフログ管理アプリのEvernoteとTodo管理アプリのTodoistの2つを推したいのですが、もう一つ気になっていたのがTogglという時間管理アプリでした。

幸いこのTogglに上記のポモドーロテクニックを実行するための機能が備わっていたため、Togglの有用性も少しずつですが理解することが出来てきました。

 

この手法を採用しているユーザーの記事を幾つか読みましたが、どうやら一日に平均8ポモドーロ(約4時間)ぐらいが限界のようです。

しかしながら、ポモドーロテクニックが真に有用なのは、1日毎に振り分けられる、自身の持つ時間という1資産の保有量を自覚させてくれることにあるのではないかなと思いました。

例えば、一日に自分は8ポモドーロという生産性の通貨を持っている、ということが分かれば、当然ペイする対象には慎重になってきますし、人生において本当に自分が取り組みたいということに対しての時間投資感覚が研ぎ澄まされていくのではないでしょうか。

ポモドーロという名前も中々ユニークで、どこか某国の通貨名のような響きを持っており、とても記憶に残りやすいです。

 

最後に、他ブログでも書かれていたことなのですが、この記事は1ポモドーロを使用して書かれました。

Pythonから新たにJavaを学び始めました

近況報告です。

 

これまで、オブジェクト指向型言語はPythonしか知らなかったのですが、新たにJavaを学び始めることにしました。

自分が知る限りではJavaやCは初心者が最初に学ぶのは推奨されていなかったので、これまでは当面はPython一本で良いかと考えていたのですが、改訂された方のGoogle Tech Dev GuideのFoundationsを少し触ってみたところ、Javaでのコーディングが指定されていたのがきっかけです。

 

こちらのガイドの前半部は、http://codingbat.com/javaから問題が出題されるのですが、そもそもにJavaのコーディング形式を知らないので、当然ながら手詰まりという悲しい結果で終わりました。

そこで、リファレンスを参照にしながら1からこのCodingBatのサイトの問題を解いていくことで、今週はJavaに少しずつ慣れていこうかなと思っています。

 

今後のブログの更新については、週1更新を目安に、各週毎の学習記録を残していきたいと考えています。

ブログを開設しました

このブログの目的

文系がエンジニアを独学で目指します。よくあるやつです。

目標として、日銭を稼げるレベルに到達したいと思っています。

 

何故、プログラミングを学ぼうと思ったのか

世知辛い世の中で、他に食べていけそうな方法を知らないからです。

後は、パソコン自体は幼少期からずっとお世話になっているので、もっと深く知ってやろうと思ったという理由があります。

 

何故、ブログを開設しようと思ったのか

「エンジニアは情報発信すべきである」というのが、ずっと頭の片隅にあったからです。

また、この方のプロジェクトに多少なりとも感化されています。

 

具体的に何を使って学んでいるのか

主に、オンライン上のMOOCを利用して勉強をしています。

UdacityCourseraが学習の主戦場です。

なるべく海外の一次情報でそのまま学びたいと思っているので、国産には手を出していません。

加えて自分は純ドメなので、軽い英語学習も兼ねています。

 

プログラミングを学ぶにあたって、最初に参考にした記事はこちらです。

 

そして、記事内で推奨されていたGoogleのTechnical Development Guideを本軸として進めることにしました。*1

 

戒めとして、定期的に読み直しているサイトがこちらです。

How To Become A Hacker: Japanese

 

おわりに

ゆくゆくはGitHubやQiitaも活用出来るようになればいいなと思います。

エンジニアの友人が片手で数える程にしかいないので、Twitterにでも気軽にお声がけ頂けると飛んで喜びます。

twitter.com

 

Thank you for reading!!

*1:現在、GoogleTechnical Development Guideは改訂が行われたためコンテンツが新しくなっています。