「プログラミングが楽しくない」と感じます。このまま続けて大丈夫でしょうか?
これからプログラミングを勉強しようとしている人や、プログラミング初心者の素朴な疑問、お悩みについて、CodeCampの現役のエンジニア講師に答えてもらいました!ぜひ参考にしてみてください。
【こんな人にオススメ!】
・プログラミングを始めたけれど、まだ楽しさを実感していない方
・どうプログラミングを楽しめばいいか、知りたい方
・エンジニアとしての仕事の楽しさ、やりがいについて知りたい方
質問に回答してくれる講師
「プログラミングが楽しくない」と感じる原因はなんだと思いますか?
松木講師:内的要因と外的要因に分けて考える
いくつかの原因が考えられると思うので、具体例を見てご自身がどれに当てはまるか確認してみましょう。
まず、直接的な原因は以下のようなものがあるのではないでしょうか?
・何をどう作っていいか解らない
・与えられた課題や指定要件を作成する事が出来ない
・完成させる事ができない
・完成したとしても、その生成物が評価されない
・完成したという実感が沸かない
外的な要因として考えられるものには次のようなものが考えられます。
・そもそも文章を読むのが苦手
・読解力が乏しい
・英語を読むのが苦手
・キーボード入力が苦手
・物作りに楽しさを感じない
というのもあります。
足谷講師:明確な目標を持って勉強していないから
いくつか原因はあると思いますが私の経験でいうと、具体的な目標もなくただ何となくやっている、やらないといけないからやっているという場合には楽しさをあまり感じられないかと思います。
また、勉強においては始めの方は楽しくないと感じることが多いと思います。教科書のように体系立てて学習していく場合どうしても覚えることが最初に必要になるからだと思います。
例えば英語を勉強しようと思った時には、単語や文法を覚える必要がありますがこれらに似た感じです。
プログラムだから理解しないといけないと思っているとそこで躓いてしまい楽しくないと感じることもあるでしょう。
松本講師:プログラムの仕組みに関心を持てていないから
まず思いつくのは、世の中にあるプログラムで動いているもの(Webサービス、アプリ)やその仕組みに興味がないという場合です。
「自動改札をICカードで通過する時、自動改札の中ではどのような処理がされているのか」とか、「カーシェアリングのシステムは、たくさんの利用予約をどのように捌いているのか」とか「ECサイトがあなたへのおすすめ商品をどんな仕組みで推薦しているのか」など、気になりませんか?知ってみたら楽しくなりそう思いませんか?
もし、「そんなこと知る価値がない」「使えれば何でもいい」と思っているなら、あなたはプログラマには向いていないかもしれません。プログラミングを勉強するのは、とても苦痛に感じてしまうと思います。
エンジニアの方々でもプログラミングが楽しくないと思うことはありますか?
松木講師:「楽しくない」と思ったことはありません
化学を専攻していた自分が、不安たっぷりで始めてプログラミングで認められ続けてきたからかもしれません。もちろん思ったように結果が出ない、作成したものが上手くいかないという事も何度かありました。
そんな状況でも一つのモノが出来上がり、それを認められる事で喜びを感じてました。それが嬉しくて、楽しくて、もっと頑張ろうと思えました。その頑張りが高じて先輩の技術を追い越してしまったのです。それも自分の自信になり、さらにプログラミングが楽しくなりました。
考え方や思想が時代にマッチしてる、やろうとしてる事が時代の流れに沿ってると言うこともありました。そこでエンジニアとして独立して、作ったものや作ろうとしてるものが人に求められると言う喜びも経験しました。
自分にしか作れないものがある、と言うような使命感もありました。それは今も変わっていません。常に自分の存在感を周りに認められていたから、楽しくないと感じた事が無いのかもしれません。
そんな中でもストレスを感じる時はあります。例えば次のよう時です。
・依頼されたプログラムがなかなか仕上がらないとき
・納期に無理があり物理的に完成が間に合わないと予測されるとき
・相手の知識不足により、生成物が正当に評価されないとき
・作成したいものが決まっているのに知識や情報が少なくて解決しないとき
・技術力を必要以上に軽視されたとき
・技術力や掛けた期間に対して、正当な対価を得られなかったとき
いろいろと原因がありますが、自分であれ、相手であれ、要望されたものが作れない時が一番ストレスを感じるようです。
足谷講師:目的がはっきりしない開発作業
今でも仕事の内容によっては楽しくないときもあります。
私の場合は目的がはっきりしていないときや明らかに利用されないであろうと思うシステムを作っているときは楽しくありません。エンジニアがやりがいをもってプログラムをつくるためには目的が大切です。
もちろん目的にそってよりよいプログラムがつくれるように提案をしたりもしますが、なかなか話の折り合いがつかずお客さんの要望通りのものを作らざると得ないときもあります。
そんなときはプログラミングへ楽しみを感じることはできません。
松本講師:「悔しい」という気持ちを乗り越える
他の仕事が忙しく、プログラミングから離れていた時期はありますが、楽しくないと思ったことはありません。むしろ離れていたときは、「開発したいーー!!」という気持ちが強くなっていましたね。
仕事としてではなく趣味で好きなものを開発をしていたり、仕事として開発する場合でも、設計段階から任されていたことが多かったので、かなり自由度の高い開発ができていたから、そう思うようになったんだと思います。
ただ、プログラミングをしながら「渋い顔」をしている時もたまにあります。
そういう時は、「楽しくない」というより「悔しい」という気持ちが強いですね。で、「この難関を乗り越えてやろうじゃないか」と燃えてきます!
それでも時々、挫けることはあります。そういう時は、「この技術は私には向いていない」「私にはまだ早い」と、諦めます。
ある問題を解決するための技術は、ひとつではありません。別方面からアプローチすると、思わずすんなり解決することも多いので。
松木講師:ユーザーの喜ぶ開発ができたとき
自分が書いたプログラムを使ってくれる人が喜んでくれる姿をみるのが大きなやりがいです。他には以下のときなどでしょうか。
・他の人ではできないプログラミングを自分が完成させたとき
・依頼者の望むモノが完成したとき
・自分の思い描いたとおりにプログラムが動作したとき
・依頼者から労いの言葉を貰ったとき
・依頼者から喜びや称賛の声を頂いたとき
・生成物によって依頼者の負担が軽減出来たとき
・依頼者の業務が改善できたとき
・間接的にでも依頼者の収益に繋がる仕事ができたとき
足谷講師:ユーザーから感謝されたとき
自分で思い通りのシステムが出来たときや納品後にお客様に便利になりましたと言われたときなどですね。
自分の達成感を感じた時や人の役に立った時などには大変であるほど喜びも大きいです。
また、先ほどの楽しくないときと逆に、自分の興味のあることや目的がはっきりしていることは楽しいと思う時が多いです。
松本講師:好きな仕事を選ぶことができる
最近は、知り合いから依頼を受けて小さな開発をすることが多いのですが、私の人となりを知っている方からの依頼では、かなりストレスなく仕事をすることができます。
また、自分が仕事を選ぶ立場にあるという認識を持つことで、無理な案件を受けないというスタンスを持てていることも、仕事が楽しい要因だと思います。
基本的に、プログラミングが好きなので、プログラミングしているときはずっと楽しいです!私にとってはゲームみたいなものなので。特にできあがったときの喜びはひとしおです!
これがもし、自分から営業に行って、相手の要望を(不本意ながら)呑みつつ、一生懸命「仕事」するような生活だったら、「楽しくない」と思っていたかもしれませんが。
プログラミングが楽しくないと感じている人は、まず何をするべきですか?
松木講師:1人で作ったという成功体験
・小さくてもいいから、自分一人で目的にあったもの、要件通りのものを完成させること
・誰の力も借りず、すべて自分一人で完成させること
・自分のできることに自信を持つこと
・自分が作成してる物が間違いないと自信を持つこと
・確かめられること
の5つです。その為には知識や情報も必要ですが、キー入力などのような、基礎力、少なくともその言語で使う言葉(スペル)は熟読する必要があります。
また時間があれば、いま学習している言語で使われている命令やプロパティなどの単語は、流し読みでも構わないから一通り読んでおくと良いと思います。
さらに時間があるなら、それがどういった場面で使われるか、サンプルなどにも目を通しておきましょう。そう言った時間は必ず自分の血となり肉となり、後から自分のご褒美としてちゃんと返ってきます。
足谷講師:プログラミング学習の目標を明確に
まずは自分が何のためにプログラミングをしているのか?を考えてみましょう。
そのうえで、自分が作ってみたいと思うシステムやサービスがあればに向けていろいろ試してみるとよいと思います。
例えば自分の趣味や好きなことをプログラムを使って解析してみるとか。私の場合であればAIを使って競馬の解析をしたら面白いのではないかと考えたります。
また、勉強時における注意点としてはルールを覚える時期と使いこなす時期に分けて考えるといいでしょう。例えば数学の公式を覚えることと公式を使って問題を解くという関係に似ています。
ルールについて考えるのは「なぜその公式が必要か?」という観点で、公式を使って問題を解くのは「プログラムを使って何かを完成させる」という観点で見ることができます。
ルールを覚え、使って何かを作ってみるという2つをセットにして勉強しましょう。
松本講師:とにかくコードを書きましょう
とにかく、たくさん書いてください。まずはそこからです。
私の経験上、プログラミングができない、楽しくないと嘆く人の多くは、圧倒的に書く量が足りていません。プログラミングはスポーツと同じで、繰り返し練習こそが上達への近道です。もちろん、考え方のコツや定石はあります。スポーツで言えば、正しいフォームですね。
厳しいことを言いますが、定石となるプログラミングを完全に覚えるくらいには書いてほしいなと思います。ある程度パターンを覚えてくると、「あ、これはこのパターンだな」とすぐに分かるようになります。すると、プログラミングが楽しくなってきます。
今書けないプログラミングについて無理に悩む必要はありません。書けるコードを書く。少しずつ数字を変えるくらいでいいのです。
プログラミングを楽しむためのアドバイスをお願いします
松木講師:仕事や収入のことばかり考えない!
プログラミングや技術を何故身に付けるか?と言う時、仕事の為とか、収入の為とかが一番多いのではないでしょうか?
もちろんそれも大事な事です。しかしそれではノルマになってしまって、楽しむ余裕などありません。常に何かに追われるようになってしまい、最後にはストレスとなってしまうのではないでしょうか?
プログラミングとは往々にして、世の中にまだ無いものを作り上げるという場面が度々出てきます。そして、その多くが頭(脳)で生み出すものです。
その時に、ノルマと感じていたり、ストレスを感じていると、創造力は半減します。そうなると作れなくなり、その結果またストレスを感じると言う負のループに陥ります。
常に心をリフレッシュし、常に前向きに、どんな事でもドーンと来い!、と言うぐらいになれる迄自分を高めるんだと言う気持ちが大切なのではないでしょうか?
足谷講師:自分が作りたいものを作ってみよう!
もし作りたいものがなければ
・自分の趣味や興味のあるものについて、自動化できたらいいなという目標を見つけてマネしてみる
・他の人の困りごとを自動化できたらいいなというアイデアを聞いてそれを実装してみてあげてる
といったところでしょうか。結構ネタはいっぱい転がっていると思います。
あくまでも、プログラムは手段であって目的ではないので何のためにをするのか?ということが明確になるとプログラムをすること自体はできると楽しくなると思います。ただ、出来ないときのストレスはありますが・・・。
そのストレスをどう解決するかを考えることもひとつ楽しくなるための解決策にはなるかもしれません。方法については千差万別なので一概には言えませんが、例えば勉強会に参加して仲間を増やすとか、他の人に聞いてみるとかという感じでしょうか。聞くのが恥ずかしいこともありますが親切な人も多いですよ。
松本講師:小さな成功体験を積もう!
前の質問の解答とかぶりますが、とにかく書けるコードをたくさん書いてください。講師と一緒に書いたコードは、必ず復習して、同じものがスラスラと書けるくらいになってください。
人は、成功体験を積むことによって、それが「楽しい」と認識できる生き物だと思います。はじめから難関にぶつかっていく必要はありません。「動いた!!」とか、「書き換えたところが思ったとおりに変わった!!」とか、そんなことでいいのです。
講師は自転車の補助輪です。はじめは講師に教えてもらわなければ書けないことも多いでしょう。
補助輪をつけて走り練習、補助輪を外してまた練習、補助輪なしで走れるようになれば、楽しいサイクリングができるようになりますよ!
現役エンジニアの皆さんもプログラミングが楽しいと思ったきっかけは、コードをたくさん書き、それが思った通りに動くという小さな成功体験からでした。そしてそこからどんどん自分でできることが増えて、今ではエンジニアとして楽しく働いているようです!
どんな勉強でも、最初はわからないことだらけの状態から始まります。量をこなすことで慣れる部分も多くあり、自分で開発できるようになるにつれてプログラミングにハマっていった人をこれまでも多く見てきました。
CodeCampでは、200名ほどの経験豊富なエンジニア講師からプログラミングをマンツーマンで教わることができます。転職、起業・フリーランスなど、あなたの学ぶ目的に合わせてぴったりの先生を探してみてください。
【お知らせ】
CodeCampでは、Peing-質問箱-でみなさんから質問を受け付けています。現役エンジニアに質問したいことがあればぜひ気軽に投稿してください!
URL:https://peing.net/ja/codecamp_jp