はてなキーワード: Pythonとは
思い返せば学校生活から、人とうまくやるのが苦手だった。育った環境は特に劣悪でもなく、23区のあまり裕福ではないほうで、いじめを受けながらも、それなりに義務教育を終えた。ただし、いじめを受けると、それなりに人付き合いが苦手になるが、現在そのことが影響を深く与えているとは考えにくい。
その後勉強のできる都立高校に進んだ。校則が一つもない学校で、当然服装やら髪型の規則もない。しいて言えば、ちゃんと学校にある程度来ることと、補導されないこと、それと校内では下履きに履き替えることくらい。友達とさぼって映画を見に行ったり、年齢制限をゆるく見てくれるお好み焼き屋に行ったり、近所の公園で浪人生に逆ナンパされたりと、人生初のリフレッシュができた。図書館で山ほど本を読んで、週3回剣道をして、ようやく人生が軌道に乗り始めた。
それほど頭は悪くなかったようで、そこそこの大学の英文科に入ることができた。映画サークルに入り、何本か映画を撮ったり出演したり、地味だったがそれなりに楽しく生活できていた。
兄弟が4人もいたので、アルバイトも高校生のころからちょくちょくしていた。多少を家計の足しに、それと自分の物欲のために。高校生のころコンビニで2年弱、大学生からはファミレスで1年、塾講師で3年。
多分、今に至るきっかけはファミレスのころにうまくいかなかったことに起因している。そして大学生活にも一因がある。
ファミレスでは、厨房でドリンクやデザートを出す仕事をしていた。厨房内では仲良く働いていたが、何となくウエイター/ウエイトレスの人とうまく話ができないまま1年が経ち、そこから人と話すのが苦手になっていた。同じくらいの女性とどんな話題を共有すればよいのか、向こうも話しかけてはくれないし、こちらも話すきっかけがない。
厨房の人がとても優しかったのは今でもいい思い出だ。一緒にワカサギ釣りに旅行に行ったのが懐かしい。釣ったワカサギを持って、お店で揚げて食べたのもいい思い出。
大学1年生の性欲やらが多感な時期に、自分の口下手と話題のなさが鬱屈を与えたのだろうか。
カート・ヴォネガットの短編小説やチャールズ・ブコウスキー、初めて英語で読めた小説の「クール・ミリオン」、高校生から好きで読み漁っていたアメリカ文学、自分やサークルで作った映画、鉄男や小沢健二やNumber Girlやマイケルジャクソン、クラブでかかっていたNirvanaやStrokes、軽自動車で行ったフジロック、そんなものは誰の興味にもならないと決め込んでしまった自分がよくなかったのだろう。
1年経って結局そのファミレスが潰れてしまったが、「あの人の日とか失敗、つまんないし」といったようなことをぼそっと聞こえるように言われたのが今でもフラッシュバックする。
その後、3年弱塾講師のアルバイトをした。個人指導塾で、入って3日目に、「この研修に行くと5000円がもらえる」と言われて行った研修。一言も発言できなかったことを思い出す。
自分が抱える生徒の多くは、本指名から外れてきた子が多かった。成績もみんなそれほど良くなく、自分にも人を教えるスキルが足りなかった。結局浪人させてしまった生徒のことを時々思い出す。本当に悪いことをした。一人で赤本を解いて、わからないことを聞きに来るというスタンスを取らせればよかったのに、自分が無駄に介入してしまったことが悔やまれる。
そのバイト先で覚えたのが、お酒に頼ることだった。安い居酒屋で終電まで飲んで、げらげら時間を共有できる。それが社会人になってもコミュニケーションの核となってしまう。
文学部ながらも、BBSや簡単なアプリを作ることができたので、ソフトハウスに就職できた。2年半いたが、デスマーチで体調を崩してうつになり、結局辞める。
新人研修のころやその後の付き合いもお酒が基本だった。キックオフ、とりあえずリリース、最終FIX、とかのタイミングでようやっと胸襟を開いた話ができる。それまでは、ほうれんそう以外の会話もなく、とにかくメールに頼るようになっていた。
時々生意気な意見を言ったり、人のプログラムを勝手にリファクタリングしたこともあった。
記憶がないなか、帰巣本能で家に帰るのもよくあった。タクシー代を貯めていれば相当の金額になっていたのではないかと思う。
少し休んで、プログラマとして別会社に復帰した。総務と経理以外はほぼ男性の会社で、よく飲んだ。
その会社でようやっとまともな生活を取り戻すことができ、結婚もできた。
3年ほどプログラマをしていたが、目の前に座っているおじさんプログラマの1/10しか生産性がないことがわかり、社内異動で説明書のライターに転職する。
車好きやキャンプ好き、バイク好き、元ミュージシャンが異様に多い会社で、よく泊まりで出かけていた。自分よりも年上が多いから、みんな自分の事を話してくれる。お酒どうこうもなくその人を知ることができる、いい機会だった。ある人が定期購読していた、日経ソフトウェア数年分を借りてJava以外のスクリプト言語(自分はPython)を学ぶBoot Strapとして使わせてもらったり、ほんとうに幸せな日々を送ることができた。
その会社は、株式公開に伴う人員削減で、半数以上人がいなくなった。自分も窮屈なライターを続けるのが辛くなって辞めて、割増の退職金をもらった。以降半年近く、妻以外の人と話すことなく、引きこもりながら割増退職金に付随する給料をもらっていた。働かずに給料をもらえるのがこんなに苦痛だったのか。
いい加減引きこもりにも飽きて大会社に転職するチャンスをもらった。その間に障碍者手帳をもらい、障碍者枠での就職活動をすることにした。
大会社は大会社だった。エリートはエリートで、二級以下の低級労働者の自分は、その程度の扱いしか受けない。大学のランキングを引きずる社内で、
自分はまず
・学歴劣る
・それまでの成果は劣る
・白髪ばっかり目立つ
・とにかくあいつは劣る
という状態になった。
新卒の指導をしても、まるで彼が改善しない。自分を責め続け、ぎっくり腰になった。みんなが、「彼はそうだから」と言ったが、彼をある程度に育てることができず、結局リリースした。リリースしたらとたんにぎっくり腰がよくなった自分の無責任さにびっくりした。
あと、それほど多く飲み会がない。飲んでも自分のような飲み方は誰もしない。場をわきまえ、何となく優しくやっている。
なんで、しらふで天気の話ができないんだろうとか、自分の好きなことを少しでも話せないんだろうとか、毎日悲しくなる。
行動をしないと、周囲も変わらない。一か月以上、挨拶と仕事の最低限のやりとり以外はしていない。たかだか席替えでこんなに弱ってしまうとは。派遣の期限がきてしまう子がいなくなってしまうことにこんなに心が揺さぶられてしまうとは。
ごめん。こんな人間は、やまゆり園の加害者の気持ちでは必要のない人間だったんだろうね。でも、家族と過ごす時々の時間を過ごしてもいいのかな。
無神経でタフな人だと思っていたけど、半年ほどであれよあれよと無職になった。
で、私が働きだした。
暇な時期は、社外。
言語はその時によってPHP、java、python、.NET。
現場のエンジニアとしての業務だけではなく、SEとして客の前にも立つ。
でも本当はパソコンの前でぱちぱちやってるのが性に合っている。
電話が鳴るたびにビクビクしてる。
ストレスすごい。
社外は楽。
できればずっと社外にいたい。
これで年収は450万くらい。
月6万くらい。
あとは主夫業。
ハッキリ言ってプレッシャーを感じている。
これが予想以上に重いのだ…。
パソコンの前でぱちぱちやるだけならまだいい。
でも経験を積めば積むほど、客の前に出される。
嫌だ…。
むりぃ…。
たすけてぇ…。
でも私が働けなくなったら家庭は崩壊する。
辞めたくても、辞められない。
逃げたくても、逃げられない。
すげー絶望感…。
だけどその裏で旦那は、このプレッシャーに耐えていたんだなよな…。
男は外で働くだけ。気楽でいいよな。
なんて思ってた。
もちろん独身なら、気楽だと思う。
どんなに嫌なことがあっても逃げ出せない。
レールの上から振り落とされないよう耐えて、耐えて、耐え忍ぶしかない。
耐えきれなくなった時は、家族が路頭に迷う時。
重すぎだろ…_| ̄|○
でも世のサラリーマンは、みんなこの重さに耐えているんだよね…?
すげーよ
でも狂ってるよこんな世の中。
■追記
実は3人目が生まれてから、マイホームの購入を検討したことがある。
私は買う気満々。
どうするの?買うの?やめるの?
2人目ができた時。
あの時も旦那は煮え切らなかった。
産むのか、おろすのか。
3人目はどうしても作りたがらなかったが、旦那が酔った隙にできた。
何か1つ持つたびに、責任は重くなり、逃げ道が無くなっていく。
旦那はそんな地獄にたどり着くのを分かったうえで、淡々と受け入れてくれてたんだなと。
たった一人で、この重さと戦ってくれてたんだなと。
それが巡り巡って、今自分に回ってきたんだなと。
正直、3人も産んだのを後悔している。
親として最低だと思う。
考えちゃダメなこと。
でも考えれば考えるほど、後悔という結論に行きつく。
日曜日が終わってしまうので、ここらで一発、何らかの生産的な行動をやっていきたいぞ、と思ったわけですけども、なぜかこうして増田に張り付いています。
前頭前野の敗北であり、辺縁系の勝利です。勝利、勝利、大勝利。長良は辺縁系ではありません。
なぜか私のPCデスクには知恵の輪が転がっています。なぜでしょう。お見舞いでもらった品です。なぜ知恵の輪。ボケ防止にとのことでしたが。
ところで、先程PCデスクと言いましたが、これは厳密に言うと、いえ別にそんな厳密とかじゃなくて普通に言ってそうなんですが、私が今パソコンを置いている場所は、PCデスクなどという大層な代物ではありません。
というかデスクですらありません。
私は椅子の上にディスプレイとキーボードとマウスを置いています。
正確には、椅子の上に、ホームセンターで買った合板を乗せて、それを机とし、周辺機器を乗っけているのです。
これは案外便利です。広い、安い、手軽、収納しやすい。見た目のアレさにさえ目をつむれば、非常に合理的な選択であると言ってよいでしょう。
あるいは、見た目などという些事に囚われていないことが、余計に合理的な選択であることを強調している、とさえ言ってもよいかもしれません。
ところで、さっきまで、やむを得ない事情により、VBAなる恐ろしい言語を使っていたのですが、これには様々な謎仕様があるようです。それらは名状しがたき恐怖で我々を戦かせます。
一般的に知られていると思われる謎仕様と致しましては、例えば、配列におけるReDimなるステートメントが上げられるでしょう。
他にも、例えばマクロの高速化のための方策として、範囲を配列に代入するというテクニックが紹介されることがありますが、この配列と範囲との間にも謎の関係性が存在しています。
この手のソフトウェアを扱うに当たり、いちいち一つずつセルに値を書き込むことはご法度、というのが定番ではありまして、私も素直にこの定石にしたがい、セル範囲を二次元配列に格納したりしております。
しかし、範囲を配列に代入した場合、その配列の要素のインデックスは、どうも1から始まるようなのです。
なぜ1スタートなのでしょうか。VBAの仕様においても、配列の添字はいちおう0から始まることになっているのですが、範囲を配列に格納した場合、0行0列の要素は空となっており、Array(1,1)にRangeの始点の値が格納されております。
まあたとえ1スタートであっても、言語内で仕様が統一されているのであれば、まだよいのです。
しかしここが彼の言語の恐怖ポイントなのでありまして、どういうことかといいますと、
すなわち、今度は逆に配列を範囲に代入、すなわち配列の各要素の値を対応する範囲のセルに書き込む場合、インデックスが0である要素から順に処理されるのです。
範囲を配列に代入するときはインデックスが1から始まるのに、配列を範囲に代入するときはインデックスが0から始まるのです。
Array = Range
Range = Array
とすると、一番上の行と一番左の列が、空白行、空白列になってしまうのです。
なんですかこれは。誰が考えたんですか。おかしいでしょう。私はおかしさのあまり死にました。
この理不尽さに比べれば、Collectionなる連想配列の添字が1から始まることなど些事に過ぎません。
昨日までJavaJavaしていた人は、どうやら配列なんぞには目もくれていなかった様子でしたので、この謎仕様に気づくこともなかったのでしょうが、悲しいことに、この謎仕様の配列を用いた高速化テクニックはほぼ必須のスキルでありますので、例の御人も、遅かれ早かれ、この罠に絡め取られていたことでしょう。
あるいは、この謎現象を回避するための方策はきちんと用意されており、無知な私はそれを知らないがゆえに、このような的はずれな不満をぶちまけているのかもしれません。
しかし、上述したような単純かつ直感的な代入が上手くいかないという仕様は、やはり、なかなかの欠陥ではないかと思うわけです。
まあそんな愚痴はどうでもいいのです。変な仕様は適当にハックしてやればよいのです。
でもクラスモジュールとやらのパワーは貧弱なのでそれも大変困難ではあります。
標準モジュールでライブラリもどきをちまちまと作っていくしかないのでしょうか。
とてもではありませんが、こんなもんを極める気にはなりませんので、そこら辺のことをいい感じにまとめてくれている知見があればよいのですけれども、しかし、まともな人間はこんなもんを相手にしたりはしない、というパラドックスがあります。
(https://sites.google.com/site/compositiosystemae/home/vbaworld/upper/interface はわりとよかったような気がします。システムハンガリアン使ってますけど)
こんなもんを扱わざるを得ないような環境に留まってしまっている私がおかしいという話もあります。
悪いことは言いません。pythonで書かせてください。お願いします。
そんな増田の切なる願いは、社会という名の抗いがたい泥沼に絡め取られ、今日も悲しみに満ち満ちたコードを生成していくのであります。
そういえば今日は休日でした。休日は普通楽しいものなのではないでしょうか。どうしてこんな悲しい気分になっているのでしょう。
答えは簡単でして、悲しいことを書いているからです。楽しい気分になるには、楽しいことを書く必要があります。
楽しいこととは何でしょうか。例えばオナニーなどが挙げられます。人生において、オナニーよりも楽しいことは、あまりありません。
よって、楽しくなるには、オナニーの話をすればよいです。
私は一時期、DLditeで同人音声を漁っておりまして、催眠に掛かるべく邁進していた時期もありました。
なぜ私は催眠に掛かれないのか。
集中力の欠如、衝動性の強さ、慢心、環境の違いなど、様々な要因が考えられますが、最も大きな原因と思われるのは、台詞がめっちゃ気になることです。
おっさんが考えた可愛い二次元の女の子みたいな台詞が、えらく癇に障るのです。
そのために、可愛らしい女性の声に没頭できないばかりか、声によって現実に引き戻されてしまう、という逆説に襲われるのです。
おっさんは蓮を咲かせる泥だという話もありますが、恐らく、真に良質な泥おっさんというのは、非常に稀な存在なのでしょう。
つまり、いいおっさんは泥ですが、悪いおっさんはゲロということです。
しかし、これもおっさんに限らず、大抵のことに言える話でありまして、良質なものはどこでも少ないものです。
生の増田を見てもそうでしょう。
ホッテントリに上がる増田しか見ないライト増田、あるいはブクマカには想像もできない世界が、生の増田には広がっています。例えばこの増田とかです。
(これは私見ですが、VIPやなんj、あるいは虹裏などと比べても、増田の毛色は違います)
増田のほとんどは泥であり、ホッテントリに上がった増田は花なのです。
何だかまた悲しい話になってるじゃないですか。なぜ私はいつも悲しい話をしてしまうのですか。
それは恐らく、心の通奏低音(俗用)のようなものが、悲しみに染まっているからです。
今ほど機械学習やデータサイエンス系のライブラリーが豊富って視点から、pythonが注目を浴びてなかった時の話ではある。LipsもCもって、ついていける人って極一握りだとは思う。日本人ならRubyの方が開発者が日本語で取っつきやすいかも。GoogleAppsScriptでも良いだろうし。
http://b.hatena.ne.jp/entry/s/mizchi.hatenablog.com/entry/2017/02/05/221238
外部ライブラリが果てしなくあり、
← それはPythonに限ったことじゃないでしょ。JavaでもRubyでもPerlでもCでも同様。主要言語はほぼそうでしょ。
それはむしろ逆。Python のスローガンは There's Only One Way To Do It で、これは Perl のスローガン There's more than one way to do it. を意識したもの。
https://wiki.python.org/moin/TOOWTDI
なお、個人的には C# は良さそうだなとは思うけど、Windows以外のプラットホームではどうなんでしょう。(よく知らない。) これは Visual Basic についても同様。
外部ライブラリが果てしなくあり、似たような機能を実現する方法が複数あるので、本によって書いてあることが違ったりする。
逆説的ではあるが、初心者は、Visual BasicやC#あたりから入るのがいいような気がしてきた。
逆引きハンドブックのような本を片手に、チュートリアル本を手打ちでコードを動かしながら読了すると、Visual BasicやC#の世界は一通り把握できる。わからないことは索引を見ればだいたい出ている。Visual BasicやC#があんまり尊敬されてなくて、限界や不満もあることもだんだん理解できる。
Visual BasicやC#でも相当なことができるし、そこからスマートな言語に移行すれば、比較対象となるものがあるので、守備範囲を自分のペースで広げていける。
対象読者というのは、プロのプログラマーを目指すような人たちなのか、そうではないけど理工系でC/C++プログラミング必須の人たちなのか、あるいはRとPythonだとかMATLABあたりを使い倒すことになりそうな人たちなのか、そういった話なのでは?
また、プロのプログラマーと言っても、Web系もあればSIなんかのシステム系もあれば組み込み系もあるし、狙ってる方向によって重点は変わってくるだろうし。
読んでると、最初からLinux/UnixだしDockerもでてくるしRubyを勧めているし、Web系のプログラマーを目指す人たちで現在コンピュータ系の学校/学部にいるわけじゃない人たちが対象読者なのかな?
それ以外の方面に進む可能性もある人たちでもLinuxの知識は有益だろうけど、Dockerは最初から想定するほどでもないし、RubyはWeb系以外ではあまり使われてない上に教育目的には融通がききすぎてお作法が身につきにくそうだし、最初はもっと一般的な入門方法がいいんじゃないの? Web系以外も念頭において。
弩の入門書よんでも、Pythonの使い方やら、Javascriptやらの説明ばかりが始まる。
プログラムはわかるっちゅーねん。
でも、用語がわからん。用語というかネット関連の概念を持ってないから、
何の話をしてるかさっぱりわからんのよ。
時間 | 記事数 | 文字数 | 文字数平均 | 文字数中央値 |
---|---|---|---|---|
00 | 79 | 12205 | 154.5 | 56 |
01 | 50 | 10376 | 207.5 | 45.5 |
02 | 36 | 13542 | 376.2 | 54.5 |
03 | 13 | 6333 | 487.2 | 49 |
04 | 7 | 5028 | 718.3 | 956 |
05 | 12 | 5202 | 433.5 | 49.5 |
06 | 13 | 3823 | 294.1 | 118 |
07 | 26 | 5014 | 192.8 | 39.5 |
08 | 57 | 2242 | 39.3 | 24 |
09 | 81 | 5855 | 72.3 | 52 |
10 | 143 | 13361 | 93.4 | 43 |
11 | 142 | 13873 | 97.7 | 52.5 |
12 | 121 | 13181 | 108.9 | 45 |
13 | 137 | 11426 | 83.4 | 49 |
14 | 81 | 4661 | 57.5 | 40 |
15 | 96 | 8615 | 89.7 | 37 |
16 | 125 | 8243 | 65.9 | 25 |
17 | 115 | 16140 | 140.3 | 40 |
18 | 95 | 8384 | 88.3 | 34 |
19 | 104 | 12440 | 119.6 | 38 |
20 | 93 | 11053 | 118.8 | 48 |
21 | 149 | 22400 | 150.3 | 31 |
22 | 100 | 12331 | 123.3 | 42 |
23 | 86 | 13074 | 152.0 | 35 |
1日 | 1961 | 238802 | 121.8 | 41 |
マルティナ(8), 男系(7), DQ5(8), Pascal(5), デボラ(8), 高橋洋一(4), 天空(8), ぱふぱふ(4), フローラ(12), 上皇(5), 母子手帳(4), 令和(29), リメイク(11), ゴーン(21), 勇者(13), Java(14), たつき(7), 令(9), ドラクエ(10), 何かと(8), けもフレ(11), Python(9), 孫(9), 出版社(10), 初代(7), 初心者(12), 声優(16), 元号(14), プログラミング(16), 言語(19), 借金(9), 肩(9), 息子(12), 監督(9), PM(12), AM(11)
■こうすればプログラミング覚えられるよ【随時追記】 /20190404034812(16), ■ノリで豚バラブロックを買った /20190403210718(15), ■富士通を退職した理由 /20190326233147(15), ■絶望している /20190403235507(10), ■俺は社会的JAXA、NASAけないぜ。 /20190404095147(8), ■俳優を使わず声優を使えとかいうの /20190404145540(7), ■IT業界の不思議なプログラマ /20190404003732(7), ■言ってくれないと分からない、なんで言わないと分からないの?問題 /20190404213809(7), ■過去の元号に対するイチャモンまとめ /20190403184726(6), ■道端で人が倒れてたり苦しんでても無視するみたいな風潮 /20190404152553(6), ■ /20190404161254(6), ■いきなり味変する人が理解できない /20190403164100(6), (タイトル不明) /20190404100235(5), ■けもフレ2の監督イジメ /20190404044016(5), ■ /20190404133738(5), ■「令和」は「beautiful harmony」 /20190404083337(5), ■三つ子死亡家庭の夫が、夜勤だったと聞いて /20190404152110(5), ■日本政府は提灯記事の作成が壊滅的に下手 /20190404173109(5), ■anond:20190404103434 /20190404103837(4), ■みんな政治の話って何処で誰と話してるの? /20190404154915(4), ■ゴーン容疑者の再逮捕 /20190404170231(4), ■納税の義務を課せられた奴隷 /20190404183344(4), ■anond:20190404131849 /20190404133151(4), ■anond:20190404164119 /20190404164704(4), ■anond:20190404034812 /20190404131646(4), ■水割りをください 涙の数だけ /20190404183312(4), ■ /20190404110821(4), ■「限界女」とは私のことだ! /20190404135026(4), ■母親がポンコツという愚痴 /20190404030136(4), ■令和の令は命令の意味じゃない /20190404191424(4), ■ゲームメーカーさんに切実なお願い /20190404133652(4), ■ジュニアに熱中してる女 /20190403214729(4), ■首都高の地下から東京駅の地下街に出れる階段 /20190403232026(4), ■今後増えるだろう漫画家のフリーライダー問題 /20190404091759(4), ■スーパーのカゴ・袋詰め問題 /20190402213330(4)
6145545(3276)
プログラミングのプロになるつもりなら、Pascal → C → Python → Java あたりでどう?
俺は今でも Pascal のシンプルさと一貫性と融通のきかなさ(良い意味で)は初心者にうってつけだと思う。すぐ学べるし。
C と Python は知らないでは済ませられないだろうから必須。
で、結局は Java もやることになるだろうし。
何が言いたいかと言うと、まずは構造化プログラミングを学び、それだけでは収拾がつかなくなる場合があることを実感してからオブジェクト指向へ進むのが自然で納得できるだろうということ。
そして、最初はオブジェクト指向の要素が無い言語を学べば、オブジェクト指向の要素を使いたくても使えないので、その方が却ってスッキリしてわかりやすいだろうという事。
確かに。その点は大きな利点。
てことは、まずはPHPでプログラミングにとりかかってみて、次にPythonあたりでキッチリしたプログラミングを学ぶ、みたいなのが初心者にはいいのかな。
煽りに聞こえてたなら申し訳ない。確かに余計なことを書いたけど、ユーザからの入力を受け付けるシステム(ここでは増田)ではコマンドに使われるような記号は安全のためエスケープされるということをすぐに理解するのは無理でもいつかわかるといいと思って書いてしまった。
下手にジャンプを書いたらコードはスパゲッティになるとか書こうかなーとは思ったけどスルーした。それに関数周りの話はもっとコンパクトでよかったね。
最後に、Rubyを選択したのは日本語で問題が滅多に出ない、その一点。Pythonも3ならまず問題ないと思うけど、2系は割と問題が出る。もうみんな3系に移行してると思うけど、もし2系を使ってしまう罠があったらと思った。Macで最初にインストールされてるpythonも2.7だし。
初心者が最初に取り組む言語としては、最近はPythonが良いのでは?
とっつきやすい上に強力で、Pythonだけで相当高度なことまで実現できるし、わかりやすい入門書や教科書や参考書がたくさん出回っている。
でも、プログラミング基礎からじっくり積み上げていきたいなら、今でも Pascal あたりの Wirth系の手続き型の構造化言語が一番いいかも知れない。(Modula-2 や Ada でも)
その次にCをかじってから、次にPythonあたりに進むと、先々の見通しが良いかも。
なお、ケンブリッジ大のコンピュータサイエンス学科では、入学前にLOGOでプログラミングの入門を勉強しとけと勧めていた。Lispよりはとっつきやすいけど、再帰などの概念も勉強できるから。
プログラマじゃないけどプログラミング完全に理解した()おばさんが理解してる基礎知識書くよ。
(追記 この文章はプログラミングの勉強をしたいけどその周辺にある基礎知識になかなか触れる機会がない人向けに書きました。これらの基礎知識があると、困ったときに調べ方すら分からないという状況は回避しやすくなるはず)
ターミナル、いわゆる黒い窓からCUI(コマンドユーザーインターフェース)でコンピュータを使う方法を覚えよう。これは大学のコンピュータリテラシーで習った。MacOSXで復習すると捗った。(追記 すごく間が抜けてたけどMacOSXはUnix系OSです)
まずはファイル操作。Macでターミナルを使って、cd Desktopって打ってからecho ohayou > aisatsu.txtって打ってみて、cat aisatsu.txtってやる。そうすると何が表示されるのか?とりあえずやってみよう。ここで>は増田の都合上大文字全角にしてるけど、ちゃんと半角にしてね。なんで増田の都合上半角がダメなのか、そのうち想像できるようになろう。(追記 ブコメ指摘感謝)
そして、実際にデスクトップを見に行ってみると、aisatsu.txtってファイルがあるはずなんで、開いてみよう。これで何が起こったのか7割くらいはわかるはず。
こういうファイル操作の基本をまず覚えよう。これこそ空気みたいなものだから。
(追記 ここも間が抜けてたけど確かにhogeって何かわからないね。直しました)
最近は何も考えなければ文字コードはとりあえずUTF-8でなんとでもなるようになってるけど、バックスラッシュとかは環境設定で出てくるように設定しないと出てこないし、その意味合い、つまりエスケープとしての使い方を頭に入れておくと後々困らないと思う。あとEOF(エンドオブファイル)とか改行コードとかもそういうものがあるよ程度には覚えておこう。これ頭の片隅にはいってないと分からん殺し的な罠にはまることがある。
これは使いたいプログラミング言語の公式サイトに行くと大抵書いてある。
でもMacだとだいぶ楽。とりあえずターミナルからgccって打ってみるとなんかCUIツールとか書いてあるものをインストールしろって言われるのでインストールする。これだけでCとかC++とかRubyとかPythonとか一通り使えるようになる。もしかしたら最近はこのインストールすらいらないかもしれないけど。
あと、シェルのコマンドとかプログラミング言語を実際に使うときはいろんなライブラリをインストールする必要があるけど、そのライブラリは管理がすごく面倒なので管理をまとめてくれるコマンドがあったりする。aptとかhomebrewとかがそういうのだから、そんなものの使い方も覚えておこう。
(追記 言語の文法を追うだけなら環境構築なんてしなくてCloud9とか使ってもいいかもだけど、プロダクトを作ろうとした時にはまだまだ手元で環境作って必要なライブラリを入れてとやった方が後々応用がきくと思うのですよ。それにそうしていくとDockerの有り難みなんかも理解できるようになっていくのではと思います)
最初に勉強するプログラミング言語は、Javaだけはやめておけ。
なんでかっていうと、Javaはオブジェクト指向言語ってやつなんだけどオブジェクト指向的にしか書けないから。古い人間だと言われそうだけど、最初は手続き型言語から始めるべきだと思ってる。少なくとも、手続き型的に書ける言語から始めるべき。
なぜそう思うのかも含めて、とりあえずおばさんが理解しているプログラミング言語の発展の経緯を軽く解説する。
最初の頃のプログラミング言語は、手続き型と呼ばれるものが多かった。
この〇〇型ってのはプログラミングをするときの考え方によって名前がついているんだけど、手続き型はまず0を作って、0に1を100回足して、最後にその結果を表示してください、みたいな、上から書いた順番通りに動くのが基本のルールである考え方。プログラムは基本的にはこうやってデータをアルゴリズムを使って変化させていって望む結果を得ている。でもこのやり方は問題も多かった。プログラム全体がひとかたまりになってしまっているので、数千行とかになるともう普通の人では手がつけられないし、人間のミスでデータを間違って扱ってしまうことがバグの温床になった。
なので、この手続き型の考えに構造化という考えが加わって、関数というものが生まれた。関数っていうのは料理のレシピに例えるとわかりやすいかも。
5:豚こまを入れて色が変わるまで炒めます。
9:火を消して8をお皿に盛り、野菜炒めの出来上がりです。
B:肉に味付けをします。
2:Bを入れて色が変わるまで炒めます。
3:Aを入れてしんなりするまで炒めます。
4:火を消して3をお皿に盛り、野菜炒めの出来上がりです。
って書ける。ここではAとBが関数。
この程度だとあまり意味を感じないかもしれないけど、これがもっと複雑なものを想像してみると、なんとなくありがたみが分かって来ないだろうか?こうすると、多人数でプログラミングをするときに、Aを書く人、Bを書く人、1〜4にまとめる人って感じで作業分担ができる。それに、バグが起きた時もAの領域でバグったのか、Bの領域でバグったのかとか、全体にまとめると上手くいかないのかとか、原因の切り分けがしやすい。
でも、プログラムがとっても複雑化すると、これでも手に負えなくなる。料理の例えを拡大すると、料理店を運営することを考えるといいかも。
料理店でたくさんの料理をさばくときに、レシピを完全に1から作ることってないと思う。Aさんが野菜の仕込み担当、Bさんがスープの仕込み担当、というように各人に仕事が割り振られているはず。AさんもBさんもそれぞれの仕込みのレシピを持っていて、最終的に出てくる仕込みがちゃんとしてればAさんBさんの仕事の詳細までいちいちシェフが細かくチェックしない体制になっていると思う。大雑把にいうとそういう考え方をプログラムで再現したのがオブジェクト指向型言語。
なので、本気で料理の初心者がいきなり厨房の仕切りを任されて上手くいくのは難しいように、構造化プログラミングのありがたみすらわからない段階でオブジェクト指向型プログラミングに手をつけても意味がわからんだろうと思うのがおばさんの立場です。
(追記 おばさんはRubyを勧めておきます。オブジェクト指向型言語ですが、手続き型的に書き下すことも出来るからです。一つの言語で手続き型構造化オブジェクト指向、全部勉強できます。メソッドも便利なのが一通りあるし、日本語を扱うのにも問題が少ないです)
次に問題を分解できるようになろう。
例えば、クイズゲームを作りたいと考えたときにクイズゲームを作りたいです、って問題は大きすぎる。
クイズゲームに必要な要素は、問題文を表示する、回答を入力してもらう、正誤判定をする、正誤判定の結果を表示する、ということだなぐらいにまず分解する。
これを実際にプログラミングしようとすると、もっと分解できてさらに問題が見えてくると思う。
コンピュータってのは創造的なことはできない代わりに、とても簡単なことをとても階層的に重ね合わせて大きな問題を解けるように作られてる。それを心するといいと思う。
これ超大事。プログラミングって本当に自分で1からものを考えなきゃいけないことってあまりない。大きな問題はあなただけの問題かもしれないけれど、それを構成する小さな問題は大抵他の誰かが解いている問題なので、調べてみれば答えが見つかると思う。
エラーメッセージが出てきたらまずググってみる。翻訳しても初心者には意味がわからないし、ググったら誰かが解説付きで紹介してくれているのでその解説を読んだりしながらエラーメッセージとの付き合い方を覚えていけばいい。
メソッドの使い方がわからなかったら言語の公式サイトに行ってみる。メソッドの使い方で大事なのは呼び出し方、返ってくる値の型とかそういうのだから、こういうところはググるよりも公式サイトに書いてあることをしっかり読んで理解する。
あと、アルゴリズムの勉強もしてみるといいと思う。アルゴリズムとデータ構造と計算量の勉強。大学の学部レベルの教科書をちゃんと読んでみると、例えばデータベースを操作するSQLというものを書くことになった時とかに効いてくる。あとは作ったプログラムが遅すぎてどうしようとかいうのを解決する時とか。
なんか深夜までいろいろ書いてしまったけど、あくまでもプログラマじゃないおばさんが書いたものなので、みんなでツッコミとか入れてくれると大変助かります。