プログラミングスクールでは教えてくれない技術で詰まった時の7つの対処法

2018年6月17日

programming-dokugaku

こんにちは、フリーランスエンジニアのYaemonです。
プログラミングを真剣に勉強している方の中には、

・プログラミングで詰まることが多いけど、どうやって問題解決したらいいの?

・プログラミングができる人はどうやって問題を解決しているの?

 

などと疑問に思っている方もいらっしゃいますよね。
管理人もプログラマーなので悩むところはわかりますし、そういったことを何度も経験しています。

プログラミング初心者の場合、クラス、インスタンス、プロパティといったオブジェクト指向でつまずいたり、ちょっと先にいくと、デリゲート、マルチスレッドプログラミング、メモリ最適化、DBのパフォーマンス改善など、更に進んだ技術で悩んだりすることが多いですよね。

そこで、このページでは、

 プログラミングを勉強している人

に向けて

 技術に詰まったときの7つの対処法

について、管理人の経験をもとに説明していきます。

 

*失敗しないプログラミングスクールの選び方について知りたい方は次の記事を参考にしてみてください。

 

 


プログラミングスクールでは教えてくれない技術で詰まった時の7つの対処法(結論)

プログラミングをしていて詰まった時は、主に以下の対処方法があります。

▶ Googleで検索をする
▶ 公式のレファレンスを読む

▶ オライリー等の技術書を読む
▶ プログラミングに詳しい友人・先輩に聞く
▶ Q&Aサイトを使う
▶ CodeMenterで質問する
▶ クラウドソーシングのサービスを利用する

それぞれ順番に説明をしていきます。

 

Googleで検索をする

google-search

信頼度:★★★★☆
難しさ:★★★☆☆
金銭負担:書籍代

まず、技術的に詰まっている場合は、Google検索を使うと良いです。例えば、エラーコードがすでにわかっている場合は、“エラーコード 対応”という風に日本語を混ぜると、QiitaやTeratailといったQ&Aサイトや個人のはてなブログや技術ブログが出てくることが多いです。Googleの検索エンジンも日々進化しているため、1ページ目に出てきたサイトは、問題解決が記載れているケースが多いです。

そのコードを利用する方法は、そのブログに書いてある内容を確認して、そのコードを流用するとよい。ただし、そのコード(ライブラリ)がどういう動きをしているのか把握しないまま貼り付けてしまうと、将来どこかでバグが起こった時に対応に時間を取られてしまうので注意です!

できればういった処理を内部で行っているのかを把握できるようにするといいです。初心者であれば、わからなくても、一旦、ソースコードを読んでみることをオススメします。例えば、if() という分岐があるのであれば、その変数の条件を確認するだけでも大きく変わるので読む癖をつけておきたいです。

また、最新の技術になればなるほど、Google検索では出ない技術が多いので、公式のレファレンスやコミュニティから情報を抜き取れるようにできるといいです。

*SEOの話をすると、Google検索エンジンは日々進化しているので、検索で入力したクエリで表示された結果に対して、UXの行動をGoogleでは把握して順位を決めているように思います。例えば、サイトの直帰率であったり、サイトを閉じたあとに、再度他のページを見て答えを探すなどの行動をGoogleでは記録していたりします。

 

公式のレファレンスを読む

reference

信頼度:★★★★★
難しさ:★★★★☆
金銭負担:なし

まず、技術的にやりたいということが事前に分かっているのであれば、それに沿った公式のレファレンス(マニュアルやReadme.txtなど)を確認したほうがよいです。基本的にソフトウェアをリリースしている所は必ずマニュアルを同梱しています。そのため、マニュアルやReadme.txtを確認するといいです。

中にはReadme.txtを見ても内容が難しくてわからないという人がいると思うので、そういった場合は、他の対処方法を探したほうが良いです。

オライリー等の技術書を読む

programming-book

信頼度:★★★★★
難しさ:★★★☆☆
金銭負担:書籍代

次に、公式のレファレンスでわからない場合は、オライリー等の技術書を読むとよいだろう。例えば、現在追加しようとしているクラスの使い方がわからない場合は、後ろの索引ページから該当のクラスを選択して、読み込んでみるといいです。

ちなみに、できる技術者の技術書の読み方は、実装に必要な箇所で部分的に使用することが多いです。1から最後まで隅々まで読むという読み方は効率がわるいためオススメしないです。ネット業界で有名なけんすう氏も同様の意見をTwitterで述べていましたね。

ちなみに、管理人が大学生のときにいきなり受託開発をしたときは、今のようなサイトがなかったため、ひたすら本を熟読したり、PARCOの中の大きな本屋で似た本を別の視点から読むなどをして必死に学習していました。エンジニア生活の中で、大学生のときが概念を理解するという意味では精神的にきつかったです。

プログラミングに詳しい友人・先輩に聞く

progate-efficient

信頼度:★★★★★
難しさ:★★☆☆☆
金銭負担:なし

もし、プログラミングに詳しい友人がいるのであれば聞いてみるのも良いです。ただし、向こうもプロなので、ただで技術的なアドバイスをもらうのでは人間関係は続かないです。そのため、教えてもらったらジュースやご飯をおごったりするなど、give & takeの関係を作っておくことをオススメしますね。

大学生であれば、年上の人には質問しやすいと思うので、ドンドン聞いてもよいだろうが、大人になると、子供のようにタダで物を教えてもらえるということは難しくなりますよね。

スタートアップを経営している管理人の友人は、そういった点では人たらしで、Googleにスカウトされるくらいのフリーランスの外国人と仲良くなって、受託案件で難しい所があると、技術的にアドバイスをもらっていたこともあります。なので、人脈を構築するという点でも技術者としては必要な能力であると常々思います。彼を見ていると、Give & Giveの精神でいろいろやっていたのが印象的でしたね。

 

 

TeratailやStackoverFlowといったQ&Aサイトを使う

stackoverflow

信頼度:★★★☆☆
難しさ:★★☆☆☆
金銭負担:なし

プログラミングで詰まっていることがあるのなら、TeratailやStackover Flowといったサービスを使ってみるといいです。管理人のオススメは、Stackover Flow(英語版)です。

オススメする理由は、世界的に有名な、プログラマー向けのQ&Aサイトだからです。管理人も少し前につかっていて、助けてもらうことが多かったです。管理人がよく使っていたのは、どうしても分からない部分が出てきた場合は、一旦、Stackover flowに質問を投げておいて、回答がくるまでは他の機能の実装をするなど待っていたことがありました。ここで重要なのは、必ずしも回答がもらえるわけではないので、できれば自力で解けるようにしておきたいですね。

▶参考:管理人のプロフィールページ

stackoverflow2

 

Codementerを使う

codementor

信頼度:★★★★★
難しさ:★★★☆☆
金銭負担:15分30$〜

このCodementerを使用したことは少ないが、欧米の優秀なエンジニアに詰まっている箇所の相談に乗ってもらえます。以前利用したことがあります。30分で解決できなかったのですが、解決へのアプローチ方法を教えてもらい問題が解決しました。具体的には、以下のようなかたちです。

“あなたがやりたいことは、Aのルートだが、Bのルートで実装したほうがよい。Bのルートに行くためには、この情報を参照してほしい。”

このように、必ず問題が解決するというわけではないですが、アプローチの仕方についてもアドバイスをしてもらえます。お金を払ってでも今すぐ解決しないといけない人やバグ修正の方向性をすぐに知りたい人にとっては有用なサービスですね。

クラウドソーシングサイトで教えてもらう

upwork

信頼度:★★★★★
難しさ:★★★☆☆
金銭負担:相場次第

次に、Upwork(旧oDesk)やクラウドワークスといったクラウドソーシングのサービスを利用してリモートで教えてもらうという方法があります。管理人の場合は、友人の会話アプリの受託開発を手伝っていたときに、開発で止まる所があり、Upwork経由でインド人に対応方法を解決してもらいました。

具体的には、並行して開発を進めていたアプリで外注していたインド人(1時間/6$)に、リモートでgithubのライブラリの使い方を教えてもらうことができました。

クラウドワークスを見ていると、1件5,000円〜という形で相談をしているため、難しいところですぐに解決したいのであれば、5,000円あれば解決できるかもしれないと考えておいても良いです。

プログラミングスクールを利用するときに注意したいこと

caution

プログラミングスクールでは、個別のその時に出てきた疑問点はその場で解決できるかもしれないです。ですが、プログラミングスクールを卒業したときに、また別の質問が出てきたときに太刀打ちできなくなってしまいます。

そういったことを防ぐために、上記にあるような問題解決へのアプローチを自分の中で固めておくといいです。将来、優秀なエンジニアとして成長していきたいのであれば必須だといえます。

また、ベンチャーの経営者を見ていると、この問題解決のスピードが著しく早いのが特徴です。新規サービスをリリースするために必要な障害がいくつもあるのだが、人脈を使って優秀な人を使って問題解決をしていくことができます。

 

SEにとっての英語の重要性

english

ここでは、問題解決方法として、英語のQ&Aサイト、英語のクラウドソーシングサイト、英語のコードメンターサービスを利用することを武器として紹介しました。そのため、エンジニアとしてスキルを上げていくのであれば、英語のスキルを合わせて上げていくことも気をつけたいです。英語のQ&Aサイト、クラウドソーシングサイトを利用するのであれば英作文能力、コードメンターサービスではリスニングスキルも合わせて必要になります。

管理人の場合、2010年頃に、できたばかりの英会話(Webベンチャー)のレアジョブのサービスを利用して英語を武器に開発を進めることができたので、英語ができると問題解決の幅が広がりました。エンジニアにとっては英語学習は必須といえますね。今だと、英会話サービスも進んでいて、DMM英会話 で東欧の人を中心に英会話の勉強ができます。無料でレッスンが2回受けられるのでスキルアップしたい人は、どんな感じか試してみても良いかもしれません。

英語ができると広がる手段(転職)

means

少し話はそれるが、英語ができるようになると、海外に開発を発注することができるようになります。これは、開発では大きな優位性をもっていて、例えば、日本時間の夜に発注すると、日本時間の午前中にシステムを納品してもらうこともできます。

そのため、一気にスピード開発をすることができるようになります。もちろん、オフショア開発になるので、そのためのノウハウが必要になるが、格安で優秀なエンジニアを確保し、スピード開発をするという、この優位性で活躍しているベンチャー企業があるということを知っておくと良いです。

 

まとめ

以上、技術的な問題で詰まった時の対処方法を伝えてきましたが、もちろん、これ以外にも人によってはアプローチ方法が異なるため、自分にあった解決方法を磨いていくことが大事です。もし、プログラミングスクールを利用するときは、体系的な問題解決能力を身につけるという視点をもって学んでいってほしいです。

 

 

 

Pocket