忙しい現代人の腰&肩のお悩み対策!

研修生としてJavaを勉強しています。

研修といっても書籍やインターネットで情報を調べて
自分で考えてやっていく形式でそれには課題があります。

課題を解いていくのですがいざプログラムを
書こうとしたときにプログラムが頭に浮かびません。
書籍を読み、インターネットで色々情報を調べ
サンプルプログラムなんかもいくつか組んでみました。
人が完成させた課題のプログラムはある程度は
理解できるのですがやはり書けません...
真似したくないけど自分で書くとそうなってしまいます...

こんな人にいい処方箋はありますでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (5件)

3ヶ月に一日8時間と定まっているのならば、余計にいい条件です。



エンジニアとして生きていくには、技術力以上にタイムマネジメントの能力がもとめられます。

ですから自分の学習のスケジュールをたててみましょう。

・基本的な文法と構造の理解
・JAVA APIリファレンスの参照の仕方
・統合開発環境の使い方の熟知 ← これは軽視されがちですが、生産性をあげるためにも必須です。
・処理ロジックの引き出しを増やす

といったところが目標ですかね。

基本的な文法の理解に関してはWebを参照くらいでいいと思います。
ちなみにJavaの試験参考書はあんまり役にたちません。
コンパイルしたらコンパイラが教えてくれるような重箱の隅をつっつくようなことを隅々まで暗記してても実務では関係ありません。
極論すればコンピューターが教えてくれることはなんとなく知っていればいいだけです。
http://www.atmarkit.co.jp/channel/javaentry/java …

http://msugai.fc2web.com/java/
この辺を必要におうじて参照するだけで事足りるかと思います。

イディオム的なことは
逆引きシリーズがいいかと思います

「つまりファイルをコピーしたいときはこうする」
「ボタンを作りたいときはこうする」
といったような単位でサンプルプログラムを紹介してくれている本です

http://www.shuwasystem.co.jp/cgi-bin/detail.cgi? …

http://www.shuwasystem.co.jp/cgi-bin/detail.cgi? …

こういった処理単位でサンプルプログラムを書いてくれているリファレンス集のサンプルを、
使われているAPIをAPIリファレンスで参照しながら自分で打ち込んで、動作確認して、
こういう感じのことをしたいときはこういう感じに書けばいいんだなと覚えていきます。
余力があれば改造をして自分専用のライブラリをつくっていきましょう。

上記2冊を覚えると1000近い処理ロジックを身につけることができます。
これだけ理解していて、APIリファレンスの引き方を習熟すればビジネスロジックを実装するのにはほとんど困りません。
やってるうちに基本文法は頭ではなく手がおぼえてくれます。

最初の一年目はビジネスロジックを仕様書に沿って書いていくコーダーとの仕事とテストの仕事になると思いますので、
中途半端にならないように、最初から設計の分野までは考えないほうがいいです。

自作ライブラリを作っているうちに

効率が悪いな・・・こうやったら効率よくなるかな??

っとプログラムの見栄えや構造に試行錯誤するようになったころが設計分野に食指をのばすころかと思います。
そういったころに
http://www.amazon.co.jp/exec/obidos/ASIN/4797316 …
といったようなところを学習しだすと試行錯誤していたことの解答を得られて、
すっと身に着けることができます。
最初からこういった類の本をよんでも、なんでこういったことをするのか意味がわからないと思います。
オブジェクト指向の概念にしても、ある弱点を補うために考案されたものなのですが、
その弱点を体感してからでないと、そういった概念の意味を本当の意味で理解できないと思います。

好みはわかれますが翔泳社の10日で覚えるシリーズも日割りで章立てされているので学習計画が立てやすいので、余力があるなら一度本屋でみてみるのもいいかもしれません。
    • good
    • 0
この回答へのお礼

早速、書籍を購入して打ち込んでます。
細かい回答ありがとうございます。
大変参考になりました。

お礼日時:2005/01/31 18:07

一週間でしたらそれで十分ですよ。



とりあえず3ヶ月ほどは、短いサンプルプログラムを打ち込みまくって引き出しを増やすことに集中しましょう。
一日100行程度のサンプルプログラムを1個以上打ち込んで覚えるといった感じで。。。

日本語を上手になろうとおもったら、アタマの中にいろんな引き出しがないとうまく喋れないのと同じですね^^;

で、真っ白な状態からプログラムを書くときのアドバイスとしては、
プログラムでなにがしたいのかということを、処理の時系列順に日本語で書いていくことをオススメします。
基準としては他人にみせて、どういったものを作ろうとしてるのか伝えられる内容でしたら十分すぎるでしょう。
それをみながらJava語に翻訳していくわけです。

で、ながーいmainルーチン書いてると、そのうち分割したくなって関数を作りたくなってきます(タブン。
関数への分割作業をしていると処理の粒度を細かくしていく感覚が見についていきます。
そうしているうちに、オブジェクト指向といった意味不明なものの必要性も理解できるようになってくるでしょう。

実地訓練すっとばして本格的な設計を勉強しても、必然性が理解できないため、すぐに忘れてしまうと思うので、しっかりと引き出しを増やしていきましょう。
    • good
    • 0
この回答へのお礼

>一週間でしたらそれで十分ですよ。
この言葉にホッとしました。

勉強する時間は1日8時間以上あるので
じっくり考えてやることにします。
ちなみにサンプルプログラムはどういった
感じのものがよいのでしょうか?
自分が持っている書籍だと100行もある
サンプルがないので。。。
サンプルを打ち込むときはそのプログラムを
なんとなく理解しながらでよいのでしょうか?
あと、こんな人にお勧めな書籍ってありますか?

ちなみに研修期間は3ヶ月間でJSPやサーブレットまで
理解しなければなりません。

お礼日時:2005/01/27 23:53

>コマンドライン引数、if文、for文、変数、配列


>を利用してならなんとか書けますが、インスタンスを
>生成してそれを利用してとか前に作ったクラスを
>継承して・・・となると書けなくなってしまう
>のですよ。

Javaでプログラムを組む場合、サンプルプログラムの
ような簡単なものであればJavaの文法を習得する程度で
組めてしまうかもしれませんが、少々複雑なものになって
くると(もしくは規模が大きいもの)、きちんと"設計"と
いう工程を踏まなければ作成することは難しくなります。
まずは、プログラム設計を勉強をされることをお勧め
します。Javaでプログラムを組むのであれば、「オブジェ
クト思考設計」、「デザインパターン」などをキーワード
としてお調べになると良いでしょう。
    • good
    • 0

JAVAのおおまかな形は



class A {
フィールド;

    コンストラクタ(){
}
    メソッド(){
}
}
class Sample
{
public static void main(String args[])
{
A a=new A();
a.メソッド();
}
}
この形が理解できていれば 簡単なプログラムは大丈夫ですよね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

コマンドライン引数、if文、for文、変数、配列
を利用してならなんとか書けますが、インスタンスを
生成してそれを利用してとか前に作ったクラスを
継承して・・・となると書けなくなってしまう
のですよ。

ちなみに研修始めて約1週間たちました。やる気は
あるけど頭がついていかないって感じですね。

お礼日時:2005/01/26 21:40

JAVAは使ったことないのでJAVAに通用するかは謎ですが、私の場合は、とことん人が作ったソースを改造して、改造した結果どうなったかを見て勉強していきます。


そして次にその結果を自分が思ったように出力させられるように勉強します。
それを繰り返すとすぐに覚えれます
(この回答はアドバイス程度でお願いします)
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q1~100までの数字を表示し、かつその中から2の倍数を表示する

一つ前の質問で、for文を使って1~100までの数字を表示できるようになったのですが、タイトルのとおり、さらに条件を加えるにはどうしたら良いでしょうか、教えてください。

Aベストアンサー

おはようございます。
i%2の結果をご存知のようですので、
これを使えばよいかと思います。

i%2は2で割ったあまりを出力しますので、
0になれば2の倍数であるといえます。

制御文の中で条件分岐をすれば問題ありません。

if文はご存知でしょうか。
(javaでは「==」である点に注意してください。)

// 1から100まで。
for (int i = 1; i <= 100; i++) {
// 偶数であれば出力します。
if (i % 2 == 0) {
System.out.println(i);
}
}

参考URL:http://www.javaroad.jp/java_control2.htm

QDAOクラスの使い方

ある書籍を参考に勉強しております。以下のDAOクラスのデータ追加に関して使い方がわかりません。
サーブレット、もしくはJSPにどのように書けば、DBにデータを追加できるようになるのでしょうか?
宜しく御願い致します。

package chap11_database.sec03;

import java.sql.*;
import java.util.ArrayList;

public class EmployeeDAO {
//データベースとの接続に必要な情報を保持するフィールド変数
private final static String DRIVER_URL ="jdbc:mysql://192.168.2.200:3306/satoh" + "?useUnicode=true&characterEncoding=utf8";
private final static String DRIVER_NAME = "com.mysql.jdbc.Driver";
private final static String USER_NAME = "root";
private final static String PASSWORD = "1qaz!QAZ";

//接続メソッド
protected Connection createConnection(){
try{
Class.forName(DRIVER_NAME);
Connection con = DriverManager.getConnection(DRIVER_URL, USER_NAME, PASSWORD);
return con;
}
catch(Exception e){
e.printStackTrace();
}
return null;//例外が発生した場合はnullを返す。
}

//切断メソッド
protected void closeConnection(Connection con){
try{
con.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
public ArrayList<Employee> findAll(){
//社員一覧を保持するリスト
ArrayList<Employee> list = new ArrayList<Employee>();

Connection con = null;
try{
//データベースに接続
con = createConnection();

//データベースにSQL文を送信
String sql = "select * from employee";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String address = rs.getString("address");
int tel = rs.getInt("tel");
Date birthday = rs.getDate("birthday");
Employee employee = new Employee(id, name, address, tel, birthday);
//TO(Employeeオブジェクト)を、社員一覧を保持するリス手に追加
list.add(employee);
}
//社員一覧を返す。
return list;

}catch(Exception e){
e.printStackTrace();
return null;
}finally{
//データベースからの切断
closeConnection(con);
}
}

//社員登録メソッド
public void create(Employee emp){
Connection con = null;
try{
//データベースに接続
con = createConnection();

//データベースにSQL文を送信
String sql = "insert into employee values(?, ?, ?, ? ,?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1, emp.getId());
stmt.setString(2, emp.getName());
stmt.setString(3, emp.getAddress());
stmt.setInt(4, emp.getTel());
stmt.setDate(5, emp.getBirthday());
stmt.executeUpdate();

}catch(Exception e){
e.printStackTrace();
}finally{
//データベースからの切断
closeConnection(con);
}
}
}

ある書籍を参考に勉強しております。以下のDAOクラスのデータ追加に関して使い方がわかりません。
サーブレット、もしくはJSPにどのように書けば、DBにデータを追加できるようになるのでしょうか?
宜しく御願い致します。

package chap11_database.sec03;

import java.sql.*;
import java.util.ArrayList;

public class EmployeeDAO {
//データベースとの接続に必要な情報を保持するフィールド変数
private final static String DRIVER_URL ="jdbc:mysql://192.168.2.200:3306/satoh" + "?useUnico...続きを読む

Aベストアンサー

こんばんわ、データの追加に関しての質問に絞っているので一覧表示はできたのでしょうか?

基本的に「public void create(Employee emp)」のメソッドがデータの追加のメソッドになりますので、データを持ったEmployee型のインスタンスを渡すだけでデータの追加になるはずです。

Employee emp = new Emplpyee();
emp.setId("1");
emp.setName("aa");
emp.setAddress("aa");
emp.setTel("090");
emp.setBirthday("00");

EmployeeDAO dao = new EmployeeDAO();
dao.create(emp);

こんな感じで大丈夫なはずです。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

Qプログラムが苦手なのに、仕事してます。

プログラムが苦手なのに、仕事してます。

得意な方は、どのように勉強なさったのか、
ご教授願えないでしょうか。

文系大学卒業後に、IT企業に入社したのですが、
プログラムが苦手で困っております。

仕事は、他人のソースを読んで参考にしながら書いているのですが、
根本的な理解をしていないので、常に不安です。

言語仕様すら理解できていない私は、
仕事を辞めた方がいいとも思えてきてます。

どうぞ、よろしくお願いいたします。

Aベストアンサー

以前採用担当をしていました。

プログラミングの仕事は、ハッキリ言って「出来ない人はどうやっても出来ない」です。作曲とか語学と一緒で、ある程度素質が必要なんですね。ただ、IT系の企業で一番必要な人材は「プログラムの世界が分かって、顧客との折衝が出来る人」で「プログラミング能力が高い人」じゃないんです。

要は「この手のシステムを作るときに、大体こういうやり方でこの程度の労力が必要だ」と体感的に「当たり」を付けることが出来るかどうかです。プログラムをやっていれば「難しい所」はすぐに分かると思いますので、折衝をするときに譲れない部分と譲れる部分がすぐ分かるはず。実際「ロジックが難しい」よりも「出力画面が複雑」な方がよっぽど手間が掛る、なんてことはプログラムをやっていれば体感的にすぐわかるでしょ?

ですので、今は作業が遅くても、バグを山ほど出しても、そのうちにシステム設計や顧客対応などの上流工程に配属になった時に役立ちますので、気にせずゆっくりバグを出しまくって下さい。人事側も「プログラミングの即戦力」として採用した人間以外には、その手の高度な能力は期待してませんから安心して下さい。

以前採用担当をしていました。

プログラミングの仕事は、ハッキリ言って「出来ない人はどうやっても出来ない」です。作曲とか語学と一緒で、ある程度素質が必要なんですね。ただ、IT系の企業で一番必要な人材は「プログラムの世界が分かって、顧客との折衝が出来る人」で「プログラミング能力が高い人」じゃないんです。

要は「この手のシステムを作るときに、大体こういうやり方でこの程度の労力が必要だ」と体感的に「当たり」を付けることが出来るかどうかです。プログラムをやっていれば「難しい所」はすぐ...続きを読む

QJava 他クラスの呼び出しが上手くいきません。

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
import com.nttdocomo.ui.*;

public class Test01 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p1 = new Panel();
p1.setTitle("p1");
Label lbl1=new Label("p1に居ます。");
p1.add(lbl1);
Button btn1=new Button("next");
p1.add(btn1);
p1.setComponentListener(this);
Display.setCurrent(p1);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
Test02 test02 =new Test02(); //ここでエラーが発生します。
Display.setCurrent(test02);
lbl1.setText("p2に遷移");
}
}
}

}

============
Test02.java
============
import com.nttdocomo.ui.*;

public class Test02 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p2 = new Panel();
p2.setTitle("p2");
Label lbl1=new Label("p2に居ます。");
p2.add(lbl1);
Button btn1=new Button("next");
p2.add(btn1);
p2.setComponentListener(this);
Display.setCurrent(p2);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
lbl1.setText("p1に遷移"); //コンパイルエラーは生じませんが、ラベル表示の切り替えができません。
}
}
}

}

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
impo...続きを読む

Aベストアンサー

「シンボルを見つけられません。」でコンパイルできないのは、
Test01クラスからTest02クラスを見つけられないことが原因かと思われます。

No.1様は
==
Test01とTest02は同じパッケージですか?
違うのであればTest01にimport xxxx.Test02;を記述する必要がある
==
とおっしゃってるように思います。


原因がご理解できないようでしたら
まずはJavaの勉強をしたほうがよろしいかと思います。


人気Q&Aランキング