2019-04-04

こうすればプログラミング覚えられるよ【随時追記

プログラマじゃないけどプログラミング完全に理解した()おばさんが理解してる基礎知識書くよ。

追記 この文章プログラミング勉強をしたいけどその周辺にある基礎知識になかなか触れる機会がない人向けに書きました。これらの基礎知識があると、困ったときに調べ方すら分からないという状況は回避やすくなるはず)

まずLinuxUnix系OSの使い方。

ターミナル、いわゆる黒い窓からCUIコマンドユーザーインターフェース)でコンピュータを使う方法を覚えよう。これは大学コンピュータリテラシーで習った。MacOSXで復習すると捗った。(追記 すごく間が抜けてたけどMacOSXUnix系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回足して、最後にその結果を表示してください、みたいな、上から書いた順番通りに動くのが基本のルールである考え方。プログラムは基本的にはこうやってデータアルゴリズムを使って変化させていって望む結果を得ている。でもこのやり方は問題も多かった。プログラム全体がひとかたまりになってしまっているので、数千行とかになるともう普通の人では手がつけられないし、人間ミスデータを間違って扱ってしまうことがバグの温床になった。

なので、この手続き型の考えに構造化という考えが加わって、関数というものが生まれた。関数っていうのは料理レシピに例えるとわかりやすいかも。

関数が無い状態だと、

1:玉ねぎをくし状に切ります

2:キャベツをざく切りにします。

3:豚こまに塩胡椒で味付けをします。

4:フライパンを火にかけ、油を入れて熱します。

5:豚こまを入れて色が変わるまで炒めます

6:玉ねぎを入れます

7:キャベツを入れます

8:野菜がしんなりするまで炒めます

9:火を消して8をお皿に盛り、野菜炒めの出来上がりです。

と書いていたものが、関数がある状態だと、

A:野菜を切ります

Aのやり方1:玉ねぎをくし状に切ります

Aのやり方2:キャベツをざく切りにします。

B:肉に味付けをします。

Bのやり方1:豚こまに塩胡椒を振ります

1:フライパンを火にかけ、油を入れて熱します。

2:Bを入れて色が変わるまで炒めます

3:Aを入れてしんなりするまで炒めます

4:火を消して3をお皿に盛り、野菜炒めの出来上がりです。

って書ける。ここではAとBが関数

この程度だとあまり意味を感じないかもしれないけど、これがもっと複雑なもの想像してみると、なんとなくありがたみが分かって来ないだろうか?こうすると、多人数でプログラミングをするときに、Aを書く人、Bを書く人、1〜4にまとめる人って感じで作業分担ができる。それに、バグが起きた時もAの領域バグったのか、Bの領域バグったのかとか、全体にまとめると上手くいかないのかとか、原因の切り分けがやすい。

でも、プログラムがとっても複雑化すると、これでも手に負えなくなる。料理の例えを拡大すると、料理店を運営することを考えるといいかも。

料理店でたくさんの料理をさばくときに、レシピを完全に1から作ることってないと思う。Aさんが野菜の仕込み担当、Bさんがスープの仕込み担当、というように各人に仕事が割り振られているはず。AさんもBさんもそれぞれの仕込みのレシピを持っていて、最終的に出てくる仕込みがちゃんとしてればAさんBさんの仕事の詳細までいちいちシェフが細かくチェックしない体制になっていると思う。大雑把にいうとそういう考え方をプログラムで再現したのがオブジェクト指向言語

なので、本気で料理初心者がいきなり厨房の仕切りを任されて上手くいくのは難しいように、構造プログラミングのありがたみすらわからない段階でオブジェクト指向プログラミングに手をつけても意味わからんだろうと思うのがおばさんの立場です。

追記 おばさんはRubyを勧めておきますオブジェクト指向言語ですが、手続き型的に書き下すことも出来るからです。一つの言語手続き構造オブジェクト指向、全部勉強できますメソッドも便利なのが一通りあるし、日本語を扱うのにも問題が少ないです)

次に問題を分解できるようになろう。

例えば、クイズゲームを作りたいと考えたときクイズゲームを作りたいです、って問題は大きすぎる。

クイズゲーム必要な要素は、問題文を表示する、回答を入力してもらう、正誤判定をする、正誤判定の結果を表示する、ということだなぐらいにまず分解する。

これを実際にプログラミングしようとすると、もっと分解できてさら問題が見えてくると思う。

コンピュータってのは創造的なことはできない代わりに、とても簡単なことをとても階層的に重ね合わせて大きな問題を解けるように作られてる。それを心するといいと思う。

からないことは調べられるようになろう。最後はこれ。

これ超大事プログラミングって本当に自分で1からものを考えなきゃいけないことってあまりない。大きな問題あなただけの問題かもしれないけれど、それを構成する小さな問題は大抵他の誰かが解いている問題なので、調べてみれば答えが見つかると思う。

エラーメッセージが出てきたらまずググってみる。翻訳しても初心者には意味がわからないし、ググったら誰かが解説付きで紹介してくれているのでその解説を読んだりしながらエラーメッセージとの付き合い方を覚えていけばいい。

メソッドの使い方がわからなかったら言語公式サイトに行ってみる。メソッドの使い方で大事なのは呼び出し方、返ってくる値の型とかそういうのだから、こういうところはググるよりも公式サイトに書いてあることをしっかり読んで理解する。

あと、アルゴリズム勉強もしてみるといいと思う。アルゴリズムデータ構造計算量の勉強大学学部レベル教科書ちゃんと読んでみると、例えばデータベースを操作するSQLというものを書くことになった時とかに効いてくる。あとは作ったプログラムが遅すぎてどうしようとかいうのを解決する時とか。

なんか深夜までいろいろ書いてしまったけど、あくまでもプログラマじゃないおばさんが書いたものなので、みんなでツッコミとか入れてくれると大変助かります

増田怖いよツッコミ怖いよ、もちろんおまんじゅうも怖い。

  • おばさんとセックスしたいです

  • やりたいことを一つ一つ順番通りにやっていく それの繰り返しただそれだけ

  • つ こぶ茶

  • 「随時追記」とある。これゴールとしてどこまでを目指しているのか...というか対象読者層がよくわからん。 対象読者層を冒頭に明示したほうがよくない?

    • 随時更新=見る価値なしは等価

    • 想定読者はプログラミングの勉強をしたいけど周辺知識が抜けていたりする人向けかな。 ここら辺覚えておくと後々つまづかなさそうと言うか応用が利きそうという感じのことを書いて...

      • 対象読者というのは、プロのプログラマーを目指すような人たちなのか、そうではないけど理工系でC/C++プログラミング必須の人たちなのか、あるいはRとPythonだとかMATLABあたりを使い倒...

        • このおばさんは多分「Web系」という言葉すら知らないと思うよ。 だって、自分が勉強したのがweb系のプログラミングだけで、それ以外のプログラミングの世界は知らないようだから。 ...

  • 初心者が最初に取り組む言語としては、最近はPythonが良いのでは? とっつきやすい上に強力で、Pythonだけで相当高度なことまで実現できるし、わかりやすい入門書や教科書や参考書がた...

    • めんどくせえ 普通にぱいちょんから始めるわ

      • まあ、普通はそうでしょうね。 一番手っ取り早いし、先々の応用も利くし。

    • Pythonは拡張性がありすぎるからなあ。 外部ライブラリが果てしなくあり、似たような機能を実現する方法が複数あるので、本によって書いてあることが違ったりする。 逆説的ではあるが...

      • Pythonは拡張性がありすぎるからなあ。 外部ライブラリが果てしなくあり、  ← それはPythonに限ったことじゃないでしょ。JavaでもRubyでもPerlでもCでも同様。主要言語はほぼそうでし...

  • Javaはやめとけ、ってのは同意。だけど、Javaも手続き型言語だぞ、と訂正は付け加えておくとく。 オブジェクト指向と手続き型はセットでサポートしとる言語がほとんどじゃ。

    • Javaはmainメソッドすら何かのクラス内に書かなくてはならないからオブジェクト指向的にしか書けないと表現したよ。

      • 専門用語は元来の意味(広義のもの)を使うのがベストだと思うのよ。

    • チューリング完全の言語で、手続き型のパラダイムを含まない言語なんてそうそう無いだろ。 SQLとかのドメイン固有言語でならあるけど、それを「プログラミングを覚える」の文脈で扱...

    • これホント同意、「オブジェクト指向」に入門したいと思うまではJavaやC#のコードを見せちゃならんと思う

      • となると、オブジェクト指向以前の言語で入門ということか。 やっぱりCかPascalあたり?

        • いやあ、タイムラインで限定しなくても;; PHPやJavascriptみたいな、オブジェクト指向の記述形式無しにロジックが書ければいいじゃない 初心者にクラスの概念は冗長すぎる

        • プログラミングのプロになるつもりなら、Pascal → C → Python → Java あたりでどう? 俺は今でも Pascal のシンプルさと一貫性と融通のきかなさ(良い意味で)は初心者にうってつけだと思...

    • プロになるなら、Javaはライセンスコストの兼ね合いも出てきたなあ。

  • 目的がプログラミングで食っていくことで 仕事の中身が良いものか悪いものかを問わないんであれば どれだけディスられてようとJavaとかPHPが悪い選択肢だとは思わないけどな

    • たしかに仕事は沢山あるが、正直レガシーな言語なので、あくまでステップアップして別言語に乗り換える事を前提として頂きたい所存。 そもそも職業プログラマーやるなら複数言語操...

      • 職業プログラマーは広く浅くを心がけつつ少しだけ得意分野があればええからな

    • 結局はJavaやPHPを使うにしても、最初に取り組む言語としては、どうなんでしょ。 Javaは複雑すぎない? PHPはいいかげんというか融通無碍すぎない?

      • PHPこそ初心者向けだと思うけどね。 言語の寛容さだけが初心者の命を救う。

        • とっつきやすい点は初心者に向いているかも知れないけれど、その寛容さが後々アダになってこないかなあ。 むしろ最初はシンプルだけどキッチリした言語の方が良さそう。

        • 言語の寛容さだけが初心者の命を救う。 それって、初心者が何かを作ろうとする場合のことでは? 仕事にせよ趣味にせよ。 逆に、学習過程では不寛容というかキッチリした言語の...

      • よくよく考えてみると自分が最初にやった言語が思い出せない・・・ Javaは複雑だから初学者がいきなりやっても意味不明で挫折するかもしれないけど あれぐらいお堅い方がお行儀の良...

        • お行儀の良いプログラマーになるのかも。 / そこでPascalですよ (^.^)

          • どんなプログラミング言語でもいいけど、 間違って書いた時に、そこ間違ってますよって 指摘してくれる言語がいいよね。 でもそう言われるたびに・・間違ってるって分かってんな...

            • Pascalはシンプルな上に間違いを指摘してくれるので、お行儀のよいプログラミングのお作法を身につけやすいから初心者向けだけれど、その反面、融通がきかないので、実務畑ではマイ...

            • 「間違ってるよ」って言うか「そんな書き方許可してないよ」の方が近いかな。

            • Cなんかは融通がききすぎで、コンパイラが何でも通しちゃうからね。 ま、最近はコーディング規約で縛る方向でツールなんかも使われてるようだけど。

      • Javaの何が複雑?単純だと思うけどな。流行ってことをやろうとすると複雑になるが元増田が想定しいそうな人ならそこまで行かない。

        • 根拠はないけどJava叩いておけばわかってる感出るから

          • でも、著名なプログラマーでも、最初の言語としてはJavaは向いてないと言う人おおいよ。

        • そこまで行かなくても、とにかく何かできてしまうというのは却って混乱しやすくはないか? シンプルで縛りの多い言語の方が間違いたくても間違えられないみたいな面があるので。 ...

  • 「色が変わるまで」「しんなり」を数値化するのもプログラミングだったりする。

  • >>なんで増田の都合上半角がダメなのか、そのうち想像できるようになろう。 こういう煽りは別に必要ないですよね? これだけ長文なら関数のあたりでサブルーチン(GOSUB)のこと...

    • 横だけど、GOSUBって何ですかあ〜?

      • おじいちゃん、ご飯できたよ

      • GOSUBというと、何かの古代言語で使われていたような気が..... Fortranだっけ? サブルーチンとか言ってるし.....。

    • 煽りに聞こえてたなら申し訳ない。確かに余計なことを書いたけど、ユーザからの入力を受け付けるシステム(ここでは増田)ではコマンドに使われるような記号は安全のためエスケー...

      • 全体的に「解説」というよりは「注意事項」を重視してるっぽいですね。 「この注意事項をみんなに伝えなければならない」という使命感を感じます。 解説を重視するのなら説明する...

        • まず一番最初は「GOTO」を説明しましょう  ← って、オイオイ、何が悲しゅうて今時BASICなんかの勉強せなあかんねんw 「GOTO文有害論」(Go To Statement Considered Harmful) から半世紀以上、...

          • 今でもwebプログラムはredirectで飛ばしてるだけだからgotoと変わらないよ

          • でもGOTOは不思議とみんな知ってますよね? GOTOを実際に使う機会はなくとも知っておくに越したことはないと思うのですが。 あなたもそうですがGOTOを知っていた上で微妙だと思っている...

            • あなたもそうですがGOTOを知っていた上で微妙だと思っているわけです。  ← いやいやw それは40年くらい前にBASIC言語でプログラミングしてた頃の話w その後、月刊ASCIIとかの雑誌で...

        • そのレベルでBASICを教えるのは、どちらかというと本格的プログラミング入門以前というか、プログラミングに関心はあるけど勉強を始める前にどういう感じのものなのか覗いて見たいと...

          • 全く未経験の中高生あたり向けのプログラミング紹介講座 まさにその通りですが、逆に元増田がどこを目指しているのか……。 (勘で言えばWEB系っぽいですが)

  • 追記いっぱいしてくれてるけど、おばさんは暇なの?

  • このゴミみたいな文章みて確信した 「女性は生まれつき技術者に向いていない」というグーグル社員の主張は正しかったんだと

  • 私はこうしてGoogleに入った (K) · GitHub http://b.hatena.ne.jp/entry/s/gist.github.com/keihayashi/56a861b8f10848ecd0ddcdf700c35ec9 東大医学部卒の女性がアメリカでGoogleに就職したレポート。 高学歴の特徴は「答...

  • 日本語話すのに辞書丸暗記しろといってるようなもん 最低限のコストで目標達成できない奴は馬鹿だから死んだほうがいい https://anond.hatelabo.jp/20190404034812

  • 意識高いM1院生がB4向けに調子に乗って書いたようなゴミ文章。うわあ…としか。

  • >macOSXはLinux 厳密には違います。mac の採用しているOSは FreeBSD系列ですが「LinuxのひとつであるFreeBSD」は本当か - Qiita を参考にしてもらえばわかるように、微妙に違います。実際 GNU-coreuti...

  • 「ハッカーになろう」 (How To Become A Hacker)と内容は大して変わらないぐらいじゃない? あれを大学の先輩に薦められて、なんか屈折したウインドウズ観が出来たわ...。 つか、こういう類...

    • こういう類いの文章こそ、車輪の再発明ではないのかな。  というのは全くその通りかと。もっとよくまとまった文章があちこちにありそう。

    • その文章を見ると、Eric Raymond氏も最初に学ぶ言語としてはPythonが良くてJavaは薦められないとの意見ですね。で結局はCも学ぶ必要があると。

      • 今ほど機械学習やデータサイエンス系のライブラリーが豊富って視点から、pythonが注目を浴びてなかった時の話ではある。LipsもCもって、ついていける人って極一握りだとは思う。日本人...

  • 完全に理解した() とか行頭に書く人並みの文章だった。おつかれさん。

  • オブジェクト指向と手続き型って排他な概念じゃないんだけどな

    • とは言え、同時並行で両方の概念を学んでいくのは効率が悪くないかい?

  • とりあえず Unity インストールして適当なアプリなりゲームなり作ってプログラミングに興味があるようだったらもっと深いところリサーチしたり他の言語覚えればいい。アプローチが遠...

  • プログラミングを勉強してみたくてドットインストールでじゃばすくりぷととかhtmlとかcっsとか一通りやったけど、結局それを活かす場がないと身に着けた端から忘れていくか...

    • HTML、CSS、JSを勉強したらWebサイトが作れるから、Webサイトを作れば無駄にならないと思います。 何かやりたいことや興味のあることはないの?

  • JavaScriptが一番いいと思う。黒い画面なんか使わずとも今開いてるブラウザで遊べる

    • そういう声は割とよく聞く。確かに環境構築で苦労しなくてよい点は大きい。

  • さて突っ込むか… ボロンッ

  • こんなんがホッテントリするってことはみんなプログラミング覚えたいの?もしくは誰かに覚えてもらいたいの?

  • アラフォー女プログラマだけど長くて読めない。論点まとめて欲しい。 黒い画面を使いこなせばプログラミングできる点は同意。問題は何て打ち込んだらいいのか素人は見当もつかない...

  • この増田は参考にできる部分があった。投稿ありがとう。 クソ簡単にプログラミング学習について書く https://anond.hatelabo.jp/20190405013056 こうすればプログラミング覚えられるよ【随時追...

  • 順位 全体順位 ブクマ数 タイトル 日付 備考 1 12 1550 エクスプローラ周り重い人向け覚書 11/16 2 29 1194 クソ簡単にgitの...

  • どうも、覚えてる人がいてくれると嬉しいけど何年か前にプログラミング完全に理解した程度でプログラミングの覚え方を語ってしまったおばさんです。 あの後おばさんはプログラミン...

    • 良かったじゃん プログラマになれますか?ではなくなったという記事は珍しい

    • ぐぐっても元増田発見できねえ 昔どんなのかいたかおしえてクレヨン王国

  • まぁ 言いたいことは分かるが 説明に料理を持ってきたのはあれだね 多分 関数(切る)に 玉ねぎ(パラ くし)とか キャベツ(パラ ざく) 的なことだと思うけど

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん