あなたのプログラミング学習は、この5+2習慣で圧倒的にスピードアップする

Webエンジニアとして食べていくにはどうしたらいいのだろう?

 

今回は私のやった方策を全面公開する。

 

Webプログラミングの領域は広い。

 

どんな知識が求められるのか、ざっと思いつくままに挙げてみよう。

 

●MySQLなどのデータベースの知識
 
●LinuxやApacheなどのサーバー構築に関する知識
 
●ソフトウェアテストやGitなどのバージョン管理ツールや手法の知識
 
●HTML,CSS,JavaScriptなどのクライアントサイドプログラミング
 
●Ruby on Railsなどのサーバーサイドプログラミング

 

おわかりのとおり、膨大だ。
よって、プログラミングの学習においては、まず自分が必要とするプログラミングの技術はどこなのか、その分野を絞り込むことである。

 

何を勉強するのか、まず限定してしまう。
これが学習のコツだ。

 

次に、その分野を理解するためには何を学ぶべきなのか、を知る。

 

その分野に特化し全体をまとめてある情報資料(書籍など)をひととおり読んでみる。

 

そうすることで技術の全体像を把握する。

 

肝心なのは、ある分野をあるレベル程度にまで勉強仕切ってしまうことだ。

 

Webサービス開発をひととおりできるようになるためには、

 

デザインはbootstrap
インフラはHeroku
アプリ制作はRuby, Rails, MySQL
実際の運用・開発のためにテストやGiのスキルアップ

 

このように特化して絶対必要スキルを養っていく。

 

身になるのは絶対、その時に決めた学習領域を集中して学習する、ということだ。

 

同時並行であれもこれも、はダメ。

 

たとえば、Ruby on Railsだ。

 

class Article < ActiveRecord::Base
  scope :published, -> { where(‘open_at <= ?’, Time.zone.now) }
end

 

これはRailsのgenerateコマンドで生成されたArticleモデルのコードだ。

 

publishedスコープを実装。Article.published、Articleクラスからpublishedメソッドを呼び出し、スコープの定義条件に基づきArticleクラスオブジェクトの配列を取得する、というもの。

 

たった3行だが、RubyとRailsそしてRDBMSのここの知識が必要とされる。

 

このたった3行をわかり、書けるようになるためには、まとめて、ではなく、それぞれ個別の集中した学習時間が必要となるのだ。

 

理解した、というのは、どういうことか。

 

勉強内容を、他人に逐一説明可能できる、ということ。

 

説明できない部分があるとすれば、それは新しい学習課題である。

 

有意なキーワードは「ラバーダックデバッキング」だ。検索してみてほしい。

 

プログラミングの学習とは、次々に未知の怪物が現れるジャングルだ。

 

そこで、どのように情報を探るのか、情報源の見つけ方が問題となる。

 

その判別基準はおおまかにふたつある。

 

その情報に至るまでの速さ、その情報の信頼度。このふたつだ。

 

「理解」のためには間違いなく、後者、情報信頼度こそを基準とすべきである。

 

一端間違って学習してしまうと、単に学び直すだけでは済まないリスクが有る。

 

下手をすると後々取り返しのつかないバグを発生させてしまうかもしれないのだ。

 

勉強の手順としては、次をおすすめしたい。

 

1 まず一冊本を選び、勉強する
2 本でわからないことが出てきたなら、ググる。
3 参考になるブログなどで、解決策をせばめていく
4 本のリファレンスで確かめる
5 実際に動作確認

 

情報の信頼性を担保しながら解決に素早くアクセスできる方法を模索してほしい。

 

●リファレンスの読みかたは重要である

 

リファレンスを読む際に注意して探るべきな次のポイント。

 

レシーバー、引数、返り値、副作用の有無。

 

Ruby(2.3.0)のArrayクラスのdeleteメソッド

 

delete(obj) { block } -> item or result of block
上記のメソッドの説明の内

 

delete(obj) { block }のobjや { block }が引数、

 

-> item or result of blockのitem or result of block
これが返り値の解説。

 

当てはめると、

 

●レシーバー=Arrayクラスのインスタンス
●引数=objとblock
●返り値=最後に削除したレシーバー内の要素。削除する要素が存在しない場合はnil
 引数にblockが渡っていてかつ削除対象オブジェクトが無かった場合はblockの返り値
●副作用=引数として与えられたobjと一致する要素をレシーバーから全て削除する

 

これでメソッドの理解は完璧となる。

 

エラーやバグが発生した場合、これが学習のチャンスと考えること。

 

何も考えずに変更を加えて、わけもわからない間に動作してしまう、というのは最悪だ。

 

エラーメッセージには次の情報が含まれている。

 

●発生時のタイムスタンプ
●種類
●エラーファイルとその行数。エラー発生までのメソッド呼び出し順

 

F, [2016-12-14T16:12:52.055301 #16409] FATAL — : [/community/34913]
ActionView::Template::Error (undefined method `like_count’ for #<Community:0x007f67b69866e0>):
     6:   <div class=”bottom-“>
     7:     <%= image_tag ‘community/member.png’, class: ‘icon user’ %>
     8:       <span class=”count”><%= community.participant_count %></span>
     9:     <div class=”info”>
    10:
  app/views/communities/_community.html.erb:8:in `block in _app_views_communities_community_html_erb___2695577053056243576_46961797035580′
  app/views/communities/_community.html.erb:1:in `_app_views_communities_community_html_erb___2695577053056243576_46961797035580′
  app/views/community/show.html.erb:38:in `_app_views_community_show_html_erb__1896930720777653480_46961797750960′

 

エラーのタイムスタンプは

 

F, [2016-12-14T16:12:52.055301 #16409] FATAL — : [/user/34913]

 

エラーの種類は

 

ActionView::Template::Error (undefined method `like_count’ for #<Community:0x007f67b69866e0>):

 

エラーが発生しているファイルとその行数及びエラーが発生するまでの経路は

 

 app/views/communities/_community.html.erb:8:in `block in _app_views_communities_community_html_erb___2695577053056243576_46961797035580′
  app/views/communities/_community.html.erb:1:in `_app_views_communities_community_html_erb___2695577053056243576_46961797035580′
  app/views/community/show.html.erb:38:in `_app_views_community_show_html_erb__1896930720777653480_46961797750960′

 

分解してエラーメッセージを見ていけば、どこで、いつ、どんなエラーが起きたかを把握しやすい。

 

言語やフレームワークで情報の出力は違うが、整理していく基本は同じである。

 

エラーメッセージだけでは原因を特定できないケースも有る。

 

エラーが起きている箇所、その周辺、関連コードを見つつ、デバッガを駆使する。

 

デバッグがしやすいツールを使ってみる。

 

Ruby, Railsの場合はRubyMineという高機能IDEを使う。あるいは、pry-byebug(参考: pry-byebugでrubyをdebugする)といったデバッグライブラリを活用する。

 

信頼できる先輩に、自分の書いたコードを見てもらい、意見してもらうのも、上達への早道と言える。

 

我流プログラミングの悪癖から早く脱するようにしよう。

 

ずうっと独学を通すと、読みやすいコードを書くという習慣が身につかない。

 

実際の業務は共同開発だから、他人が書くコードを読むことが多くの作業時間となる。

 

互いに設計上有意義なTipsを指摘し合うようにしよう。

 

『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック』を読むと良い。

 

あるいは静的コード解析ツール等を活用し、コーディングスタイルや命名規約等を矯正する。

 

rubyの場合はrubocopなどである。

 

何よりプログラマが上達するのは、自分が作りたいものをやり、実際動作した、という経験である。

 

その積み重ねが、より良いプログラミングを生み、新しい学習テーマを生む。

 

セオリーの逆を言うが、「車輪の再発明」は有用である。

 

実際に自分が使っているアプリケーションのコピーを作ったりするのは、極めて効果的な学習となる。

 

コピーした後は、オリジナル機能を自分で作ってみる。

 

能力の範囲は知らぬ間に広がっているのである。

 

そうすると、新しくこれを作ってみたい、という意欲が生まれる。
<< 次ページに続く >>


気になるカテゴリから人気記事をチェック!
[カメラ] [ガジェット] [キッチン] [スマホ] [パソコン] [映像・オーディオ] [生活家電] [美容・健康] [美容家電]