ちびくじらの得する生活

仮想通貨の勝率(期待値)をあげるための最新情報を発信するブログ


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

programming-school

 

どうも、ちびくじらです。今日は、友人が運営しているSE転職.comというサイトから寄稿がありましたので紹介させてもらいます。エンジニアに特有の技術で詰まった時の対策方法についてのノウハウが書かれているので、特にエンジニア初心者の人は注目です。

 

  

 '--

こんにちは、Yaemonです。

プログラミングをしていて、技術で詰まることって多いですよね?管理人も何度もそういったことを経験しています。

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

 

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

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

に向けて

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

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

 

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

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

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

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

 

それぞれの順番に説明をしていきたい。

 

Googleで検索をする

google

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

まず、技術的に詰まっている場合は、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の中の大きな本屋で似た本を別の視点から読むなどをして必死に学習していた。エンジニア生活の中で、大学生のときが概念を理解するという意味では精神的にきつかった。


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

sier-tester

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

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

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

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

 

 

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

stackoverflow

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

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

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

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

stackoverflow2

 

Codementerを使う

codementer

信頼度:★★★★★
難しさ:★★★☆☆
金銭負担: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英会話 で東欧の人を中心に英語の勉強ができるので紹介したい。


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

means

少し話はそれるが、英語ができるようになると、海外に開発を発注することができるようになる。これは、開発では大きな優位性をもっていて、例えば、日本時間の夜に発注すると、日本時間の午前中にシステムを納品してもらうこともできる。そのため、一気にスピード開発をすることができるようになる。もちろん、オフショア開発になるので、そのためのノウハウが必要になるが、格安で優秀なエンジニアを確保し、スピード開発をするという、この優位性で活躍しているベンチャー企業があるということを知っておくと良いだろう。

 

まとめ

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

 

 '--

寄稿元:プログラミングスクールでは教えてくれない技術で詰まった時の7つの対処法(SE転職.com)