はてなキーワード: printfとは
変数はメモリ上の番地に付ける名前だから、&masudaを呼べば処理系がmasudaに付けたアドレスにあるバイトから次のNULLまでのデータが返るし、*masudaに書けば先頭が前後にズレるし、*masudaをmain()のエントリポイントに書き換えてprintf(masuda)すれば例外が飛ぶだろ
unsigned int ptr = 0xMSDA;
printf(f);
→ MSDA
unsigned int *ptr = 0xMSDA;
printf(f);
→ Segmentation Fault
unsigned int *ptr = 0xMSDA;
printf(&f);
→ Segmentation Fault
暇だからゲーム専門学校時代を振り返る - 昆布がないと開発できない。 http://donnpema6.hatenablog.com/entry/2019/10/23/004918
HAL東京は私の母校でもある。読んでいてとても懐かしくなった。
この記事を書かれた方と同じように自分も卒業して思う事や学生時代を振り返ってみたくなったので書く。駄文ですが入学検討している高校生、在学中の方にこれからの参考になればと思う。
まずは私の情報について。
・現在は大手ITにてモバイルゲームエンジニア(Unityメイン)
まず私はゲーム業界志望で入学してゲーム業界に就職したパターンの人間である。
HAL東京でゲーム学科なんだからゲーム業界に行くのは当然ではと思われる方もいるかもしれないが残念ながら半数近く、またはそれ以上の人数がゲーム以外の業界に行く。
1年目
・冒頭で紹介した記事にもあった通り、HAL東京では前期・後期に別れて授業を行う。1年目は基礎を学ぶ。
・この基礎だが、プログラミング以外にもデザイン、コンピュータサイエンスなども行う。これは1年目の後期に改めて学科の選択の機会があるからだ。実際にプログラミングやってみて自分に合ってないと考えた人はデザインの学科にも行けるというわけだ(最も、最初の希望とは違う学科に入ってちゃんとその業界に就職した人を私は知らない)
・プログラミングの授業ではC言語を学ぶ。私は高校時代プログラミングなんて一切やっていなかったので初めて触れたのがCだった。printfでHelloWorldしたりscanfでメモリ領域ぶっ壊したりしつつもプログラミングの基礎を学ぶ。 IDEはVisualStudioだった。
・コンピュータサイエンス系の授業では、基本情報技術者試験の合格を目指し皆勉強する。HAL東京では基本情報技術者試験を取得していない場合、この授業が卒業まで続く。就職において資格を見る会社も一定数いるのでこのカリキュラムは良いと思う。取得している場合はAndroid開発やコンシューマゲーム機での開発授業などが選択できるようになっている。私は初の試験で無事合格したが卒業時でも取れてない人は一定数いた。馬鹿なんじゃないのか。
・1年目の後期からは学科に別れた授業+コンピュータサイエンス系の授業といった感じで進む。
・C言語のコンソールに文字を表示させてゲームを作るというのを1年目はやる。独自のライブラリが渡される。
・文字だけで表現するのにこの時点で出来るやつと出来ない奴がはっきりとわかる。 優秀な人間は自分でバックバッファの概念を構築したり、滑らかなアニメーションなどを実装している。凄い。当然彼らは誰もが知っているような大手ゲーム会社に今はいるはずだ。
・1年目の最後、学内での制作物の展示イベントがある。そこで作ったゲームを展示するのだ。ここで出来ていない人はおそらく翌年には退学している。私は完成はしたものの拙い出来だった。反面、負けてられないなとは思った。
2年目
・2年目からはDirectXを使用した本格的なゲーム開発の授業がスタートする。またそれと並行してコンシューマゲーム開発の授業が始まる。私の世代ではNintendoWiiだった。
・C言語の授業もC++の授業になり、クラス化などについて学ぶ。
・コンシューマ開発の授業は基本的に情報がない中やる。渡されるのはWiiの関数リファレンスの本だけ。あとは授業で教官から教えられつつ実装していく。
・DirectXでは9を使用していた。Xライブラリのようなものは一切使わず、直でDirectXを触る。描画の仕組みなども学べるのでこの授業はとてもよかった。確か前期は2Dゲーム、後期は3Dゲームだった気がする。それぞれ個人開発で1本づつ作る。私はこの時に作った3Dゲームが結構面白く出来て自信がついた。
・2年目の後期ではWiiの開発でチーム制作を行う。チームは勝手に決められるが基本的に優秀な人がリーダーになる。チームによっては崩壊しているチームやギスギスしているところもあり、プログラミングできる人と出来ない人の差が露骨に出る。何人かはここで脱落し、退学する。
3年目
・DirectXの授業は継続しておりCで作ってたものからC++で作るようになる。ここらあたりからかなり複雑なアルゴリズム(地面の起伏に応じた高度計算や正確な当たり判定の実装など)も学ぶ。
・DirectXとは違うものとして、OpenGLの授業も始まった。OpenGLとDirectXのマルチプラットフォームを目指してゲームの開発を行う。またネットワークを使ったゲームをOpenGLで開発したりもする。この授業では基本的に自分で調べて進めていく。調べる力をつける。今思うと一番エンジニアとして大切なことが学べる授業だったと思う。
・先ほど書いた、基本情報に合格していると選択授業でAndroidプログラミングなどもできる。
・就活に備えたビジネスマナーなどの授業も始まる。その日はスーツを着て通学する。私はこの時点でスーツ着て働くのは論外だと強く感じるようになった。
・3年生のビッグイベントとして10月にインターンがある。これはHALがゲーム会社やIT企業に依頼する形で生徒を会社にインターンとして参加させるというものである。当然ながらこれも出席率などに問題がある場合は参加できない。
・インターンは1ヶ月間あり、ゲームの会社にいく人もいればデバッグの会社にいく人、IT企業にいく人様々である。どこにいくかは教官が決める。私はゲーム会社だったがかなり勉強にはなったしゲーム会社で働く雰囲気というものを知れたのでよかったかなと思う。
・3年後半からはDirectXで就職作品を作り始める。就職作品とはいわゆる企業の人に見せる作品の事である。これは完全に個人で作るので人によって完成度はかなり違ってくる。中には商業作品のようなクオリティのものを完成させる人も出てくる。実力社会である。
4年目
・4年目は卒業制作展と就職活動、産学連携の三つがメインとなる。
・私は4年になる頃には就活終わっていたのだが基本的に全てにおいて就活を優先する様になる。内定出るまではスーツで通学など、それ意味あるのか?
・HALには学内企業説明会というシステムがあり、様々な会社が来校し企業の説明、特別選考の案内をしてくれる(任意参加だが就活中の人は実質強制参加である)
・4年中盤くらいにはもうほとんどの人が就活を終えているが一部の終えていない人たちは延々と説明会に参加してはエントリーシートを書いていた。大変だなぁ。このくらいの時期になるともう学内企業説明会にゲームの会社はほぼ無い。自分で動け。
・産学連携や卒業制作ではチームを組み制作するのだが使用するグラフィックライブラリなどに指定はなく、プラットフォームも自由となる。そのため、DirectXやOpenGLを学んでいても大抵のチームはUnityやUnrealEngineを使うことになる。
・4年目後半は卒業制作展にひたすら取り組む、この制作はとても私の中にも印象に残っている。正直楽しかった。好き勝手にみんなで面白いものを作れる。
さて、ここまで1〜4年の流れをざっくりと書いた。
次にHALについてよく聞く話、課題が多いという話にもついて触れておこう。
1科目年間20くらいは少なくとも出てる気がする。(規模はまちまちだが)
この課題だが課題を一定数達成(承認という)していないと科目留年となってしまう。とはいえ教官は自分がわかるまでサポートしてくれるので主体的に動けば落とすことは無いだろう。(私は4年間で1度も落とさなかった)
また出席率も見られる。確か80%切ったらアウトだった。
毎日しっかり通学して、出された課題をしっかりこなせれば基本的に力はつく様になっていたと思う。就活失敗していた人はハッキリ言ってこれが出来てない人が多かったイメージがある。
そのため1回休むだけで内容についていけなくなる恐れがある。しっかり授業は受けよう。
次に私の就活についても触れておこうと思う。
私は3年の中旬くらいから早く就活を終わらせたいと思っていた。また、コンシューマ業界は色々と魅力はあるが第一に給料が安いところが多いし働く環境として良いとも思えない面が多かったので最初の仕事はモバイルゲーム業界がいいなと思っていた。
そのため早い段階で逆求人サイトに登録したり、1on1面談イベントや勉強会などにも参加する様になった。
個人的に今思うのが3年の中旬くらいの時期から動き出せたのが一番良かったなと思っている。勉強会などで大学生で同じ様にゲーム業界目指している人たちとも多く会ったりしているうちに、自分は結構出来る方の人間なんだなと思う様になる。
正直HAL東京のカリキュラムは異常で、普通にゲーム作りたいという人はOpenGLもDirectXもやらない。直でそれらが扱える様になっているHAL生は業界的に結構貴重な人材になりうると思う。
描画の仕組みをわかった上でゲームエンジン使うのとそうじゃ無いのとでは全然違うんだなとこの時気づいた。HALの基礎から教える理念はとても大切だった。
私は趣味で別でDirectXでゲーム作ってたりもしてたので、それを企業の人に見せたりもしていた。何かしら物を作りきるという経験を何回も積んでいるHAL生の評価は高い。(ちゃんと授業出てれば1本は作りきれるはず)
何社か逆求人で声がかかり、そのうち一番気になっていた会社と話しているうちにどんどん選考が進み、特に苦戦せずに2月くらいには内定が出ていた。私の就活はかなりあっさりと終わった。
モバイルゲーム業界やIT業界は今かなり盛り上がってるのもあり年収もかなり良く、この結果にはかなり満足している。
最後に、私がHAL東京に入学して良かったかどうか、という点について触れてこの駄文を終わらせようと思う。
もともと、ゲームは作りたいと思っていたが、何から始めたらいいのかわからなかった。
そんな中、専門学校で学ぶことで0→1が出来る様になったのはやはり大きかったと思う。
一度作り方を学べばあとはそこからどんどん自分から学んでいけた。
逆に、そう言う学び方が出来ない人はやめておいた方が良いと思う。
HAL東京在学中ずっと思っていたのが、学生間のレベルの差がとても激しいのだ。 無能か出来る奴のどっちかになるのだ。
自分は積極的に学んでいける!出来る奴に絶対なってやる!と言うくらいの気合いがないとダメだと思う。
入学時にプログラミングの経験がある人も一定数いるのだが卒業する頃には自分の方が書ける様になっていたし、結局のところ本人の努力次第である。決して入ればゲーム業界にいけるとか、そんな甘い話はない。
生半可な気持ちで入学するのは出来る人たちの迷惑になるとハッキリ言っておこう。チーム制作の足手まといになってしまうだけである。
「キーボードから数を入力させて、その数が素数か否かを判断させるコード」なんだけど
#include <stdio.h> int main(void) { int num,i; printf("2以上の整数を入力してください。"); scanf("%d,&amp;num"); for(i=2; 以下num; i++){ if(i == num){ printf("%dは素数です。",num); } else if((num % i) == 0){ printf("%dは素数ではありません。",num);l breakl; } } return 0; }
これがそのコードの例文。で俺の疑問箇所なんですが
for(i=2; i以下num; i++){ if(i == num){ printf("%dは素数です。",num); }
ここのコードでどうして変数「num」が素数であると判断できるのかが良く分からないんです。
俺が馬鹿で文系脳でプログラミングの才能0だから分からないというのはほぼ確定なんだけど、それでもここのとこが理解できないとモヤモヤして夜も眠れなそうなのでどうか教えて下さい。
というより最初のHello Worldでつまずいてそこでやめてしまった。
「なんでstd::coutなんだ?printfじゃダメなのか?どうしてstdio.hを使わないんだ?」
とどっちも使えるという状態がとても気持ち悪くて、結局拡張子をcppとしただけのベターCを使うだけだった。
「リーナス・トーバルズがC++使わないって言ってるらしいぞ。やっぱりできる人はC言語なんだ」などとも考えていたような気がする。
あれから幾年か経った今になって、仕事の都合上C++に触れることになった。
もう長い間CやC++で書かれたより高レイヤーに位置するプログラミング言語ばかり触ってきたので今更感があったが、今もう一度勉強し直す機会を得たと前向きに捉えてやってみることにした。
実際やってみると、なるほどstd::coutはフォーマット指定子に寄らない分便利だなと素直に受け入れられた。
他にもファイルの読み込みにはfopenじゃなくifstreamを使うとか、いろんなものがC++用に書きやすい方法があるのだと知り、それを素直に受け入れられた。
大学時代はその素直さがなかった。年月は俺に素直さを与えた。
ログとはここでは、特にprintf()やロギングライブラリを使いアプリに仕込まれた明示的な出力とする。
攻撃来てるかとか気付けるし、ビッグデータとしてゴニョゴニョ解析できるし。知らんけど。
バグが起きた時とか、基本的に再現手順を元にデバッガーのブレイクポイントとか使うだけで、ログは実際全然見てない。
あとネットワーク解析ソフトと、アプリに埋め込む系のデバッグツールあれば十分って感じ?
役立つログなんて、デバッガーの調子が悪い時にコミットしないものを一瞬入れるくらいかなぁ?
バグが起きた時はQAとかから再現手順と一緒にコンソール出力も飛んでくる。