未経験プログラマー物語【第二章 研修編⑦】何に使うかイメージがわかない

研修も1カ月半が過ぎいよいよ折り返し地点。javaの勉強も基礎的なものを学んだ。

そんな時、堂木さんと飲みに行くことになった。

堂木「最近研修はどうさ?」

半灰「うーん変数とか分岐(if)とかループ(繰り返し)を勉強して使えるようになってきたとは思うけど、じゃあ仕事でプログラミングをしてと言われた時にどうやって使うかイメージがよくできていなくて…。」

堂木「まぁ確かに。ループの処理を書いても1から10までコンソールに表示するだけで実際にどう使うのかいまいちよくわからないよね。自分も最初はそうだったなぁ…。」

解説


javaを学びましょうとなった時に最初の段階でif(分岐)、for(繰り返し)など基本的な文法が登場します。if文だと例えば入力値が1だったらこういう処理、2だったらこういう処理という判断をするものです。

私も初めてプログラミングを学んだ時にこれがどうやって実際のシステムに組み込まれて動くのかイメージができませんでした。自分で作ったプログラムをeclipseから実行し、コンソールに1と入力すると”1が入力されました”という文字がコンソールに表示される….。で?という感じでした。

ただ今はイメージできなくてもいずれできてくるはずなので今はあまり深く考え過ぎず、文法を学ぶことに集中してほしいと思います。実際に開発に関わってみるとわかるからです。

そんなこと言っても気になって勉強が進まない…という方のためにひとつ分岐の例を考えてみました。

例えばホームページを作るとして、googleのトップページのように日にちによってアイコンデザインを変えたいとします。例えば5/5になったらこどもの日のデザインにするような感じです。この時の日付の判定にif文が使われます。

この場合に判定される「日付」は当然入力値ではなく時間がたてば訪れます。日付は大抵システム内で現在日時を保持しているのでここは深く考えず今日が何年何月何日か把握しているとします。

そしたらその「現在日付」を変数に入れ、その日が5/5かどうかif文で判定するという感じです。

じゃあ5/5だったらどこからそのデザインを持ってくるの?という疑問もあると思いますが、例えばデータベースに保持しておくとか、画像としてどこかのフォルダに配置しておいて、そのパスを指定して持ってくるとか色々考えられます。

プログラムというものはかなり自由が利くため、実現方法がたくさんあるのが普通です。それが逆に具体例のイメージがわかない一因かもしれないですね。


半灰「わかりました。とりあえず今はイメージが付いていないですが、まずは目の前の課題をしっかり自分のものにすることに集中しますね。」

堂木「それがいいかもね。確かにどう使うかイメージをつけるのも大切だけど、そこでつまずいていて先に進めないくらいならとりあえず進んでみるのも手だと思うよ。プログラミングは難しいからこの先色々つまづくと思うけど、その都度止まっていては学習が進まなくなってしまう。それよりはとりあえず進むことで後になってわかることもあるからね。」

半灰「そうですね!じゃあガンガン進んで堂木さんを抜きますよ!」

堂木(もちろん全く理解しないでどんどん進むのも怖いけどね…)

つづく

スポンサーリンク

知識は狭く深く?広く浅く?

現在の仕事では色々なプロジェクトをあっちへこっちへせわしなく動いています。一人で設計から開発を任されることもあったり、スポットで一画面作ってまた次のプロジェクトへという感じです。期間も2週間~2カ月で転々としています。

今週はVBでツールを作ったと思ったら次の週にはC#で改修をして、また次の週は1カ月くらいPHPで腰を据えて(?)開発…。そういう感じで1年ほど働いているのでとりあえず浅くても広い知識をつけて「この言語できる?」と言われても大丈夫と言えるようにしようと思っていました。でも最近その考えが変わりました。

きっかけはとある大きなプロジェクト


ちょっと炎上しているということで7~8人くらいのプロジェクトにアサインされることになりました。言語はC#。1カ月くらいつかったことがある言語です。

Gitで管理されており、担当機能を実装したらマージリクエストをして、レビュアーがOKを出せばマージされる流れですが、レビュアーにけちょんけちょんにされました。

「2重ループしているところはLinqでもっと簡潔に」「画面側なのにこの機能がModel側に書いてあるのはおかしい」「マウスオーバーすればメソッドのコメントが出るからコメントは書くな。今後改修時にコメントなんて直さないから」などなど。今までは「まぁ時間がないしこれでいっか」という感じで通っていたレビューも徹底して突き返されます。自分としてはとても勉強になるのですが、いかんせんC#の知識がほぼない中で指摘されるので修正にも時間がかかってしまいます。そこで思いました。「自分は全然勉強不足じゃん」と…。

C#の知識もそうだけど…


動くものを作れと言われたら普通に作れています。ただそこからさらに進み、力業ではないスマートな書き方が出来ていません。C#独自の書き方をすることで解決されることもあるため、そこは勉強するしかないのですがそもそもオブジェクト指向の知識が不足しているように感じています。

基礎の部分がまだまだ未熟なため事態をさらに悪化させているように感じております。さらに今実装しようとしている機能がなかなかややこしいので思うように進まず焦っています。

そして久しぶりに気持ちが沈む


そういうわけでここ数日は気持ちが沈んでいます。まぁ長くても来月いっぱいのプロジェクトなのでそれまでやりきるしかないのですが、GW辺りは途中まで読んでいる「リファクタリング」本とかオブジェクト指向系の勉強をしないといけないと感じています(今はC#の本を読みつつ来月末に受験予定のLPIC102の勉強中)。

来月は新型のiMacを購入予定なのでそれをモチベーションに頑張ろうと思います。

 

スポンサーリンク

未経験プログラマー物語【第二章 研修編⑦】統合開発環境を使う

.javaファイルをコンパイルして.classファイルにして実行。そんな作業にもなれてきたころeclipseを使う課題が出てきた。

「eclipseって統合開発環境ってやつか。今まではメモ帳に書いて自分でコンパイルしていたけど、eclipseを使うとそういうことも自動でやってくれるのか。これは便利そうだ。」

早速eclipseを入れてみよう。

3時間後…

うー…ちゃんとインストールしたはずなのにeclipseが動いてくれない…。マニュアル通りにやっているのになんでだろう?

解説


統合開発環境はIDEとも呼ばれ、仕事で開発をするときはほぼ必須で使われるツールです。色々種類がありますが、中でもオープンソースの(=無料で使える)eclipseはjavaを使っている人は大抵使っているのではないでしょうか?

eclipseの特徴としては拡張性にあります。プラグインと呼ばれる機能を組み込むことで自分の好きなようにカスタマイズできます。

使ったことがない人に統合開発環境のメリットを説明するのは難しいですが、例えばコーディングの間違いを指摘してくれたり、ソースを色分けして見やすくしてくれたり、色々と自動化してくれたりで作業効率がとても上がります。

一方で環境構築が試練として立ちはだかります。ただインストールすればいいと思うかもしれませんが、インストールするにも自分のパソコンにあったバージョンを入れなければならなりません(つまり調べる必要があります)。そこからインストールしてパスを通して日本語化してプラグインを入れて..。と普通に半日くらいかかることもあります。慣れればすぐできるようになりますが諦めずに頑張ってみましょう。

また、好きな統合開発環境は何か?という議論はとても白熱することで有名です。


ようやくeclipseをインストールできた…。

さて前みたいにHello Worldを出してみるか….。お、いちいちコマンドプロンプトでコマンドを打たなくても実行ボタンを押せばすぐに動いた!これは便利だなぁ。インストールしたかいがあったよ…。

つづく

スポンサーリンク

未経験プログラマー物語【第二章 研修編⑥】javaを学ぶ

いよいよ本格的な研修が始まる。そう、javaを学ぶのだ。HTMLとかCSSでウェブページをいじり、簡単なjavascriptを使って動きをつけたりしていたけれどようやくといった感じだ。

まずはメモ帳に以下の文を書く。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello,World!");
    }
}

この課題はコピペではなく自分で入力してファイルを作らなければいけないので一文字一文字しっかりと見て入力する。ただ入力したつもりでも;が抜けていたり、かっこが全角になっていたり、大文字でかかなければいけないところを小文字で書いたりして苦労する。

そしてそれを『HelloWorld.java』というファイル名で保存する。これは実行するとHelloWorldという文字が表示されるプログラムらしい。とりあえず動かしてみようということで言われるがまま作業をする。

ファイルができたら『コンパイル』というものをするらしい。コンパイルとはざっくり言うとパソコンが認識できる言葉に翻訳する作業のようだ。さっきのHelloWorld.javaというファイルをコンパイルするとHelloWorld.classというファイルに変換される。これを実行することでようやくHello,World!という文字が表示されるようだ。

「なんだかいきなり難しくなったなぁ…。」

解説


いきなりそれらしくなってきましたね。実はこの物語では内容を省略している部分もあるので、色々疑問があったと思います。

特にコンパイルをするところですが『どうやってコンパイルするの?』『実行ってどうやるの?』という疑問があるかと思います。また、javaのファイルを作りましたが書かれている意味は?なんでコンパイルするとclassファイルになったの?というところが説明不足です。

これらの話をすると物語が進まなくなってしまうので詳しくは解説しません。調べてみると詳しい解説がたくさん出てくるので確認してみてください。

ただそれだとちょっと優しくないので少し説明をします。

今回の研修でコンパイルをするには『コマンドプロンプト』を使っています。よくプログラマーが扱っているイメージのある黒い画面ですね。そこで


javac HelloWorld.java

とコマンドを打つとコンパイルされます。同じ場所にHelloWorld.classというファイルが作成されたはずです。そしたら次に


java HelloWorld

と打ちます。あれ?HelloWorld.classじゃないの?と思った方は鋭いです。実行するときはクラス名を指定する決まりです。クラス名とはHelloWorld.classの中に書かれていた

public class HelloWorld

のHelloWorldの部分のことです。とりあえずjava クラス名と打ち込むことでプログラムが実行され、コマンドプロンプト上にHello,World!と表示されます。

詳しくはこちらなどを見ると理解が深まるかと思います。


「おぉ!」

思わず声が出てしまった。コマンドプロンプトにHello,World!の文字が表示されたのだ。

「あぁこれは面白いな…。めっちゃうれしい…。」

未経験でこの業界に入ったハジメにとっては初めて実行したプログラムだった。

これでようやくプログラマーになった気がした。

 

つづく

スポンサーリンク