はてなキーワード: テキストエディタとは
ゲーム業界でプログラマーとしてやっている身から考えを書いてみる。
「私のフォロワーの方にはクリエイターやゲーム関係の方がたくさんいらっしゃると思います。皆様の意見を聞かせていただきたいです。」
https://twitter.com/gamemakerdiary/status/1413185724849954817
ゲーム会社の経理や人事でも、好きなゲームに関わっているということで満足する人もいる。
小規模なゲームをひとりで全部作りたいのか、中規模以上のゲームのどこかを担当したいのかくらいは考えておくべき。
次は専門職。シナリオ、グラフィック、作曲といった専門の教育を受けてないと手も足も出ない分野。
これも解像度を上げると、コンセプトアート、キャラデザイン、ムービー、モデリング、ライティング、UIデザイン、録音、効果音などなど無数に分類される。
ゲーム会社、特にコンシューマゲームのプログラマーとしてやっていくなら、学生時代に身につけている言語や環境よりも、「大規模なものや複雑なものを怖れず学ぶ」資質が大事だと個人的には思っている。
ゲーム開発は、ゲームエンジンやフレームワーク、ライブラリ、APIを多用する。それもネットで検索してもまったく情報がない独自のものだったりする。
そもそもゲーム機はOS自体が普通と違うし。ビルドに使用するツールチェーンもかなり複雑になっていることが多い。
簡単な例でいうと、Visual Studioよりもテキストエディタの方がシンプルで使いやすいと思うタイプは要注意だ。
複雑でも多くの人に支持されているツールは何か良いことがあるはず、と思ってVisual Studioを使いこなす気持ちを持とう。
学生時代の作品もProcessingなどではなくC++で書くべきとか言われるのもこの辺に通ずる。
あとプログラミングに自信がある人で、既存のライブラリは複雑で使いにくいからとオレオレライブラリを作ってしまう人も要注意。
実は俺もそういうタイプなので苦労した。
ゲーム開発は複雑なものをそのまま使わなくてはならない日がいつか必ず来る。
既存の複雑なものを使う能力と言うのは、つまり大量の(英語を含む)ドキュメントを読む能力、大量のソースコードを読む能力でもある。
シンプルで洗練されたコードも素晴らしいが、洗練されたコードをめちゃくちゃ時間かけて書く人よりも
多少いまいちでも手が止まらず書き続けられる能力がある人の方がまわりには多い。
そういう人は、いまいちなコードに何度も手を加えて最終的にはまともなコードにしてしまったりする。
ゲーム全般やゲーム開発に関する知識量は、プログラマーとしても最大の武器だ。
有名なタイトルがどういう特徴を持ったゲームなのか広く知るのには膨大な時間がかかる。ゲーム好きでそのあたりに詳しいだけでも強い。
Unityなどのゲームエンジンに触ったことがある、というのもスキルというより知識の武器という意味合いが強い。
入門書レベルではなく、UniRxとかのプログラムの書き方の根本からくつがえるようなライブラリ経験とか、Unreal Engineのソースコードをいじったことがあるとかレベルなら超強い。
大学のゲームサークルやインディゲーム開発のグループで経験がある人はここが強いように思う。グローバルゲームジャム参加経験者とかも。
それから、ここが一番言いたかった点なのだが、前述の専門職とまたがる知識のあるプログラマーはめちゃくちゃ重宝される。
グラフィックならシェーダーがめちゃくちゃ書けるとか、3DデータやIKを扱った経験があるとか、3Dベクトルや行列演算の数学が得意だとか。MayaやBlenderを使った経験があるだけでも強い。
サウンドならDAWや波形編集ソフトを普段から触っているとか、信号処理に詳しい人。
つまりデザイナーやモデラーや音楽家の気持ちがわかって、その人たちと専門用語で話ができるプログラマーはどこでも食っていける。
あと最近はAIに強い学生もゲーム会社は積極的に採用している。
ひとつの専門知識+プログラミング能力を身につけるのはわりとおすすめの戦略だ。ゲーム開発の全部に詳しい必要は必ずしもない。
CEDECなどのカンファレンスに参加して、どういう知識体系があるのか知って、自分の強みを考えよう。
https://anond.hatelabo.jp/20210617075257
上がってるような基本(元増田に上がってるやつの倍ぐらい)が全部立ち上げからできて
2〜3個プロジェクト経験したらテックリードの素養が既に身についてそう。
プロジェクト的にもどっちかが弱いと
Rails/DjangoにjQuery+Bootstrapみたいな構成や
Amplify/FirebaseにVue/Reactみたいな構成も全然あるので
面接はなんとか抜けてもらうとして、
チーム開発での最低限の目標としては、
成果物から、指導、学習コスト、レビューコスト、技術的負債、マネジメントコストを引いた分が正になっていれば
ひとまず「チームに居ていい人」と見なされそう。
チーム的に良くても、経営層にそれで許されるかはわからんのでその辺の立ち回りも上手いことやるとして、
一旦は、正の生産性を目指してほしい。
以後、ブコメで誰一人一ヶ月でできるって言ってなくて笑うので、
一ヶ月というのは無視して、三〜六ヶ月程度をイメージしつつ書いていく。
似たような言語なのでどっちからやってもいいし、両方同時にやってもいい。
どっちかしかやらないならJavascriptがおすすめ。後ででてくる、Flaskは適当にExpressとかに置き換える
現場だとほぼTypescriptなので、Javascriptはある程度慣れたらTypescriptに移行したほうがいい。
どちらも、Python2とES2015以前の記法というレガシーがネット上に転がってるので参考にしないように注意。
・一貫性があって
・正しい書き方がされた
お手本プロジェクトをなにか(githubや書籍など)で手に入れて読むべき。
おそらくフレームワークに乗っかっているので並行して進めることになる。
話の流れで先にこっち
現在のコーディングのグッドプラクティス、デザインパターンはフレームワークの形をしている。
なので、ReactとVueをその思想から理解しきれれば、プログラミング言語の潮流の最先端に追いつけるはずだ。
TypescriptもVue.jsも書き方をどこまで取り入れるかが使用者の裁量に任されてるし、
開発でVueとReactのどっちを使うかはチーム次第なので、
一旦React+Typescriptでガチガチに書かれたコードプロジェクトを拾ってきて、必死で解読するのがいいと思うなー。
2割ぐらいわかった気になればチーム入ってから(React, Vueどちらだったとしても)動けそう。
パッケージとかテスト、タスク&デプロイ辺りもこのタイミングで拾ってきたプロジェクトを使って学ぶ。
バージョン管理とコンテナの思想が優れているのは自明なので、これらはツールと見ていい。
そして、後からプロジェクトに入った人がプロジェクトの流儀に沿って使う分には難しいことはなさそう。
採用に来た人がgitとかわかってるとチーム開発経験者だなーって思うし、知らないと未経験者なんだなーって思うし、
そういう意味ではチーム開発の経験があるかどうかの試金石にはされてそう。
構築できる、ではなく、触れる程度で良さそう。
gitはプロジェクトの流儀によると書いたが、git-flowのイメージ図を理解して運用できるのがよい。
https://qiita.com/KosukeSone/items/514dd24828b485c69a05
こういうのができるんだなーって言うのを知っておいて、調べつつ書ければ十分。
あとはシェルスクリプトとかって思ったけど同様のことはPythonでもできそう。
地味にSSHでログインした先の環境だと、vimが主要なテキストエディタになるので
vimを最低限触ることだけ要りそう。もういらないかもって思ってたんだけどなー。
→ ファイル開いて入力モードに切り替えて書き込んで保存して終了
細かく書いたが、LPIC-1の範囲がほどよくまとまっているのでそっちを参照するとよい。
これが意図なら
この辺の機能を持った小規模Webアプリを作ってHerokuでデプロイすれば一旦完成とみなしてよさそう。
コード書き写しただけにならないようには注意しつつだけど、長く見て5人日ぐらい?
慣れると1日あればいけると思う。
フレームワークもなんでもいい。
Djangoとかでも各コンポーネントがどんな働き方してるか程度はわかるだろうしそれで十分。
余力があれば複数個触ってみたり、人から勧められたらそっちでも。
最近はサーバーレス&NoSQLが流行ってるのでFirebaseとかもやればいいと思う。
に尽きる。
計算量を気にしなかったせいで線形検索メソッドとfor文を組み合わせて
それらに対して分散や非同期処理で解消しようとするとか、
ちょっとでもアルゴリズムを触った人ならアホらしいなって思うような行為を
計算量を意識するだけなら、AtCoderのABCのC〜D問題辺りが解ければ十分。
有名な脆弱性や攻撃手法は、ほとんどフレームワーク等で解決手段が用意されている
のでアドリブをせずに正しい書き方でやれば良い。
開発現場でもセキュリティリスクがある箇所を1から自前で実装することを経験が浅い者にはやらせないので、
ただただ、フレームワークが正しいとしているやり方をなぞるのが良い。
開発の勉強のやり方としては、
・正しいコード見本を手に入れること
この辺りの習慣があればやってけんのかな、
その他、チーム開発って面では
TeamGeek(人間性)とかインプットしておくと共通言語が増えて嬉しい。
この方向で進めてけば、その途中で正の生産性≒足引っ張らないぐらいになれるので、
そしたらやってけるんちゃうーって感じ。
いまはテキストエディタになって元気にやってるよ
転職してえ...
匿名ということで、忌憚なき意見が得られたらと思ってここに書いきました。たぶん、新卒がまた甘いこと言ってるよと思う人もたくさんいると思いますが、それはそれで受け止めます。
ただ、どこにも迷惑をかけたくないので、本質を違えない程度にはフェイクを挟んで書いてます。なんか辻褄合わなくね?みたいなところあるかもしれませんが、そういうものだと思ってください。
まず、私がどんな状況のやつかわからないと話にならないので、ちょっとバックグラウンドを紹介
情報工学の修士持ち、メーカー系のグループ会社のSIをやる会社に在籍。
グループ会社とはいえ、2000人規模で同期が100人近くいるので、そこそこ規模の大きい会社だと思ってくれて構わない。
「某S社に入社したけどミスだったかもしれない」というはてな匿名ダイアリーが一年前だったか二年前だったか少しバズったが、今の僕はこれに近い気分である。(該当記事は社名まで出しているが、前述の通り迷惑かけたいわけではないのでぼかしておく)
文系出身の人もいるので内容がしょうもないのは、仕方ないとは思う。
それでも情報工学の修士を出ておきながら、再び学部1年の授業を水で薄めたような講義を受けるのは非常に苦痛である。一人でやれば数時間で終わるものに1日かけてみんなで足並み揃えてやっているのは、運動会で手をつなぎながらゴールする様を想起させる。
そもそも、IT系の研修はいまだに一週間やったか?程度でしかやっていない。ずっとやってるのはコンプラやビジネスマナー、技術文書の書き方である。
ことあるごとに偉そうに、賃金を貰いながら学ばせてもらってる身なんだからうんぬんと説教垂れてくるのも腹立つ。研修で新しく学んだことなんかひとつもねーよボケ。
もっさりしたパソコンを重たい仮想環境に一斉に接続し、さらにテザリングでオンライン会議につなぐことでまるで水の中で動いているかのようなもったり具合である。非常にストレスが溜まる。
あとこれは、仕方ないとは思うけれど、セキュリティ上の理由で自由にアプリケーションを入れることができない。もっと効率的に作業をこなせるのに、使いにくいアプリや社内製のゴミシステムを使わされるのは合理的を信条とするITを志すものとしてかなりストレスになる。(どうでもいいけどOutlook使いにくすぎませんか?)
まぁ、でもこれは仕方ないと思いますよ。セキュリティ上の理由と言われたら反論できませんもん。
...SEなのにテキストエディタがMS Wordとメモ帳しか入ってないんですよ????!!!!???!!!?????
...ちなみにアルゴリズム研修はフローチャートをパワポで書きました。これからやるデータベース・SQL研修は紙上でコーディングすることがわかりました。泣きそうです。
......ITってなんなんですかね......?
技術力が現時点で低いのは全然構わない。私も当然まだまだだし、上を見れば見るほどキリがない世界だ。
ただし、IT系に関わることをこれから仕事にしていこうという人が「私、プログラム苦手でーw」というのは本当に許せない。
バスの運転手が「いやー私、運転苦手なんですよねーw」と言っているようなもんだぞ?誰がそんなやつに仕事を任せるんだ?自分がこれから何をしていくのかについて、あまりにも自覚というか覚悟がなさすぎる。(あんまり自覚とか覚悟とか人に押し付けたくはないんだけど、他にいい言葉が思いつかない)
キレても仕方ないので、愛想笑いして誤魔化してる自分にも腹が立つ。マスクのおかげで口元が笑ってなくてもいいのは非常にありがたい。
年次で仕事が割り振られるので、成果主義といいながら結局は年功序列である。少なくとも入社3年は足並みを揃えた昇給。
ちなみに、働く前は年功序列もいい点あるよなーとか呑気に思っていましたが今は違います。
会社のルールを決める連中が全部親会社の天下り老人。上がり幅が小さすぎる給与レンジ。若手はやっすい給料で働かせられる。
こんなのを見てしまうと若手のやる気を削いでるのは、お前ら老害じゃないかと思わずにはいられませんでした。
ついでに、年寄りどもが定期的に言う(大学上がり) = (遊んでばかりの怠け者)な価値観は明らかに古いものです。
当初は安定感があるのもいい点だと考えて、現在いる会社に決めましたが、しばらく生きて安定感に対する考え方が変わりました。
ことIT業界に限って言えば、安定感は会社に与えられるものではないです。自身の技術力が担保するものです。端的に言うと、いつクビになっても他に行けるような技術力を持つことが安定感だと考えるようになりました。
そういったことを考えると、他に行った時にほぼ役に立たない社内政治力や、社独特の書類作成能力、使いにくい内製フレームワークの勉強をしていくことに全く興味を持てなくなりました。
技術力が全く身に付かない今の現状を考えると、若いうちの安い給料としょっぱい昇給幅で我慢して働くことに対するモチベーションは無くなりました。
データ菜園、機械学習系、ソフトウェア開発系で職を探しているので紹介してください。
ちなみに真面目に質問なんですけど、転職しようと思う場合やはり少なくとも半年くらいは在籍した上でなければ厳しいんでしょうか?
もういつ辞めるかの違いでしかないので、決めたならできるだけ早く動くべきだと考えて動いてきたけど、結構風当たりが厳しく、今転職活動するのは流石に悪手なのかなと思ってきてます、少し忌憚なき意見が欲しいなーと思ったり...
せめて現職で少しでもコードが書けたらだいぶ気持ち的に楽になるのになー...
5ch感覚でレス飛ばしてましたが追記の方がいいらしいので追記します。
あと、思ったより注目を集めてしまった感あるので、これで基本最後にしようと思います。
ゆくゆくは Adobe Creative Cloud を契約する
定価で買うのはバカらしいので Amazon で 20% OFF などのセールの時に買う
https://www.amazon.co.jp/dp/B00FOHQZPI/
購入後、発行されたシリアル番号(コード) を https://account.adobe.com/products に入力して登録
足りなかったねん(´・ω・`)
俺がやったのはわりと力技だよ。
たとえばAとBというブコメについたスターを比較したいと思ったら
Aのブコメページの
https://b.hatena.ne.jp/entry/4698059693843232994/comment/nunune
〇〇さん がスターを付けました。
〇〇さん がスターを付けました。
〇〇さん がスターを付けました。
……
……
「さん がスターを付けました」部分を置換で消してidを入手する。
そのidをGoogleスプレッドシートとかに貼り付けてアルファベット順に並び替える。
同様の手順で「Bのアルファベット順idリスト」も入手したら、
あるいはAとBのidを混ぜ合わせて一列に並べて
Googleスプレッドシートの「データ」メニューの「重複を削除」を使うと
「何件重複があった」っていうのを教えてくれる。
重複したidの数を知りたいだけならこれで事足りる。
1年ぶりに開いたらWin10では使えなくなりました、と。
それは構わないんだけど住所録どうすんの?筆王には用はないんだよ。オレが入力した住所録が今すぐ必要なんだよ。返せよ。
テキストエディタや表計算ソフトで試したけど、fzdファイルなんてまともに開けない。体験版はご丁寧に消してある。
筆王を起動しようとすると飛ばされるページにはしれーっと「有効OS拡張サービス」は終了しました。と。
お前が10何年かけて入力してきた住所録はオレ様に金を払わないと使うことはできないぜ?でもお前にだけ特別価格で提供してやるよ、と選択肢が並んでます。
おかしくね?なんか通知来た?オレ、ソースネクストのメール登録してるけど有効OS拡張サービス(そんなサービス初めて聞いたけど)が終了するなんてメール見たことないぞ。
もし、こういうやり方をするならせめてfzdといっしょにcsvなりPDFなりを保存してくれないか。
1,980円くらいどうでもいいけど、こんなやり方をする会社には100円でも払いたくない。
筆王なんて二度と買うか。
新人さん――2〜3年目くらいの子――が作った手順を元に僕が作業画面を共有する形で作業を進めた。ペアプログラミングならぬペアオペレーションってやつだ。
作業内容はテスト環境で作ったデータを本番用にコンバートしつつ入れ込むもの。
ある作業の中で入れ込んだデータを確認するためにcsvファイルにエクスポートして中身を確認する事を行うのに、何気なく`Alt-h`,`pe`,`↓`,`Enter`(WindowsエクスプローラのHomeのリボンを開いて、ファイルを開くセレクトボックスを展開、↓矢印で一つ下のSakura Editorを選択して開く)で、関連付けされているExcelではなくテキストエディタで開いた。
その時、「今のどうやったんですか?」と質問された。
手慣れたキー操作だったため素早かった事、オンラインミーティングでの画面共有はラグが発生する事もよくあるので、何をやったか分からなかったのだろう。
一度閉じて、最初から解説しながらゆっくり作業し直して見せて納得してもらえた。
「私、いつもExcelを開いてcsvのインポートを選んでやってました。ダブルクリックで普通に開くと文字化けするし…、面倒だったんですよねー。今度からこの方法を使わせていただきます!」
うむ、正道だ。UTF-8エンコーディングされたcsvファイルを開くには一手間掛かる。
「因みに――」とSakuraEditorなら「ファイル名を付けて保存」からBOMのところにチェックを付けて上書き保存しておくとExcelからでも文字化けせずに開けるようになることを教えてあげた。
「BOMって何ですか?」
これは少し困った。
BOMの話をして…するとUTF-8にBOMを付ける意義とは?って聞かれるよね…ExcelというかMS製品全般でそういう仕様なんだよって話もしないとダメか?
あー、クソ面倒だな。
「ちょっとしたおまじないだよ。」――実際間違っていないだろう。`#include <stdoi.h>` だって"おまじない"なのだから。
本番作業中に脱線したことを戒めつつ、一方で多少の後ろめたさを感じながら実作業に戻った。
その後、特にトラブルもなく作業は予定より30分ほど早く終わり、お互い「お疲れ様でしたー」と労いつつオンラインミーティングを閉会した。
あ、BOMの話してない。と直後に気付いたものの時すでにおすし。
まっ、気になったらググってくれるだろう。
例えば、黒い画面に白い1ドットの点を打つとする
ここでハードウェアのVRAMと画面が直結していれば分かりやすい
ポインタには確保したメモリ領域の先頭のアドレス番地が入っている
ちょっと語弊があるけど、そのアドレス番地に1を入れれば画面に白い点が表示される、みたいな感じである
自分が子供の頃のMSXとかZX Spectrumだったらそうだった
あと、PC-9801も文字のためのVRAMと画像のためのVRAMがあったんだったかな
98も同じようにメモリに何か直接書けば画面に表示されたはず
あと、その画像のVRAMの上に文字のVRAMを表示させることで、
例えば背景を輝度を下げて表示させ、その上でテキストエディタで作業するとかできたはず
ファミコンとかのカートリッジも挿入すればあれは何らかのメモリ空間に格納されるのだと思われる
カートリッジが挿入されていれば、そのメモリ空間の最初からCPUに実行させればいい
そうすればカートリッジの中のROMに書かれているゲームが動くはずだ
しかし、近年のOSで例えば生のVRAMを直接いじるなんてことはあり得ない
生のVRAMはグラフィクスカードの中などに入っており、それは近年のグラフィクスカード上のGPUやOSによって複雑に管理されている
だから、Windowsなどでゲームを作るときは、まずOSにお願いして、仮想的なVRAMのような領域をもらわなければならない
何をするにもまずはOSのお伺いを立てて、OSがメモリなどのリソースを切り出して与えてくれる
返すときも図書館のように返すのが礼儀であるが、ぶち切りしてもOSは尻拭いをしてくれる
が、尻拭いをしてくれない可能性もあるため、ぶち切りした後に挙動がおかしくなることもあるかもしれない
そう、なんかよく分からんが調子悪いなあ、みたいなことが起こりやすくなった気がする
マシンが重いなあと思ったら、別のプロセス、Windowsで言うタスクマネージャーをチェックする
そして、CPUの使用率やメモリを食っているプロセスを見つけ、殺していい場合はkillしてみる
マルチプロセスで動作することで重くなることもあるし、何か共通のリソース、ファイルなどを奪い合う、デッドロックとかそういうことも起こり得る
しかし、プログラムから直接ハードウェアを動かしている、と実感することは減っている気がする
それはそれで良いことなのだけど、その実感がないことが初学者を混乱させていないだろうかと思った
ハード寄りと言っても、Arduinoでもラズパイでも自分にはあまりそういう実感がない
特にラズパイはLinuxが動いている時点でLinuxが良きにはからってくれるためことさら実感がない
私にも経験がある。
参考書を買ってひたすらコードを打ち込むのだがまるで頭に入ってこない。
参考書が悪いのではないか、自分に向いてないのではないかと思い、別の参考書を買い、気づいたら家の本棚が参考書だらけになっているのだが、結局プログラムは書けないままなのである。
今になってみると上記の行動はある一定の意味があったとは思うが、本質的に意味も理解せずに写経をしているのと変わらない行為だったと思う。
どんな環境が良いのか?
私はJavaScriptを奨めたいと思う。
理由はブラウザとテキストエディタがあれば開発環境が揃うからだ。良くわからない複雑な環境設定で消耗する必要はない。
またブラウザをリロードすれば実行結果がすぐわかるのも手軽で良い。
尚、外部のライブラリの使用はオススメしない。車輪の再発明上等である。
目的の設定:
ブラウザ上で動くブロック崩しを作ることを一旦の目的としよう。別にぷよぷよでも良いしテトリスでも良い。
作り方:
・画面にブロックを表示する
・ボールを表示する
・自機を表示する
この段階では動かなくて良い。HTMLでそれっぽく表示されていれば良い。
次に自機を動かすことを考えよう。
キーボードのWを押したら左に、Dを押したら右に動くようにしよう。キー入力を受け付けて描画している自機を何ピクセルか横に移動させる。同様にボールを動かす、壁に当たったボールが跳ね返る、ブロックと衝突を判定する、ブロックを消滅させるなどなど一つずつ解決しよう。結果はブラウザにすぐに表示されるから逐一チェックできる筈だ。
おそらく上記を実装する時に上手くいかない事が沢山出てくる筈だ。なぜ上手くいかないかを考えて調べてみよう。もしかすると考え方が間違っているかもしれない。可能な限り実装したい動作を分解して考える事がポイントだと思う。そして解決策は必ずあるということも忘れないでほしい。
さて、それっぽく動く物はできただろうか。
ある程度動くものが出来たとしたらとても苦労したことだと思う。そして飛躍的にプログラミングが出来るようになったという実感がある筈だ。
・実装したい動きを分解して考える癖をつける事
・進歩が分かりやすい形で表示される事(モチベーションに繋がる)
プログラミングの話となると言語選択や作法の話になりがちだが、最初は全くそんな事を気にする必要ない。コードは汚くて良いし、動けば正義だ。動作が速ければ尚良い。自分がやりたいことをコードで表現出来て楽しめる事が何より重要だ。