Nov19th

自学自習が出来るまでにやること

Top / 自学自習が出来るまでにやること

この章について

この章は、「これからプログラミングを始める人が自習をできる環境を整えること」を目的にしています。
今回の章を終えると「javaで競技プログラミング」がひとりで出来るようになります。

前置き

初心者が初級者になるまで

色々書く前にまず、書いてる人がどうやってプログラミング初心者から初級者へ脱皮したかを書いておきます。
ぼくは「”何かイケてるサービス的なやつ”を作れるようになりたいかもしれない」という壊れかけのコンパスを持って独学を始めました。

  • 具体的に作りたいものがなかった(というかどうしたら何が作れるのかわからなかった)ため、だらだらjavaやCの入門書を何冊か読む。(10ヶ月くらい)
  • 何かを実際に作らないと先がないと気づく。(愕然)
  • ウェブアプリが作れると噂のphpに手を出す。
  • 書き方こそ違えど、他の言語と文法はほとんど変わらないのでなんとなく理解。
  • livedoorのお天気APIを使ってドヤ顔でお天気情報を取得。「APIを叩く」という表現がマイブームに。
  • phpと相性がいいと噂のMysqlでデータベースの使い方もなんとなく理解。
  • 当時資格の勉強をしていたため、勉強時間と内容を記録できるブログを自作する。(制作期間2週間くらい。資格には落ちる)
  • Amazon,foursquare,facebook,等のAPIを”叩いて”些細なものを作りドヤ顔が最高潮に達する。
  • ドヤ顔に陰り。なぜなら書くスピードが全然上がらない。
  • 競技プログラミングを始める。とりあえず手を動かす時間を増やす。
  • 書くスピードが突然アップ。
  • なぜか全く書いたことのないRubyエンジニアのバイトに雇ってもらえる。でもすんなり慣れた。
  • ようやくレベルアップを実感。

という感じで初心者から初級者への脱皮を遂げました。
ちなみに初めてウェブアプリを自作してからエンジニアのバイトを始めるまで5ヶ月くらいでした。
後輩にはもっと効率よく学んで僕以上のドヤ顔を見せつけてほしいと思っています。また、身につけたものを更に後輩のドヤ顔に結びつけてほしい。でもってわいわい楽しくやりたい。こわーくはそんな思いのサークルです。蛇足でございました。

勉強の仕方

プログラミングの学習には大きく分けると

  1. 読む(テキストや他人の書いたコードを)
  2. 書く
  3. 作る(他の目標があるなら置き換えて下さい。)

という段階があると思ってます。(作るっていうのは常に同時並行で進めていてもいいものではありますが。)
経験上、これに伴って初心者がぶつかる壁は3つくらいあります。

  1. (読んでも)何言ってるかわからん壁
  2. (書きたいけど)考えたことをスムーズに書けん壁
  3. (何か作りたいけど)作り方がわからん壁

です。

僕の独学した時を例に振り返ると、
読む(時間かけすぎ)→作る(ウェブアプリを。書き方は分かったが思い通りに書く力が足りない)→書く(競技プログラミング)→作る(少し満足できるレベルに)
というフェーズで進んでいます。

学び始めた頃の”書く”選択肢がテキストや他人のコードの丸写ししかなかったことが大きな要因で、逆に言うと、競技プログラミングというゲーム性を持ちながら楽しく書く選択肢を持てるようになってからはここが一気に強化されました。

ここからが重要なわけですが
ですから初心者の皆さんは

  • プログラミングの概要(文法とか用語とか)をちょっとだけ覚える期
  • 手を動かして体で覚える期
  • 自分のやりたいことをがっつりやる期

というイメージを持ってプログラミングの習得にあたってみて下さい。
実際のところは常に知らないことを調べて読まないといけないし、やりたいことは同時並行して進めとくのがいいのですが、まぁイメージの問題です。

そして、現状こわーくというサークルが皆さんに用意できるのは

  • わからないことを聞ける環境
  • 競技プログラミング(書く作業)を一緒にやる環境
  • 作ったものを発表する機会や、チームを作って制作をする機会

です。
文法の勉強や制作はそれぞれが自律的に行わないことにはどうにもできません。。
ここだけは頑張ってみて下さい。

以上、冗長になりましたが、これはあくまで勉強法の1つです。
「SNSを作る!」「ギャルゲー作る!」とか明確な目標がある場合は、他のことよりも作りたいものをどんどん調べながら進めていくのがよいと思われます。

困った時のTIPS

読む編

文法の勉強には何がいいですか?
簡単で薄い本がいいです!こわーくの場合javaは他の人がたくさんやっているので、javaの入門書(javaの絵本とか)を図書館で借りて、手は動かさずにどんどん読み進めて概要を理解してみて下さい。if文、ループ文、変数、配列、論理演算子、オブジェクト指向(雰囲気だけ)という言葉が簡単に説明出来れば充分です。関数の名前などは瑣末な問題なので、丸暗記しようと思わないで大丈夫です。実際に書くときには、リファレンスというプログラミング言語の辞書を参照すればよいので。。
わからない言葉ばかりなのですが(´・ω・`)
頑張ってググって下さい!ぐぐると更に知らない言葉で説明されてたりしますが、ここで心を折らずに頑張れるかにかかってます!
書けるようになる気がしません!不安です!
とりあえず最初は概念を理解しましょう。書かないうちは書けるようにならないので大丈夫です。

書く編

書くってどうしたらいいの?
このあとの項で説明がありますが、AOJというサイトに頭の体操のような練習問題と解答がたくさんあるので、それをやってみましょう。基本はjavaで。何か作りたいものが決まっている人はネット上やテキストのサンプルを丸写しするところから入ってもいいかもしれません。
エラーがいっぱい出ます(`;ω;´)
エラーの時に出たメッセージでぐぐってみてください。大概のものはネットに解決法が載っています。
何でプログラミングしたらいいですか?
javaの開発であればNetbeansやEclipseというIDE(統合開発環境)が非常に便利です。なれないうちはIDEを使うといいでしょう。自分で自分のコードのわるいところがわかるようになれば普通のメモ帳でも全然OKです。慣れてる人はコマンドライン(windowsだとコマンドプロンプト、macだとターミナル)上で動作するvimやemacsを使うことが多いかもしれません。

作る編

ウェブサイト作りたい!
html,css,javascript,php,Mysqlを学ぶとよいでしょう。
iPhoneアプリ作りたい!
Objective-Cを学ぶとよいでしょう。ちなみにMACのPCでしか開発ができません。
Androidアプリ作りたい!
javaを学ぶとよいでしょう。
ゲーム作りたい!
( ^ω^)…ちょっと待っててお

プログラミング超概論

プログラミングとは「人間に分かる言葉で機械に命令をすること」です。
一般的には以下のような流れで機械への命令は行われます。

プログラミング言語(java,C言語,etc.)で人間が機械にやって欲しいことを書く(プログラムを書く)

プログラミング言語を翻訳する(コンパイルする)

機械が翻訳されたものを読み込んで、命令された通りに動く

本編

用意するもの

  • Netbeans+JDK(javaのプログラミングに必要です。WindowsX64版かMacOSX64版をダウンロードして画面の説明どおりに進めて下さい。)
  • メモ帳(Windows)かテキストエディット(Mac)。最初からPCに入ってます。
  • コマンドプロンプト(WIndowsの場合)orターミナル(Macの場合)。最初からPCに入ってます。
  • AOJへの登録(右上にregisterというボタンがあります。)

参考:
スクリーンショット 13:05:18 14:27-3.png
スクリーンショット 13:05:18 14:30.png

手順1プログラムを書く(コピペする)

以上ダウンロードと登録が終わったらメモ帳かテキストエディットを開く。
以下をコピペして、Main.javaというファイル名で適当なところに保存する。

以上
保存された拡張子が.javaになっていることを確認して下さい。Main.java.txt等となっていることがあります。
このコードはHello Worldと表示をするだけのプログラムです。

手順2プログラムを翻訳させる(コンパイルする)

コマンドプロンプトかターミナルを開いて、さっき保存したファイルをコンパイルしたいとおもいます。
コマンドプロンプトで表示された画面でjavacと打ってEnterを押してみて下さい。
bash command not foundみたいに表示された場合はJDKのインストールが終わっていないので終了しているか確認して下さい。
バーっっと色々出てきた場合はきちんとインストールが終わっています。
javacというのはjavaで書かれたファイルをコンパイルするコマンドです。とりあえず深く考えずにjavac コンパイルとだけ覚えといて下さい。
そんで実際に作ったファイルをコンパイルします。
これとかこれとかを参考にやってみてください。
キーワードだけ書いておくと、

  • cdというコマンドで作ったファイルのある階層に移動
  • javac Main.java
    と打つ感じです。

手順3実行する

あとは簡単で、コマンドプロンプトのjavacをした同じ画面で
java Main
と打つだけです。.javaがついていないことに注意して下さい。
きっと自分の作ったプログラムの通りにパソコンが動いたはずです。

手順4AOJに提出する

先ほど登録してもらったAOJというのはプログラミングの練習問題とその解答がたくさん載っているサイトです。
AOJの上部のproblemというタブのvolume100をクリックすると、表示された問題の一番上に10000:Hello Worldというのがあると思います。
これはHello Worldと出力するプログラムを書きなさいという問題です。
ここに先ほど書いたコードを提出してみましょう。

スクリーンショット 13:05:18 15:18.png

スクリーンショット 13:05:18 15:22.png

スクリーンショット 13:05:18 15:22-2.png

スクリーンショット 13:05:18 15:24.png

出したコードが正解だと
スクリーンショット 13:05:18 15:26.png
こんな風にacceptedと表示されます。
ちょっと嬉しいですよね。

手順5自力で一問解いてみる

では、同様にAOJvolume100の2問目Xcubicを解いてみましょう。
と言っても、これもコピペで大丈夫です^^
問題文を呼んだら、↓の虫眼鏡マークから他の人の正解を見てみましょう。
スクリーンショット 13:05:18 15:35.png
スクリーンショット 13:05:18 15:39.png
ふむふむ、と思ったらコピペさせてもらいましょう。メモ帳のさっきのファイルを書き換えればOKです。
そしたら、あとはさっきのように提出をするだけ。
提出する前にはコマンドプロンプトからコンパイルをして自分のパソコンで動作を確認してから提出するといいです。

以上の手順をループすればテキストの丸写しではなく、自分の頭を使ってコードを”書く”という作業が出来ます。
わかりにくい点に関しては先輩部員に聞いてみて下さい :)

手順6Netbeansで開発してみる

メモ帳を開いて、コマンドラインでコンパイルして。。。ってちょっとめんどくさいですよね。
特にコマンドラインは最初のうちは使い慣れないと思います。
なので、さっきダウンロードしたNetbeansでもっと簡単に開発をしたいと思います。
まずはNetbeansを立ち上げます。ちょい時間かかります。
チュートリアルが最初は表示されると思いますが、消しちゃって大丈夫です。
まずはプロジェクトの作成を押します。
スクリーンショット 13:05:18 20:59.png
javaのクラスライブラリを選んで次へを押します。
スクリーンショット 13:05:18 21:01.png
名前はそのままで大丈夫です。完了を押します。
スクリーンショット 13:05:18 21:02.png
続いてファイルを作成します。
スクリーンショット 13:05:18 21:03.png
javaクラスを選択しましょう。
スクリーンショット 13:05:18 21:04.png
名前はその都度書くプログラムにふさわしい名前をつけてあげて下さい。
スクリーンショット 13:05:18 21:05.png
さっきと同じように、プログラムを書きます。コメント部分は無視しましょう。
スクリーンショット 13:05:18 21:07.png
Netbeansの恩恵その1=エラーがすぐわかります。
スクリーンショット 13:05:18 21:08.png
Netbeansの恩恵その2=書いたその場で実行できます。(コンパイルを意識する必要がありません。)
スクリーンショット 13:05:18 21:10.png
結果はこんな感じで見れます。
スクリーンショット 13:05:18 21:12.png

以上手順の肝

  • 自分の書いたファイルは.javaという名前で保存をする。
  • javac コマンドでコンパイルをして、javaコマンドで実行をする。
  • AOJに提出してみる。わからなかったら他の人の答えを見る。

また、明記してませんでしたが、

  • ファイル名である「~.java」の~の部分とファイルの中身のpublic class ~{}の~は同じ名前にしないといけません。
  • 基本的にファイル名は好きな名前にしていいですが、AOJに提出するときはpublic class Main{}に書き換えないといけません。

以上の点は気をつけて下さい。
まだ文法を学んでない状態の人はなんのこっちゃという感じでしょうが、とりあえず独学で”書く”作業の流れはこんな感じです。
参考にしてみてください。