はてなキーワード: HELLO WORLDとは
世間の「プログラミング習得」のハウツーがマウントばっかりで腹立つから
俺も簡単に書く
何なんだよ
何でそんな酷いこと言うの?
プログラミングは難しい
用途に応じていっぱいあるんだ
全部覚えようと思って攻略本を開くと、目眩がするのは目に見えてる
途方も無くて死にたくなる
でもよく考えてみろ
必要なだけ使えりゃ良いんだよ
だというのに世の中のハウツーはアレコレ覚えさせようとする
「これは基礎だから」「これは常識だから」「覚えて初めて一人前だから」みたいなこと言ってくる
そんな量覚えられるわけねーだろ、3分で忘れる自信あるわ
100点取らなくていいの、解くべき問題が解ければそれでいいの、動けばいいの!!
みんなどうせ何だかんだ言ってその程度だから、雰囲気でやってるから
つーかなんで何か作るって時に、いきなり教科書や参考書を全部読もうとしてんだよ
お前、ひょっとしてゲームプレイする前に説明書と攻略本読破するタイプ??
やめろよ、ちょっと引くよ
操作方法とキャラ紹介、あとルールを飽きる程度読んどけば良いんだって
教科書なら最初の1/3くらい読んであー飽きたなーってところくらいでちょうどいい
そしたらまず取り掛かるんだよ
「Hello World!!」
あとは大体同じだから
そしたら次は何か作ってみるんだよ
とか言ったら「SNSを作ってみたいです」とか「3Dゲームを作ってみたいです」とか言い出すんだよな
お前、ひょっとしてゲーム開始直後に行っちゃいけないと言われたエリアに行って1回全滅しないと気が済まないタイプ??
まあ良いよそれでも
まず機能に分解して、その機能も分解していって、ゴミみたいな最低限の何かに分解してみればいい
クソみたいな小さい機能に分解したら・・・その実装方法がわからないだろ?
でもそういうもんだ、それを延々続けていったら・・・やがて詰む
そう簡単に完成しない、するわけない
この程度のことすらできねーのかって悲しくなる
でもそんなもんだ、残念ながらゲームみたいにお膳立てがされていない
ひょっとしたら不可能なのかもしれない、別の案が必要かもしれない
でもダメそうなら諦めろ
諦めて別のもの作ればいい
「最後まで諦めず作りきる力」とかたまに聞くけど
Lv1時点でLv100の敵を倒そうとしても詰むだろ
「最後まで諦めず作りきれるって大事だよね」とか言ってる奴も、何度も作りきれず諦めてる下手くそ共だから
こだわるな、死ぬぞ
お前はその程度だ、皆もその程度だ
でも作ったり諦めたりするうちに、作れるものと作れないもの、簡単なものと難しいものが薄っすら分かってくるから
そしたら「こういうのは作れそう」ってのが見えてくるんだよ
そのうち3回に1回くらい作りきれるようになるから
まあ調子乗って「皆の役に立つものを!」とか欲を出すとまた詰むんだけど
表に公開して話題になる人なんて、ベテランでも難しいから、そこを基準にするなよ
あとは繰り返してると、だんだんパーツを流用できそうだと分かってくるから
パーツがいっぱいあるじゃん!とか、こいつめっちゃ上手くやってる!パクろう!ってなるから
そしたら今度他人のコードを理解するためにもう一段プログラムについて学びたくなるんだよ
まあ結局難しくて理解できないんだけどな
何でも良いから見つけろ
つまんねープロダクトに取り組むな、既にあるものでも良い、作ることに意味を見出せ、プログラムはただの道具だ
https://visualstudio.microsoft.com/ja/
printf("Hello world92;n");
よく知られているやつ
// ConsoleApplication2.cpp // int main() { for (int i = 0; i < 8; i++) { printf("Hello 47\n"); } getchar(); return 0; }
<は<の半角
実行結果
Hello 47 Hello 47 Hello 47 Hello 47 Hello 47 Hello 47 Hello 47 Hello 47
ほいよ
char format[50]; strcpy(format, "%0s%s"); for (int i = 0; i < 8; i++) { printf(format,"","Hello world\n" ); format[1]++; }
スペース増田なら こんなかんじか?
class mystring { public: char *buffer; mystring() { buffer = (char*)""; } void operator = (const char*t) { int len = strlen(t); buffer = new char[len + 47]; strcpy(buffer, t); } void operator = (const mystring&src) { int len = strlen(src.buffer); buffer = new char[len + 47]; strcpy(buffer, src.buffer); } mystring& operator + (const char*t) { int len = strlen(buffer); int len2 = strlen(t); char *buffer2 = new char[len + len2 + 47]; strcpy(buffer2, buffer); strcpy(buffer2+len, t); buffer = buffer2; return *this; } mystring& operator + (const mystring&src) { return ((*this) + src.buffer); } };
mystring my_space_org; for (int i = 0; i < 8; i++) { mystring space; space = my_space_org + " "; printf("%sHello world\n", space.buffer); my_space_org = space; }
一気に並べてみる
int i; int space; for (int i = 0; i < 8; i++) { for (space = 0; space < i; space++) { printf(" "); } printf("Hello world\n"); }
すまん <は半角の<に置き換えてくれ(w)
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { memset(buffer, 0x20, i); printf("%sHello world\n",buffer); }
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { buffer[i] = 0x20; printf("%sHello world\n",buffer); }
この場合は特に影響はないが一般的にはmemsetを使う使わないは大きな影響になるので
std::string space; for (int i = 0; i < 8; i++) { printf("%sHello world\n", space.c_str()); space += " "; }
std::string space_org; for (int i = 0; i < 8; i++) { std::string space = space_org + " "; printf("%sHello world\n", space.c_str()); space_org = space; }
ざつにかんがえても 書き方いろいろ
つまり まぁ どれがいいというよりは
状況に応じてかき分けていく必要がある
学校の授業などだと
アルゴリズムの話で
ヒープソート マージソート クイックソートの比較みたいな話があるけど
そこまで難しい話にいかなくても
書き方がたくさんある
std::string space; for (int i = 0; i < 8; i++) { printf("%sHello world\n", space.c_str()); space += " "; }
↑ C++的 な 書き方1
std::string space_org; for (int i = 0; i < 8; i++) { std::string space = space_org + " "; printf("%sHello world\n", space.c_str()); space_org = space; }
std::string space; for (int i = 0; i < 8; i++) { printf("%sHello world\n", space.c_str()); space += " "; }
&LT;は<
例外的に
技としてはナイスだけど応用は厳しいよね
const char *message = " Hello world\n"; for (int i = 0; i < 8; i++) { printf("%s", message + 8 - i); }
サンプルとしては、使いにくい書き方
結構遊べる
あなたは どんな 書き方が好き?
ゼロページ
struct alignas(1) sample{ char buffer[8]; char buffer2[8]; }; sample sample; int i; int space; memset(sample.buffer, 0, 8); memset(sample.buffer2, 0, 8); for (int i = 0; i < 8; i++) { sample.buffer[i] = 0x20; printf("%sHello world\n", sample.buffer); }
3つともおなじ
int i; int space; for (int i = 0; i < 8; i++) { for (space = 0; space < i; space++) { printf(" "); } printf("Hello world\n"); }
すまん <は半角の<に置き換えてくれ(w)
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { memset(buffer, 0x20, i); printf("%sHello world\n",buffer); }
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { buffer[i] = 0x20; printf("%sHello world\n",buffer); }
書き直すごとにアルゴリズムがちょっとづつ良くなったり悪くなったり
どれがすき?
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { memset(buffer, 0x20, i); printf("%sHello world\n",buffer); }
int i; int space; for (int i = 0; i < 8; i++) { for (space = 0; space < i; space++) { printf(" "); } printf("Hello world\n"); }
すまん <は半角の<に置き換えてくれ(w)
====
Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world
入力インターフェースがキーボードからタッチパネル、マイクへとかなりアグレッシブに変化しているのにエディタの入力メソッドが未だにキーボード前提になっているのはちょっとダサい。
コードを書くのに入力補完やフォーマッティングなどは日常的に行っていると思うが、これをキーボードで行わざるを得ないのは最早老人たちのレガシーでしかないだろう。
「クリエイトファンクション、ファンクションネームイズ『てすと』、ブレスオープン、コールプリントフォーマット、オープンパーレン、テキストビギン、『ハローワールド』テキストクローズ、クローズパーレン、セミコロン、クローズブレース、エンドオブパラグラフ!」
って感じで唱えて
function test(){
printf("hello world!");
}
ペースは週2回、1回1〜2時間くらい。
PowerPointはよく分からないのであんまり教えてない、てかアニメーションとか要る?
換算一問一答とか、今使われてるのはSI単位が多いけど例外もあるよ、とか、トレーサビリティってのがあって世界中の計測器は〜、とか。
緯度と経度とか、大陸の名前とか、国当てクイズとか、大航海時代とか、メルカトル図法とか。
現状Hello Worldだけ。
ファイルシステムの使い方とか、巷でよくあるメモリを机上にたとえたり補助記憶を本棚にたとえるやつとか、Windowsのタスクマネージャーの起動方法と見方とトラブル対処法とか。
射出成形とかプレス機とかNC旋盤とかファクトリーオートメーションとか。
成果物として、毎日つけているOneDrive上のExcel家計簿がある。
普段はスマホで日付と金額と勘定科目?を入力してもらって、別シートにsumifs関数で期間と勘定科目の一致した金額を集計する。
大したものじゃないけど、自分で作ったから仕組みを全部理解しているというのが大きい。地方ならこれを提出するだけでも仕事もらえるんじゃないか。言い過ぎか。
この勉強が早速功を奏したかは分からないけど、今月の頭に某中堅製造業の契約社員になれることが決まった。
優秀なら学歴関係なく正社員になれるとのことで、本人のやる気があれば今の勉強を続けていこうと思っている。
たぶんしばらくは反復練習に充てることになるかな。
俺も勉強しなきゃ…
Quick Tutorial for Pyramid は公式のチュートリアル
https://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/index.html
$ $VENV/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.9-branch
として、プロンプトの問いに答えるとサンプル的なアプリができる。
ghはgithubか。
引数で指定できるテンプレートは https://github.com/Pylons?q=pyramid-cookiecutter
sqlalchemyを使うものは分かるけど、zodbって何?
アプリは以下のようにして起動する。
$ env/bin/pserve development.ini --reload
このpserveというPythonモジュールでアプリ動かしたりする。
超単純なPyramidアプリを作って、WSGIのイメージをつかむ。
app.py を書き写して動かしたらHello Worldが動いた。
viewとURLの紐付けはconfig.add_routeしてconfig.add_viewする。add_viewしてからadd_routeしても大丈夫だった。
viewにはrequestが渡される。requestに色々入ってそう。
waitressは知らないけど、serveでHTTPサーバ作ってWSGIアプリを公開できるのかな?
print('Incoming request')
...instead of:
print 'Incoming request'
Inernal Server Errorになった。アプリのほうではValueErrorでresponseを返すようにと怒られていた。text/plainとか返すには何かしないとダメっぽい。
print(xyz)してみろ、ということかな。1と同じくInernal Server Errorになって、コンソールにはNameErrorが出た。
CGIかな?