プログラムの設計方法を学ぶには

このQ&Aのポイント
  • プログラムの設計方法を学ぶためには、MVCやオブジェクト指向などの概要を理解することが重要です。
  • 実際に設計する際には、高いレベルの設計手法を学ぶことが必要です。
  • C、JavaScript、Pythonなどの言語を使用しており、シェルスクリプトやawkもよく使います。
回答を見る
  • ベストアンサー

プログラムの設計方法を学ぶには

プログラムの動作原理、記述はある程度できます。 実際個人で組んだりしたことも何度もあります。 ※研究用とかスクリプトとかの小規模なものです。 しかし、もう少し大きなものや、複雑なもの、もしくは安定した動作をさせるには もう少し高いレイヤーというか設計手法的なものを学ぶ方が良いのではと考えております。 MVCとかオブジェクト指向など概要は分かるのですが、 実際に設計するにあたっての方法論など学ぶには良い本/サイドなど無いでしょうか。 職業プログラマになりたいと言うわけでは無いのですが、 書くのは好きなのでもうちょっとスキルを上げたいと思っています。 とりあえずは、取っ掛かり的なもの、幅広く網羅しているものを学んで、 実際に必要なものを深く学びたいと思います。 その他、アドバイスなどありましたらお願いします。 ちなみに言語はC,javascript,pythonなどを使ってます。 シェルスクリプト、awkもよく使います。

  • k_kota
  • お礼率79% (134/168)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

「UML」、クラス図(クラス階層図)の考え方は古いんですかねぇ。 MVCやフレームワークなどと名前は変わっていても、基本はUMLそのものだと思いますが。 もしくは、仕様を考える段階をUMLだとすると、 仕様から設計に移る段階が「デザインパターン」、ですかね。 アセンブリがミクロだとすると、MVCやOOPはマクロです。 それぞれ同じ開発設計という言葉を使っていても、考え方は全く違います。 ミクロの集まりがマクロになりますから、少なくともミクロができなければ開発はできませんが、それだけできても、やはり設計はできないと思います。 http://ja.wikipedia.org/wiki/要求分析 http://ja.wikipedia.org/wiki/ソフトウェア開発 wikiの関連項目だけでなく、本文中のリンクもたどってみてください。

参考URL:
http://ja.wikipedia.org/wiki/ソフトウェア開発
k_kota
質問者

お礼

確かにこの分野は古くなるものはすぐ古くなりますね。 ミクロの部分はある程度大学で学んでいるので、参考サイトで実践的な部分を学びたいと思います。 どうもありがとうございました。

その他の回答 (4)

回答No.4

No2さん(w) >基礎は、Z80のアセンブラから学んでみては?・・・ 質問者さんへ、この回答は、ちょっと不思議に感じるかもしれませんが、 案外事実です。 言語そのものではなく、コンピューターがなぜ動くか?を 覚えた後は、言語は問題ではなくなるという意味をこの方は言っています。 多少、年がばれますが 「はじめて読むZ80」が私の、神様の本でした(w) ただ、Cがわかるのと、Cが使えるので違うようってことですね! で、私からの回答です。 自分が、考えて多分無理だろうと思うものを作ってみてはどうですか? まずは、”Windows”そのものを作ってみよう?など 結果的に失敗してもいいとおもいます。 本当の失敗にたどり着くまでの経緯に意味があります。

k_kota
質問者

お礼

回答ありがとうございます。 私は哲学がしたいのではありません。 また、手段と目的を間違える気もありません。 pnpの半導体もニモニックも偉大なる先人の知恵ですが、そこから前に進まないと進歩はありません。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.3

私は、以下のような書籍でプログラムを勉強しました。 ちいさなプログラムであれば、とりあえず作ることができますけど、大きなプログラムになれば、優秀な先人たちの知恵から学ぶ必要があります。 ソフトウェア作法 [単行本] Brian W.Kernighan (著), P.J.Plauger (著), 木村 泉 (翻訳) ソフトウェアの複合/構造化設計 [単行本] G.J. マイヤーズ (著), 国友 義久 (翻訳), 伊藤 武夫 (翻訳) 構造化分析とシステム仕様<新装版> [単行本] トム デマルコ (著), Tom Demarco (原著), 高梨 智弘 (翻訳), 黒田 順一郎 (翻訳) もちろん、これだけでは無理で、もっともっと書籍を読む必要があると思いますけど、私は最初のころ、これらの書籍でプログラミングを学びました。

noname#206842
noname#206842
回答No.2

すべてのプログラムは、アルゴリズムの記述でしかない! 言語などは、まったく関係がない! プログラミングは、アルゴリズムを、1ステップごとに記述したものでしかない! これが理解できれば、言語など関係がないことがわかるはず! まして、コンピュータは、0と1しか判断できないという基本から学べばどんなものでも製作できるのでは?・・・ 基礎は、Z80のアセンブラから学んでみては?・・・

k_kota
質問者

お礼

わざわざ回答ありがとうございます。 音声は空気の振動でしか無い、だから言語に意味がない、とはならないと思います。 歩けばどこにでもいけますが、月にはたどり着けないでしょう。人生は短いのです。 アセンブラなら勉強したこともありますし、実際動く機械に入れたこともあります。 ですが、それとこれとは全く異なるものだと思います。

  • drum_KT
  • ベストアンサー率43% (1108/2554)
回答No.1

とりあえず、「デザインパターン」あたりを勉強してみては?

関連するQ&A

  • ラズパイの/etc/rc.localでの自動起動

    現在ラズベリーパイ3でpythonで作成したTCP_clientを起動するためにシェルスクリプトを作成して/etc/rc.localに登録し、ラズパイに電源投入で起動と同時にtcp_clientのプログラムが起動するようにしています。 この"tcp_client1_02.py"のpythonプログラムがたまにダウンしてしまう症状が発生していたため、シェルスクリプトでpsコマンドでこのプログラムが起動していなかったら、自動的に再起動するようにするものを作成しました。 (tcp_client1_02_process_check.sh) #!/bin/sh while true do #isAlive=`ps -ef | grep " sudo python /home/pi/Desktop/tcp_client1_02.py " | \grep -v grep | wc -l` #if [ $isAlive = 1 ]:then if ps axww | grep "[s]udo python /home/pi/Desktop/tcp_client1_02.py" >/dev/null then echo "プロセスは生きています" else echo "プロセスは死んでいます" sudo sh /home/pi/python/autorun_script fi sleep 3 done このシェルスクリプトを/etc/rc.localに登録しています。 (/etc/rc.local内) sh /home/pi/python/autorun_script & sh /home/pi/python/tcp_client1_02_process_check.sh & このシェルスクリプトは echo "プロセスは死んでいます" sudo sh /home/pi/python/autorun_script プロセスが死んだ場合にautorun_scriptというシェルスクリプトを起動するようにしているのですが、ラズパイ起動時にこのプログラムはバックグラウンドで動作しているようなので、いつのタイミングでこのルーチンに飛んでいるのかわからないので、 sh /home/pi/python/tcp_client1_02_process_check.sh の後ろの”&”を削除してみて再起動してみたのですが、これでもプログラム動作の表示が出てこないのですが、この動作を表示させてみることは可能でしょうか? ご教示いただきますよう、宜しくお願い致します。

  • オススメのPython本を教えてください

    現職は、システム管理者なのですが、やっぱりスクリプト言語を扱えると扱えないで出来ることの幅が異なってくるという気がしています。 これまではシェルスクリプトで対応してきましたが、何かにあった時に備えてPythonを使えるようになっておくべきだ。と感じております。 過去にBASICでゲームを作ったり、C言語でOSを作ったりしてきた事はあるのですが、オブジェクト指向言語は触った事がありません。 合う合わないがあるとは思いますので、最終的には本屋で確認して購入となると思いますが、入門書としてオススメな本があれば、そのオススメ理由も簡単に紹介いただけるとうれしいです。

  • WEBプログラマーにとってのシェルスクリプト

    現在業務でPHPやJSでWEBシステムをつくっているものです。 サーバーは、見よう見まねでVPS中でWEBアプリをつくったりWEBサーバーのセットアップ なんかができる程度です。 しかし、いっさいシェルスクリプトというものを書いたことがありません。 WEBサーバーを作るとき以外VPSにほとんどログインすくこともないので そうそうサーバーそのものをさわる機会も多くないです。 さてそこでしつもんです。 いわゆるWEBプログラマーにとって シェルスクリプトは必須スキルなのでしょうか? もちろんサーバー屋からプログラマーまでこなす人はあつかえるのでしょうが、WEBプログラミングを生業としているひとのシェルスクリプトの扱えるレベルが知りたいです。 もちろんできることにはこしたことがないと思いますが、 実際のWEB開発側ばかりさわっていてなかなかシェルスクリプトをさわるきっかけがありません。 皆様のシェルスクリプトの習得具合をしりたいです。

  • AWKスクリプへの引数の受け渡し

    AWKスクリプトへの引数の受け渡し法がよくわかりません。 具体的には以下のようなスクリプトです。 #!/bin/nawk -f { if( $1 == "2" ) printf( "2 CHK;\n" ); else print $0; } このスクリプトの”CHK”という文字列をスクリプト起動時 にこのスクリプトに引渡してスクリプトの動作を動的に変更したいのですが、方法がよくわかりません。 また、このスクリプトの起動はシェルスクリプトから起動 させることを考えています。 ご存知の方アドバイスをお願いします。

  • ファイル一覧を表示

    ファイル一覧を表示するため、別の質問にてシェルスクリプトを教えて いただきました。それを参考に、perlプログラムの中に入れたのですが、 期待した結果が得られません。 (シェルスクリプトで実行すると正常に動作しています) ちょうど「awk -F- '{print $2}'」の部分が実行されないのですが、 perlの中で、awkが実行できないなどの制限があるのでしょうか? それとも、書き方に問題があるのでしょうか? #! /usr/bin/perl chdir("/home/vpopmail/domains/defaultdomain"); open(DIR_IN, "ls .qmail-* | awk -F- '{print $2}' | grep -v majordomo | grep -v owner | grep -v default | sort | uniq 2> /dev/null |"); while($file=<DIR_IN>) { print $file; }

    • ベストアンサー
    • Perl
  • awk in csh

    cshスクリプトの中で、awkと連動させたプログラムを書こうとしています。 以下の様なテーブルファイル(hoge.txt)があると想定してください。 1 0.01 0.52 3.23 ..... 2 0.22 9.34 8.22 ..... 3 0.44 0.68 3.81 ..... ... (列も行も揃っている数値だけのテーブル) 例えば、変数hogeに第2行、第2列の数値(文字列)0.22を代入する際、 シェルスクリプト内部で、 @ hoge = `awk 'NR==2' {print $2} hoge.txt` としましたが、$2をスクリプトに与えられた2番目の引数だと解釈して、 うまく動作しません。 試しに$2 -> \$2に変換してみましたが、ダメでした。 (\の後に改行がないというエラーが出ました) 第i列目,j行目の文字列を取り出すにはどのようにすれば良いでしょうか。

  • コンピュータ系の開発者が行く大学の学部

    高2です。そろそろ行きたい大学を決めたいと思っているのですが、なかなか学部が決められなくて困ってるところです。 コンピューターに関しては10年ほど好きでいじってるので、この方面に進むという考えもあります。 プログラマーもいいかなとも思ったのですが、PHP、Java、C#、Pythonをかじってるのですが、オブジェクト指向がどうしても理解できず、向いていないことがわかりました。 そこで、 ・マザーボードやARMのボード設計 ・すでに設計されたメモリや各種パーツを製品しとして組み合わせること ・VPSやwebホスティングのハードやソフトの管理やインストール(現在Linux歴は3ー4年で、gccでクロスコンパイル、nginxでリバースプロキシがそれなりに使える、stackoverflow読めばだいたい問題が解消できるレベル) の興味のあることに向かうにはそれぞれどのような学部に行くべきか、教えてください。

  • テスト、試験の方法について

    私は新人の社内SEです。主にCOBOLを使った設計、開発をしています。 プログラミングのテスト、試験の方法について、お伺いします。 私の会社は、試験の際のルールは特に決まっておらず、 そのプログラムが通るロジックが正常に動作するか、を網羅するくらいで、 あとはバグの条件を経験と勘で探ることをしています。 テスト不足で迷惑をかけることが多く、なんとかしたいと思い方方調べてみました。 すると、テストにはいろいろな手法があるらしい、ということがわかりました。 制御パステスト、境界値テスト、ホワイトボックステスト 、ブラックボックステスト ・・・分類と内容はまだよくわかりませんが、 世間一般ではこういった手法にのっとり行われるようだ、ということがわかりました。 Q1.私の会社のようなことをしているのは珍しいのでしょうか。 それともやはり経験と勘が頼りなのでしょうか。 Q2.ある手順にのっとって進めることで、ミスは減るのでしょうか。 外注、社内問いません。みなさんの状況と経験をお聞かせください。

  • 組み合わせ関連スクリプト

    組み合わせ関連スクリプト 2つの実験で得た以下(質問の一番下)のようなデータがあります。カラム1は被験者(subject)番号 (1-42)、カラム2は実験1(expt1)で各被験者が属したグループ (1-9)、カラム2は実験2(expt2)で各被験者が属したグループ (1-9)。各実験とも、4人属しているグループと5人属しているグループがあるのですが、両実験の各グループに同じ人数ずつ(4人でも3人でも2人でも1人でもいい)必要なので、何人かのデータを破棄したく、どの被験者のデータを破棄すれば(もしくはどれを残せば)両実験で各グループの被験者数が同一になるか調べたいのです。(もしかしたら以下のデータではそのようなデータ編成は不可能なのかもしれません...)すべての組み合わせを試すと膨大な数になってしまうので、要領よく調べられるようなスクリプトを書こうとしているのですが、どこから始めたらいいのか見当つかずです。(役に立つかわかりませんが)とりあえずブロックごとに組み合わせを生成する、Python のitertoolsを使ったコードを以下のサイトで見つけました: http://code.activestate.com/recipes/501151-generating-combinations-in-blocks/ 汎用性の乏しい質問で(しかも例を簡単にまとめられず)恐縮ですが、何か案がありましたらご教示いただければ幸いです。 シェルスクリプト、awk、それとPython(ちょこっと)が使えます。 データ(フィールドセパレータはカンマ): subject,expt1,expt2 1,1,1 2,1,1 3,1,2 4,1,7 5,1,9 6,2,2 7,2,2 8,2,3 9,2,3 10,2,3 11,3,3 12,3,3 13,3,4 14,3,4 15,3,8 16,4,4 17,4,4 18,4,5 19,4,5 20,4,7 21,5,5 22,5,5 23,5,6 24,5,6 25,6,6 26,6,6 27,6,7 28,6,7 29,7,4 30,7,5 31,7,8 32,7,8 33,7,8 34,8,2 35,8,8 36,8,9 37,8,9 38,8,9 39,9,1 40,9,1 41,9,6 42,9,9

  • SmartyとMVCフレームワークに関して

    殆どMVCフレームワークを使用したことがなく 今更ながら覚えようかと思っています。 MVCフレームワークはCakePHPかCodeIgniterどちらか悩んでおり モデル設計が殆ど必要ない分CodeIgniterがいい気がしていますが 実際のところどちらのフレームワークとSmartyを使用するのがいいのでしょうか? 今回は小規模~中規模のサイトの予定なので簡単に導入取得ができるものが希望です。 CodeIgniter+Smartyの場合、導入方法のサイトが古いものばかり(新しい記事もあるが違う方法)で 最近の最も使われている手法が分かりません・・・ 経験者の方などのご教示お願いします。 CodeIgniterのライセンスが変わったとかで日本サイトの更新が停止しているようなので将来性のことも含めてご回答お願いします>< *導入方法などもご教示いただけましたらお手数とは思いますがよろしくお願いいたします><

    • ベストアンサー
    • PHP

専門家に質問してみよう