- 締切済み
プログラミングの勉強と理解
私の職種はデザイナーです。CG、映像、Webのデザインをします。2D、3D、編集などします。 しかし仕事の大半はプログラミングです。C++、C#、PHP、javascript、データベース(MySQL)がほとんどです。 Webアプリを自分一人で作ってもいます。PHPがメインでjQueryとデータベースを使った非同期で動くアプリです。デザイナーなので見た目はプロっぽく作っています。 そしてWebアプリを支援するツールをC#で作っています。 本職ではC++で大規模なアプリの一部の開発をしています。 CGツールのAPIなども使ってソフトウエアのカスタマイズもします。 これでもデザイナーなのですが、やはり本職のプログラマーの足元にも及びません。 ここからが本題です。 私は他人が作った環境やライブラリを使っているにすぎず、Webアプリの作り方やPHPやそのフレームワーク、jQueryなどの使い方などはWebで見て見よう見まねでツギハギしているだけです。 20代・30代の現役プログラマーさんたちは遥か上を行っています。 ブログやSNSで小難しい言語の使い方の解説をされている方も大勢いますし、書籍を出せるほどの知識を持った方も多いです。 自分はもう30代後半なのに、他の方の知識を借りてコードをツギハギしているだけで嫌気が差してきました。 思考がプログラム脳ではなく、フレームワークを作れるでもなく、jQueryのようなものを作れるわけでもなく、かといってC言語の講習会はメモリ管理とか難しすぎて理解できませんでした。 クラスや継承など比較的簡単なところはわかりますが、他人が作ったテンプレートとか、もう見ても何がなんだかわかりません。 どのようにしてプログラム脳にもっていけばいいのでしょうか? そもそも初歩から勉強したわけではなく、なんとなく業務的にやってたらプログラミングをやるようになったのできちんと学習ということをやっていないのが原因のような気がします。 もう30代後半なので読解力も衰えてきていると思いますが、プログラミングスクールのようなところに通って一から勉強したほうが良いのでしょうか? 私の書いたコードは他人に見せれるようなものではありません。 自分で作るアプリとかはクラスとかほとんど使っていませんし・・・(本職のアプリでは使っています)。 学習方法について何かアドバイスがあればどうぞよろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
>愚痴ばかりですみませんが何か具体的にこうすればいいというのはありますか? あなたが「これ(を理解するの)は難しい」と思って避けてる事をする。 とりあえず書いておくと非同期プログラムは職業プログラマ誰でもできるというわけじゃないです。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>うーん、結局私がやっている方法と変わらないということですか・・・? 根本から違います。 「見よう見まねで継ぎ接ぎ」では、経験にはなりません。 他人のコードを見て「なんでこういう処理をしているのか?」とか「もっと簡単に出来ないものなのか?」とか「もっと簡単に出来る言語はないものなのか?」を思考、調査し「ああ、だからこうしているのか」とか「こうしたら簡単になるんじゃないのか」とか「こっちの言語で書いた方が後からの修正が楽なんじゃないか」とか「自分で調べたり考えたりする」って事をしないと経験(習得)になりません。
お礼
ありがとうございます。 たとえばC#で何かしたいと思ったらネットで検索すると、○○○というクラスを利用すると書いてあって、たいていサンプルコードが乗っています。 例としてTimerクラスを使って一定時間毎に何か実行したいときに、 「TimerクラスのインスタンスのIntervalプロパティに時間間隔を指定する」 「EventHandlerデリゲートを作ってTickプロパティに登録する」 Timer timer = new Timer(); timer.Interval = 1000; timer.Tick += new EventHandler(MyClock); こんなふうに書いているサイトがたくさんあります。 しかしそもそもTimerクラスがどのように作られているのか、デリゲートの仕組みとか全然知らずに使っています。 でも世の中のプログラマの方々はこういうクラスなんか簡単に自作できるし、デリゲートも詳しく知っていてきちんと利用できるのですよね? 私はこれを複雑に使うと、イベントが思わぬところで発生してしまったりして想定していない結果になることがあったりするんです。 結局どのように解決すればいいのかわからなくなってしまいました。 非同期に処理が動くので書籍の「C# マルチコア非同期プログラム(確かこんなタイトル)」というのを本屋でチラっと読みました。しかしこれはなかなか理解するのは非常に難しいと感じました。初級者に理解するのは無理で、ある程度わかっている人向けな感じがしました。 しかし世のプログラマーたちはマルチスレッド処理が当然なアプリを作っています。どのスレッドがどのくらい専有しているかを調べるツールとかも作って効率性を高めていると聞きます。 こんなの自分には全く理解できない領域すぎて、本当に足元にも及ばない方々の下っ端で仕事をしているので(給料はあまり変わらないですが)自分の理解力の乏しさに悲しくなってしまうんです。 愚痴ばかりですみませんが何か具体的にこうすればいいというのはありますか?
- wormhole
- ベストアンサー率28% (1626/5665)
>うーん、結局私がやっている方法と変わらないということですか・・・? #1の方がおっしゃっている事と、あなたのいう「見よう見まねでツギハギしているだけ」は似ているようで違うと思いますけど。
お礼
ありがとうございます。 そうなのですね・・・すみません。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
もう30年以上もプログラム書いてますが、プログラムは「学習するモノじゃない」です。 プログラムの習得の「原点」は、こう来たらこう書く、ああ来たらああ書く、そう来たらそう書く、と言う「ケースバイケースの対処法の積み重ね」です。 「こういうデータが来たら、それを処理するのに最も適している○○は何か?」と言うのを、経験として積み上げているだけなのです。 この「○○」の中には、色々な単語が入ります。 「○○」は、「言語」だったり「データベース」だったり「オブジェクト」だったり「クラス」だったり「ライブラリ関数」だったり「出来合いのアプリ」だったり「先輩が作ったツール」だったりします。 そして、それらの「経験の積み重ね」から「その場で最も適した○○を選べる者」が「出来るプログラマ」なのです。 この「経験の積み重ね」が足りないと「エクセルで表集計すれば一発なのに、SQLとPHPで処理しようとして、遠回りして、罠に嵌まってしまう」とかって事が起きます。 「出来るプログラマ(やSE)」ってのは「近道と手抜きの方法を、他人より多く知っていて、いつも最適解を選び出せる人」の事なんです。
お礼
ありがとうございます。 うーん、結局私がやっている方法と変わらないということですか・・・? プログラマーの方々と自分では何か根本的に違うのではないかと思っているのですが・・・。 特に外人とも仕事していますが、彼らの技術力は明らかに自分より遥かに次元を越している気がします。
お礼
ありがとうございます。 避けているわけではないのですが、もう年齢も高めなので脳みその劣化もありますし時間も限られいるので効率性を求めて質問させて頂きました。 いっその事、お金払って勉強したほうがいいのかなと。 非同期プログラムは難しいのですね…。 自分の周りのプログラマーはたぶん凄すぎる人たちばかりなのでしょう…。