トップページ⇒tech
77コメント25KB

賢い勉強法は?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
コンピュータ言語を効率良く短期に確実に覚えたい!!
VB・Java・VC++等
0002デフォルトの名無しさんNGNG
>効率良く短期に確実に覚えたい
 失格です。
0003デフォルトの名無しさんNGNG
受験勉強だと思ってガリ勉したまえ。
ただ、世の中どうしてもプログラム的発想ができない人もいるので、
誰でも絶対にマスターできるというわけではない。
誰もが必ず東大に入れるわけではないのと同じ。勉強してもダメな人はダメ。
0004名無しさんNGNG
定期的にこの手のスレが立つね。

質問してる暇があるなら、とにかく始めろ!!
と私は言いたい。
0005デフォルトの名無しさんNGNG
コードを書くべし! 書くべし! ひたすら書くべし!
0006デフォルトの名無しさんNGNG
>>1
ほい。
http://messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835095&tid=c8c08la4rfh3xa4gbdacfc0a49a4ka4ka4oa1a9&sid=1835095&mid=1&type=date&first=1
http://messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835095&tid=a5wa5ma50a5ia5dea4kc0aea4ja4bfa4a4a4ga49a4aca1a6a1a6a1a6&sid=1835095&mid=1&type=date&first=1
0007デフォルトの名無しさんNGNG
>>1
ほい。
http://messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835095&tid=c8c08la4rfh3xa4gbdacfc0a49a4ka4ka4oa1a9&sid=1835095&mid=1&type=date&first=1
http://messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835095&tid=a5wa5ma50a5ia5dea4kc0aea4ja4bfa4a4a4ga49a4aca1a6a1a6a1a6&sid=1835095&mid=1&type=date&first=1
0008デフォルトの名無しさんNGNG
わかりやすい
ちゅー鳥ある
で一通りなめて

あとは自分で簡単なのからつくってみる

サンプルつきのAPIとか関数のリファレンスもほしいですね

僕の場合Webと本で資料あさったり読んだりする時間と
書いてる時間は3:7くらい

新しい言語だと資料がすくなくて大変だね
0009デフォルトの名無しさんNGNG
プログラマ板で聞く
0010デフォルトの名無しさんNGNG
>>9
それはヤメなさい
0011デフォルトの名無しさんNGNG
fj.comp.lang.cで質問しましょう。
きっと手取り揚げ足取り教えてくれますよ。
0012デフォルトの名無しさんNGNG
fj.comp.lang.cって何?
0013デフォルトのやる気なしNGNG
>>11

> きっと手取り揚げ足取り教えてくれますよ。

ワラタ。 (^◇^;
0014デフォルトの名無しさんNGNG
あるときふと何でも理解できるようになる
0015デフォルトの名無しさんNGNG
なこたーある。
0016デフォルトの名無しさんNGNG
そう突然、思考がプログラム的になるんだよな。
最近は、ものごとをクラスオブジェクトとしてとらえたりすることもしばしば。
現実世界で、デザインパターンを適用しようとしてしまうところまでいけばしめたもの。
001716NGNG
んなこたーない
001816NGNG
にしても、講義や授業で擬似プログラミング言語つかわずにC言語で説明しろやゴラァと、
先生に思わず言ってしまうくらいになればいい。
0019デフォルトの名無しさんNGNG
プログラミングの勉強は目隠しをして山を登るようなもんだ。
やたらツライし今自分がどこにいるのかも大体でしか分からないし、
下手すると崖から落ちたりもするが、
ただただ登っていれば気が付くと頂上に着いてるんだよ。
でもすぐにまた次の頂上が待ってるんだけどねー。
0020デフォルトの名無しさんNGNG
>>14
突然、神が降りる。プログラマなら一度は経験しますね。
0021デフォルトの名無しさんNGNG
>>20
あたぃ プログラマーになってから1年くらいだけど
なかなか神が降りてきません。
002220NGNG
>>21
小難しい本読むなり、トンデモな仕様の実装方法なり解放がみつからねぇ〜って
ぐらい悩んで、その日はスパっと帰ります。
家族でメシ食って風呂にゆっくり入って早く寝ましょう。
次の日、デスクに座った瞬間悩んでいた問題の解放が湧き上がってきます。

・・・って感じ。突然悟りが開けるから。
0023デフォルトの名無しさんNGNG
>20
ありますね

煩雑なクラス設計を眺めていたらデザインパターンに落とし込めることに
気づいて夢中でコーディングしたり

神が降りるって自分の場合
1 ひらめく
2 能率が一定時間驚異的にあがる
の2種類あります
0024デフォルトの名無しさんNGNG
プログラミング言語とかライブラリ利用法の学習には、実際にコーディングしてみるのが一番効率良いと思うんですが。
でも、デザインパターンとかUMLみたいな知識の学習はちょっと違いますよね。
どういうふうにして馴れていきましたか?
0025デフォルトの名無しさんNGNG
まずプログラムを書き散らして、いろいろな場面で痛い目にあって、
ああやはりきちんとした方法論が必要だよなあ、と実感することが大切かな。

それをすっぽかして、いきなり *高級な* 方法論に触れても、
ありがたみを感じないだろうし、身につかないと思う。

こういう考え方をドキュソというんだろうか。
でもなあ。
0026デフォルトの名無しさんNGNG
確かに。
デザインパターンを勉強しても、過去に自分で似たような構造を作る経験があったりすると理解しやすい。
prototypeとかflyweightとか、すぐにはわからんかったよ。
0027デフォルトの名無しさんNGNG
>19-20
やる気が湧いてきました。ありが とぉっ!!
0028デフォルトの名無しさんNGNG
お!最近初めて神がおりてきたような感じにあったよ!
0029デフォルトの名無しさんNGNG
本質を捉えろ! あとは応用問題に過ぎなくなる。
0030デフォルトの名無しさんNGNG
>>28
とりあえず俺の神になってくれ
0031デフォルトの名無しさんNGNG
がんばりすぎて神に召されないようにね!
0032デフォルトの名無しさんNGNG
>>30
プロポーズの言葉みたいだ
0033デフォルトの名無しさんNGNG
ドキドキ...
0034デフォルトの名無しさんNGNG
最近さっぱり神が降りてきません
もう歳かな
0035デフォルトの名無しさんNGNG
>34
あなたは神となり、どこかで頭を抱えている若手プログラマに
救いの手をさしのべるのdeath!!!!!!!!!!!!!!!
0036デフォルトの名無しさんNGNG
漏れの場合はとりあえず適当な本を一冊買っておいて、
遊びがてら適当にソース書いてみて行き詰まったときに初めて本で調べる。
漏れにとって本は辞書代わり見たいなもの。
面倒くさいから最初から通して読んだりとかはしない。
0037デフォルトの名無しさんNGNG
>>36
俺もそうだね、入門書は半分ぐらい読みながら進めるけど後は辞書的使い方になる。
0038デフォルトの名無しさんNGNG
入門書より索引やサンプルコードが充実してる本の方が良いやね
まったくの初心者というのならば話は別だけど
0039デフォルトの名無しさんNGNG
俺は入門書で感覚をつかんでいろいろ遊べるようになったら詳細な本を買って辞書的につかいますね
入門書は再びやるときに感覚を取り戻すために使います。
0040デフォルトの名無しさんNGNG
たしかに、プログラミング言語C++を通して読む奴は少なかろう。
0041デフォルトの名無しさんNGNG
入門書相当ならネット探せばいくらでも載ってるし表面的なおいしい部分
しか書いてないので買うだけ無駄。一番必要なのは裏も表も網羅されて
いる巨大なリファレンスマニュアルだけでいいよ。
0042デフォルトの名無しさんNGNG
>41
でも入門サイトって使えないのが多くて、探し回るくらいなら
本買ったほうが良かったりする
技術や言語にもよるのかなぁ
俺のレベルが低いせいもあるが・・
0043デフォルトの名無しさんNGNG
>>42
同感です
よく勉強のためにMSDNをみろ、とか言うやつが多いけど
効率よく勉強するには向いていない。
ある程度実力がついてからじゃないとMSDNやネットの情報は
活用できないと思われリ。
0044デフォルトの名無しさんNGNG
初心本は、技術や言語をオーバービューするのに良いと思う。
粗い骨組みを簡単な本で組み上げておいて、肉付けをリファレンス本でするのが良いのでは。
0045デフォルトの名無しさんNGNG
余計な注釈とか無しの簡潔に書かれた文法書やAPIのリファレンスを
頭からざっと読んで、ネットでサンプルコード探してざっと読んで、
あとは書きながら勉強、というのが良いと思う。

おれ年寄りだから、AT&T の c-frontについてきた"Annotated" じゃ
ないただの C++ reference manual で C++ 学んだ。ページ数少ない
ので読むのはラク。
0046デフォルトの名無しさんNGNG
リファレンス本だけで全体像がつかめるには、それなりの経験が必要ですね。
0047デフォルトの名無しさんNGNG
入門書と謳ってるのに、サンプルコードが解説対象以外の機能
盛り込みまくりで、解説も難解なのってたまにありますよね。

その分野の本がまだそれしか出てない場合は仕方なく買ったりしますが、
読んでいて切れそうになります
0048デフォルトの名無しさんNGNG
>>19
C始めてまだ2ヶ月・・
挫折しつつも、簡単なプログラム作って達成感に酔いしれてる
ちょっとやる気が沸いた今日この頃(´ー`
0049ジャヴァックNGNG
暗記しようとは思わないこと。
その時は理解できなくてもいいから闇雲にコーディング。
いずれわかります。
理論は後から付いて来ます。
0050デフォルトの名無しさんNGNG
>>48
わかるわかる!
漏れもC++始めた頃は辛かったよ…
0051コロコロNGNG
>>244さん
私は真剣に聞いているんですけど。
0052デフォルトの名無しさんNGNG
電波さんですか?>51
0053デフォルトの名無しさんNGNG
>>50
いまは使いこなせてますか?
聞かせてくれ〜
勇気をちょうだい♪
0054244NGNG
なめんなこのage荒らしが。冗談もほどほどにしとけやゴラァ。
0055デフォルトの名無しさんNGNG
>54、>51
電波さん怖い
0056デフォルトの名無しさんNGNG
>>54
ごめんなさい
0057デフォルトの名無しさんNGNG
なめんなよ
0058デフォルトの名無しさんNGNG
プログラム初心者の友達が会社で研修してます。
ちょっとその研修に疑問があります。

アルゴリズムの勉強がメインだそうで、
最大公約数や2分探索、クイックソートなどを
考えてコーディングって感じだそうです。
一日の80%以上は考えることに使って、
コーディングの時間の割合は20%くらいです。

もう3ヶ月くらいになりますが、
「画面に文字を表示させて、入力させて、表示と入力を判定して
 正しかったら別の文字、ちがったらもういちど同じ文字を表示。
 これを繰り返す」
って感じの簡単なプログラムをフローチャートにさせても
ぱぱっと出来ないです。

発見させてるアルゴリズムを考えさせるよりも、
そのアルゴリズムを実際に使えるようにする場面を体験することの方を
重視すべきだと思います。
併せて、ある機能をプログラムに落とし込んでいく経験をどんどんするべきだろうと
おもうし、そのために必要なAPIを見つけて使う勉強もしていくべきだと思います。

机上で考えることよりも、どんどんコーディングすべきだと
思うのです。

皆さんどう思われますか
0059デフォルトの名無しさんNGNG
>>58
>ちょっとその研修に疑問があります。

って〜か、「ちょっとその人の資質に疑問があります」
じゃねーの?

その会社の方針は正しいよ。というか素晴らしい。
長い目で社員を育てているんだから。
でも、その期待に応えられそうにないね、そいつ。
006058NGNG
こんなのもやってるそうです

a^2=b^2+c^2
aとbとc、それぞれ整数で100以下の組み合わせをさがす
もっとも効率のよいプログラムを書いてください

数字の組み合わせの例
5^2=4^2+3^2

僕は職業プログラマのくせに、
3重ループしか思いつかなかったです。
0061デフォルトの名無しさんNGNG
>>60
揚げ足を取るようで、ごめんなさい。
でも、整数ではなく、自然数ですよね。(^^;
0062デフォルトの名無しさんNGNG
>>60
その問題の答えを教えてください。
俺も総当りで、調べる方法しか思い浮かびません。
0063デフォルトの名無しさんNGNG
>>62
効率のよいプログラムが何を指すか分かりませんが、
計算量を減らす事を指しているのなら、これも総当たりですが、
配列を100の2乗分用意すれば、2重ループに減らせます。
また、平方根を求めるのが早い処理系なら、
毎回、根を求める事により同じく、2重ループに減らせます。
それ以上は、アルゴリズムを調べないと何とも…。
但し、本当に100以下で良いのであれば、
全て記録しておけば良いと思うのは、自分だけでしょうか…。
0064デフォルトの名無しさんNGNG
int n = 100;

for (int b = 1; b <= n; b++)
{
  for (int c = b + 1; c <= n; c++)
  {
    int a2 = b*b + c*c;
    for (int a = 2; a * a < a2; a++)
    {
      if (a*a == a2)
      {
        cout << "found! : "
          << a << "^2 = "
          << b << "^2 + "
          << c << "^2" ;
        break;
      }
    }
  }
}

でどうだろ?
あうち、これのオーダー、計算わかんないや(^^;
0065デフォルトの名無しさんNGNG
(m+n)^2 = (m-n)^2 + (2mn)^2 でやれば? やはり 3重ループにはなるが。
0066デフォルトの名無しさんNGNG
>>65
それって本当に全部の場合を網羅できるのか?
0067デフォルトの名無しさんNGNG
a^2 = b^2 + c^2 ( a>b>c )で、メモリ効率を無視して、ループ1回に、
2重ループが1回で作ると(手抜きで配列を+1してますが)こんな感じです。

#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef long Int;
typedef long Long;

void hit(Int i,Int j,Int k) {
printf("%d^2 = %d^2 + %d^2\n",i,j,k);
}

int fermat () {
Int *x1; Long *x2;
Int i, j ; Long l;
if ((x1=calloc(sizeof(Int),MAX*MAX+1))==NULL) { return -1 ; }
if ((x2=calloc(sizeof(Long),MAX+1))==NULL) { free(x1); return -1 ; }
for (i=1;i<MAX+1;i++) { l=(Long)i*i; x1[l]=i; x2[i]=l; }
for (i=1;i<MAX+1;i++) {
for (j=1;j<=i;j++) {
l=(x2[i]+x2[j]);
if (l<=MAX*MAX && x1[l]) hit(x1[l],i,j);
}
}
free(x2); free(x1); return 0 ;
}

でも、自分のマシンでは、2500くらいまで(しか)動きま(せんで)したが、
やはりメモリを使い過ぎるため、毎回、根を求めた方が良さげです…。

int fermat () {
Long *x2;
Int i, j , k ;
Long l ;
if ((x2=calloc(sizeof(Long),MAX+1))==NULL) { return -1 ; }
for (i=1;i<MAX+1;i++) { x2[i]=(Long)i*i; }
for (i=1;i<MAX+1;i++) {
for (j=1;j<=i;j++) {
l=(x2[i]+x2[j]);
k=sqrt(x2[i]+x2[j]+1); /* +1 はいらないかも… */
if (k<=MAX && l==(Long)k*k) hit(k,i,j);
}
}
free(x2); return 0 ;
}

これでも、相当古い処理系でなければ、3重ループより早いかと…。
0068デフォルトの名無しさんNGNG
>>66 できます。証明はピタゴラスあたりが知ってるのでは..
ああ、すべての項を d倍する奴も含めてね、念のため。
0069デフォルトの名無しさんNGNG
>>68
計算すると、mn=1,0になるけど、本当に大丈夫なのか?
0070デフォルトの名無しさんNGNG
>>65
この式は元の式の変換ではなく、ただの恒等式だよ。
007170NGNG
まちがえた。恒等式は
(m+n)^2 = (m-n)^2 + 4mn
だった。
>>65の式は完璧間違い。
0072デフォルトの名無しさんNGNG
>>60
・a>b>=cを仮定して良い
・(a,b,c)=(偶,奇,奇),(偶,偶,偶),(奇,偶,奇),(奇,奇,偶)以外はありえないから無視する

これだけでかなり削減できる気がする。
0073デフォルトの名無しさんNGNG
なんで i^2 のテーブルを使わないの?
int x[101];
for( i=1; i<=100; i++ ) x[i] = i*i;
としておけば a^2=b^2+c^2 は x[a]=x[b]+x[c]。
すなわち x[] の集合内で A=B+C となる組み合わせを求めるだけ。
0074デフォルトの名無しさんNGNG
なんかCマガのクイズやってる気分だ・・・(藁
007567NGNG
今までとはアプローチを変えてみました。
a^2 = b^2 + c^2 ( a>b>c ) として、aとbの差をxと表すと、
c^2 = a^2 - ( a - x )^2
c^2 = 2ax - x^2
よって、任意の値(c)の平方(c^2)が 2ax - x^2 の式に当てはまるものを、
総当たりしてやれば良いので…。( 説明が下手でごめんなさい )

int fermat () {
 long *x,i,j,k,l;
 if ((x=calloc(sizeof(long),MAX+1))==NULL) { return -1; }
 for (i=1;i<=MAX;i++) { x[i]=i*i; }
 for (i=1;i<=(long)(MAX/1.4);i++) {
  for (j=1;j<i;j++) {
   k=x[i]-x[j];
   l = k/j/2 ;
   if (l+j<=MAX && l>i && k==l*j*2) {
    hit(l+j,l,i);
   }
  }
 }
 free(x); return 0;
}

2重ループのiとjは、それぞれ式のcとxに対応しています。
007675NGNG
何を電波ってたのだろうか…、と言う訳で訂正。

a^2 = b^2 + c^2 ( a>b>c ) として、aとbの差をxと表すと、
c^2 = a^2 - b^2
c^2 = ( b + x )^2 - b^2
c^2 = ( b^2 + 2bx + x^2 ) - b^2
c^2 = x^2 + 2bx
よって、任意の値の平方(c^2)が x^2 + 2bx の式に……………

申し訳ありませんでした。m(_ _)m
プログラムの中身については、正し(くあって欲し)いと思います。
007765NGNG
うむ、間違いだったよ>>71
正解は
(m^2+n^2)^2 = (m^2-n^2)^2 + (2mn)^2
だったよ。訂正してくれればいいのに。
m=2, n=1 と置くと 5,3,4ね
■ このスレッドは過去ログ倉庫に格納されています