どうしてプログラマに・・・プログラムが書けないのか?を読んで

| コメント(4) | トラックバック(0)

どうしてプログラマに・・・プログラムが書けないのか?

コンピュータサイエンスを専攻している自分にとっては耳の痛い話ですな。履歴書にコンピュータサイエンスを学んできた経歴があるからといって、誰もがプログラミングできるわけではないんですよー。というお話。

リンク先にあるFizz-Buzz問題だったら
-Nの倍数 = Nで割ったら0
-nとm両方の倍数 = nとmの最小公倍数で割ったら0
と言うことにすぐ気づけばok。

この記事のはてブが面白い。ワンライナーだけどやっぱり多くの人が自分と同じように剰余を利用してる。面白いのはフラグやテーブルを使った方法で実装している例があることだ。その発想はなかった。

最近プログラミング関係の講義のTAを担当することになり、教わる側から教える側になったのだが、コーディングの速さは人によって雲泥の差が出るなぁ、とよく思う。中にはやっぱり本当にこの先IT系の業種でやっていけるのか、こっちが不安になってしまうような学部生も居る。(その講義はプログラミングの授業を1年間やってきたという前提条件付きのはずなのにだ)

学生の身分でこう言うのもなんだけど、コンピューターサイエンス系の学校って、実はプログラミングが苦手な人達が結構多いんじゃないかなぁと思う。(流石にリンク先に書いてあるような200人中199人というのは言い過ぎな気がするが。)
中にはやっぱりスゴイ人達もいる。けど、自分が今まで出会ったそーゆう人達は決まって独学で勉強しているような知的好奇心が旺盛な人達だ。中の人の視点で言わせてもらうと、学校で学ぶプログラミング授業の内容はあんまり大したことがないような気がする。自分がなんとかバイト先でプログラマーとしてこなしているのも今まで本を読んできた経験があったからだ。おそらく学校の授業だけではアウトだっただろうなぁ。

以前紹介したjoelの記事"Javaスクールの危険"も併せて考えて、アプリケーションエンジニアを目指す学生から見ると、こんな感じなのだろうか?

--さっき例に挙げたFizz-Buzz問題のような手続き型言語を制御する壁--

--ポインタやoopの壁------------
                              ←自分は今この辺をウロウロしている感じ(Haskell本読みたい)
--LispやHaskellといった関数型言語の壁-------


で、別ベクトルでバイナリーな壁とかもあるに違いない。
以上、思ったことをテキトーに並べてみた。

で、自分はどうなのよ?と聞かれると、今日は最近流行らしいPOEを使って簡単なEchoサーバを作ってみたのですが、なかなかC言語で作ったクライアントとの通信がうまくいかず、なんでかなーなんでかなーと大いにハマり、最終的に改行コードが抜け落ちていたというポカをやらかしたので全然エラソーな事は言えません。(言っちゃってるジャン)

---

日本人の場合、技術に関わるなら英語力も必要だなぁと最近強く思う。

この前のタコノコ祭でsiにも言ったのだが、英語のドキュメントに勇気を出してアクセスすれば意外と早く答えが見つかることに(ようやく)気づいた。と、いうか日本語文献のみという条件で調べるとそれだけで情報量を相当絞ってしまい、遠回りした挙げ句、最悪の場合、何も見つからねぇという事態が起きる。

最近
FreeBSD で Cool'n'Quiet → Athlon64が62MHz駆動?内で紹介した

sysctl -a dev.cpu.0.freq_levels →  2000/67000 1875/62812 1800/64700 1687/60656 1575/56612 1462/52568 1350/48525 1237/44481 1125/40437 1000/28600 937/26812 875/25025 812/23237 750/21450 687/19662 625/17875 562/16087 500/14300 437/12512 375/10725 312/8937 250/7150 187/5362 125/3575 62/1787

この出力の/の右側が何を意味してるのか分かんなくて色々調べたのだが、最終的にはやっぱり公式の英語のドキュメントにたどり着いた。

dev.cpu.%d.freq_levels Currently available levels for the CPU (frequency/power usage). Values are in units of MHz and milliwatts.

なるほど、TDPをmWで表記したモノらしい。Fab51で使用しているCPUのリストを見たら

AMD Athlon 64 Desktop Processor TDP67W ADA 3200(2.0) 3500(2.2) DKA4CG 939 OuPGA 1.35V 65 512k __-E4 - - ADA 3000(1.8) 3200(2.0) 3500(2.2) DAA4BW 939 OuPGA 1.35V-1.40 65 512k DH-E6 2, FF2 2F

たしかに67Wだ。

ってことは62MHz時は1.8Wっすか?とワットチェッカーを購入せずにいられなくなってしまう。


えーと何の話をしていたのかさっぱり忘れてしまったので今日はもう寝る...前に若干DB本の翻訳を進める!
まだ翻訳しやすい英語の技術書なので助かる。昨年、院の英語の講義でやっていたMitpressのSICPの翻訳は序文でもう死んだ。訳本の評価が酷いのも何となく頷ける。
てか数学や関数型言語の前知識無しで、いきなりSICPっていうのもどうなんだろう。

トラックバック(0)

トラックバックURL: http://hoge.sub.jp/blog-cgi/mt/mt-tb.cgi/418

コメント(4)

この問題どんな実装が一番速いか真剣に考えたんだけど,
print "12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBuzz1617Fizz19BuzzFizz2223FizzBuzz26Fizz2829FizzBuzz3132Fizz34BuzzFizz3738FizzBuzz41Fizz4344FizzBuzz4647Fizz49BuzzFizz5253FizzBuzz56Fizz5859FizzBuzz6162Fizz64BuzzFizz6768FizzBuzz71Fizz7374FizzBuzz7677Fizz79BuzzFizz8283FizzBuzz86Fizz8889FizzBuzz9192Fizz94BuzzFizz9798Fizz100";
は邪道?w

ちなみに僕はJavaScriptで
for (var i=1; i<=100; i++) {var s=(i%3?"":'Fizz')+(i%5?'':'Buzz');document.write(s?s:i);}
こんな実装かいて上のを作ったけどさ。

if文は遅いって聞くから極力減らしたかったまではいいんだけど,随時printというのもIOをロックしない限り重いよなぁ。かといって文字列に+=するのはペンキ屋のアルゴリズムだぜ。

yoせんせは最近ますます技術指向になってきたけどいいことだね。

大学でコンピュータを学んでもプログラミングは出来ない→独学(先輩方にはお世話になっていますが)でプログラミング勉強して結局研究がソフトウェア開発になった自分は勝ち組?
いや、単に将来(就職する上でとか)つぶしが利かないものを選んでしまったような気もしてますけどw

>>si
自分は技術面でもまだまだですよ。
まぁ、組み込み系とかリソースが限られてない場合はチューニングは程々にして、なるべく読み安いコードにするべきかもねぇ。

ちなみにPerlだと、FizzBuzzを解いてくれるパッケージが既にあります。
http://search.cpan.org/dist/Acme-FizzBuzz/lib/Acme/FizzBuzz.pm
コード0 byte 達成。

>> yam
自分はPC抜きで考えたらただの人以下なので、コンピューター以外の知識がある君が正直、羨ましいです。(´Д`ι)

でも自分だってコンピュータ抜かしたらタダの平均以下な生物系の学生ですよ。なんか並以上のオマケ技能を持つプロフェッショナルになりたいですね。

コメントする

このブログ記事について

このページは、Lyoが2007年5月 9日 22:27に書いたブログ記事です。

ひとつ前のブログ記事は「20歳くらいの奴が高確率で反応するもの」です。

次のブログ記事は「内定先が決まった。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

OpenID対応しています OpenIDについて
Powered by Movable Type 4.261