はてなキーワード: Helloworldとは
public static void main(String[] args) { System.out.println(helloWorld()); } // https://stackoverflow.com/questions/15182496/why-does-this-code-using-random-strings-print-hello-world private static String helloWorld() { return IntStream.of(-229985452, -147909649) .mapToObj(Random::new) .map(ran -> IntStream.generate(() -> ran.nextInt(27)) .takeWhile(k -> k != 0) .map(k -> k + '`') .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)) .collect(Collectors.joining(" ")); }
そこそこの企業の特にWeb系で渡り歩いた経験から、真実を書こう。
はっきり言う、ほとんどのプログラマと自称する人間の 9 割はコーダーである。
言われたものを作る事はできるが、それ以外何も出来ないと言って過言ではなく、何もしない。
そんな驚きの生体をここに晒していく。
標準化と呼ばれるプロセスで、プログラマが環境の設計、組み合わせ、開発プラットフォームのセットアップ、開発環境の構築手順作成、開発手順の作成、必要な技術の考察を行う。
なぜそうなったのかは知らないが、一般的にそうなっている。
その環境に浸っているせいか、彼らはゼロベースでものを作ることが出来ない。
彼らにできるのは HelloWorld をコマンドプロンプトで表示するプログラム程度の事しか出来ない。
複数ソースの連結、ライブラリの読み込み、サーバへのデプロイ、どれも手動で出来ないのだ。
逆にそれ以外のこと、コードの読みやすさや、クローン率の低減、メソッドコメントの記載などの保守に関わることをしない。
それは彼らにとって「必要ない無駄な作業」としか考えないのだ。
早く仕上げるためなら、似たような動いてる箇所から、よく読みもせずにコピペを行う。
そして彼らは、作るより運用する期間の方が遥かに長くて、その間に修正で地獄を見るという簡単な論理に気づかない。
…何度味わっても気づかない。
たとえするとしても、業務時間中に業務で使ってる技術をピンポイントで学習するだけだ。
だが、プログラマと呼ばれる人間の母数に比べれば微々たるものだ。
彼らは言う「土日にまで仕事してられるか」「勉強会行ってるの?馬鹿か?」
あえて言おう、馬鹿は彼らだ。
Web で仕事をするならIDE(統合開発環境、エディタやコンパイル、テストやデバッグ実行などを画面から行えるツール)はほとんど必須(エディタで済ませる事も出来なくはない)が、彼らは状況に応じたセットアップができない。
たとえば「Maven(プロジェクト管理ツール)、checkstyle(コーディング規約チェック)、editorconfig(改行、インデント、文字コード設定)」が入っていたとする。
するとEclipseなどを使うとして
マニュアルやチュートリアルを用意しないと、道具の使用もままならない。
テストをなるべく機械にやらせようということの利点が理解できない。
そのために、何十回もコンパイル、デプロイ、アクセス、ログインの手順を何度も繰り返す。
関連する他の修正を行うたびに繰り返す…。
そしてやっと動くとひと仕事終えたと満足感に浸る。
ラリー・ウォールというとある有名な人物(Perl開発者にしてC言語ハッカー)がいる。
これは、自分の作るものは完璧なのだ、だから完璧であるように出来る限りのことをするという美徳である。
彼らは金のために嫌々動くだけのものを作るのだ、動きさえすれば報酬は変わらない、よって当然完璧かどうかなどどうでもいい。
同じ金でより良いものを作るのではない、要件だけ満たせばよいのだ。
変なプライドを持つコーダーは、それで運良く成功すると、自分の知識は正しい、自分の技術は十分なのだと考えている。
こういう人間は、プライドの無いコーダーよりたちが悪く、うまくいかないと他人か環境のせいにする。
そして調べず周囲を苛立たせるのだ。
土日に自ら勉強会に行くプログラマや、それこそ 50 人以下などという会社であればこうした事はあまりない(んじゃないかと思う。)彼らは自分でなんでもやらないといけないからだ。
だが、大企業に飼われる子飼いの企業、派遣(そもそも人手のみを求められる企業)、100人以上の企業では、役割分担に伴いこうした状況が多々発生する。
だが役10年、エンジニアを見てきた結果は変わらない。現実問題こうなのだ、こんな人間が大多数なのだ。
人の多い企業ほど考えたほうがいい、それでより良いものが生まれるのかと。
必要とされる技術だけを叩き込んで金にしたいと言うのは分からなくないが、基本姿勢や思想はどうなんだと。
経営者よマネージャーよ、あなた方の言う「最適化」とは現場が日々考え行っている最適化か?人員最適化だけを行って、生産性が伸び悩んでいないか?
そのあたりは考えた方がいい。
重度の知的障害じゃなくてもHelloWorldできない奴なんていっぱいいるだろ。
ググッたって開発環境作るところから手とり足とりな記事を探せるとは限らない。
わかってるやつならJavaScriptで簡単だけど、そこまでだどりつけないやつはいる。
スマホゲームを作りたくなって、cocos2dxというライブラリを使うことにしたのだけど、環境構築がむずかしかった。
解説書を三冊買って、本の手順どおりにやったのだけど、うまく動かない。
三冊のうち二冊は今年でた本なのに、もう情報が古くなってるのな。
AndroidのサイトからEclipseをダウンロードしろって書いてあるけど、もうAndroidStudioに移行していて、Eclipseはダウンロードできなくなってるの。
Eclipseの本家のサイトからダウンロードして、SDKのプラグインを入れたらいいのかなとか思っていろいろ試したけどどうしても実行できない。
で、結局Eclipseなくてもビルド&実行できると気づいて、開発はxcodeですることにした。
ホリエモンがプログラムはHelloWOrldにたどり着くまでが難しくてあとは簡単とか言ってたけど、まじそうだな。
Javaだけど。
class HelloWorld { public static void main(String args[]) { System.out.println("Hellp World"); } }
自分が手に入れられなかった物を 酸っぱいブドウといってけなす。
それをみて、『手に入れられなかった』大多数が、あれは『酸っぱいブドウ』だと言い出す。
数の理論で、いつの間にか、『ブドウは酸っぱいという常識』が出来る。
物理的な現象ではなく、言葉の定義とか文化はこれが起きるから恐ろしい。
穴の空いたジーパンがいつの間にかカッコヨクなったり。
文化って本当に変わるよね。
という前置きの上で。学力というのは、記憶力と計算力と調査能力の総和的能力だと思う。
社交力が含まれないので 学者は偏屈とかそういう事も起きえるが、必ずしも真ではないのは、学力と社交力に関連がないから。
昨今大学が勉強の場所ではなく、就職のチケットとなりがちなので、そういう謝った解釈がなりたちつつあるが正しくない。
特に昨今の大学生は記憶力と計算力はあるけど調査能力がなさすぎ。
自分の人生をプロデュースするのは、自分の責任なので、大学に入って何をするか?というのは選択の自由ではあるわけですが。
せっかく金を払って入るのですから、大学の設備を使い倒して学力=自分で問題を見つけて、自分で回答を捜して説く能力=調査能力を向上させて欲しい物です。
何のために学校内に高設備とか施設とかがあったりするのか考えようよ!
大学を出たら答えのない問題を解いていく生活が待っているのに 答えは何ですか?と質問してくる奴が多すぎるよ。それこそ学力の中に含まれる探求力がなさ過ぎ。
IT系の大学卒業なのに、HelloWorld書くのが精一杯とか泣けてきます。
というわけで、日本で言う学力という事は 本来 学び取る力の事ですが、 いつのまにか、教えられたことを記憶する力に化け、それが転じて 奴隷になる能力の事を指しがちなのが現代の酸っぱいブドウかと思います。
そうです、私がグヌウの信者です。
今日の話題はAutomakeです。
Automakeを使うと、何がうれしいのか。
それは、Makefileを書くのが楽になるからです。
Makefile.amにファイル名を追加するだけでよくなります。
Automakeを使うのに最低限必要なファイルは「configure.ac」と「Makefile.am」の二つだけです。
あとは、「autoreconf -i」とかしておけば、必要なファイルは全て自動で揃いますので心配ありません。
# プログラム名とそのインストール先ディレクトリ(ここではbin)の指定 bin_PROGRAMS = helloworld # プログラムhelloworldを作るのに必要なファイルの指定 helloworld_SOURCES = helloworld.c
# Autoconf初期化([パッケージ名]、 [バージョン]) AC_INIT([hoge], [1]) # Automake初期化([オプション]) # ( foreignオプションをつけると、NEWSとかREADMEとかを作る必要が無くなる ) AM_INIT_AUTOMAKE([foreign]) # 作成するファイル名 # ここでは、Makefile.in から、Makefileを生成することを指定 AC_CONFIG_FILES([Makefile]) # C言語のファイルをサポートするように設定 # (具体的にどんな意味があるのか分かってない(汗) AC_PROG_CC # config.statusや、Makefileを作成する(らしい) AC_OUTPUT()
/* これは単なるサンプルプログラム */ #include <stdio.h> int main() { printf("Hello World!"); }
手順2: autoreconf -iを実行します
手順3: ./configureを実行します
手順4: makeを実行すると、helloworldがコンパイルされます。
ワンポイントメモ: 「ターゲットがありません」系のエラーが出たら、Makefile.amの記述ミスが考えられます。見直しをしてから、./configureからやり直すと、幸せになれるかもしれません。
とりたてて特殊なルールも何をみるというポイントもかかれていないようだ。
協賛企業をみても系列一色だ。
求人情報が併載されているところをみると、もしかしたらそちらがメインのコンテストなのかもしれない。
締め切りは25日。これまでにサービスインをさせなければいけないらしい。
逆算しても23日にはローカル鯖で動いている必要があるだろう。
23日は誕生日だ。よって作業をするつもりは殆どない。
でも、誰も相手をしてくれない気がするので作業をしてしまうかもしれない。
23日までまる5日しかない。
唯一、ドリコム賞というのがComet/ShootingStarを使うことを前提としている。
Cometをメインに据えてあと5日でどうこするのは見通しが立たない。
余裕があったら追ってみよう。
積読していた本をひっぱりだす。
なにがなんだかわからないがRails言うからにはRailsが必要なのだろう。
検索してあれこれをダウンロードしてみる。
初期設定でまとめられたのないかなと再度検索。
Windows環境での Ruby on Rails (開発環境構築)
http://www.syssupo.co.jp/net_hal/ror.html
こういうのをみつけた。便利!!感謝!!最初からここから辿ればよかった。
httpd.confいじくってapache再起動掛けたらスタートできない。
困った。
見直してみたらRubyForApacheのインスコでしくじったよう。
再度設定。
HelloWorldをさっそく。
コマンドラインなら成功するのだが、rbファイルを配置してのブラウザベースの起動のさせかたがわからない。
ruby -e'puts("Hello The World!!WRyyy!!!")'
あ、、なんだ、拡張子をrbで作ったのがいけないのか。拡張子をcgiにしたら動いた。
#!ruby puts("Hello,The world!")
RailsのHello, world!はなにやらさらに違うようだ。
Railsというのはなにやらスケルトンのフレームワークなのだろうか?
http://blog.codezine.jp/editor/2007/06/ruby_on_railshello_world_1.php
ここを見ながら自分の環境にあうように書いてみたがうまくいかなかった。
開発環境もまだきめていなかったので、Eclipseをつかおうかな。何かお奨めのある?
とりあえず今日はここまで。
明日は・・・
3000系のテストサーバーの意味とか構成がさっぱりわからないのでそこら辺を弄ってみるのと、実際にRailsを触ってみるところ。あと開発環境構築かな。
http://blog.codezine.jp/editor/2007/06/aptana_eclipseruby_on_rails_1.php
ここみながら、aptana関連をなにやらわからないままいれて見たのだけど、
要求された操作は現在の構成には無効であるため、実行できません。 詳しくは詳細を参照してください。
Aptana Editor Infrastructure (0.2.9.16696) 必須: プラグイン "org.eclipse.core.filesystem"。
Ruby Development Tools (0.9.0.707021729NGT) 必須: プラグイン "org.eclipse.core.filesystem"。
filesystemプラグインがないってどういうこっちゃ。
これかな?
後で入れてみよう。
おなかがすいたので今日はここまで!
<html><head><title>Hello JavaScript World!</title><style type="text/css"> <!-- .select { margin-left: 30px; padding: 0 2px; width: 6em; border: dotted 1px; } .select p { margin: 2px; } --> </style></head><body><script type="text/javascript"> <!-- // step 1 : output text document.write("Hello world!"); // step 2 : output html document.write("<br/><b>Hello javascript world!</b>"); // step 3 : manipulate DOM var p1 = document.createElement("p"); p1.appendChild(document.createTextNode("Hello DOM world!")); document.body.appendChild(p1); // step 3 : interactive, using function, event handler function solid() { this.style.borderStyle="solid"; } var p2 = document.createElement("p"); p2.appendChild(document.createTextNode("Hello interactive world!")); document.body.appendChild(p2); p2.addEventListener("click", solid, false); // not solid() // step 4 : using object, prototype, closure function P(str) { this.str = str; } P.prototype.regist = function(parent){ this.elem = document.createElement("p"); this.elem.appendChild(document.createTextNode(this.str)); parent.appendChild(this.elem); var self = this; this.elem.addEventListener("click", function(){self.act()}, false); // otherwise // this.elem.helloworld = this; // this.elem.addEventListener("click", function(){this.helloworld.act()}, false); // bad way // this.elem.addEventListener("click", this.act, false); // this.elem.addEventListener("click", function(){this.act()}, false); }; P.prototype.act = function(){}; var p3 = new P("Hello prototype world!"); p3.act = function(){ if (this.elem.style.borderStyle == ""){ this.elem.style.borderStyle = "solid"; } else { this.elem.style.borderStyle = ""; } }; p3.regist(document.body); // step 5 : inheritance function SELECT(parent, str) { this.str = str; this.regist(parent); } SELECT.prototype = new P(); SELECT.prototype.act = function(){ p4.elem.style.borderStyle = this.str; p4.div.style.display = "none"; } var p4 = new P("Hello world!"); p4.div = document.createElement("div"); p4.div.className = "select"; p4.div.style.display = "none"; p4.select = [ new SELECT(p4.div, "none"), new SELECT(p4.div, "dotted"), new SELECT(p4.div, "solid") ]; p4.act = function(){ p4.div.style.display = "block"; }; p4.regist(document.body); document.body.appendChild(p4.div); //--> </script></body></html>