質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

12回答

1531閲覧

プログラミングってどうやって勉強していますか??

strike1217

総合スコア651

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

2グッド

15クリップ

投稿2017/10/31 13:28

最近、プログラミングが上達していないような気がしていて困っています。

プログラミングの勉強の仕方なのですが、皆さんはどうやっていますか??

・本をたくさん買ってひたすらプログラムを作りまくる。
・本を絞って数学や物理の勉強のように繰り返す。
・ノートに写す(書いて覚える)

が、なんとなく思いつきますが・・・

困っているのがC言語とかで関数の使い方を忘れてしまうんですよね。
関数の数が多いと覚えきれません、パラメータが多い関数とかはすぐに忘れてしまいます。

こんなプログラムを作りたいのに何の関数を使うんだっけ??」ってことが良くあります。
ネットワークプログラミングだと関数を使う順序を忘れることが多いですね。
C++だとcoutの使い方を忘れて、調べるのがめんどくさいからprintfでいいやぁ~~ みたいなことがよくあります。

1人で勉強してきたので他の人がどのようにして勉強しているか全く分かりません。

「自分はこんな風に勉強してきた!」というのがあったら教えてください。

ちなみに、自分は最初の頃はノートにひたすら書いて覚えていました。(写経みたいな感じですね。)
最近は本を買ってきて、ひたすら作っています。(次の日には忘れてしまいますね。)

是非教えてください!!

プログラミング初心者が絶対やっちゃいけない5つの勉強方法

実際には仕事の現場でもプログラマも検索しながら記述をしています。

え?そうなんですか? プロだと、パパーーンと作れるものだと思っていました。

marigold_24, aaaaaaaa👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答12

0

「プログラミング初心者が絶対やっちゃいけない5つの勉強方法」
の内容に沿って回答して見ます。

1 いきなり書籍で学習すること

初めは本を買ってやりました。ざーと本の内容に沿って、基本的な記述と、データベースのつなぎ方とかを中心にやっていました。

2 いきなり難易度の高い言語を学習すること

HTMLがもともとかけるがけの知識はありましたので、PHP部分、MySQLの内容をやっていましたね。

3 プログラミングを暗記しないこと

そもそも暗記なんてしようと思わなかったです。未だによくやるし、意識していることは、「知っている関数」であっても、必ずリファレンスに目を通すようにしています。そうすると、浅い知識がより深まって、新しい発見があったりします。

こんな感じで→ https://qiita.com/ShibuyaKosuke/items/b2667b95be8df9dd8d5b

4 1つの技術を完璧にしてから次の技術を学ぼうとすること

teratail でもこういう人を見かけますが、一体何年かけるつもりだろうかと、疑問に思います。完璧にできる人なら、teratailに頼らなくてもできる人でしょうね。

5 手段を目的にすること

プログラミング言語は、文字どうり「言語」ですから、英語の知識がいくらあっても、英語で話しができない人と同じ。プログラミング言語を使ってソフトウェアを作ることが目的のはず。

投稿2017/10/31 13:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/10/31 14:06

「そもそも暗記なんてしようと思わなかったです。」 勝手に覚えていった感じですかね?
退会済みユーザー

退会済みユーザー

2017/10/31 14:07 編集

よく使うものは自然と覚えるし、あまり出番のないものは忘れる。
退会済みユーザー

退会済みユーザー

2017/10/31 14:11

また、複数言語を扱うようになると、「あれ?VBのIF文ってどうだったけ?」みたいなことすらありますからね。リファレンスを見ないで書くなんて、そこを目標にしたってしょうがない。力を入れるところが違うと思います。
guest

0

多くの人が「プログラミング」で「ガチガチに決まったもの」という印象を持ってしまうかと思いますが、個人的には非形式的な感覚も、重要なものだと捉えています。

自転車に乗る時に、テキストで乗り方を教わるわけでもないように、プログラミングも、「作りたい」という状況になれば、その情熱だけでかなりのところへと進んで行けてしまいます。何度か書いていれば基本的な文法は身につくでしょうし、そしてプログラミングやライブラリに関する感覚もついてきます。

どんな言語でも取り組む問題は似ていますし、今時の言語であればRubyGems、npm、Packagist、cabalのようにパッケージリポジトリもありますので、「こんなことをするライブラリが欲しい」となったときに(特に、同様なものが他言語にある場合)、たいていは標準ライブラリかリポジトリに転がっています。

あるとわかれば、探して調べて取り入れることは容易ですので、細かな引数の順番を覚えるよりは、「こんな機能がありそう」という嗅覚を身につけたほうが確実に役立ちます。

投稿2017/10/31 14:10

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/11/01 03:49

「その情熱だけでかなりのところへと進んで行けてしまいます。」 確かに。。。必要なのは、情熱ですね。
guest

0

かれこれ30年近くはほぼ毎日何かしら趣味か仕事でコンピュータプログラミングをしています。日本と海外とで情報処理に関する学習と研究と仕事と教育の経験があります。現在は海外で大学生や大学院生に教えていますが日本で大学生や社会人にも教えた経験があります。

一言で「プログラミング」と言っても幅広いので、まずは自分が「どの分野」の「どの段階」の学習が必要か(学習をしたいのか)、を知ることが重要かもしれません。

質問から察するに、おそらくC言語をベースとして、「言語の文法」や有名どころの「アルゴリズム」を学習されているのだと、思われます。その段階ですと、独学であるならば、何か一冊体系的にまとまった本を読めば良いと思います。いわゆる「書式」は暗記する必要はなくどこに何が書いてあったかだけ覚えておけば良いかと思います。あ、これなんだっけ、と思った時にさっと調べられるようにしておくことが大事です。googleを使うにしても自分の問題を解決できるキーワード(と概念)を持っていることが重要です。私でも一日に何度も関数(メソッド)のreferenceをgoogleで調べることがあります。

printfかcoutかどちらを使うか、といようなことはプログラミングの本質的なことではないですし、よく使う関数はなんども使っていれば自然と覚えます。逆に言えば、書式などは無理して暗記しなくても自然と出てくるくらいまで、何度でも何度でも使う場面に遭遇するぐらいの経験量が大事ということです。

私が思いますに、プログラミング言語初学者の一番の難関は、アルゴリズムの構築部分、です。文法はわかった、配列や関数や変数の意味もわかった、解くべき問題も知っている、でも自分で考えて問題を解決するためのプログラミングを一から組むことができない、といった状況です。

英語の勉強で例えるなら、外国人の話していることはだいたい理解できるが、自分から言いたいことを話せない、というような状況です。

もしstrikeさんがこの状況であるのだとするなら、ヒントとしては、論理的な思考、ができるかどうかにかかっています。もし大学の講義などで論理学の講義があればぜひ参加して、論理的思考が自然とできる訓練を積んでください。悩みながらいっぱいコードを書け、人のコードを読んで理解しろ、的なことを言われる人も時折いますが、それでは「どう勉強したら良いか」の回答になっていません。

遠回りのようでもこれが、1.問題をプログラミングで解決できる小問題に分割して、2.それをアルゴリズムの形で頭の中で構成して、3.プログラミング言語という形で表現する、ための近道になりますし、将来プログラミング作業を続けていく上で重要な基礎になります。

デバッグの仕方やエディタの使い方、githubの使い方、ライブラリ、フレームワークの使い方などは、確かにプログラミング作業上大事ですが、プログラミングを使った問題解決のための本質的な部分ではないと私は考えています。

プログラミング言語によって、その背景となる哲学や数学的基礎、パラダイムなどが異なりますが、C言語のような「手続き型言語」と呼ばれる言語をベースに学び始めるのが良いかと私は思います(賛否はあるかもしれませんが)。

もし、効率よく学びたい、というのであれば、一度は体系的にプログラミング言語の講義を受けるのが早いですし、そのあとではプログラミング上級者と一緒に作業することができればスキルアップが加速されます。いずれにしましても、毎日何かプログラミングしていたいと思えるくらいプログラミングが好きであれば自然と上達すると思います。

とりとめなくなりましたが、何かのご参考になれば幸いです。

投稿2017/12/01 20:42

.M.

総合スコア98

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/12/02 04:04

「何度でも何度でも使う場面に遭遇するぐらいの経験量が大事ということです。 」 「プログラミング言語初学者の一番の難関は、アルゴリズムの構築部分、です。」 確かにそうですね。 大変参考になります。
strike1217

2017/12/02 04:05

論理的思考力とは、数学を勉強することでも身に付けられると思いますか?
.M.

2017/12/02 07:02

ポイントは科目うんぬんよりもむしろ「勉強の仕方」にかかっているかもしれません。もっというと物事の考え方、世界の見方、にかかっているかもしれません。ざっくり誤解を恐れずに言うなら、1. 部品の機能がどういったものかを知ったのち、2. どう部品を組み合わせれば自分の欲しい機能になるのか、という視点で、物事を考えることが大事だと思います。いわゆる高校や大学受験で習う数学は定型的な問題に対して、公式を当てはめて、具体的な値を導く、というものがほとんどで、塾や参考書では主に「問題の種類」-「解き方」の対応を「暗記」することが求められます。センター試験ではこの傾向が顕著です。 例えば、何か具体的な例を示しますと 二つの集合{1,2,3,4,5}と{4,5,6,7,8}に共通する数字が知りたい といった場合、C言語でもRubyでもJavaでもExcelでも実現することができるかと思いますが(数学的には積集合や共通集合などと言いますが)、この問題を解いた後、この解き方を自分の頭の中で問題を解く「部品」にして蓄えておきます(ソースコード自体はすっかり忘れてしまっても、二つの集合があって、共通の要素を抜き出す方法を解いたことがある、という事実を覚えておきます)。そして、 例えば、私生活の中で、どなたか気になる人ができたとして、自分とあの人の二人に共通する性格って何だろう、ということが気になったとしたら、「あれ、この前の共通集合の問題解決の方法が使えるかも」と問題を解く部品を選び出し(思い出して)、ではそのためには、どこをどう変更すればその解き方が使えるか、と考えます。集合要素は数字ではなくて性格を表す文字列でリストを作ってみよう、とか、気になる人がもう一人できて、3人に共通する部分を計算するためには、3つの配列でもいいけれど、二次元配列(Rならdata.frame?)を使ったらどうだろうかとか、性格を表すキーワードでも似たような意味のものでもを同じ意味の性格だと判定するにはどうしたら良いかとか、、、あるいは日記や文章を読み込ませて、そこからgmailのスパムフィルタで使っているような学習機能を加えて自動で性格リストを出力できないだろうかとか、、、具体的にどうやってスパムメールを学習しているのだろう、、、などと興味を持てば機械学習への興味につながりますし、勉強のモチベーションがグッと上がります、、、などといろいろなことをプログラミングの枠組みで考えられるようになったら、それがそのまま「論理的思考」の訓練になると思います。数学で使われている概念や理論がこの「部品」になることが多いですが、こういった思考手順は数学に限りません。 つまり、今ある目の前の問題に対して、使える部品が頭の中にあるか、それを使うためにはどう部品を変更したら良いか、なければ探してみる、使えそうな部品の機能を覚えて、組み合わせてみる、と言った(思考)手順の繰り返しになります。こう言った作業で問題が解決できるようになると、プログラミングが楽しくなってくると思います。 ---- 数学(の応用、利用)それ自体は論理的手順になりますが、分野にもよりますが数学の場合は論理的に考える前の段階で、記号の意味、概念を理解するのにまず壁がある気がします。将来的にずっとプログラミングを続けていくつもりなら、いろいろな分野の数学(概念)を身につけておくことは非常に大事ではあると思いますし、プログラミングの幅を広げることにつながるのは確かで、何より新しい概念を理解するということは、世界のモノの見方(現象や仕組みや物理的な物質に限らず人との関係性や社会システムや因果関係、相関関係など全てのもののあり方に対する視点)が変わります。 「プログラミング」と同様に「数学」と言ってもこれまた幅が広いので一概には言えませんが、「数学の勉強」についてもう一つ付け加えるならば、高校や大学の数学の講義(特に物理数学など)では主に「解析的」な方法(数学の式展開だけで問題を解く方法)や理論(公式)の証明が(淡々と?)教えられるのに対して、情報処理の科目では「数値的」な方法(プログラミングを使って100%正解ではないけれど答えに近い値を求める方法)を教えたりします。いわゆる「科学技術計算」という部類になりますが、今ではC言語でもPythonでも便利な科学技術計算ライブラリがたくさんあり、簡単に誰でも使えるような時代になりましたが、その基礎となっている理論を勉強することもプログラミングの幅を広げることにつながるかと思います。 ちなみに。ここら辺のお話は、JavaScriptとかRuby on RailsだとMySQLがどうとかそう言ったアプリケーションレベルの話とはまた別の次元のお話になりますので、参考程度に聞いておいてもらえれば嬉しいです。少しでもプログラミグに対しての見方や展望が開けてくれれば嬉しいです。
strike1217

2017/12/02 11:20

最初はコメントが長くて「おお。すげぇ」と圧倒されてしまいました。 「今ある目の前の問題に対して、使える部品が頭の中にあるか、それを使うためにはどう部品を変更したら良いか、なければ探してみる、使えそうな部品の機能を覚えて、組み合わせてみる、と言った(思考)手順の繰り返しになります。」 なるほど!! 大変参考になります。
strike1217

2017/12/03 14:39

ふと思ったのですが、定番コードを覚えてしまうのが最強かもしれません。 部品を組み合わせて作っていくので、その部品のストックを多く持っていればある程度のものを作れるようになるかもしれないですね。
.M.

2017/12/03 17:47

少なくとも私が素晴らしいと思える点が2点あります。 一つ目は、「ふと」そのことに気がつかれたこと。 二つ目は、早速自分の得た思考の部品を活用して、新しいアイデア(思考の部品)を作り出されたこと。 です。 最初に「論理的思考」が大事、と申しましたが、この(思考の)部品を選び出す、思いつく、気がつく、ひらめく、というような作業は実は論理的思考(演繹的推論)だけではできないことでいわゆる(現在の)AIには難しく私たち人間が得意とする思考方法です。いわゆるAIの難問と言われるフレーム問題にも関連しています。「ふと」思いつく場合、全く別の経験をしていることがよくありますが、たいていはその問題を一度はじっくり考えた上で何か別の経験がトリガーになるということが少なくありません。事実かどうかは定かではありませんが、アイザックニュートンがリンゴが落ちるのを見て、「上から下に落ちた」のではなく「リンゴと地球が引き合った」と「ハッと思いついた」のはそれ以前に引き合う力(引力)について考えた経験があったからだと私は信じています。きっとstrikeさんもプログラミングをどう勉強するのが良いのかじっくり考えた経験があったからこそ、「ふと」思いつかれたのだと、推測しています。 おっしゃることに異論はありませんが、もう少しアイデアを掘り下げるお手伝いをしてみましょうか。 多々ある思考の部品の中から使えそうなものを選び出す(思いつく)ためには、もちろん部品ストックが多いに越したことはありませんが、単にストックが多いだけではダメで、その部品を何通りもの仕方で使った経験(記憶)が大事になります。どなたかがアウトプットが大事と回答されていましたが知識として得た部品を使うことで本当の意味で自分の知識とすることができます。自転車の乗り方は教わった、でも普通はそれだけでは自転車を乗りこなせません。本当に乗りこなすためにはなんどもなんども乗ってみる(使ってみる)ことが大事だと私は思います。 次に、プログラミングに関わる「部品」ですが、部品はいろいろなまとまりで見ることができます。なんどもなんども使うようなコードはC言語であれば「関数」として用意しておき、これが「部品」として使えますし、みんながよく使う関数(群)は通常ライブラリとして言語処理系にくっついて配布されます。C言語で言えばincludeするstdioとかstdlibとかいうあれ、です。オブジェクト指向言語であればクラスライブラリがいっぱい出回っていることでしょう。これらも部品として活用できます。さらにあるライブラリ群+プログラミングお作法をセットにすると、フレームワーク、という名の部品になります。Ruby on Railsというのは(大雑把に言えば)たくさんのRubyライブラリとその使い方のセットのことでで、その使い方に従うと、パパッとWebアプリケーションが作れてしまう道具、といった具合です。 世の中もちろん「定番」などそもそも存在しない問題も山ほどありますからその場合はそれまで得た知識を総動員して、問題解決のコード(アルゴリズム)を組み上げていくことになるでしょう。そこでも、問題を理解して、分解して、論理的に考えて部品を組み上げていくこと時にはもちろんそれまで使ってきた部品が役に立ちます。もしかしたらその時には、別の経験から得た思考の部品がトリガーになって「ふと」いいアイデアが思いつくかもしれませんので、プログラミングに限らず、日本に限らず、いろいろな世界で、いろいろな分野で多くの経験をされることは後々の人生で非常に大事になってくると私は思います。 ご参考になれば幸いです。
strike1217

2017/12/04 05:56

fmfm なるほど
guest

0

昔は動画なんて無かったし、今ほどネットに入門のサイトが溢れてなかったし(当時はとほほぐらいかな・・・てか今でもあるあそこはある意味すごいけど)、書籍ぐらいしか体系的に学べる物が無かったんですがねー。これが時代が変わったと言うことでしょうか…。


さて、関数の使い方を忘れたという話についてです。いやはや、忘れるだけマシです。私の場合、はじめから覚えていないのですから。coutなんてcountと書いて、何でコンパイルが通らないんだと2~3分悩むような人間です。

各言語には膨大な標準関数やクラスが存在します。それに加えて無限とも思えるほどの外部ライブラリがあり、それらにも多くの関数やクラスが存在します。それら全てを覚えることは無理です。だから、初めから覚えません。では、どうするのかというと、どうやったら使い方がわかるかだけを覚えておくのです。ツールでもサイトでも書籍でも何でもいいのですが、ここを見たら使い方がわかるという事だけ覚えます。

なんか、すごいプログラマーは一つの画面でガチャガチャやっているイメージがありますが、昔は大抵、分厚いリファレンス本を脇に置いていたものです。ネットも本もみてないと思っても、IDE内で関数リファレンス等が読めるので、よーく見るとちょくちょくそれらを見ているだけだったりします。ターミナル一つでガチャガチャやっている人も見るかも知れませんが、manが入ってなかったら、その人はたぶん何もできません。みんな調べながらやっているのであり、それが普通であり、全て覚えるなんて無駄なことはしません。

投稿2017/10/31 22:32

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/11/01 03:48

「どうやったら使い方がわかるかだけを覚えておくのです。」 関数の使い方を覚えるより最初っから「調べること」に頼るんですね!! 分かりましたわ。
guest

0

こんにちは。

私自身は「プログラムを作りまくる。」でした。本は多少は買いましたけどたくさんは買ってないです。基本だけ読んだら(読んだだけではちんぷんかんぷんでした。)後はひたすら作りまくった感じです。当然、なかなかうまくいかないです。でもあの頃は若かったので根性が続きました。

困っているのがC言語とかで関数の使い方を忘れてしまうんですよね。

(後略)

力いっぱい「あるある」です。最初はcout <<だっけ? cout >>だっけ?のような時さえありました。coutを使い始めたのはここ3年ほどですが...間抜けですよね。
流石に散々使ったので今はcoutでこれはないですが、頻繁に使わない関数ではいつものことです。cerrだっけcerrsだっけみたいなことは今もあります。

ですので、リファレンスを見ずにコンパイルを通せることの方が少ないです。たぶん永遠にこのままです。言語はどんどん進化するけど、記憶は必ず忘却しますから。むしろ、うろ覚えな記憶に頼るプログラミングは逆に怖いかも。

投稿2017/10/31 14:08

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/11/01 03:59

みなさん、意外と同じような問題を抱えてますね。
guest

0

私がある程度プログラミングに慣れてきたな、と思ったのはブログを自分で作成し、作ったものやちょっとしたコードをアウトプットするように心がけてからです。
(もしかしたら、これはコップの水が溢れるという例えで有名なアレかもしれません。成長する時期がたまたま重なっただけだったかもしれない)
私が思うに、これは大まかに2つに分けられると感じました。

1.自分で常に使うもの(例えばブログ)を自分で作成したこと
大きなプログラムでも、初めはシンプルなものだったりします。繰り返し改良し、機能を加えていくことで巨大化させることができますし、その経過というものは有意義だったように思います。
また、自分が常日頃使うものですから、必然的にプログラムに触れる時間が増えます。
愛着も湧きますし、楽しいというのも大きい理由ですね。

2.学んだ知識をアウトプットすること
アウトプット自体も良い習慣だと思いますが、一番良いと感じたのは過去に作成したコードを再利用できることです。
大きめなプログラムはGithubに上げてますが、Githubに上げるコードの多くはブログにも小さい粒度に分けて書き直しています。
メモやブログといったものへのアウトプットは1行1行解説するということも簡単ですし、それらをタグやカテゴリー分けし後から見直すことも容易な為、Githubに上げたコードよりも自分のブログのコードを参考にすることが私は多いです。
自分で書いた説明ですから、やっぱり自分で読んでてすぐわかります。

私のブログはそんなにアクセスがないですが、場合によっては詳しい方が突っ込んでくれることもあるでしょう。アドセンス広告なんかを貼ってから、内容を推敲する癖も少しつきました。金になればやっぱ嬉しいですからね。


上の2つは良い効果があったように思いますが、私が個人的に行っていることもいくつかあります。
ただ、他のエンジニアの方を見る限り推奨されないと思うので、参考にはしない方が良いかもしれません。
アンチパターンや、何かの参考になればいいのですが...

1.書籍を繰り返しよく読み、あまり写経はしない
私が書籍を読むときは写経はあまりせず、できる限り頭の中でコードを理解しようとします。
これは書かなきゃ理解できないなと思ったら流石に写経するのですが、それでも1回2回写経したら後は読むだけです。読んでてこれはあれに使ってみようとかあれば、早速使ってみます。
その後も定期的に読んでいますが、その際は割と息抜きがてらです。コード書きつかれたなーという時など
元々向こうの書籍なんかは、ジョークもあって結構楽しいです。

2.言語はできるだけ1つに絞る
これは仕事の都合もあるので難しいとは思いますが、私はできるだけ一つの言語に習熟してから他の言語を学ぶようにしたい派です。
いくつもの言語を学ぶことで様々な考え方を吸収できる一方で、その言語特有の設計思想やベストプラクティクスが存在するのも事実です。少なくとも、それらがある程度身につくまでは他の言語を深くはやらないようにしています。
ただ、先程書いたように仕事上の都合もありますし、他の方を見るにこの考えは間違っているかもしれません

3.目的がプログラミング
私はプログラミングそのものが目的です。綺麗だと思えるコードを書いたりそれを説明してる時が単純に好きです。
何かを作るのは当然楽しいですし、興味のないモノは作る気がしません。ただ、プログラミングをそもそもしたいので多少興味があればそれを作るというスタンスです。
この考えは他の方を見る限り、間違っているような気がします。

投稿2017/11/01 01:47

編集2017/11/01 01:53
toritoritorina

総合スコア972

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/11/01 03:51

「言語はできるだけ1つに絞る」 これは分かります。 あまり多くの言語に手を出したくないというのはありますね。
WathMorks

2017/11/03 15:05

全く以て同感です。
guest

0

C言語とかで関数の使い方を忘れてしまうんですよね
関数の数が多いと覚えきれません
パラメータが多い関数とかはすぐに忘れてしまいます
関数を使う順序を忘れることが多いですね

回答時点で一ヶ月前の質問ですし、本題とは別角度の回答ですが、
おそらく盲点になっているので、「忘却」をテーマに回答してみます。


今回のテーマに合わせてあえて強調して言えば、
オブジェクト指向は、忘れても組める手法です。
たとえば、ご質問に対しては、以下のような対策があります。

  • 関数の数が多い → クラスにまとめる
  • パラメータが多い関数 → 状態を内部に持ち、引数を減らす
  • 関数を使う順序を忘れる → ファサードやアダプターパターン

「なぜ、OOPでわざわざ複雑に組むんだろう」と思うかもしれませんが、
多少書くときに冗長になっても、後で忘れても変更しやすいからです。
逆に、手続き的に書くと、作りやすいが変えにくい

たとえば、newしてもいいものを、わざわざファクトリを使ったりするのは、
初期化の手順を忘れてもいいようにするわけです。
あるいは、アダプターでラップするのは、APIを忘れてもいいからです。

そういうオブジェクトに覚えさせるという発想があると、
長期間に渡って変更し続けるような開発や保守の負担が減ります。

投稿2017/12/02 01:11

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/12/02 04:01

なるほど!! オブジェクト指向すごいですね!! 参考になります。
guest

0

的外れな回答ではありますが、これまで学んできたことに基づいて、分かるor興味のある範囲でteratailなどで回答してみることがよい勉強になります。
自分がどれだけ学べたのか、理解できたのかを確かめるには、誰かにそれを説明してみるのがよいです。
それでうまく説明できないことは理解できていないのですから、それを勉強すればよいです。

では、どのような勉強をすればよいの?という疑問については他の方の回答を参考にしてください。

投稿2017/10/31 14:46

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

勉強自体は、独学と職場でのOJT。

大抵やりたいロジックが先にあって、書籍を見たり、ググったりして標準関数等がないか探す。

この業界に入った時、プログラムを作る事より大切な事として、上司や先輩に言われた事。

●書籍ではなく他人が作ったプログラムをいっぱい見る事。
※いっぱい見るうちに、綺麗なプログラムなのか、汚いプログラムなのか分かるようになる。

●誰が見ても美しいプログラムを目指す事。

●他人が理解出来るくらいに可読性があり、適切なコメントがある事。

●コーディング規約に遵守している事。
※標準コーディング規約以外に、そのプロジェクトでのコーディング規約がある為、絶対に遵守する。ただ読みやすいプログラムを作るのみならず、処理速度やバグを減らす為に考えられて作られている規約なので、遵守する事。

●共通関数が用意されているのであれば極力共通関数を使用する事。

●セキュリティについて常に意識する事。
※一般的にはSQLインジェクションや、クロスサイトスクリプティングなど。

●変数名や関数名は、コーディング規約に遵守する。
コーディング規約なき場合は、命名規約を自ら熟考し設計した上で命名する。
抽象的な変数名や関数名は、バグの元になるので、具体的な変数名とする事。

●コーディング規約に準拠となるが、省略形態を使用しない。バグの元になり、また可読性が低くなる。
※例えば、IF文のBoolean型判定でtrueの省略など。

●コーディング規約なき場合は、自らコーディング規約を作成する事。


ちなみに上達という事であれば、先に書いた通り、
兎に角、書籍ではなく他人の書いたコードに触れる事。

また、身近な誰かの為に作成する事で上達します。
自分の為でも結構です。

ちなみに趣味で所属していた団体の為に作成したPHPで作成したプログラムは団体を去った後でも使用されているそうです。
そもそも仕事で使わないPHPの勉強がしたかった為、画面設計書いて、こんなのなら作れると思うよと団体のスタッフに提案して、PHP単体ベースのプログラムと、PHP+MySQLベースの2本プログラムを作成しました。

例えば、家族の為に、友人の為に、こんな事が出来ないかな?と言われた時に、作ってみると面白いかもしれませんね。

覚える事が目的ではなく、作って誰かに使ってもらう若しくは自分自身で使う事が目的なので、関数を覚えて損はないけれど果たしてそれだけの関数を使いこなせるのか?って事です。
一般的なプログラムであれば、別段覚えていなくても、基本構文さえ分かっていれば特殊なロジック部分は調べれば済む話なので、特に覚えていません。

色んな言語で開発するのに、いちいち覚えてられませんよ笑

頭の中の設計がその言語で実現出来れば良い訳で、「実際には仕事の現場でもプログラマも検索しながら記述をしています。」は事実ですね。
基本構文は、どのプログラム言語も同じなので、どちらかと言うと思想や設計が重要かと思います。

一つの言語である程度作成出来るのであれば、後はググる笑
これに限ります。

投稿2017/10/31 16:20

編集2017/11/01 11:17
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

*私が使っているのはJavaなのでどこまで同じかわかりませんが私はこうやっています。
*参考にしていただければ嬉しいです。

私はノートに書くのは辛いのでパソコンのメモ帳にあらかじめ使いそうなプログラムを片っ端から入力して保存します。「保存した時の名前はどんなプログラムか書いて下さい」
これで使う時にパソコンのメモ帳を開いてコピーしてペーストです。
こうすれば全て覚えなくてもOKです。

投稿2017/12/02 00:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/12/02 04:00

win32 APIを使っていた時は、メモ帳ではありませんが、以前作ったプログラムをコピー&ペーストしていました。 確かに、覚えなくてもそこそこのものは作れていました。
退会済みユーザー

退会済みユーザー

2017/12/02 04:06

頑張ってください!
guest

0

とにかくたくさん作ることですね。
最初は書籍を買ってましたが、情報が古くなってしまうので今はネット頼みです。
以下、勉強という程でもないですがよくやっていることです。

■ 技術系ブログやTwitter巡回
全く知らなかった情報を得る為に使用しています。
そこから気になったことは検索したり。実際に使わないことも多いですが刺激になります。

■ プログラミング中に予測変換で出て来たメソッドを調べる
Unity(Monodevelop)でよくやります。
例えば「何かのコンポーネント.get」と入力して出て来た予測変換(候補メソッド)を眺めて、目的に沿ったものや関連するメソッドに当たりを付けてみたりとか。
普通にリファレンス眺めることもありますが、「確かあったと思うけど、何だっけ?」という時はこちらの方が早いです。
一緒に引数の説明も出て来るので「何を渡せばいいんだっけ?」というケースはあまり無いです。
出て来ないツール(言語)の場合はひたすらリファレンスを検索しまくりです。

■ ググる
「Unity 並べ替え 配列」とか未だに何回も検索してます。
ふわっとした単語でもGoogle先生が意図を汲んでくれるので大抵はこれで何とかなります。

■ teratailの質問に回答する
自分じゃ使わなかったり、そこまで深く見ていなかったプログラムの挙動を調べたりと結構知識は深まるなぁと。
「問題を起こしている部分を予測する」「他人への教え方を学ぶ」という意味でも面白いです。

投稿2017/11/01 01:55

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

横から失礼します
質問者様と同じことで悩んでおり大変参考になります。
ありがとうございます。

写経に関してなのですが…

自分はRubyとRuby on Railsを勉強していてオープンソースのデータをgithubからダウンロードして写経しようと思っているのですが、Ruby on Railsの場合ファイルが複数個所にあって連動しあっているからどこをどう写経すれば良いか分からないくないでしょうか?

routesを読んでそれに関連したcontrollerファイル、viewファイルを読み込んでいけば良いという事なのでしょうか?

ダウンロードしたデータをローカルサーバーで立ち上げて動きを一つ一つ追いながら関連しているコードを探し出して追っていけばよいのでしょうか?

投稿2018/02/02 07:52

motio0912

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2018/02/02 08:09 編集

rubyは全く使ったことがないので、分かりませんが・・・ 「ファァイルが複数個所にあって連動しあっているからどこをどう写経すれば良いか分からないくないでしょうか? 」 C言語だと、例えばGDBでのステップ実行していきながらノートに写していく・・・という方法を取っています。 これで例えばLinux Kernelを攻略を図ろうかと・・・ プログラミングを始めたときは本を買ってきて、その内容をひたすらノートに書き写していました。
LouiS0616

2018/02/02 08:04

@motio0912 さん 特にお話を伺いたい方にコメントの形式で質問するか、新たに質問を立てた方がいいと思いますよ。 どちらにせよもうちょっと詳細を詰める必要がありますが。 ・最終的にどのような成果物を作りたいのか? ・現状どれほど学習が進んでいて、どんなものなら自力で作れるのか? ・Ruby以外の知識は充分あるのか? ・どうして写経をしようと思い立ったのか?具体的にどんな効果を期待しているか?
motio0912

2018/02/02 09:47

改めて質問を立て直したほうがよろしいでしょうか? 他のプログラミング言語のことが良く分からないのであれなのですが、コードを読むことの大切さ、写経の大切さは理解できるのでき、HTMLやJavaScript、CSSなどですととてもためになるのですが、ファイルが複数個所に分散されているときに見るべき個所が理解できるのかと思い書き込みいたしました。 ちなみに自分が今作りたいものは ・カップルのための備忘録アプリです ・ツイッターライクなアプリをProgateで作るのを学習し今はUdemyの作りながら覚えるAirbnbを作ろうをやっています ・Ruby以外の知識はHTMLとCSS、JavaScriptが少々です ・写経をしようと思ったのは、綺麗なコードに触れてコードの意味を1行1行理解できるようにしてコードを組み上げるときの考え方に触れていきたいと考えたからです。
LouiS0616

2018/02/02 10:02

回答欄あるいは自己解決欄なので、質問目的で使うのは本来の役割に反するかと。 新たに立て直した方が良いと思いますよ。
strike1217

2018/02/02 10:05

LouiS0616さんのおっしゃる通りだとおもいます。 ruby関係の質問を新しく立てると良いでしょう!
motio0912

2018/02/02 10:11

了解いたしました。 申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問