「C言語」を含む日記 RSS

はてなキーワード: C言語とは

2012-02-14

続・専門学校教員寝言

前回の記事はまとめサイトに掲載されたりTwitter拡散されたりしていた。

今回はその続き。

http://anond.hatelabo.jp/20111219120206


カリキュラムのない学校

まとめサイトに掲載されたときにも元教員からコメントのあったとおり。

学校にはカリキュラムがない。シラバスもない。

2年間でどのような像に仕上げようかという目標がない。

資格系の学校場合、あるのは検定に合格させるという目標だけ。

から、授業の半分以上は検定対策。

しか模擬試験過去問中心。

これで授業が面白いはずがない。

デザイン系など、資格系以外の学校もっと悲惨

授業の大半は実習。実習という名の課題製作

実務を縮小した課題をしているだけ。

作業はするけど、提出さえすれば単位は取得できる。

詳細は「芦田毎日http://www.ashida.info/blog/cat34/」を参照。

言っていることは過激だし現場の苦労は知らないと思うけど、おおむね同意

学生の習熟度はカリキュラムでな教員人間性に依存する。



教えるプログラム言語

情報系の国家試験である情報処理技術者試験

午後のプログラム言語は選択式だけど、半数以上の学校はCASLII(アセンブラ)で受験する。

なぜか。学生が長文を読めなくなっているから、ステップ数が少ない言語を選ぶ。

表計算を選んでいる学校もある。

当然、就職には役立たない。

基本情報を取得しているからといって、プログラムができるとは限らない。

特に、午前免除制度を導入している学校ほどそう。

あとは、遊び程度にC言語をやるぐらい。




形骸化する入試

一部の人学科(看護等)以外は、全入時代一条校ではないから、補助金もでない。

一人あたり、年間で100万円。入試面接だけ。学力試験はしない。

オープンキャンパスに○回以上参加でその面接すら無くしている学校も。




教員旧態依然

教員OBOGが就くことが多い。

当然、学生当時の担任も在職している。元担任には頭があがらない。

古くからのやり方が変わるはずもない。




まとめ

もちろん、ここに書かれていることが該当しない学校もたくさんある。

情熱をもったすばらしい先生方もおられます

学ぶ姿勢を持った学生もたくさんいる。

ま、そういうすばらしい学校クラス担任がしっかりしているんだろうな。

2012-02-06

http://anond.hatelabo.jp/20120205173934

某社内でのソフトウェア技術者について書きたくなったので書いてみる。

まず、そもそもプログラミング下請け or 子会社がやるものという認識。それを、最近本社でもソフトウェア技術者採用し始めたけど、やっぱり低く見られがち。プロジェクトの開発リーダーは必ず電気回路の人だし、外部との折衝もやらせてくれない。工場の製造用ソフトだってハードウェア技術者が無理して書いてる。

周りのプログラマーレベルも低いよ。自分の周りがそうなだけかもしれないけど、C言語以外できない人多いし、ポインタはおろか struct と union の違いも認識していない。環境がローレベルなのか、仮想メモリかいう考え方もない。 Windows しか使ったことない人ばかりだし、簡単なコンパイルエラー直すだけで数時間がかり。バグ管理はもちろん Excel。ヘッダファイルの define 一覧が Excel に表としてまとめられていて、手動で同期取ってたりする。

あとパソコンに対する考え方が古いよね。未だにCADを17インチディスプレイで書いてるし。今年会社で導入標準モデルになってるパソコンメモリ2GB, HDD 320GB しか積んでない。マシン投資するのは無駄という考え方が伝わってくる。スペックアップを主張しても「昔はもっと遅かった」で終了。

デスマーチを避ける考えもないかな。デスマーチを乗り越えたのが武勇伝として語り継がれる。俺何日も徹夜したえらい、みたいな。

そんなくせして、「Apple は大した技術力がないけど、アイデアがよかったかiPhoneiTunes がヒットしてる」と言ってる。まずいね

2011-12-23

てるあきIT系専門に行って感じたこと

初めに

私はIT系専門学校に通っている。わかりやすく言うとプログラマ養成校だ。これからそういう学校に行こうと思ってる奴、考えている奴らに、長所短所シェアしようと思う。

まり

私の学校の授業の内容は基本情報C言語がメイン。

・良いところ

基本情報がとれること。あえてあげるならこれであろう。今のシステム開発業界リーマンショック以来の冷え込みがつづいている。昔ならプログラム経験でもホイホイやとってくれたものが、今ではベテランでもどんどん切られる。そういう時代である。私も面接時に基本情報をもっていることが評価された。大学などでは基本的に資格取得のための授業をしてくれない。そのため独学でやる必要がある。もちろん独学で取れない資格ではないし、独学がのぞましい。しかしこれは全ての情報系検定の基礎になるものである。できるならば誰かに教えてもらうのが好ましいと思う。私は今はプロジェクトマネージャ試験という、試験勉強をしている。これは情報国家試験の中で”Level4”に区分される高度試験である。(ちなみに基本情報はLevel2)実はこのプロマネ試験、基本を取っていれば以外と独学でいけるのだ。これは他のLevel4試験にも言えることだと思う。基本的な知識は基本情報勉強し、高度試験ではそれの読解、論述が出題されるイメージだ。高度試験取得のためにも基本情報はしっかりと教師に教わったほうがよいと私は考える。

・悪いところ

企業から専門学校の評価が低い。これにつきる。正直そのへんの大学よりは授業内容も深く、仕事に活かしやすい。しかし、最低学歴として大卒を設定している企業が非常に多い。とくに中堅・大手にはその色が強い。そのため、それまでITとは無縁だった文系大学生にも追い抜かれてしまうのだ。ただこれについては本人のやる気しだいだといえる。yahooドワンゴなどの一部の企業は専門からでも採用している。そういった大手を狙うならば、入学したその日からそれに向けて努力すべきである情報知識などは正直ほどほど。求められるのは圧倒的自主性とコミュ力。例えば自分サーバつくっちゃったよ~とか、クラスメイト巻き込んでサイトたちあげたったなど、クリエイティブな活動が評価される。

最後

結論から言うと、純粋プログラマを目指したいならこれほどよい教育環境はないだろう。短期間で資格習得することができ、実務に近い授業を受けられる。しか大企業などを目指したいなら専門学校に来るべきではない。3流でも4流でもいいか大学に行くべきである。そして目標曖昧な奴な絶対に来ないほうがいい。そのへんの専門とは違い、ほとんどの授業が座学である。それに耐え切れずに挫折したクラスメイト普通にいる。適当に遊びたいならファッション系か3流大学にいくべきだ。この記事が、未来ある若者のためにならんことを

2011-12-07

IT業界でやっていく自信をなくした話。

IT企業内定もらった学生だが、就職先について悩んでいる。専門は電気電子。在学中にIT仕事に興味持って、授業で習ったC言語が楽しかったというのもあって、IT系を中心に就職活動をしていた。だから、滑り止めってつもりは全くなかった。せめて学校IT勉強をしてきた人に負けないようにと、プログラミング勉強を独学でしていた。

それでおれはアンドロイドアプリを作りたくてjava勉強をした。アンドロイドアプリを作るための本も買ってきた。javaをやってるうちは問題なかった。授業で習ったC言語に似ていたし。問題はアンドロイドアプリ勉強をしようとした時に生じた。

おれはじっくり書店アンドロイドアプリ開発の本の調査を開始した。どれも3000円近く、貧乏学生にはやたら手を出せる代物ではなかった。そんな時、java勉強した本の同じ著者がアンドロイドアプリの本を出したんだ。ぼくは衝動買いした。買って大喜びで帰って家で勉強を始めたよ。だが、javaではあれほどわかりやすく書いてた同じ著者なのに、なんだかわかりにくい。基本的にjavaの知識があれば問題ないはずだった。なのに、解説を読んでも、コードを見ても何をしてるのかさっぱりわからない。

アンドロイドじゃ使う命令がまるでちがう。これホントjavaかって思うくらいに。おまけにインターネットリファレンス初心者に不親切で、こちらも何かいてあるか理解できなかった。僕は勉強する手段を失った。アンドロイドアプリ開発に挫折したんだ。見あげれば雲にも手が届きそうに感じた、自信満々だったあの頃の自分はどこへ行ったんだ?

別の本を買ってみても、やる気になれなくて放置してる。頭に浮かぶのは内定を貰った企業。俺のこの程度の理解力でこの先やっていけるだろうか。IT業界には35歳定年説ってのもあるし、やはり難しいんじゃないだろうか。IT企業で働いてみた所で、落ちぶれて途中で挫折するんじゃないだろうか。僕は自信を失って、一週間位鬱憤とした気持ちでいた。ひょっとしたらその時の傷を未だに引きずってるのかもしれない。学校勉強が身に入らない。1年生の頃は、あれほど勉強熱心だったのに。俺の心は腐ってしまったのか。

プログラマーという職業にワクワクする反面、不安の方も大きい。学校での勉強を活かせる回路設計にも興味ある。今から他の企業を探そうか迷ってる。僕はこの先どうしたらいいだろうか。

2011-10-10

文系情報系の学科卒業して、おめでたい頭で何となくSEになって二年目になりました

情報系の学科ではあったけど、SEだのPGだのに就くのは男子学生のうち6割、女子学生では1割いないような感じ

で、非コミュと半ヒキと地頭の悪さで競争率の低そうなSE職についてめでたくその1割に当選

私以外は大体プログラミング楽しい~とか、そういう子ばっかりの中での1割

ちなみにプログラミングの授業は大嫌い。未だに関数がー引数がーポインタがーって意味分かんない。


で、さっき何となく学者向けのC言語解説サイトを見てみた

授業でやったのよりよっぽど分かりやすくて、今になって初めて知ることがたくさんあった

でも別に向上心はないので「そうなんだーすごいなーへー」という感想しかかばない

保守開発メインから今までの開発step数って3桁行かないし、使ったのは「=」と「if文」が精々

仕事で使うのはCでもJAVAでもないけど、そんなことも分かってなかったの?って呆れられるだろうなー

こんな私でも応用情報が余裕で取れているし、来週受ける上位資格も難なく取れそう

SEって馬鹿でもなれるしお給料いいしで良い仕事だよ!と、後輩には勧めておいた

ただし毎晩終電帰り・残業120時間超でも残業代出るのは30時間まで・仕事が終わらないなら土日は潰れて当たり前なのが気にならなければね、というのは黙っているけれど


SE職に就く女子が増えるといいなーと思っている。

職場結婚率は割りと低いけど、他の職場の同業種の人との結婚率はめちゃくちゃ多い。

三年以内に寿退社する人もとても多い。仕事きついし辞めたい女側と、家のことして癒してくれる子がいい男側の需要供給が程よくマッチングしてるんだろうな。

あと、私みたいなブスしか配属されなかった自担当には大変申し訳ないので来年当たり可愛い女の子が配属されてくれると嬉しい。

2011-08-16

プログラマー資格制度

プログラムを理解させるには?ブックマークコメントを読んでいて。

ブックマークコメントの中に、「資格」とかのコメントがいくつかあった。

既に情報処理試験とかあって、いろんなIT系資格があるのだけど、プログラマーやってる人なら誰でも感づいているとは思うが、資格など何の役にもたたない、という事で。高度情報処理資格を持っているからと言って、プログラム(その他設計コンサル)が出来るとは限らず、逆に何の資格も持っていないのに、すばらしいプログラムをする人がいる。

まぁ、これら既存IT系資格にある一定の目安にはなるとは思うけれども、万能では無いのも確か。昨今の不況、ITバブル崩壊で、IT系資格資格手当が真っ先に削られたのも、記憶に新しい(弊社だけかもしれないが)。

雇う外注ソフトハウスから派遣されて来た人など、だいたい15分も話せば、どのくらい出来るか、使えるかは判断出来る。これは資格では計れないものだ。

仮に、弁護士行政書士医師など、士制や免許制はどうだろうか?

やはり、使える弁護士がいると思いきや、藪医者もいるわけで。

車の免許はどうだろう?

交通事故は起きるし、無免許運転ははびこっている。

プログラマーはどうだろうか?

例えばトイレ。水を流すのに、最近トイレは、リモコンスイッチを押すと水が流れるが、あれ、プログラムだよね。

例えば炊飯器。米と水を入れて、スイッチを押せば、ご飯が炊きあがるが、これもプログラムだ。

車。ハイブリットや低燃費車が走っているが、あれは電子制御で動いている。

飛行機最近航空機は油圧では無く、フライバイワイヤーだ。

ロケットアポロファミコンにも劣るコンピュータで月まで行ったが、プログラムだ。

先日の中国の高速鉄道事故も、ATCプログラムミス(?)による事故だ。

先日の$oftbank携帯の通信障害は、故意に仕組まれた通信障害だった。

どこにでもプログラムは入り込んでいるし、そのプログラムによって、便利になっている反面、人命をも奪い、都市機能麻痺させる事も出来る。

にもかかわらず、「資格」「免許」無し。

なんでだろう?

介護について考えてみよう。

ヘルパー資格介護士とかいろんな資格が必要だが、世間一般的には、ワーキングプア、もしくはそれに近い悲鳴が聞こえてくる。

なんでだろう?

資格免許を持っていても、それが収入時間に反映されないいい例だと思う。

プログラマー」「SE」と名乗るのは簡単だ。「漫画家」「小説家」と名乗るのと同じように。なんだったら、名刺名前の上にそういう肩書きを書いておけば、「プログラマー」であり「SEである

漫画家小説家と違うのは、漫画家小説家は「売れなければただの無職」という事だ。あっという間に食えなくなる。自分アシスタントをやっていたし。アシスタントでは、ちょっと食っていけなかった(アシスタント作家自身は違うが、それなりに間近で見てはいるわけで)。

プログラマーSEがそうならないのは何故だろう?

誰かがリカバリーしてしまから、では無かろうか。

プログラマーSEが個人事業種の人達だったら、その通りになるだろうけど、多分、半分以上の技術者は、どこぞの会社所属しているサラリーマンだと思う。もちろん、これはこれでメリットがある。営業や経理・総務・庶務等が他の人に分担されている事や、会社などの福利厚生も使えるから

逆に「金の切れ目が縁の切れ目」が使いにくいというのがある。同僚が失敗したり行方不明自殺等というのはこの業界日常茶飯事だが、そのリカバリーは必ず誰かがやらなければならない。そして不思議な事に、それをやる人間は決まっている。失敗したマンガ小説を他の作家リカバリーする、というのはあり得ないのにね。

資格制度免許制度が万能とは言わないが、有効かどうかと言われると、自分には判断出来ない。しかし、前述したとおり、非常にクリティカルなモノを作る場合も有り、無資格なのはそれはどうだろうか?とも思う。

プログラマーSEミスすれば、都市機能麻痺し、人が死に、医療器具が動作せず、電力が起きず、このインターネットすら動かない。TVラジオダメ第1次産業以外のほとんどが停止する事になる。

そんなクリティカル仕事なのに、この士農工商穢多非人非人のような扱いを受けるのは何故なんだろうか?

経営者管理からみれば、次から次へとターゲットが蛆のように沸いて出てくる職業であり、使えるだけ使って、あとは使い捨て、という業界だし。

一度、プログラマーSE自分のやっている仕事がどういう事なのか、考えてみた方が良いのでは無いだろうか?

考える事は出来ると思うよ? だって、「完全動作する事を常に考えている」のだから。それが過失・故意にでも動かなかった場合、どういう事になるかは、簡単に想像出来るよね。

絵描き小説書きや楽器演奏作曲は、小学校の頃、学校で習うから、分かると思うんだけど、【今の現役世代以上】のプログラマーSEは、小学校で習わなかった。この差が非常に大きいのだと思う。

どんな無能経営者無能管理だって、「自分が絵を描けない・難しい」というのは、自分で分かる。なぜなら、義務教育時代にやっていたから。ところがプログラミングSEはどうか。やってないから分からない、わけだ。

あと、拍車をかけているのが、どこかが発表している「情報技術者何万人不足」という発表。この時点で「質」が考えられていない。そこへ、程度の低い派遣業が入り込んで、エライ事になる。そもそも派遣とは、受け側に技術が無いからその手助けに赴くものであって、人身売買では無い。先日も弊社で「組み込み系の低いレイヤーの部分を作るC言語(かなりアセンブラ寄り)が出来る技術者」を要求したのに、実際ソフトハウスから派遣されてきた人間は「C言語ポインタという概念も知らない」技術者だった(どうやら、Windows統合開発環境上においてC#だったら使える、というレベルだったようだ)。もちろん、そんな人員を使えるわけ無いのでその場でお引き取りを願った。こういう、「質」や「ベクトル」に関係無く「頭数」だけでどうにかなると思っている奴らが非常に多い。日本の(少なくとも情報系)派遣や客先常駐の考え方は、間違っていると思う。

そう考えると、ある一定の基準として、質やベクトルを明記する必要はあるのかもしれない、と思う。それが労働時間賃金に反映されるかどうかは分からないが。

2011-08-11

*[プログラミング]ズブの素人プログラミング勉強して大規模サイト

日記途中だけど緊急事態><、一番下まで呼んで誰か助けてください><

今日から夏休みが始まったのでプログラミング勉強しようと思う。

3日坊主にならないようにがんばる。

  • 何故日記をつけるか?

去年もプログラミングマスターになろうとしたが失敗。

去年の二の舞にならないようにモチベを維持するために日記を書く。

これに影響された。師匠と呼ぼう。

プログラミングができたらかっこいい!

サークル友達もいなくさびしい夏休み有意義にしようとするため

都内の大学に通う2年生。

前述のとおりサークルもやってない、友達もいない、典型的インドアオタク

でも顔はイケメン

プログラミングは3年前にJavascriptHTMLネトゲでの戦いを整形するために覚えた程度。ほとんど忘れてる。

C言語大学で習ったが「苦しんで覚えるC言語」というサイトにのっている範囲しかやってない。

一応プログラミングの知識は少しはある。

やっぱり、目標はあったほうがいい。

うーん、やっぱり完全に一致みたいな情報網羅サイトを作ってみようと思う。

色々な技術が手に入りそうだし。

色々な言語も学べそう

どんなサイトにするか? 大規模情報サイト
学ぶ言語 HTML,PHP,Ruby,Javascript,CSS

とりあえずプログラミングにはエディタアップロードするやつが必要なので色々いれてみた。

エディタ
Netbeans 重い、すごく重い
phpエディタ phpしか編集できない
terapad 色分けが出来ない
K2Editor これが一番最強。でもphp対応してない
HIDEMARU4000YEN win7じゃ使えなかった。
アップするやつ
FileZilla 使いづらい、糞
ALFTP これが一番しっくりきた

というわけで色々悩んだ結果、基本K2Editor、php編集Netbeans,アップロードALFTPにした。

phphtmlrubyjavascript対応してて色分けも出来るwin7で動くエディタないのが残念

実は1ヶ月前にプログラミング勉強しようと思ってサーバーは借りてた。

試験があったので泣く泣く今日からはじめる事に。

ググったり、2chに質問したりして悩んで悩んでロリポップのチカッパプランを借りる事にした。

http://lolipop.jp/service/plan-chicappa/

初期費用 ¥1,575
料金(6ヶ月) ¥3,150
(1ヶ月あたり) ¥525
合計金額 ¥4,725

学生自分にとってはめちゃくちゃ高い。

しかしながら無料レンタルさばより色々といじれて、なにより「お金はもう払った、使わないともったいない」という意識を持つ事でだらけないで出来ると思う。

まず師匠日記をみてみる。HTMLCSSからはじめたと書いてあるが、多分これからはじめると飽きる。

なのでWeb情報自動で集めてくれる(これをスクレイピングという)BOTを作ろうと思う。

日記を読むとMechaniseというのを使ってるらしい。

グーグルでMechaniseで検索

そうするとRuby jamというもので動いているものらしく、Ruby jamRubyで動いている。

Rubyは鯖にはいっているがどうやらjamのほうははいっていないらしくMechaniseもはいっていない。ということで

  • 助けて

ロリポップの解説ページをみてPuTTyていうのをいれてSSH操作ってやつをしてた。

http://d.hatna.ne.jp/taramonera/20100601/1275388515

このページをみながらやってたら

% vi ~/.cshrc

これを実行して

setenv RUBYLIB /home/アカウント名/lib

setenv GEM_HOME /home/アカウント名/lib/rubygems

これを書いて終わろうとしたけど終わり方がわからない><

:wqで保存終了らしいんだけど、入力したところで終われない><

エンタしまくってもだめ><

教えて得ろい人><

2011-07-16

[] Symbolについて

RubyのSymbolと文字列の違いを研究室輪講用に書いたのですが,折角なので公開したいと思います

元々学部生に対する輪講用に書いた物なので,若干上から目線ですがご了承ください.

Symbolの意義は何か

文字列とSymbolはよく似ていますプログラマから見ればどちらも文字列です.違いを一言で説明すると『プログラムが扱う』文字列か,『プログラマが見る』文字列かの違いです.例えば変数名は『文字列ですが,rubyオブジェクトである文字列』ではないですよね?

例えば,今あなたC言語お絵描きライブラリを作っているとしましょう.その中に,色で塗りつぶすfillという関数があり,色を青・赤・緑の3色から選べ,fillの引数でそれを指定できるとしましょう.

fillの引数の設定方法として一番単純なのが,0を青,1を赤,2を緑として,0〜2で選択させる方法でしょう.しかし,それでは,どの数値が何色か覚えないといけないし,fill関数を知らない人から見れば,どういう意味引数かすらさっぱり分かりません.

ではどうするかと言えば,普通BLUE = 0, RED = 1, GREEN = 2と適当に定数を設定して,その定数を引数で指定させますよね.

こうして,fill関数引数意味の無い数値から意味のある文字列に変わったことによってプログラムが分かりやすい物となります.さて,ここで注意してほしいのは,ここで言う文字列プログラムが扱うオブジェクトとしての文字列では無いということです.fill関数引数として,"BLUE","RED", "GREEN"などとC言語文字列を渡すということは普通しませんよね.それは,ここで言う文字列は,あくまでプログラマプログラムコードを分かりやすくするために必要な文字列であって,プログラムオブジェクトとして扱う(例えば,長さを求めるとかする)文字列ではないかです

分かってきたでしょうか?

プログラムコード上では(つまりプログラマから見れば)どちらも同じ文字列(文字の列という意味で)ですが,実際に動くプログラムから見れば単なる数値と本物の文字列という大きな違いです.結局,fill関数引数の具体的な値は何でもいいわけですプログラマから見て文字列であればそれだけでよく,プログラムが動くときの実際のその中身は何でもいいわけです.これのために存在するのが,Symbolであり,:fooとひとたびSymbolを作成すれば:fooの実態は適当な数値となります.(この数値がいくらかなんていうことはもちろん気にする必要はありません)

そして,もちろん同じプログラム上では:foo == :fooはちゃんと成り立ちます.もうここまでくれば,Hashのkeyとして文字列でなくSymbolを使う理由が分かりますね.Hashのkeyはあくまで,プログラマが見る(プログラムコードを分かりやすくするための)文字列であってプログラムが扱うオブジェクトとしての文字列では無くて,keyの実際の値は何でもいい,からですね.(特別な場合を除いて)Hashのkeyに対してrubyStringメソッドを使うなんてことは無いですよね.

なぜrubyにはSymbolが存在するのか

しかし,他の軽量言語ではSymbolなどなくHashのkeyとして普通に文字列を使うことが多いです.では,なぜrubyだけSymbolを使うのでしょうか.

その答えは一言でいうと,rubyの(プログラムコード上に直接書かれた,つまりリテラルの)文字列は他の言語と違いimmutable(不変)でない,からです.実際,pythonjavascript文字列(リテラル)は破壊的に変更することはできませんが,ruby文字列破壊的に変更することができます. ('abc'.concat('d')の様に)

これがどういう違いを生むかというと,コード上に直接現れる文字列がimmutable(不変)であるならば,実行時に一つだけそのオブジェクト作成し,後はそれを使いまわすという最適化ができます

そうした時,Hashのkeyの様なプログラマから見た文字列というのは,プログラムコード上のリテラルとして現れるわけですが,これらは実行時に一つだけオブジェクト作成され(特にコード上に現れる同じ文字列は全て一つのオブジェクトにまとめると),それらの比較はそれらに対する参照(そしてこれは大抵メモリアドレスなど単なる数値)の比較で済むので,結局Symbolと同じ様な働きをするわけです

本当はプログラマが見るためだけの文字列だけど,それをオブジェクトとしての文字列としても,Symbolと同じ様な働き,パフォーマンスが得られるならば,別にオブジェクトとしての文字列であってもいいわけです

繰り返しになりますが,プログラマが見るためだけの文字列は,その中身・実態は何でもいいわけですが,その実態がオブジェクトとしての文字列でも十分なパフォーマンスが得られるならば,別にオブジェクトとしての文字列でもいいわけです

さて,rubyに話を戻しますと,rubyコード上に現れる文字列であっても,実行時にそのコードを通る度に毎回新たな文字列オブジェクト作成します.

(以下のプログラムを動かすことで確認できる.)

def foo
  'foo'.object_id
end
p foo, foo

まりrubyでは文字列が可変であるため,先に述べたような最適化ができない(または難しい)ので毎回新たな文字列オブジェクト作成されるのです

こうなると,先ほどの話とはうってかわって,プログラマが見る文字列はその実態は何でもいいのに,それを文字列リテラルrubyオブジェクトとしての文字列)にしてしまうと,毎回毎回文字列オブジェクト作成されてしまうという非常にばかばかしい状況になってしまます.我々はそれらの文字列オブジェクト文字列としての操作は一切施さないのにも関わらず,です

こういうわけで,rubyではプログラマが見るためだけの文字列にSymbolというruby特有のものを使うのです

もちろん,プログラマが見るためだけの文字列を全て定数として(そしてもちろん中身は適当な値で)定義しても構わないわけですが,Hashのkeyとかで数多くのプログラマが見るためだけの文字列が現れることを考えると,とてもじゃないですけどそんなことは面倒でやってられないですよね.ですので,実行時に自動適当な値にしてくれるSymbolというもの存在するのです

以上で,Symbolについての説明を終えます.以下は蛇足です

おまけ

最初の方で出てきたfill関数rubyで実装しようとしたとき,青・赤・緑の各色はその実際の値はなんでもいいのでrubyのSymbolを使って:blue, :red, :greenとしてもいいのですが,ライブラリとかでは大抵ちゃんと定数として定義されていることが多いです

これは恐らく,定数として明示的に定義することで値の存在を明示でき,ドキュメント化の際にも役立つことによっているのでしょう.

Symbolだと,良くも悪くも定義がいりませんから

しかし,あくまでこれは外部に公開するようなライブラリでの話であって,自分が使うちょっとしたプログラムならこういう場面でも精力的にSymbolを使っていってもいいと思います.ちなみに,僕ならSymbolを使います

Symbolだと定義もいりませんし,定数は大文字ですからつのが面倒ですし,あまりソース大文字が入ると見た目がすっきりしません(主観).

Symbolは非常に便利なものですので,その意義・用途を十分に理解して,Hashのkeyにとどまらず様々な所で使えるようになりましょう.

2011-07-15

高校卒業から三年目のフリーター自分付加価値を上げるために

英語

とあるサイトでちまちまやっていたが今年の4月くらいに無料版が閉鎖

有料版のみになったのを機に何もやらなくなった

資格

もともと経済社会科学学部に行きたかったということもあり、簿記2級に挑戦

本を買って半分くらいでやめた(この間に二度もの試験が行われた)

プログラミング

今の俺にとってもっとも身近な職業と言っていいだろうと思い、本を買う

とりあえずでC言語を選んだはいいがコンパイラがうまくダウンロードできずにやめた

うん、なにをやっても駄目だ

そもそも付加価値をあげて誰に認めてもらうつもりなんだろう

世の中で成功している人はみんな自分の力を見せつけて就職などして「働いて」いるというのに

俺のやっていることはまるでどんぐりの背比べであって、

いまさらに「働かせて」もらうための努力をしている

俺はだれにピックアップされたいんだろう

それによって付加価値の上げ方は変わってくるんだろうなと思う

こんなクズだけどそれでもなにかしら成功したいだとか、毎晩のように夢をほざいている

なんにもわからない

2011-05-30

バグ入りプログラムコンテストでも

したくなってきた。なんかこう、例の「バグ放置なだけで犯罪騒動」で。

#include <stdio.h>
int main(int *argc[]){
  double a=1;
  double b=0;
  printf("print %f * %f = %f",a, b, a/b);
  return 0;
}

だが俺には才能がないのでなげやり。なんというヘタレ。というかc言語文法チェックをcodepadでやろうと思ったらサイトにつながんない…。たぶんどっかでヘタこいててコンパイラ通らないと思う。

追記:Floating point exception食らってたので修正。

2011-05-20

http://anond.hatelabo.jp/20110520103411

こうした言語の話ってさ、いつもいつも狂信者みたいな人とか、単に引っ掻き回すだけの人が現れて

高級言語なら簡単なことが簡単にできる」とドヤ顔で言うんだよな。

「簡単なことを簡単に書くために、高度な言語サポートがある」といって「簡単な事では問題が起こりません」って言うんだ。

そして、メンテナンス性とかの話をしてたはずなのに、「言語カバーしてくれる」とか言い出す。

んなわけないじゃん・・・・ドキュメントの不備ひとつで、どんな言語だろうが難攻不落の砦になったりするんだよ。

逆言えば、アセンブラだろうがドキュメント(そして設計)さえちゃんとしてれば、全然普通にメンテできる。

コーディング時の他人の思想を伝えてくれる言語なんざ、いまだ見たことねぇよ。

それは君が、高級言語の機能を活かした質の良いコードを見たことがないだけだと思うよ。

そうしたコードは、たとえドキュメントが皆無でも実装者の意図を推測するのは難しくないし、メンテナンス性が高く、機能追加も容易だ。

アセンブラでも設計さえ確かなら問題ない。うん、そうだね。これは単純に比較の問題だ。アセンブラで堅牢さを実現できる設計なら、高級言語を使えばさらに堅牢に作れる。したがって、特に理由がない限り、アセンブラC言語を使う理由はない。

ましてや、常に完璧設計をすることは不可能だ。また、「完璧」な設計は要求変更に弱い。ならば、なおさら堅牢性の低い言語を使って実装する理由はない。

http://anond.hatelabo.jp/20110520010851

C言語ダメ部分とか改善されてたりするのかな。

言語のだめ部分ねぇ。

それがダメに働く人には、どの言語ダメなんじゃないかなぁ・・・

http://anond.hatelabo.jp/20110520012857

人間は必ずミスをするものだ、という前提を無視した開発手法は信用するに値しない。完全な設計は、存在しない。規模が大きくなればなるほど、そうしたナイーブな前提は容易に崩壊する。

あなたは、その解決を「生産性が高い言語」だけでしか話していないけれどね。

そちらのほうが、よほど魔法呪文だよ。

つまり、「生産性の高い言語」は、人間の不注意やミス言語処理系の側で防止したり、影響範囲を最小限にしてくれるということ。

「○○はC言語でもできる」ではなくて、ライブラリやツールがどれだけ整備されているか、それらがどれだけ容易に導入できるか、という点に注目してみるといい。

Cで開発してるチームなら絶対に持っている、自前のライブラリ群や

ベンダから提供されているライブラリ群や

それだけでメッセイベントが開催できるほどの開発ツール群はすべて無視して、

Javaにだけは有るんです、Cとは違うんです、という話をしたいんですか?

それらが十分に品質が高く、容易に利用できるものならいいんじゃないかな。

Java場合ユーザフィードバックにより成熟したライブラリやツール群を、多くの場合無料で利用できるのがメリットと言える。

http://anond.hatelabo.jp/20110520011549

人間は必ずミスをするものだ、という前提を無視した開発手法は信用するに値しない。完全な設計は、存在しない。規模が大きくなればなるほど、そうしたナイーブな前提は容易に崩壊する。

あなたは、その解決を「生産性が高い言語」だけでしか話していないけれどね。

そちらのほうが、よほど魔法呪文だよ。

「○○はC言語でもできる」ではなくて、ライブラリやツールがどれだけ整備されているか、それらがどれだけ容易に導入できるか、という点に注目してみるといい。

Cで開発してるチームなら絶対に持っている、自前のライブラリ群や

ベンダから提供されているライブラリ群や

それだけでメッセイベントが開催できるほどの開発ツール群はすべて無視して、

Javaにだけは有るんです、Cとは違うんです、という話をしたいんですか?

http://anond.hatelabo.jp/20110520005152

関係ない。

生産性が高いと言われてる言語で行われた、ゴミみたいなプロジェクトは沢山ある。

生産性の高さが生かせると言うのは、設計からしてきちんと考えられていると言うことで、そういうチームが開発するなら言語は関係ない。

人間は必ずミスをするものだ、という前提を無視した開発手法は信用するに値しない。完全な設計は、存在しない。規模が大きくなればなるほど、そうしたナイーブな前提は容易に崩壊する。

まさかだけど、「Cで1からすべて書く」ことと「Javaの開発済みコード群を使う」ことを比較してたりとか、

「Cで行うテキストエディタコマンドラインコンパイラのみの開発」と「Javaで行う高機能開発環境での開発」を比較してたりとか

本題とはあまり関係がないけど、そういうことも開発生産性の高さに貢献しているのも事実

「○○はC言語でもできる」ではなくて、ライブラリやツールがどれだけ整備されているか、それらがどれだけ容易に導入できるか、という点に注目してみるといい。

http://anond.hatelabo.jp/20110520005241

最近流行りのipadとかandroid3.0とかで使うGLSLはまるっきりC言語で、尚且つこれから必要とされる分野だけどな。

GLSLは知らなかったけど、C言語ダメ部分とか改善されてたりするのかな。

http://anond.hatelabo.jp/20110520004616

最近流行りのipadとかandroid3.0とかで使うGLSLはまるっきりC言語で、尚且つこれから必要とされる分野だけどな。

http://anond.hatelabo.jp/20110520003849

開発言語は、適材適所ってことでいいのではないかと思います。

うん。けど、今やC言語の「適所」なんてほぼ存在しない、という彼の意見には完全に同意だな。

組み込み分野で生き残っているのは、良い後継言語が開発されていないからであって、言語自体が優れているからではないし。

http://anond.hatelabo.jp/20110520002441

横だが、アホくさい。

というか、C言語で書かれてメンテ不能に陥ったガラケーが、Javaで書かれたAndroidに駆逐されている点について、誰も指摘していないのが不思議

Java管理できるチーム、もしくは個人なら、Cでも管理できる。

プロダクトの管理は、言語依存じゃない、構成依存だ。

あとな、ガラケーの開発がCって、それどこの開発をさしてんの?

プラットフォームアプリ

ガラケーアンドロイドの、「何を」比較してんのさ?

http://anond.hatelabo.jp/20110520001116

C言語にこだわるのは良くない。けど、パフォーマンスを上げ、他社のプロダクトに勝つタメにはCは必須。ネットワーク、描画系はjavaの何倍も処理速度が変わるのを忘れてはならない。

既に本人から突っ込み(「Javaの方が早くなるケースは多い」)が入ってるけど、たとえ多少遅くなったり、それを補うために値段の高いチップを積まなくてはならなくなったとしても、プロダクトの開発生産性が上がることで、総合的には製品力の強化に繋がる場合だってあるわけでだな。

というか、C言語で書かれてメンテ不能に陥ったガラケーが、Javaで書かれたAndroidに駆逐されている点について、誰も指摘していないのが不思議

C言語死ねの件について

カーネルコミッターでも、処理系実装者でも無さそうな人達が、「Cは滅びず!」と叫んでいる不思議光景

http://b.hatena.ne.jp/entry/shyouhei.tumblr.com/post/5545216280/c

http://b.hatena.ne.jp/entry/shyouhei.tumblr.com/post/5603961294/c

Linuxカーネル(せめてPOSIX互換品)を手前が思う言語にさっさと移植すれ。さすればCを滅ぼせん。(ちなみに高機能アセンブラの最適解がCとは俺も思っちゃいない。)

最後のCの牙城、Linux(UNIX)をJavaなり何なりベター言語にさくっと移植してくれ。それともgoogleビッグブラザー様がクラウドでUNIX鯖を駆逐してくれるのを祈ってればいいのか?

Cが死ぬと追ってLinuxとかあらゆるOSミドルウェア技術者いなくなって死ぬじゃん。殺す前に代替言語用意しろバカ

JavaC#も,それにPerlRubyPythonも,実行環境自体はCで書かれている件。コンピューターが「シリコンを基材としたチューリングマシンであるかぎり,アセンブラとCは滅びない。

2011-05-15

http://anond.hatelabo.jp/20110515101054

C++言語

fooのintへのキャストがtrue/falseを返すというように、fooのクラス仕様が決められてるんなら、

そしてboolへのキャストが未定義だったり、また違う意味なのなら

    if (foo) {

はな

    if (foo == true) {

って書かざるをえないだろう。嫌いとか好きとかの問題ではないと思う。


class {
public:
    operator bool() { std::cout << "xxx\n"; return true; } //*1
    operator int() { std::cout << "yyy\n"; return true; } //*2
} foo;

があったときに、「if (!foo)」だったら*1が、「if (foo == false)」だったら*2が実行されるような処理系がある。

最新のVC++だと後者曖昧だってエラー出るね(たぶんC++だと「trueは1でfalseは0」なんかではなくあくまでもtrueとfalseなんだ)。

なんにせよ演算子や条件式などに関連する暗黙のキャストはわかりづらく、そしてそんなのを利用したコードはきっとバグる。



から

(fooはいろんなオブジェクトだと思ってほしい

というのが本当なら、==trueがどうこうなんて些細な問題はおいておいて、fooを暗黙のうちにintにキャストしたりboolにキャストしたりして使っているという危険部分をまずなんとかすべきだろう。



VCとかVBとかじゃなくてC言語仕様の話だろ

古いC言語風に書けばこんな感じ。

#define FALSE 0
#define TRUE (!FALSE)

かに、実際に値を表示させてみると、昔のVC6だと「1」という結果が出てくるし、VB6だと「-1」という結果が出てくる。これ、当時混乱の元だったんだよね。


aとbが等しいときに、

C言語だと、(a==b)の評価結果が1になるけど、

BASICだと(a=b)の評価結果は-1になる。

VC6とか関係なくてC言語仕様でそうなんだが、それをわかってないとすればやばい



個人的な好き嫌い

個人的には

   if( foo != FALSE ){

も十分きもちわるいので

   if (foo) { ... }
   if (!foo) { ... }

にしてほしい

レガシープログラマ

まぁ、タイトルの「レガシープログラマ」とは私の事なんですけどね。

最近(?)外注や自社の若いのが作ってくるプログラム

    if( foo == TRUE ){

という判定文をよく見かける(fooはいろんなオブジェクトだと思ってほしい)。

個人的には、この書き方、嫌いなんだよね。

    if( foo ){

    if( foo != FALSE ){

と書いて欲しいわけよ。とにかく「TRUEか?」という判定にはして欲しくないわけです

で、なんでこう書くの?と外注や若い連中に聞いたら、「TUREは1ですから」と必ず答える(断言する)。

あ、あれ???自分は「TRUEはFALSEでは無い。確定しているのはFALSE=0という事だけ」だとずっと思っていたんですわ。

古いC言語風に書けばこんな感じ。

#define FALSE 0
#define TRUE (!FALSE)

かに、実際に値を表示させてみると、昔のVC6だと「1」という結果が出てくるし、VB6だと「-1」という結果が出てくる。これ、当時混乱の元だったんだよね。

しいC++や規格ではBOOL型というのがきちんと定義されたと思うけど、製品寿命20年とかいう私の職場では、DOSやC(K&R)、アセンブラは現役だし、プラットフォームもなにもWindowsに限らない。組み込みマイコンも使う(うちのところはVxWOKSだが)し、UNIXLINUXも使う。

もちろん、マネージドC++.netFramework)やC#JAVA、Parlも私は使うし。でも、どのプラットフォームでどの言語になっても「TRUEか?」という判定文は使ってこなかった。

で、試しに、VC2008のincludeフォルダgrepしてみたら、

#define TRUE 1

あ、ほんとに「1」だ。

処理系によっては(特に古い処理系)、

typedef bool int

なんて見かけるから、やろうと思えば「5」でも何でも数字が入ってしまうわけですよ。そこで「== TRUE」なんてやられたら、絶対に成立しないわけで。バグの温床になるんじゃないかなー、と思ってかたくなに前述の姿勢を持っていたわけです

今(最近の)言語はきちんと「BOOL」型(またはboolという名のクラス)を定義されていて、コンパイルエラーになるか、自動的に補正してもらえるのかもしれないけど、ちょっと気持ち悪い。

最近、ちょくちょく外注や若い連中と意見や話が合わず、「ああ、俺ってレガシープログラマなんだな」と思う事が多くなった今日この頃ネットワークに平気でリトルエンディアンのデータを流すとか、勘弁して欲しいLANアナライザでデータが見にくくてしょうが無い。

でもなー、何も、Windows統合開発環境だけの仕事で食っていけるとは思って欲しくないなぁ。

モテるstatic女子力を磨くための4つの心得

こんにちはプログラミングをしているただの女子です。私は学歴も知識もありませんしブスですが、staticに関してはプロフェッショナル。今回は、モテるstatic女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

 

1. あえてnewを使ってインスタンスを生成する

あえてnewを使ってインスタンスを生成するようにしましょう。そして飲み会の場で好みの男がいたら話しかけ、わざとらしくパソコンを出してインスタンス生成してみましょう。そして「あ~ん! この言語本当にマジでチョームカつくんですけどぉぉお~!」と言って、男に「どうしたの?」と言わせましょう。言わせたらもう大成功。「プログラミングとか詳しくなくてぇ~! ずっとこのオブジェクト指向言語っていうやつ使ってるんですけどぉ~しっくりこないんですよぉ〜!いちいちnewって書かないといけなくて使いにくいんですぅ~! ぷんぷくり~ん(怒)」と言いましょう。だいたいの男はインスタンスを生成せずに、すべてstaticな関数プログラムを書く習性があるので、newなんてキーワードは使っていないはずです

そこで男が「static関数使わないの?」と言ってくるはず(言ってこない空気が読めない男はその時点でガン無視OK)。そう言われたらあなたは「なんかなんかぁ~!最近SQLが人気なんでしょー!? あれってどうなんですかぁ? 実行時に一行ずつコンパイルするスクリプト言語と違って、もっとも高級な言語なんでしょ?でもなんかよくわかんなーい。私かわいそーなコ★」と返します。すると男は「あぁあいつね、あいつ俺の友達なんだ、イイヤツだろ」といってくるので、そのまま調子に乗らせておきましょう。



2. プログラムでとにかくstaticを使うとモテる

ファイルローカル関数」や「関数自体で状態を持つ」ことなどができる「static」をとにかく無闇につかうと、一般のstatic男性は「この子はstaticを愛してるんだなぁ」や「え?こんなところにもstatic使えるの?なにこれ?」と思ってくれますインターネット上ではそのような〇〇おじさんや、××おじさんなど、変なひとがいるので、よいこの皆さんは関わらないようにしましょう。

 

3. とりあえず男には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく

飲み会などで男が女性に話すことといえばstaticの話やVBの話ばかり。よって、女性にとってどうでもいい話ばかりです。でもそこで適当に「へぇーそうなんですかぁ~?」とか「よくわかんないですけどすごいんですねぇ」と返してしまうと、さすがの男も「この女ダメだな」と気がついてしまいます。ダメ女だとバレたら終わりです。そこは無意味テンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。たとえ興味がない話題でも、テンションと積極性でその場を乗り切りましょう。積極的に話を聞いてくれる女性に男は弱いのです

いろいろと話を聞いたあと、「staticな関数を使えば、newって書かなくていいんですねー。覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。続けて頭に指をさしてくるくる回しつつ「キュンキュンキュン! キュンキュンキュン!」と言って、「どうしたの?」と男に言わせるのもアリ。そこで「うるせぇハゲ」と言えば女子力アップ! そこでまた男は「オブジェクト指向ってしっくりこないんですよね〜オブジェクト指向って(ry」と連呼して壊れだすので、放置しておきましょう。

 

4. プログラミングするときインスタンスを生成できない女をアピールせよ

男とプログラミングするときは、とにかく「あーん! 私インスタンス生成ないんですよねぇ~(悲)」と言いましょう。するとほぼ100パーセント「え?インスタンスなんて生成する必要ないじゃん。static理解せずにわざわざインスタンス宣言してるやつなんて笑っちゃうよね〜」といわれるので、(こいつなんなの・・・)と心のなかで思うだけにして口には出さないようにしましょう。ここでまた100パーセント「どうしたの?」と聞かれるので、うつむいて3~5秒ほど間をおいてからボソッとこう言います。「そうですよね〜staticおじさんカッコイイ〜」と心にもないお世辞を言っておきましょう。

その瞬間、あなた女子力がアップします。きっと男は「なんて優しい天使のようなコなんだろう! 絶対にゲットしてやるぞ! コイツは俺の女だ!」と心のなかで誓い、あなたに惚れ込むはずです。そういうやつより上にのし上がったら、そんなことは忘れて好きなだけインスタンスを生成して大丈夫です。「インスタンスを生成できないんじゃなかったっけ?」と言われたら「は?」とか「うざい」や「おまえは一生C言語でもかいてろ」と言っておけばOKです

2011-04-01

悪癖のあるPHPerからみた他言語

JAVA
J2EEやらJ2SEやら色々あって良く分からない。
オブジェクト指向言語ということだけは知っている。
クラスしかりの設計や、型の変換/比較が面倒くさいので続ける気が起きない。


●Perl
ちょっと書き方間違っただけですぐに「Internal Server Error」になるので飽きる。
perl案件があるんだけど…と聞かれると「いやー作れるんですけど、しばらく触ってないから」とか言って逃げる。


●Ruby
使ってるやつの大半はナルシスト。「はぁ、Rubyコードふつくしい…」とか言ってるのを見ると虫酸が走る。
言語作者もPHPをすぐdisるので嫌い。案件少ないくせに調子乗ってるグループに属する。


●C言語
LSIC試食版で遊んでみるも、黒いコンソール画面に文字が出るだけなので飽きる。
ガリガリ書ける人は天才に見える。


●Javascript
変数名の頭に$をつけてよくエラー起こしてしま言語。
「OFFにしてるブラウザも多いっすよ?」を武器に戦うもAJAXブームに押され仕方なく書いてる。


●Python
PHPより歴史が古いのに、なぜか新参者という扱いになっている。
- 転職ならen
- 派遣ならen
7ページ中1ページ目を表示(合計:173件)