プログラミングの知識を身に着けるまで(やや業務目線)
どうも、アロマリアです。
今日は「アロマリアのプログラムを理解していった遍歴」について
つらつら書いていこうかと思います。
この事はプログラミングに関わらず、
アロマリアの物事に対する理解をする上でのベースとなっております。
「何かのジャンルの知識を得たい!」
という場合の理解の参考になれば、と思います。
※あくまでも「知識を増やす」ことへのアプローチです、資格取得には使えません。
「遍歴なんて知りたくないから結論だけ知りたい」
方は最後の項だけ読み飛ばしてくれたらOKです。
概要
まず、アロマリアがプログラミングに初めて振れたのは大学生になってからです。
「工学部且つ情報寄りの専攻だった」
というイメージで大体OKです。
それまでの学習履歴は理系をメインとした知識がベースとなっております。
大学生~1度目の挫折
プログラミングは講義で初めて触れることとなりました。
自発的な学習と言うよりは「必修だから受けた」レベルに近いと思ってください。
この時の言語はC言語でした。
ここでアロマリアは一度目の挫折を味わうことになります。
時期的には大学1年の後期ですね。
挫折の原因は、ポインタです。
もうね、世界観が今までのルールと違いすぎて理解が追い付かない。
なんでそれが必要なのかも分からない。
何に使うの?何に影響するの?アドレス表記じゃダメなの?
また当時は勉強よりもモラトリアムを堪能することを重視していたこともあって、
「理解するまで学ぶ」という感覚も、その必要性もありませんでした。
※ブログ読者の方に学生がいるかは分かりませんが
「理解するまで学ぶ」というのは、学生よりもむしろ仕事をするようになってから
必要になってきます。お金や成果必達に絡んでくる部分だから、ですかね。
まあそういうシガラミが嫌だからセミリタイアを望むようになったというのもありますが…
この挫折はその後、大学4年になり、研究室に入り、卒業研究にて測定のためにプログラミングを求められる段階まで引きずることになります。
え、その間の講義での単位取得(テスト&レポート)はどうやったんだって?
- その場限りの暗記
- テストで点数がとれる程度の浅い理解を何とか脳に入れる
- 学部の講義メンバとの協力
辺りですかね…。おかげで無事留年もなく現役で進めました。
ただ、ここで転機が訪れます。
卒業研究で用意する計算プログラムについては
ポインタ使わず、グローバル変数ごり押しでOK(実装可能)
だったことです。
要するに制約が少なく、自由にプログラミングを試行する余地があった。
これが本当にプログラミングへの敷居の高さをグンと下げた。
その中で、引数や戻り値の仕組みや、処理の書き方をゆっくり覚えていくことができました。
これがなかったら、アロマリアはIT企業には就職しませんでしたね、間違いなく。
ああ、ちなみに研究室時代に使ってた言語はC++です。
とはいえ、使っている要素はほぼC言語のものだったので、実質C言語でしたね。
動機は、ただのファッションです。何かカッコよかったから、いやマジでこれ。
大学院生~就職まで
さて、アロマリアは学部生の頃の研究室でそのまま大学院へ進みました。
研究テーマも類似ジャンルのまま。
よってプログラミングの内容も変わらずでした。
この過程で、初めて配列の動的確保というものに興味がわく。
ついにポインタと再び向き合うことになります。
当時よりもプログラミングに対する苦手意識は消えており、ここでついに学部生時代から続いていたポインタを"若干"克服しました。
とはいえ理解したのは
「ポインタ変数を使うことで、配列を動的確保できる」
程度のものでしたけどね。
それでもポインタをコード上に現れただけで「ウ゛ェ゛ッッ」ってなってた頃に比べれば大きな進歩です。
合わせてメモリ確保とメモリ解放のイメージも理解し始める。
当時はメモリリークしまくりましたからね、やはり実践の失敗から学ぶことは多い。
思えばトライ&エラーの重要性もこの中で学んだ気がします。
そしてその時に身に着けたスキルを基準に就活を始めたことで、IT企業への就職の道が開かれたというわけです。
社会人1年目~4年目辺りまで(2度目の挫折)
さて、アロマリアは無事IT企業の正社員となりました。
もうここからは仕様を実現する上での知識の穴がほとんど許されない段階になります
(実装不可能なら不可能なりの根拠も必要になるため)。
JAVAでの新人研修もありましたが、まあ顧客に納品するわけでもないので、ここは問題はなかったですね。理解があいまいな部分も多々ありました。
特にWeb通信部分・・・現代においては肝な部分ですね。
そのまま業務へ。とはいえ立場としてはSEなので、プログラミングはメインと言うわけではなかったため、システムの仕様理解や各種整理などの割合も多かったですね。
あとはサーバとかの設定やらテスト技法など。。
ガチガチに作ったのは2年目の後半になってから、でしょうか。
この時現場が一度変わったため、その影響ですね。
4年目までには
ぐらいはやりましたね。だいぶ朧気ですが。
と言ってもどちらかというとこの時に学んだのはサーバ周りのアプリとか
アプリ間、ネットワーク間の通信とか、そういう部分の割合が大きかった気がします。
で、まあ業務に押しつぶされそうになりながら何とかやっておりましたが、
遂に心が潰れてしまう。これが2度目の挫折ですね。
このときに鬱を発症しました。
トリガーになったのは「理解できない」ことよりも
- 理解&活用するまでの要求時間が短すぎる
- 理解&活用できることが当然という空気感
- 自分の技術力の上位互換のような人が身近にいる(日々楽しそうにしている)ことで、日常苦しんで何とかこなしている自分の存在意義&生きる意味を見失った
こういった部分が大きかった気がします。
上司とも相談し、ある程度業務量を調整しつつ業務を続けていくことに。
とはいえ、元々労働嫌悪があることで治ることはないだろうとは当初から思っていました。
社会人5年目~7年目辺りまで
業務量を減らしてもらえたことで、今まで学んだこと&現状手がけているシステムの環境や関係図を自分の中に描ける余裕が出てきたことで、
IT、プログラムと言うモノの世界観や処理の流れのようなものが少しずつ身に着いてきました。
アプリ、Web、サーバ、クライアント。この辺の関係がしっくり来たのもこの頃でした。
「まあ、大きく見ればどれも大体似たような流れだよな」
と言うのがこの時の解釈です。
そういえばPythonとかも触りましたね。
正直後半になると段々とどれも同じように見えるようになりました。
むしろ要求からそれを何が何でも形にすることの能力の方が重要かなと言う認識。
あ、ちなみにDBの概念や立ち位置、活用方法はこの頃理解しました。
おっそ!
社会人7年目~現在
この頃からはもう
「システムの全体図や要求仕様を如何に早く理解できるか」
「如何に可読性や再利用性の高い設計&コードにできるか」
「バグを減らすための書き方の追求」
というところに意識が向いており、言語云々とかからは脱している感じですね。
実際業務もそういうところが中心になっていた気がします。
ただ実際に手を動かして作る&テストするのには当然時間がかかるわけで、リソースはめっちゃ使いましたよ。
まあそんな中で心が限界を迎え、休職に至り、セミリタイアを知り、そちらにシフトしようと思ったわけですが…。
今後この辺りに触れることがあるのでしょうか。
それはセミリタイア次第と言うことで…。
まあモノを作ること自体は嫌いじゃないので(〆切や納期や品質分析は大嫌い)、
依頼次第では手を動かすこともあるかもしれない。
現状の学習への認識(何かを学ぶ際に重要な4点の考え方)
アロマリアが考える、何かを学ぶ際に重要な4点の考え方を以下に挙げます。
- それぞれの学習ジャンルには世界観、流れ(ルール)のようなものが往々にしてあり、いずれかのタイミングでそこに馴染むことが重要。馴染まないと、その場の理解だけで終わる。
- 世界観を理解するのには時間がかかり、且つ「完全に理解した」⇔「全然分からん」を繰り返すことになるので、腰を据えて挑む必要がある。
参考:ダニング=クルーガー効果
- 暗記を意識しないこと。暗記はすぐ抜ける上に、知った気になって理解から遠ざかる。重要なのは「流れ」を把握すること。その把握は脳に定着しやすく、応用も効きやすい。
例:世界史を覚えるときに年号を覚えるのではなく「何を原因として次に何が起きたか」を知ること。ただしセンター試験で点数を取る上では暗記は使える手法でした。もうセンター試験はありませんが。
※こういう観点もあって、アロマリアは「学ぶ」という観点において資格取得をそこまで重要視していない節があります。なぜなら一時記憶だけで取れる場合が多く(=暗記に傾倒しやすく)、その知識ジャンルを習得しているとは思えないから。使うべきときに引き出せない知識は絵に描いた餅でしかない。正直、暗記に注力した事柄が業務で使えたことはアロマリアの中ではないです。
- 一度で覚えようとしない、忘れることを許容すること。「一度で覚えようとする姿勢」は忘れることに対して自罰的な気持ちになりやすく、モチベーションを下げやすい。そして人間は元々忘れる生き物であるため、無茶な要求である。
また、プログラミングについては
「何の言語を使うかはそこまで重要じゃなくて、
・どういう流れでプログラムは処理されているかをコードレベルで把握する
・何を実現したいかのイメージを自分の中に持つこと
・どうコードに落とし込めば実現できるかをぼんやり自分の中で描く
の3点があれば応用が利く」
という認識です。なので、この認識をベースにいくつか言語をがっつりやれば、他のにも適用できるだろう、という感じ。
-------------------------------------------------------------
こんな感じですかね。
何か今までで一番長い記事になってしまった…。
↓クリックしてもらえると元気が出ます!!主にアロマリアの!!!