こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

新入社員プログラマーですが周りについていけません

文系出身新入社員プログラマーの22歳の女です。
今月入社致しました。プログラミング経験はないです。

今は研修期間で、C言語を学んでいるのですが、周りに全くついていけていない状態です。
同期も文系卒のプログラミング初心者が何人かいますが、その同期は自分でプログラムを組めるのに私だけが組めません。何をすればいいのか、どういう風に書けばいいのか考えればいいのかわからないのです。

研修中に質問したりもしますが、何度聞いても何を言っているのか、どうしてそのコードを書くのか理解できません。

もちろん帰宅後や休日も参考書などを使って遅くまで勉強はしていますが、それでもどうすればいいのかわからないのです。勉強の仕方が間違っているのかもしれません。参考書を読んで載っているコードを書いて、あとは章末の問題を解いて…(わからないときはページを読み直したり)を繰り返しているのですが、それでもできません。まず専門用語なども中々理解できなくて辛いです。

C言語を学び始めてから食事も中々喉を通りませんし、精神的にとても苦しく、情けないのですが行き帰りの電車の中で泣いてしまっています。
1ヶ月しか経っておらず、まだ仕事の内容もわかっていないのにこの状況です。
向いていないのではと思い、転職も考えましたが、転職するにもこの早さで辞めても流石に先があるとは思えないので出来ればしたくないです。頑張りたいです。

同じような悩みをお持ちだった方や業界の方、いらっしゃいましたら勉強方法、仕事の仕方のアドバイスなど宜しくお願いいたします。

投稿日時 - 2016-04-29 09:29:33

QNo.9165486

困ってます

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(59)

ANo.59

まだ満足のいく回答を得られていないみたいなので二度目の回答を

一回目の回答で文系と書きましたが、それは世の中から法則性を見付け定式化できる能力があるかどうかという意味です
Jiamari459さんは、RPGなどのコンピューターゲームはしますか?
するとしてキャラクターのレベルが上がって強くなったとき、将来どれくらい強くなるか知りたいと思いますか?
そして知りたいならどうやって知ろうとしますか?
インターネットで検索するのが一番早くてスマートな問題解決方法かもしれません
でも、私の場合なら幾つかのレベルのサンプルから計算式を推測します
(武器のレベル+キャラクターの能力値)×技による倍率-敵のレベル+乱数
といった感じです
こうして次のレベルの数値を予測しレベルを上げて計算式の正しさを証明していきます
これは科学的手法そのもので、いわゆる理系と呼ばれる人達はこの能力が長けています

掛け算九九のコメントがありましたが、私ならどのように思考するかできるだけ細かく書いてみます

(1)算数の知識より九九は81個の数の集合であり、9の数列を9束ねたものであると解る
(2)一の段に注目すると1から始まり前の値に1足すことの繰り返しで表せると解る
(3)二の段は2から始まり前の値に2足すことの繰り返しで表せると解る
(4)三の段以降も初期値と足す値に1足せば表せると予測できる
(5)プログラミング言語の知識より数の集合は配列、繰り返しはfor文や再帰呼び出しの組み合わせで表せると解る

理系の人はこれくらいのことが一瞬で解ります
実際はこれほど明確に考えているわけではなくて、何となくできそうだと"感じる"のです
こういう感覚は一朝一夕では身に付かないと思いますし、生まれつきのものが大きいです
例えば、理系の人はこの手のゲームが得意です
http://iqtest.dk/
これが苦手だからといって、落ち込む必要はありません
プログラマーには向かないというだけのことです
身長が低くてプロバスケットボール選手には向かないというようなものです
逆に体が小さければ、ジョッキーやF1ドライバーには向いています
Jiamari459さんは、論理的に考え他人に解りやすい文章を書くことができるようなので、IT業界ならヘルプデスクや講師、翻訳家などが向いていると思います
ヘルプデスクも法則性を見付ける能力があるにこしたことはないですが、そういうのは得意な人に引き継げば十分やれると思います

それでもプログラマーになりたいと思うなら、プログラムは二つの要素しかないということを覚えてください
「処理」「分岐」です
処理は本来の仕事(計算)です
仕事が終われば次の仕事に取り掛かります
分岐は次にどの仕事をするか予め決めた条件に従って判断します
「順次」「反復」「分岐」などと書く場合がありますが、分岐の位置によっては必ずしも順にならなかったり反復しなかったりするので独自の書き方をしました
オブジェクト指向でも関数型でも結局はこの二つの組み合わせでしかありません

先ほどの九九を考えてみます
分岐の条件を考えるのは難しいので、まずは処理だけに注目します
表を表示するのですからまず1という数字を表示する処理を書きます

printf("1");

2、3と続くので

printf("1");
printf("2");
printf("3");

これを81個書かなくても規則性に気付くのではないでしょうか
printf()が何度も出てきてくどいですよね
幸いなことに表示する文字が数字限定で数値の変化に規則性があります
"規則的に変化する数値"は変数として置き換えます
ここでは変数nとしましょう
次に変数nがどのように変化するか考えます
最初は1です
初期値などと呼びます
したがって、

n = 1;

となります
次は2です

n = 2;

こうしてしまうと、最初の数字との関係が表せていないので変数にした意味が無くなってしまいます
1ずつ増えるという規則性があるので1を足してみます

n + 1;

これだけだと変数nは変化していません
計算結果を変数nに反映させるには

n = n + 1;

となります
これでnは2になりました
次は3ですが同じ式を使えることが解るでしょう
ここまできたらあとは、この計算を繰り返せば良いだけです
繰り返しにはfor文を使います

for (初期値; 繰り返す条件; 繰り返す式) 処理;

なので条件と処理は無視して、これまで出てきた式を当てはめます

for (n = 1; 繰り返す条件; n = n + 1) 処理;

繰り返す条件とは「分岐」の条件のことです
分岐しなければ、永遠と1を足し続けることになります
九九の場合は「一の段の間」が条件です
それを具体的に言い直すと「9までの間」となり、さらに「変数nが9以下」となります
これを式で表すとn <= 9となり

for (n = 1; n <= 9; n = n + 1) 処理;

こうなります
繰り返したい処理はprintf()なのでprintfの引数を変数に置き換えます

printf("%d", n);

よって

for (n = 1; n <= 9; n = n + 1) printf("%d", n);

区切りの文字が入っていないなどの問題はありますが、一応一の段が完成です
同様に二の段三の段を考えます

for (n = 1; n <= 9; n = n + 1) printf("%d", n);
for (n = 2; n <= 18; n = n + 2) printf("%d", n);
for (n = 3; n <= 27; n = n + 3) printf("%d", n);

またここでも規則性が見付かります
規則性が見付かったら変数に置き換えれば良いのです
今度は変数mに置き換えてみましょう
1、2、3と増えているところは単純な置き換えができます
問題は繰り返す条件です
9、18、27は1ずつではなく9ずつ増えています
これはその段の最後である9をかけた数なのでこう考えることができます

for (n = 1; n <= 9 * 1; n = n + 1) printf("%d", n);
for (n = 2; n <= 9 * 2; n = n + 2) printf("%d", n);
for (n = 3; n <= 9 * 3; n = n + 3) printf("%d", n);

これならば、変数mに置き換えられます

for (m = 1; m <= 9; m = m + 1) {
for (n = m; n <= 9 * m; n = n + m) printf("%d", n);
};

m = m + 1は頻繁に書くのでm++か++mで置き換えることができます(二つの違いについてはここでは説明しません)
区切り文字を表示する処理を間に挟んでやれば完成です

for (m = 1; m <= 9; m++) {
for (n = m; n <= 9 * m; n = n + m) printf("%d ", n);
printf("\n");
};

本来、ここまで変数の数が解ったら配列や再帰での解決を図りたいところです
各段の末尾の区切り文字を無くし、桁もそろえ、何をかけるのか見出しも欲しいところです
このように実際に動くコードを書きながら、設計を見直していく手法をプロトタイピングと言います
プログラミングは自由なので、正解が一つではありません
どのように書けば良いか思い付かないのであれば、こうやって冗長なコードを書いて規則性を見付ける方法もあります
しかし非常に効率が悪いので、アルゴリズムの知識や、いわゆる理系の能力が求められるのです

投稿日時 - 2016-05-18 14:50:54

ANo.58

随分と昔に私が経験したことなのですが、他人ごととは思えないので投稿しました。

私は文系出身で公私ともプログラミング歴0で入社し、30歳までプログラミングにまったく縁がない生産管理部門にいました。その後開発部門に異動し、そこで初めてプログラミングというものに出会い、プログラミングが職になってしまいました。当時はUNIXでC言語、GUI・DBライブラリもろもろ、 シェルスクリプト、perlで工場の製造システムを開発することになりました。

そこからがもう大変なんてもんじゃない、でした。
周りは自分より若い人たちばかりで、おまけに自分よりはるかに知識がある…なんだこりゃ~な世界でした。

恥も外聞もなく聞きまくりました。「またですか~?ww」とか言われながらも何度も同じことを質問していました。
それと並行して、ドキュメントを読みまくりました。
私は頭が悪いので、1冊の本では理解できませんでした。ポインター関連なら書籍だけでも10冊以上は読んだと思います。会社の図書費を食いつぶしたので、地元の図書館でも取り寄せてもらったり、購入してもらったりしました。もちろん自腹でも買いました。
それまでの人生の中で一番必死に勉強したと思います。

会社の開発環境と同じシステムを自宅に用意しようとまで思いつめました。
若い奴に相談したら「安くても300万ですかね」と言われて、どう工面しようかとまでw
最終的には、FreeのUNIX(当時はFreeBSDとかLinux)が動く環境が用意できたので、PCで自宅で勉強しました。

で、やっと人並になれた感じです。3年くらい頑張ったでしょうか。
結果、開発したシステムで賞もいただけるようになりました。

なおポインターについては、気が付いたら分かっていたという感じです。気が付いた時は、なぜあんなに理解できなかったのかが、分かりませんでしたw

すごく文系的な回答なんですが、プログラミング言語に限らず、言語って感覚的な面があると思います。慣れというか雰囲気というか…理系の方からは反論うけるかもしれませんが。

頑張って、コンピューターと仲良く会話できるようになってください。
ある面、人間よりひねくれていないし、こちらからの問いかけに誠実に答えてくれる奴ですから。

投稿日時 - 2016-05-11 20:38:00

ANo.57

”できるようになっている”ことを受け容れましょう。

私は40年前にコンピュータの仕事に初めて携わりました。
それはでは機械の設計をしており、コンピュータとの関わりはほとんどありませんでした。
転属してからは、毎日、勤務時間前と昼休みに勉強しました。
そして三ヶ月立ったある日、”なーんだ、できるようになっているだけなんだ”ということに気づきました。
さらに階層構造が分かっていることが必要なことを理解しました。

これは人間社会も同じです。
世の中にはいろいろな、組織が存在します。
国、政府、官庁、会社、事業所、などなど、それぞれが役割を持ち、活動しています。
目的があり、結果を出します。
そのためには必要なものがあります。
これは入力です。
結果は出力です。
役割は処理ですね。
コンピュータも同じです。
プロブラムも同じです。
関数も同じです。
命令もほとんどが同じです。
何かを入力して、処理して、出力する。
そして、その出力を入力として処理する次の命令や上位の処理がある。

この概念を受け容れることができれば、どんなプログラミング言語も習得できるようになると思います。また、コンピュータは独立の歴史でもあると先輩から教えてもらいました。これも人間社会とおなじです。これらは、構造化分析の考え方につながるものです。コンピュータの本質(社会の構造)はここにあると思います。参考URLをご覧ください。
多くの方の回答があり、全てを閲覧しての回答ではありませんが、私の経験から回答しました。
ご参考になれば幸いです。

笑顔で朗らかに積極的楽天的にいきましょう。

参考URL:http://osami.s280.xrea.com/software12/data/software-05.pdf

投稿日時 - 2016-05-08 09:48:00

ANo.56

IT業界で働き始めて30年近くになるものです。
私も文系で会社に入るまでプログラミング未経験でした。
研修期間もほとんどわけわからず、周りの専門学校出身の人たちをカンニングしてなんとかやり切りました。
私の時代は、C言語ではなくてCOBOLでした。
C言語は興味をもって一時期勉強しましたがいまだによくわかりません。

こんな人間でも30年勤められるのですから大丈夫です。

わからないながらも勉強し続ける姿勢を持ち続けてください。

投稿日時 - 2016-05-05 12:41:34

ANo.55

■安心してください
普通のプログラマーならば誰もが通る道です。
そういう私も、中学生・高校生でN88-BASICのプログラミング経験があったので、大学で、はじめてC言語の授業を受けた時、自分には簡単に理解できると思っていたら、ポインタで大きく躓きました。
その後、C言語をはじめ、JavaやPerl、C++などで製品開発や趣味でプログラミングをしたりしていますが、未だにC言語は奥が深く難しいプログラミング言語だと思います。
貴女の『まさにポインターでつまづいているところです。ポインターがわからず、何度も同期に教えてもらいましたが、その問題はわかっても次の問題になると応用が効かなくなります。』という気持ちはよく分かります。

■オススメの本はコレ
ずばり「C言語ポインタ 完全制覇 技術評論社」です。
私が読んだどの本よりも、ポインタについて正面から説明しています。
http://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%AE%8C%E5%85%A8%E5%88%B6%E8%A6%87-%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-%E5%89%8D%E6%A9%8B-%E5%92%8C%E5%BC%A5/dp/4774111422

でも、中級者向きかもしれません。この本以外ですと「C言語 配列+ポインタ よくわかる実践学習室」「C言語のポインタのツボとコツがゼッタイにわかる本」「C言語 ポインタが理解できない理由」があります。試し読みしてみて、貴女にあったものを選んでください。

■貴女には才能があります。
ソフトウェア業界で一番困るのは、わかった気になって、そのまま曖昧にしてしまうことです。大学生時の私のように、多少のプログラミングの心得があったので、授業をちゃんと受けずにいたらポインタでわからなくなり、回りに質問できずいた私よりよっぽど才能があります。


■C言語は奥が深いです。
プロのプログラマーでもC言語を完全に理解していない人も多いと思います。わかった気になっている人は多いと思います。ですが、仕事の内容によってはそれで何とかなってしまいます。まずは、研修をしっかりこなし、実践で鍛えられながら頑張って下さい。そして、常に学ぶ姿勢を持ち続けてください。

■最初にC言語を学んだのは運が良いです。
C言語は、私が知っている限りでも、1980年代には既に存在していたので、息の長いプログラミング言語です。プログラミングの本家本流です。
最近のソフトウェア開発ではC言語を使わないという意見もあるでしょうが、それはそのプログラマーの業界の話であり、C言語を必要としている業界はたくさんあります。
ソフトウェアの業界は、大きくエンタープライズ系と組込み系の2つにわかれます。
少なくとも、組込み系の業界では、C言語はしばらく残っていきます。
貴女との持っている携帯電話やスマートフォンも、自動車も、テレビも、エアコンも、C言語でプログラミングされて、動いていると言って過言ではないはずです。
C言語は、これからも、当分は無くならないプログラミング言語だと私は思っています。


■そもそも、プログラミングとは
私が文系出身の人にプログラミングの学習法を説明するとしたら、英語の学習法を思い浮かべてもらいます。英語の勉強では、語彙と文法が重要です。しかし、語彙と文法がわかったところで、英語で小論文を書けるわけではありません。
C言語も同じで、まずはキーワード(予約語)と、C言語の文法を覚えてください。キーワードのスペルミスをしたり、文法が間違っていたりすれば、コンパイル時にエラーになります。キーワードや文法を覚えるのは、習うより慣れろかもしれません。
しかし、コンパイル時にエラーが発生しないソースコードでも、論理的に間違っていたりする場合はあります。
プログラミングとは、ソフトウェアを、要求通りに、論理的に矛盾なく作ることが目的となるのです。
論理的に間違っていないソフトウェアにするには、ソフトウェアを設計し、その設計が要求通りか検証することが重要です。ソフトウェアの設計は大きく2つに分かれます。
構造の設計と、振る舞いの設計です。構造の設計はフローチャート、振る舞いの設計はシーケンス図や状態遷移図などで行います。フローチャート、シーケンス図、状態遷移図などから設計を正しく理解し、ソースコードにすることがC言語のプログラミングです。
貴女は、まだ、ポインタを含めた文法の演習をしているに過ぎません。


■プログラミングには文法だけではなく、作法やマナーがあります。
文法を理解し、設計を理解し、論理的に矛盾のないプログラミングができるようになったら十分かと言えば、そうではありません。
英語でも、文法は間違っていないが、場違いで失礼な言葉や、難しい言い回しなどがありますよね。例えば、初対面の女性に、いきなり年齢を聞いたりするのは失礼ですよね。
これら作法やマナーは、プログラミングにもあります。
作法やマナーは、会社でガイドラインと言う形で決めてある場合があるはずです。もし、会社になければ以下のサイトから無料でダウンロードできます。参考にしてみてください。
「【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版]Ver.2.0(ESCR Ver.2.0)」
https://www.ipa.go.jp/sec/reports/20150410.html

作法やマナーは、初心者のうちから知っておいた方がよいと私は思います。
キーワードと文法を覚え、設計を正しく理解できるようになり、要求通りのソフトウェアが作れるようになり、作法やマナーを覚えて実践すれば、貴女は一流のC言語プログラマーになります。


■最後に、プログラミングを楽しんでください。
自分がプログラミングしたソフトウェアがコンピュータ上で動くということは楽しいことです。そして、それが製品となり、世界のどこかで使われることは感動的なことです。
その楽しさや感動を得られるチャンスが早期に来ることを祈っています。

投稿日時 - 2016-05-04 19:12:48

ANo.54

プログラミングは自転車の乗り方を覚えるのに酷似していて、手本のコードを読んだり自分で小さなプログラムをいくつも書いて走らせてる内にある日突然理解できて来るものだと思います。1ヶ月みっちりと学んだという事なので、参考書を閉じてゼロから小さなプログラム(メモリー操作等の各項目に特化したもの)を書いて、コンパイラーと格闘しながらプログラムを修正して行き、走らせる練習が有効だと思います。あとは100行以下の手本になるようなコードを印刷して、ペンで説明を加えながら熟読するというのも有効だと思います。それを繰り返してるうちに恐らくある日突然見えてくると思います。自転車の仕組みを頭で理解しても乗れるようにはならないのと同じで、実際にコードを読み、コードをゼロから書き、コンパイラーと格闘しながらバグを取って、走らせる事の繰り返しが必須だと思います。

投稿日時 - 2016-05-03 17:45:05

ANo.53

ちょっと長文でわかりにくい回答が多いと思います
特にポインタの話は人によって理解の仕方がバラバラなので、ここの回答から理解しようとしない方がいいと思われます(というか何故ポインタやハードウェアの話が出てくるの?)

自分は中学生の頃にBASICで初めてプログラミングに触れ、C++を15年ほど使ってるゲームプログラマですが、C言語ですら「プログラミング自体が初めて」の人が1ヶ月程度で理解できるものではないです。理解できなくて当然です。

私が思うに、質問者さんはまだ「言われた通り」「教科書通り」にしか書いたことがないのではないでしょうか?
私は「自分が書きたいように書いてみる」というのが、まず初心者に必要な第一ステップだと思います。

それをしばらくやってみても楽しくない、向学心が湧いてこないというのなら、ANo.13の方がおっしゃるように「本当に向いてない人」だと思います。


一番いいのは、仕事でなく自宅でやってみることなんですけどね・・・・

大体、C言語なんて「作って結果を出す楽しみ」とは程遠い言語なんで、初心者がいきなりやる言語じゃないですよ(C/C++の必要性を理解するのはもっともっと先の話)
自宅でVisualBasicとかC#とか(どちらも無料で使えます)、簡単な言語に触れてみるといいと思うのですが・・・・
向いてるか向いてないかの判断は、それからでも遅くないのではないでしょうか。

投稿日時 - 2016-05-03 13:19:00

ANo.52

プログラミングを用いた学習をしている大学生の者です。私が考える、プログラミング学習の最短経路は人に聞く事です。プログラミング言語を学習する時に大事な事は、単語を覚える事は勿論ですが、第一にプログラミングが動作する順序、方法を考える(アルゴリズム)を考えられる用になる事です。このアルゴリズムは何より過程を大事にします。取り敢えずプログラミングが動作すればいいのではなく、なぜ動作するのかを理解する必要があります。理解しようとする時、本の説明では不十分であったり、過去に説明した内容は省略する事が殆どで、ページの行ったり来たりで余計にややこしくなってしまう事があると思います。ですので、相談できる相手に聞く事やプログラミングを学習する人用の知恵袋の用なサイトがあるので、その場所で質問し倒す事がプログラミングが上達する一番の近道だと私は考えます。

プログラミング用Q&Aサイト
テラテイル
https://teratail.com/?sip=c00800_002

投稿日時 - 2016-05-03 10:41:50

ANo.51

私はプログラマーからSEを経て、プロジェクトマネージャをやっている、大手Sierに勤めている者です。皆さんがあまりにもプログラムをいかに学ぶべきかという方向性だけで回答しているのを見て、たまらず別方向の回答をしたくなりましたので、投稿します。

私のプログラミングの経験は、マシン語から始まり、COBOL、FORTRANなどのホスト言語、その後オープン系に移り、VB、PL-SQL、C、Java(JSP含む)など、経験した言語は10を超えます。
その私が思うのは、結局、アルゴリズムが理解できるかどうかであり、どの言語かはあまり関係ないということ。
また、そのアルゴリズムを理解できるのは、センスがものを言い、残念ながら向いていない人はいるということです。

そこからのアドバイスなのですが、あなたの会社で携わっている業務がアプリ開発だけではなく、コンサルティングからシステムの企画・設計・開発、ネットワーク環境等のインフラ構築、保守・運用までをトータルサービスとして提供している会社なら、素直に人事部門へ相談して、配置換えを希望したほうがよいです。

なにもそこで卑屈になる必要はありません。単に「自分のやりたいことと違う」と言い張ればよいのです。
自分のやりたいこと、将来のビジョンを示して、そこに至るまでのキャリアをどう積んでいくのか、周りの人と一緒に考えていけば良いのです。

さて、そこで問題となるのが、将来のあなたのやりたいことです。
実はSierでは、プログラムを書く人は、ごく一部です。他にもいろんな業務があります。
例えば、「コンサルティング」、「インフラ構築」、「保守・運用」、「技術営業」などです。

もし、あなたが文系出身というのであれば、人とのコミュニケーション能力には自信がある、といったことはありませんか。
もしくは聞き上手で、素直で謙虚な姿勢を保つことができる人ですか。
であれば、しめたものです。その能力を伸ばすことを考えましょう。

その場合、お勧めはコンサルティング業務です。
実はコンサルティング業務ができる人は、この業界では圧倒的に人材不足です。
プログラマーは、はっきりいっていくらでもいます。最近は海外へ開発を発注することも多いので、ますます価値が下がってきています。
当然、単価は下げ傾向ですし、給料も安いです。(スペシャルな技術特化のプログラマーは別ですが。)

もし、要件定義などの上流工程もできない単なるプログラマーだと、いいところ単価70万くらいです。自分の会社で色々と引かれて、月収40万程度、手取りで月収30万弱といったところでしょうか。

これがコンサルティング業務だと、安くても単価100万は切りません。経験豊かな人だと年収1000万は普通です。

あなたの勤めている会社に、PMOと呼ばれる人は、プロジェクトに参加していないでしょうか。もしくは聞いたことがありますか?
興味があったら調べてみて下さい。今、プロジェクトを推進していく上で、PMOはなくてはならない存在です。

どんなことをやるかというと、会議体の設定・運営、マネジメント層へのレポート、関係部門間の調整、課題管理、プロジェクトの状況の可視化、各種ルールの整備・徹底など、要はプロジェクトをコントロールするために何でもやります。

このPMOという業種に、コンサルティング会社やSierは人材を派遣するわけですね。

さて、このPMOという業務はある意味何でも屋さんなので、参考書や講習を受けたところで、なかなか身につきません。経験がものを言います。
なので、若いあなたは、経験豊富な人に弟子入りし、一緒に行動を共にしながら雑用をこなし、その中で身につけていくのが一番です。

初めはわけがわからず、つらいかもしれません。ですが、初心者であることを謙虚に受け止め、周りの方々に教えてもらう気持ち、感謝する気持ちがあれば、割と回りもフォローしてくれるものですよ。

そのためにも、あなたの会社の人事部、もしくは上司などに相談し、将来像と希望を伝え、どういったキャリアパスを描けるのか、相談すべきなのです。

少し、コンサルティング業務のことを書きすぎたかもしれません。
そこまで、ご自身のヒューマンスキルに自信がない場合、次のお勧めは「保守・運用」です。
初心者の運用エンジニアだと、マニュアル通りに、業務を正確に処理するだけです。
たまに、異常が発生しますが、これもマニュアルに対処方法が書かれていますから、それに従って行うだけです。
上級の運用エンジニアになると、予測されるリスクの回避策を提言したり、障害の兆候があらわれていないか監視してレポートを挙げる業務などが加わります。

他にもSierには色々な業務がありますが、全て書くと長くなるので、割愛します。
要は、私が言いたいのは、プログラミングに向いていない人というのはいるということ、プログラミングができないだけでIT業界で生きていくことに失望しなくても良いということです。

実は、昨年私の部署に、某有名大学の新人が配属されてきたのですが、その新人も全くプログラミングに向いていないタイプでした。
学力とプログラミング能力は全く別なのだと、改めて思いました。
ちなみにその新人は、プロジェクトマネージャ希望で、そのためのキャリアパスを私と一緒に描いて、日々、努力しています。

最後に、もしあなたの会社がSierの二次受け、三次受けの開発専門の会社で、開発以外のコースへの道がないのであれば、違う会社に移るのを検討することをお勧めします。
向いてない会社に居続けて、うつ病になるよりよっぽどマシです。

その場合、転職活動が始まるわけですが、その転職活動の中で、先ほど述べた、ご自身が目指す希望、将来像を面接で語り、取り合ってくれる会社を探すのです。

面接でプログラマーに向いていないからではなく、スキルアップのために転職を希望しているという前向きな理由であれば、早期の転職も比較的マイナス材料にはなりにくいと思います。

投稿日時 - 2016-05-03 08:53:40

ANo.50

こんにちは、はじめまして。
何やら懐かしい気持ちになったもので、初めて登録して回答させていただきました。
今は業種が異なる所で働いてますが、10年ほど前に転職の際に経験無くITへ就職した事があります。(未経験者歓迎に惹かれましたが実際にはブラックで派遣に次ぐ派遣...)
待遇の話は置いておいて、一応3週間ほど同じくC言語の研修がありました。その間はトピ主様と同じ気持ちで「何が分からないか分からない」が一番合ってる様な気持ちで、結局研修では理解できませんでした。
そこからはコードが書けないって事で先輩のお供でニコイチ扱いで格安で出回ってました...一応デバッグや文書面は何とか出来たのですが1年でIT業界を諦めました。
その間はずっと自分に出来無さに苛立ちを感じてアルファベットに追い掛けられる夢を見たりと今では懐かしい気持ちです。
そんな私ですが今では他業種で全くプログラムなど関係ない所ですが?ExcelやAccessで業務補助的なもので簡単なコードは書けて、周りからは業務の手助けになると喜んで貰えてます。(ただの自己満ですが多分きっとそうだと思ってます。)
IT辞めた後で全くコンピュータ関係無い職種に転職したため、あまりのアナログで業務を効率化させたいと思う様になり、一度作ったら前よりももっと良い物、もっと喜んで貰えるもの...と目的が明確になり自然になった感じがします。
今でも専門的なものはサッパリですが苦手意識やアルファベットに追い掛けられる夢などはありません。
歯車に合う瞬間みたいなものがあると思うので無理せず今自分に出来る物をされてみてはどうでしょうか?今経験されてる事は必ず後で役に立ってきますよ。

投稿日時 - 2016-05-03 08:52:12

ANo.49

こんにちは。SIer歴18年です。

>何をすればいいのか、どういう風に書けばいいのか考えればいいのかわからないのです。
>研修中に質問したりもしますが、何度聞いても何を言っているのか、どうしてそのコードを書くのか理解できません。

なんかわかる気がします。自分も似たような感じでした。ポインタとかフローチャートとかそういうのではない気がします。

例えるなら
500円玉で120円のものを買った時のお釣りの計算と学校で500-120の答えを学ぶことが自分の中で一致しないような感じかと思います。参考書や問題集で500-120=380を学んでも、いざ実際に買い物をしようとした時にどうやってお釣りを計算すればいいのかわからない、とか。

もしそうであれば、計算方法の側ではなくて買い物をする側から考えたほうが良いと思います。問題を読んで回答例の通りソースを書いても、何のためにそれをしてるのかが、理解できないと苦しいと思いますので、教科書的なテキストよりは簡単な電卓を作るなどの実践的なテキストを探したほうが良いかと思います。

時間的に辛いかもしれませんが場合によってはWebでのJava ScriptやExcelでのVBAあたりから始めると
そのコードが何をやっているのか、何を意味しているのかは理解しやすいかと思います。

ただこの業界でやっていくのであれば最終的にはC言語のような低級言語の理解は必須ですので、そこへ向けて頑張って下さい。

投稿日時 - 2016-05-03 02:47:45

ANo.48

こんにちは。26歳まで音楽の勉強ばかりやっていて文系にも理系にも属さない者です。
今はSIerとしてネットワークインフラ周りの仕事をしていますが、趣味も兼ねて業務の中でpowershell、javascript、VBS、プライベートではpythonなどを触っています。

私は始め、人が書いたMS-DOSのバッチを見て『おおー手を動かさなくても良いなんて素晴らしい~』と感銘を受けて、自分でも書けるようになりたいと人が書いたものの猿真似から入りました。
Cは基本情報取るときにテキストとcrgwinで勉強した程度です。

と、自己紹介はここまでとして、恐らくですが、スレ主さんと私の回路は少し似ているのかなーと感じています。
完全に理解出来ない内は中々思考が進まないのではないでしょうか?

『社会に出て因数分解がなんの役に立つのか』と同じように『ポインタなんてなんの意味があるのか、わざわざポインタ渡しなんてまどろっこしいことせずに値渡しで良いじゃない』という疑問はありましたね。その疑問がある間はポインタの理解は進みませんでしたよー(>_<)

(その課題は基本情報を取った数年後バリバリVBAで自作関数いじってる時にByRef(参照渡し)とByVal(値渡し)の使い方を覚えてようやく解決しました。)

何が言いたいかというと、恐らく人にはそれぞれ回路パターンがあって、そのパターンにマッチした有識者に相談するのが一番かと思いますーって事です。そもそも1~2ヶ月程度の研修で深い部分まで理解出来る人など皆無でしょうし、先ほどの回路パターンもあるので当然個人差が生まれます。但しその個人差には優劣はなく、先行逃げ切りタイプであれば持久力が無かったり応用力が無かったりしますがスロースターターであっても劣等感を感じるのは最初の一、二年だけで、その壁を越えれば後は楽しい世界が待っています。(ただ、その時期になっても成長を感じられないのであれば自己啓発が足りないかもですが...)
多分今の研修の人たちの回路はスレ主さんの回路に合わないのです。試しに私が教えてあげてみたいんですけど文章だけだと無理なので、近くにそういう人いないのでしょうかね?

もし居ないのであれば下記の様なサイトで勉強会やセミナー等のイベントに参加して同じ苦労を経験した人や同じ様な回路の持ち主を探してみるのも手です。(多くは無料でやってますが、C言語で限定してしまうと数は少ないかもしれません)

http://eventdots.jp
http://connpass.com

最後に、スレ主さんも含め我々は『あんなこといいなーでっきたーらいいなー(世代的に伝わるのか?!)』の○ラえもんの様にユーザー(のび○)含めステークホルダー(ここでは敢えてテレビ視聴者とします)のウキウキワクワクを色々な意味で叶えてあげられる、また、自分の才覚一つでステークホルダーを意のままに操れ...(コホン)夢を見させてあげられる素敵な職業だと私は思ってます。(辛いこともそりゃありますよ(´;д;`))

人によって価値観は異なるので、例えばスレ主さんが数年経過してそれなりにプログラミングも出来る、サーバーも自前で立てられる様になったと想像してください。そうした時、楽しい未来像や仕事の仕方が想像できますでしょうか?どこかワクワクが残ってるでしょうか?

もしも、欠片も悦び見出だせない様でしたら向いていないのだと思います。少しでも何か前向きなものを感じるようなら向いています。私はこの業界で多くの人にお会いした知見から、回路の違いや一時的な出来の良し悪しは全く向き不向きと関係無く、寧ろ好きかどうか、そこに尽きると考えています。

挫折は誰でも味わいます。(私ももはやボロ雑巾...でも、毎日が楽しいですよ!)
今は辛いと思いますが数年先を客観的に見据え、目先の成果だけにとらわれないことが大切ですよ!

長文乱文失礼しましたm(__)m

投稿日時 - 2016-05-03 00:56:53

ANo.47

はじめまして。
女子大の文系学科出身で、26で未経験からIT業界に転職してそこから10年SEをしているものです。
(ちょっと不憫でしたので初めて登録して回答記入させていただきました)

C言語の研修、つらいですよね。
私も入社してすぐ、C言語の研修がありましたが、理解できなくて半泣きになりながら課題をやっていたことを思い出しました。
今はCは読もうと思えば読めますが、メインはJava, C#.net, VB.net, JavaScriptなど扱っています。
実務でCを使ってはいませんが、とりあえず1言語がそこそこわかれば、あとは応用でどうにでもなります。

まず、文系だからできない、ということはまずありません。
(最先端の技術をゴリゴリ書くスーパーエンジニアや、ゲーム業界のように3Dとかで計算ごとを多用するようなところにはとてもかないませんが…)
文系だから…といった劣等感は持たなくて大丈夫です。

■フローチャート書いていますか?
お勉強なさるときに、コードだけにらめっこしていませんか?
『何をすればいいのか、どういう風に書けばいいのか考えればいいのかわからないのです。』ということですが、フローチャートは書いてみましたか?
私が新人教育するときには、コードを書く前にフローチャートを書いてもらっていました。自分も、わからなくなったら今でも書きます。
プログラムは、極論ですが、インプットとアウトプットが合っていればそれでいいのです。
まだ1ヶ月ですから、きれいなコードを書こうなんて思わなくて大丈夫です。そんなものあとからいくらでも習得できます。
まずコードを書く前に、「どういう情報が与えられていて」=インプット、「どういう結果になればいいのか」=アウトプットを整理して、とにかく流れ(処理)を考えてみてください。
日本語でいいんです。◯◯が××だったら~とかどこかに出てくるでしょう。そうしたら、それをコードでどうやって書くの?って調べて、変換すればいいのです。
『研修中に質問したりもしますが、何度聞いても何を言っているのか、どうしてそのコードを書くのか理解できません。」ということですが、おそらく、そもそもどういう流れにすればいいのかが落とし込めていないので、どうしてそのコードを書くのか、という疑問がでてしまうのだと思います。
#処理のやり方は何通りもあります。あなたが考え出した流れを、講師側が頭ごなしにただ否定するようなら、それは教え方が悪いですね。

■絵や図にしてみましょう。
文字だけで飲み込めなければ、絵や図を書きましょう。私もよく紙に書いています。
ANDやORなど、「◯◯が××だったら~」を整理するのに役に立ちます。

■先に回答を見るのもアリです
実際に業務に入る場合、最初はゼロから書かせることはおそらくないでしょう。
誰かが書いた、似たような処理を参考に書いてみたりするものです。
今時ネットで調べればコードはいくらでも出てきます。
それを1ステップずつ、何をしているのか、調べて理解していきましょう。
(メソッドの暗記は頑張らなくても大丈夫です。よく使うものはそのうち嫌でも覚えます)
#「コピペは悪」と言われますが、何をしているのか理解していないまま転用するのがダメ、っていうことです。

■書いて動かしていますか?
書いたコードは必ず動かして、確認しましょう。実感を伴った方が理解できるというものです。
エラーが出たときも、ただ「エラーが出ました」と人に聞いては何の回答も得られません。
何をしてどういうエラーが出たのか、5W1Hを整理して確認しましょう。
そして、意図した通りに動いたときの嬉しさを体験してくださいね。

■ポインタについて
私もこれは理解するのに時間がかかりました。他の言語でもどこかしら存在する概念なのでわかっておかないと後々つまるところもあるでしょう。
どう使うのか?という実感はとりあえずあとからついてくるので、こういうもんだって暗記しちゃいましょう。
私は絵でないと理解できなかったので、こちらの本が助けにはなりました。
アンク著『Cの絵本―C言語が好きになる9つの扉』
http://www.amazon.co.jp/dp/4798101036


----
どんな仕事であっても、成果を出すためには自分のスキル知識経験が必要になります。
質問者様がおっしゃる通り、まだ判断するのは早いように思います。

いちおう、プログラムを書けるようになった先の仕事の仕方として、
・文章を書くことは理数系より有利(設計書等のドキュメント作成能力は必ず要求されます)
・ITの知識が浅い人向け(お客様etc)の、文章や図を使った平易な説明ができる
・女性ならではの配慮をする(色彩感覚や物事の整理、調整ごとなど)
など、徐々に自分のカラーを出していければいいと思います。

休むときはしっかり休んで頑張ってくださいね。

投稿日時 - 2016-05-02 19:52:56

ANo.46

休みの日に、code.org(https://code.org/)でアルゴリズムの勉強をしたらいいんじゃないかな。
ある程度出来るようになったら、Scratch(https://scratch.mit.edu/)でオリジナルの作品を作ってみるといいんじゃないかな。

投稿日時 - 2016-05-02 18:39:30

ANo.45

C言語のポインタは有名な難関ですね。簡単なCPU、メモリと機械語から入らないときちんとした理解には至らないかもしれません。

ちなみに、C言語やJavaでは合わなかったけど、Rubyをやったらハマった女性プログラマの話がどこかにありました。
最近はC言語などできなくてもプログラミングの仕事はあります。ただし、C言語を教育でやっているのであれば、必要なのかもしれません。プログラマと言っても千差万別です。

うちの会社ではハードウェアも扱う関係でCASL、C言語と進みましたが。

ーー以下はポインタについて

弊社の初心者教育では、2進数やCPU、メモリの簡単な話から始まる本とCASLから始めました。
これでキチンと理解につながるか?も実はわかりません。

【ポインタとは】

ポインタについて、文字だけでご理解いただけるかどうか?(よくある本と変わらない気がします)
★わからなくなったところを教えていただけると助かります。

・C言語の変数などは全部メモリ格納されます(※ちなみにプログラム本体も入りますが)。
・メモリは値を入れる場所に番地(アドレス)がついています。
・変数ごとに決められた番地に値が入ります。番地は0x01011010のような16進数で表しますが、わかりにくいので名前をつけられます。それが変数名です。
・普通の整数(int)や文字変数(char)は、値として、整数値や文字コードが入ります。
・プログラム上では変数名そのものが値になるのでたとえば、int a=20;とかけば、 aは20です。変数aのアドレスを知りたいときは&aとします。
・そういう意味では、printfをマスターして、値をうまく表示できるようになると、イイかもしれません。

int a = 20;
printf( "a=%d address of a is 0x%08X\n", a, &a );

とやると、aの値とアドレス(16進数)が得られます。※ちょっとワーニングが出ると思います。

※どちらもメモリ上では2進数なので見た目では区別できませんが、変数宣言で入れる値が整数か文字なのかをプログラマが決めています。

・ポインタが特殊なのは、値を入れるところに番地(アドレス)が入っていることです。
・ポインタの場合は、値として入っている「番地」に実際の値が入っています。
・ポインタは文字通り、「別な番地を指している」のです。

・ポインタが面倒なのは、指している先にいろいろな型があって、アクセスする表記がいくつかあるからでしょうか?
たとえば、構造体のメンバーになると扱っているものは構造体そのものなのか、構造体のポインターなのかによって、ー>やピリオドに変わります。話をとても複雑にしています。

・C言語に限りませんが、プログラミング言語では、「扱っている変数の型がなんなのか?」は常に頭に入れておく必要があります。ただし、最近の新しい言語(Java, Ruby, Python, Javascriptなど)は勝手に型を決めてくれますし、ポインタの概念を排除するのが流行りです。わかりにくくて間違えやすいからですw。

【ポインタを使う目的を理解する】

・ポインタが必要なのは、たくさんのデータを渡すときに、その先頭アドレスだけを渡せるからです。そうでないと、関数の引数が大量になってしまいます。これではプログラマ全員に大変な手間がかかり、間違えやすくなります。

・プログラムでは、まとまったデータ構造を扱います。通常は構造体という形でまとめます(C++ではクラス)。人を管理するプログラムでは、名前、電話番号、生年月日などさまざまな「属性」が必要になります。これらのデータを一つ一つならべて関数に渡して処理するのは大変なので、構造体という形でまとめます。この構造体を関数に渡す場合は普通はポインタや参照という物を使います。

どうしても長くなってしまうのですね。

投稿日時 - 2016-05-02 15:19:15

ANo.44

現在SEの者です。

誰でも始めは初心者です。
あなたが今の仕事に決めたのはどんな理由でしたか?

確かに仕事には向き不向きがありますが、まだ1ヶ月の研修中なので、
慌てて結論を急ぐ事はありません。

仕事とはチームでやるものです。
わからないなら、わかる人に聞くのが一番です。

ここに質問を書いてるって事は、パソコンが使えるのですね。
ならば、その自分のパソコンに開発環境を作る事から始めてはいかがでしょう。

その為には、自分用のマニュアルを作るつもりで、聞いた事をメモしていきましょう。
そのメモはあなたの頑張りの足跡に必ずなります。

また、そのメモはあなたの宝物にもなります。

文系出身の方なら、理論立てて文章を書く事が出来ると思いますので、
イラストや自分が解る言葉で書いていく事をお勧めします。

1つの仕事を覚える事は、どんな仕事であっても、苦労します。
でも、その苦労は必ずあなたの血となり肉となります。

仕事は仲間があって初めて成り立つものです。
まずは仲間をたくさん作りましょう。それも財産になります。

技術的な事は常に進化して行きますので、最後は自分自身との対話が大切です。

この質問が将来の笑い話になる事を願っています。

無いものは作れば良いのです。

顔を上げていきましょう。

ではでは。

投稿日時 - 2016-05-02 15:13:17

ANo.43

昔、メーカーで組み込みプログラムしてました。
今では他業種で、プログラムの組み方は忘れました(笑)

研修座学でプログラム学ぶって事自体、かなり無理があると思います。何人もの方が仰るように、プログラムは実際に組んでみないと分からないし、組んでみて動けば楽しいものです。

会社に実習用端末ってあるんでしょうか?
それが無しでテキストのみの勉強だとかなりキツいし、つまらないと思う。
あと、ポインタの理解ですがハードウェアの基礎知識が少し要ります。
これは会社のカリキュラムの問題ですね。

独学のためにCプログラムを動かす環境については、会社の同僚、先輩または友達の方に相談してみると良いと思います。Cのプログラムを動かしたいのだと。私ならRaspberry Piという学習キットを推します(詳しくは検索してみて下さい)

では、頑張って下さいね。

投稿日時 - 2016-05-02 12:52:01

ANo.42

運動会や音楽会で、演目が書かれた紙をもらいましたよね。あれ、なんていうものでしょう?「プログラム」と言いませんでしたか?
「プログラム」と、「C言語によるコード」を、分けて考えてください。
今、あなたは日本語を使っています。その日本語で、あなたがコンピュータにさせたいこと、つまり課題やこの先は仕事ですね。それを説明してみてください。おそらく、すらすら出てくると思います。では、英語やドイツ語、スペイン語で説明してみてください。日本語のようには、すらすらできないでしょう。なぜできないのか。語彙に乏しく、また文法もあやふやだから、ではないでしょうか。だから、どうやって説明しますか?まず、日本語で考え、それを翻訳するのではないでしょうか。
同じように、日本語で、できるようになる手順を考えてください。この時、学校の問題のように0から始めるのではありません。実現しなければならないことはわかっているので、ゴールからスタートへ戻るように、これをするには何が必要かを考えます。必要なものの必要を満たす方法を考えていきます。最後に、Cという言語に翻訳します。
そうして語彙がたまると、いきなりコードを書けるようになります。
今は、研修や他人が書いたコードを、日本語に翻訳してみてください。私は26年目、プログラミングを始めて32年目ですが、今でも日本語から始めます(設計から始めます)。

あ、あと、そういうことを吐き出すことができる友達も作っておいてください。研修なら、作ったコードをお互いに説明しあうのもいい学びになるんだけど、そういう時間はありますか?

投稿日時 - 2016-05-02 12:37:07

ANo.41

子供でも楽しんでプログラミングの仕組みが学べるゲームをオススメします。
例えば↓の The Foos はPC、mac、iPhone、Android対応で、無料です。
http://thefoos.com/

これをクリアする頃には、ループや条件分岐等の基本が理解できると思います。
日本語<>英語と同様に、ブロック組み合わせ<>C言語も文法が違うだけで基本的には同じです。
次のオススメは Scratch。同じく無料でより高度なことができます。
https://scratch.mit.edu/

ゲームで目標を達成する喜びや、やりたいことを自在に創る楽しさを味わってください。
これらが楽しめれば、プログラマーの道も可能性があると思います。

投稿日時 - 2016-05-02 12:28:30

ANo.40

某検索大手、元プログラマーですが現在は営業してる者です。

辛いのなら早く道を変えるのも手だとは思いますが、客観的にご相談内容を拝見している限りでは、まだ「向いていない」と判断できる状態ではないと思います。
むしろ「どうしてそのコードを書くのか」が気になって理解が進まない、というのなら「向いている」可能性すらあるかと。

今はプログラミングの学習のための情報が溢れてるので、プログラマーの数が増えましたが、一方で裾野が広がったので「コードを書ける=プログラミングが(仕事で使えるレベルで)できる」とは言えなくなりました。

本当の意味で「プログラミングができる」人となる要素はいくつかあると思いますが、「どうしてそのコードを書くのか」という点に意識が向く、というのも重要な要素だと考えてます(もっと言えば、「なぜその機能を作る必要があるのか」「なぜそのような仕様なのか」、という段階で考えないといけない場面が多々あります)。

何か一つ、自分のプログラムで動く物を作ってみて、それでも楽しくなければその時は別の道を真剣に考えたほうがいいかもしれません。
自分が上の段階に至るまでの進め方についていくつか自分が試してよかったこと、それから(おそらく)今ツラい思いをするほど疑問を感じてらっしゃることについて回答します。


1. 「なぜそのコードを書くのか」
そのコードを書く理由はいくつかありますが、そもそも不要な場合と、一見不要に見えるが必要な場合が有ります。パッと思いつく範囲だと↓こんな感じですね。

<一見不要だが必要なパターン>
・技術的な制約(=プログラムが動作する環境や、プログラミング言語そのものの仕様など)があり、目的を達成するためにはそのようなコードを書かざるを得ない
・長い目で見るとそのコードがあったほうがいい(=後でメンテしやすい、とか)

<そもそも不要なパターン>
・設計する人の腕がアレなので、ぶっちゃけ、本来必要ないコードを書かされている
・トレーニングとかで意味のないコードを書いている(<-- 質問者さんの場合これじゃないかな、もしそうなら思い切ってトレーニングの題材を変えればいいと思います)

<必要か不要か微妙なパターン>
・顧客の要望によって、本質的には不要なコードを実装する(=これは、「クライアントに要求されている」という意味では必要なコード、かもしれませんが、中途半端に詳しい人に要求されると、純粋にソフトウェアの視点から言えば必要ないことを実装しなければならないことがある)
・経済合理性(=例えば、C じゃなくて別の言語を使えば、もっと書かないといけないコードが少なくなるけど、今自社にいるプログラマーは C しか知らない、とか、単価が安いとか)。


2. どう学習すれば良いか
学習方法は人それぞれフィットする方法があると思いますが、自分が新しい言語を学ぶ場合は「何か一つのものを作りながらプログラムを覚えていく」という本やサイトと「リファレンス(=プログラミング言語の辞書みたいなもの)」の二種類を使って学んでました。

「何か一つのものを作りながらプログラムを覚えていく」というのは、ごく簡単なゲームとかダイエットのための計算するプログラムとか、さすがに質問者さんが普段実際に使ってるようなものはできませんが、実際に意味のあるものを作り上げていく、というプロセスを体験しながら言語仕様を身につけていく、という学習方法です。
そのタイプの本だと、
新版 明解C言語 中級編 http://amzn.to/1NNowAz(新版が出てますが、この版が一番「作りながら覚えていく」というのに近いと思います)
C言語体当たり学習 徹底入門 http://amzn.to/1NNoHeU

ただ、このような本だけだとプログラムの中で使われているコードの意味が深く理解できなかったりするので、このような本の中に出てきた機能・関数・用語などを「リファレンス」の方で並行して調べる、という感じ。リファレンスは検索すれば無料でサイトとかたくさん出てくると思いますが(本もたくさんありますが)、

新・明解C言語 入門編 http://amzn.to/1pWl4Ix

とかはリファレンスに近い本だと思います。
おそらく、質問者さんは現在のトレーニング方法にストーリーがない状態で、後者のリファレンスのような本を見ながら、トレーナーの方からも言語仕様を叩き込まれていて苦しんでるんじゃないでしょうか。

ちなみに、「何か一つのものを・・・」に近い・ほぼ同じ勉強方法として「写経」という考え方があります。この「写経」という勉強方法を行う際に大事なポイントを、下記の記事が紹介してくれています。
プログラミングが身につくか否かの分かれ目のようなことが書かれていますので、ぜひ参考に読んでいただくといいかな、と思います。

写経でプログラミングが上達するか
http://qiita.com/yuya_takeyama/items/b8a8c548a4a1c6a05531


3. そもそも文系女子がプログラマーに向いてるのか
確かに、プログラマーという職業に対して、適正のある人・ない人はいます。質問者さんは微妙なラインだと思いますが、記載いただいた内容だけだと適正までの判断は、ちょっと難しいですね。

どのようなプログラマーになるか、にもよりますが・・・プログラマーも大きく分けて2種類あります。一つは、人が行う業務内容などを自動化させるためのプログラムを書く「ビジネスロジックのプログラマー」、もう一つは OS や検索エンジンを一から発明(あるいは、それに近いレベルの開発をする人)「コンピューターサイエンティスト」です。

後者は、理系で学ぶ知識が必要とされます。文系で学んだ内容だけで後者のプログラマーになるのは難しいでしょう。ただ、理系男性であったとしてもこのタイプのプログラマーになれるのがごく一部です。そもそも適正の部分が大きいです。

一方、日本で「プログラマー」というと前者を指すことが多いですが、こちらは文系理系や性別などと関係なく立派なプログラマーとなってビジネスでも活躍している人はたくさんいます。(ちなみに、私の妻は文系出身、ついでに言えば学歴も高卒の女性プログラマーですが、(自分が出会った中では、ですが)一流大学の理系卒の男性プログラマーよりずっと腕があり、相場よりも高い報酬を頂いて、結婚して子供もいますが現役バリバリで仕事をしています)。


プログラマーに限りませんが何よりも楽しんでできるかどうかが大事だと思います。逆に、どんなに早くマスターしても、自分で書いたコードを実際に動かした時に、喜びを感じられなければ向いていないです。
質問者さんが本当に向いていないなら返って惑わせてしまうのは良くないのかもですが、曲がりなりにも何か一つ作ってから判断しても遅くないのかな、と思います。C言語が辛ければ、スマホのアプリでも Web でも何でも。もちろん C言語とスマホアプリでは、プログラミング言語の設計思想とかが大きく異なりますが・・・それでも、全くの初心者なら「実際に動かした」という体験が大事かな、と。

がんばってください。

投稿日時 - 2016-05-02 11:01:38

ANo.39

このハム本を読めば、1日で大体のことは理解できるよ。↓
http://p.booklog.jp/book/74354

本質的なところを踏まえて理解しやすい。覚えやすい。

入門書に書いてない重要なつまづきポイントがほとんど書いてあり、
確実にステップアップできる。

ヘネパタまで読む必要はないという人には丁度よい。

参考URL:http://p.booklog.jp/book/74354

投稿日時 - 2016-05-02 09:15:37

ANo.38

私も文系からプログラマーになりました。

ただ辞めてしまえ、と言うのは簡単ですが、嫌な思いをしてせっかく入った会社です。
お金を貰いながら勉強をさせてもらえるのだから甘んじて、ゆっくりやりましょう。

まず肩の力を抜いて下さい。
一発で上手く行く事なんてまずありません。
とにかくtry and error です。
失敗するのは大切です。失敗したら何が原因か考えたり調べる事も忘れずに。
理解出来ない事があるとしても、何が分からないか分析してください。
ポインターが難しいと感じるのでしたら、デバッグをしてください。
可視化できると理解が速いです。

学校の勉強とは違い正解がないので、他人にとやかく言われません。
(実際には定石はありますが……)
せっかく踏み入れた世界です。
のんびりやってみましょう。

投稿日時 - 2016-05-02 05:36:39

ANo.37

はじめまして。
技術的なアドバイスや知識については、いろんな方からアドバイスされているので、
私からはプロブラムを学ぶにあたっての心がけを。

全く未経験の事項を学ぶことは相当なストレスがかかります。
ましてや、それで成果を求められたり、評価される環境にあるなら不安でしかたないでしょう。
私にも経験があります。
それこそ、人に何を聞けばいいのかすら、わからないような状況だったりしませんか?

仕事としてプログラムを書くようになって、かなりの年月が経ちました。
その中で学ぶ上で良かったかな?と感じるのは、「十分な睡眠を取る」ことです。

今、いろんな情報を頭に詰め込んでいる最中だと思います。その情報は睡眠中に整理される
そうなので、ゲロ吐きそうなくらい勉強したり、仕事したりした際には、じっくり休みましょう。
経験上、昨日まで理解できなかったことが、次の日になったらスルリと入ってくることはあります。

遅くまで勉強されているそうですが、疲れが残っている状態での学びは害になるので、無理せず、
適度な時間に休んでください。

そして、これが一番大事。
「できなくてもめげない」です。まあ、そのうちわかるようになるだろ?くらいなメンタルで行きましょう。
何にも予備知識がない状態から、学び、「スキル」としてすぐに身に付けるられるものではないです。
ご飯食べれないくらい、悩むなら寝ましょう。

人には特性や適性があり、同じカリキュラムをこなしたとしても、横並びで出来るようになるとは限りません。
きっかけさえつかめれば、後はなんとでもなります。
また習熟が早い子であっても、その後、優秀なエンジニアとして仕事できるとも限りません。
10個あることを、1ヶ月だろうと1年かかろうと理解すれば良いのです。

C言語を勉強中とのことでしたが、どんな勉強をされていますか?
また、学生時代、どんな方法で知識を得てきましたか?
どうやったら、C言語を理解できるか?どうやったら仕事を理解できるようになるか?を考えましょう。

私が今までやってきた方法は、「とりあえず何か作ってみる」でした。
たとえば「住所録を作る」としましょうか?

住所録の機能を簡単に列挙します。
 ・インプットとして、氏名、年齢、郵便番号、住所、電話番号を入力できる機能を作成
 ・アウトプットとして、入力した氏名、年齢、郵便番号、住所、電話番号を一覧で表示できる機能を作成
 ・アウトプットとして、入力した氏名、年齢、郵便番号、住所、電話番号を名前順に並べて表示する機能を作成
 ・検索機能として、入力した氏名を表示する機能を作成
 ・入力した氏名、年齢、郵便番号、住所、電話番号を更新する機能を作成
 ・入力した氏名、年齢、郵便番号、住所、電話番号を削除する機能を作成
この中の1つの機能を作ってみるでも良いと思います。
C言語の仕様とか考えないで、どうやったらできるかを考察しながら、最終的にプログラムにしてみてはいかがでしょうか?
とはいえ、これだけやるにしても、かなりの時間を要すると思います。
頭皮がめくれ上がるくらい悩むかもしれません。
そんなときは、眠ったり、他のことして気分転換してください。

ちなみに参考書ですが、分厚い洋書(500ページ~1000ページ)のものがよいかもです。ビギナーが1からプログラムを学べるように構成られています。
また、Youtubeとかにも英語になってしまいますが、ビギナー用の演習動画があったりします。
こちらを参考にされても良いかと思います。

わかんないことがあれば、とりあえずわからないことを人に伝えることを勧めます。
話をしていくうちに、いろいろ頭のなかを整理できてきたりします。

また、優秀な人が書いたプログラムを読むことを勧めます。
プログラムは、必ず書かなければならない理由があって記述されるものです。
コピー&ペーストにまみれたグッチャグッチャなコードを見ても、脳内に発生する「ノイズ」にしかなりません。
GitHubというオープンソースのサイトがあるので、そこに投稿されているコードが大変、参考になります。

プログラマの仕事は、ざっくりいうと
「インプット(学んだもの)」したものを「アウトプット」していく作業です。
インプットはできるけれどもアウトプットが駄目すぎて話にならない人も多く、クソみたいなコードを書いてプロジェクト
を炎上させる輩は多いです。
日本では1つプロジェクトで7割~8割のエンジニアがそんなクソみたいなコードを生成します。

願わくば、しっかりとしたアウトプットを出せる、エンジニアに成長してもらえると嬉しいです。

投稿日時 - 2016-05-02 02:34:35

ANo.36

質問内容からすると、C 言語でつまずいている。というよりはプログラムを作ると言う行為そのものに難しさを感じている様に思えます。

「プログラムを作ると言う行為」とはどういう事なのか、具体的に何をしていくのか、的確に解説してくれる本はなかなか無いと思います。日本語で比較的優しく書かれた本として次の本を上げておきます。恐らくあなたの研修とは全く関係がないゲームを作ろうと言う本ですが、プログラムを作るという行為について、良く書かれた本です。

『プログラムはこうして作られるプログラマの頭の中をのぞいてみよう』
http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AF%E3%81%93%E3%81%86%E3%81%97%E3%81%A6%E4%BD%9C%E3%82%89%E3%82%8C%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E9%A0%AD%E3%81%AE%E4%B8%AD%E3%82%92%E3%81%AE%E3%81%9E%E3%81%84%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86-%E5%B9%B3%E5%B1%B1-%E5%B0%9A-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%82%BB%E3%82%AC/dp/479803925X

読んで「解った」になるか、それとも「この考え方について行けない」になるかで、そもそもプログラムを作れる様になるかと言うのが、自覚できるのではないかと思います。

もし、本を読む前に身近なことで、まずプログラマに向くか考えてみたいと言うのであれば、町中の食堂、レストラン、お弁当、あるいは総菜店で見つけた食べ物がどうやって料理されているか、想像できるでしょうか? 「材料・道具」、「煮る 焼く 蒸す 揚げる 炊く」などの調理行為、具体的な「調理手順」、「材料・調味料の分量と味の関係」を想像できるでしょうか? 付け加えて言うならば、作った後どれだけ日持ちするか、冷凍保存できるかを見込めるでしょうか?

料理が既に得意であれば衣服で置き換えて考えてみてください。

「レシピを見れば簡単」と、思っているようであれば、プログラムを作るというよりは目的のプログラムを見つける力を付けた方が良いでしょう。ただし、厳しい言い方ですが作れる様にはなれません。

理系(情報系)の教育課程では、誤解を恐れずに言うならば、「材料・道具」→「プログラミング言語などの処理系」、「コンピュータの動作原理」。「煮る 焼く 蒸す 揚げる 炊く」→「基本的なアルゴリズム」。「具体的な調理手順」→「設計論」、「構造化」、「オブジェクト指向」、「デザインパターン」。「材料・調味料の分量と味の関係」→「計算量」。の様な感じで 4 年間の専門課程が組まれます。加えて理解に必要な数学・物理も履修します。

それを 2, 3 ヶ月の研修で完了するなど無理な話です。そうです、これから 5, 6 年は理解に時間を掛ける必要が有るのです。長いですよ。

私も町中で見かける小さなガジェットに入っているプログラムを作ってきました。とある所を探せば自分が作ったソースコードも見つかります(名前を入れていないので証明はできないですけれど、解説くらいはできるかな)。しかし、辛いことも多かったです。今はリタイアしています。

投稿日時 - 2016-05-02 01:34:15

ANo.35

最後の自己回帰を訂正いたします。

最後にC言語では関数のなかで、また自分自身を呼び出して実行させるような自己回帰的なこともできます。
例えば累乗計算などです

y=10*9*8*・・・*1;

int n=y=10;

keisan(n){// 関数の引数はn
if n>1 {y=y*(n-1); n=n-1; keisan(n);}
else break;//強制的ブレーク、すなわちkeisanから抜ける
};


などです。
ただし、スタック領域を爆食いするので気を付けなければなりません。

以上です

投稿日時 - 2016-05-02 01:09:41

ANo.34

(前ぺージより4ページ)
例:
 x=x+1;

説明:
xというアドレスの内容(データー)に1を加算し、その結果をxというアドレスに再び書く(出力)することです。
従って、アドレスxにあった古いデーターはこのコマンドにより1を加算されて新しいデーターとしてxのメモリーに記憶されることになります。
例えばxのアドレスが0x200番地だとします。
この0x200番地のメモリー内容はノイマン型(ハードウエアー)のレジスター(一時記憶装置)に蓄えられた(読み込まれた)後、1を加算されて新しいデーターになります。
その新しいデーターはレジスターに残っていますので、そのレジスター内容(データー)を0x200というアドレスのメモリーにライトバック(書き換え)されます。
この加算式は先にメモリーのデーター入出力でハードウエアーの説明をしたプロセスを順次行いながら結果を0x200に残す、ということになります。

すなわち
0x200からデーターを読み込んで、
読み込んだデーターに1を加算し、
また0x200に計算結果データーを書く。
というプロセスを上記の一行の記述で実現しているのです。

さて、ここで疑問がわきますよね?
変数”x”ってなに?何者?

これはメモリのアドレスを示しています。人間には16進表記の0x200なんて使いにくいですよね。人間には訳がわからないし、プログラムを記述しているうちに他のメモリーアドレスと混乱しますね。

ですから人間にわかりやすいように16進表記のアドレスの代わりに文字(列)を使うのです。

これはプログラムで使うときには#defineリストで定義するのです。

#define x  0x200;
これは0x200という16進表記の数値を文字”x”とします、という定義(マクロ定義ともいう)です。

もちろん”x”でなくてもよいのです。

例えば
#define watashi  0x200;
 このように定義すると、上記のコードは
 watashi=watashi+1;
となります。

このwatashiという変数はコンパイル時は0x200という数値に置き換えられます。



#define suuchi  0x100;;
#define watashi  0x200;
#define anata   0x400;
#define who    0x1000;
#define handan  if suuchi > 0 who=watashi else who=anata;

このように定義したとします。

C言語プログラムソースコードでは

handan;

と、プログラムファイルに一緒に記述します。

これはコンパイルされると

 if suuchi > 0 who=watashi else who=anata;
と置き換え、なおかつ

if (0x100)>0 (0x1000)=0x200 else (0x1000)=0x400;
  /*()内16進表記はメモリーアドレス、それ以外は数値データー*/

と置き換えられ、最終的には

 s1)0x100アドレスの内容(データー)が0以上(すなわち正(プラス))なら
   0x1000というアドレスに0x200という数値を記憶させる
    (who=watashi は (0x1000)=0x200となっているので)

 s2)そうでなければ(すなわちsuuchiが負(マイナス)なら)
   0x1000というアドレスに0x400という数値を記憶させる
    (who=anata は (0x1000)=0x400となっているので)

と動作するようなプログラムコードがコンパイラにより生成されます。

このように#defineの定義はデーター数値や一行プログラムまで定義できます。

このように#defineは無味乾燥な16進表記数値を、血の通った文字列で定義することにより、より人間に直感的に見せますよね。

なお#defineはリストによることもできます。

仮のファイル名を define_list.defとします

#define suuchi  0x100;;
#define watashi  0x200;
#define anata   0x400;
#define who    0x1000;
#define handan  if suuchi > 0 who=watashi else who=anata;

と定義ファイルを作成し

プログラムファイルで冒頭に

#include define_list.def;//定義ファイルを取り込みする

iroiro() {//しいて言えば”いろいろ”というサブルーチン
handan;
};

としても同様になります。

以上ノイマン型のコンピューターの基本はIOバスを通してデーターの入出力を行う、というのが実態です。

もっと具体的に記すと
#define Lamp  0x1000;
#define ON   1;//0x1としても良い
#define OFF  0;//0x0としても良い
define  watashi 0x200;

if watashi> 0 Lamp = ON else Lamp = OFF;

そしてハードウエアーとしてLamp (0x1000)のアドレスのIOの0ビットに
ランプが配線されているとします。

上記のプログラムを実行すると

 S1)もしwatashi(の内容データー)が正(プラス)ならLamp に数値1を入れる(記憶させる)
     ランプが点灯する

 S2)もしwatashiが負(マイナス)ならLamp に数値0を入れる(記憶させる
     ランプが消灯する)

となり、このような人間に見える形で動作させることができるのです。

最後にC言語の難しいポインターの説明です。

ポインターとは上記ノイマン型コンピューターのハードウエアー三大構成要素のなかで、プログラムカウンターのことです。
すなわちC言語では変数の前にアスタリスク(*)をつけることにより、直接プログラムカウンターを制御してしまうことです。

それゆえ、時としてC言語は低級な言語と言われることがあります。

具体例を示します。

int *watashi;//ポインター定義

この定義はwatashiという変数内容はアドレスを扱うことを意味します。
そしてwatashiという変数はアドレス0x200番地を指しているとします。



watashi=0x600;//watashiのメモリーには0x600という数値が入ります。
        //しかしこれはIOのアドレス(0x600)です。
        //単に数値としても扱えて、演算もできます。

*watashi=1;//IO アドレス0x600に1という数値を入れます(記憶させます)

このようにx=1のように直接xのアドレスに1を入れるのではく、
watashiのメモリーにある数値をアドレスとみなして、そのアドレスにジャンプ(プログラムカウンターを0x600と書き換え)させて、そのジャンプ先(0x600)のIO (メモリーとしても良い)に1を記憶させるのです。

すなわち間接アドレッシングです。

またアンパーサンド”&”を使うことがあります。
int *p;//ポインターpを定義
p=&watashi;

これはpというIOアドレスにつながっているメモリなどのアドレスへwatashiという変数のメモリー番地(ポインター)を記憶させます。

関数のポインターも定義できます。
void  *abc();//返り値のない関数。strでもintの関数でもよい
 //abcという変数には実際に実行する関数の先頭アドレスが入る

またポインターのポインターの・・・ポインターというのも定義できます。
int ****・・・*P;
void ***・・・*abc();

間接アドレッシングはどんな時に有効か、というと

・メニュー関数をリスト化する
・関数ライブラリーなどの中の関数で、引数がポインター指定となっている場合
文字列の先頭アドレスを指定する場合
などなど・・・

最後にC言語では関数のなかで、また自分自身を呼び出して実行させるような自己回帰的なこともできます。
例えば累乗計算などです

y=10*9*8*・・・*1;

int n=10;
int y;

keisan(n){// 関数の引数はn
if n>1 {y=n*(n-1); n=n-1; keisan(n);}
else break;//強制的ブレーク、すなわちkeisanから抜ける
};


などです。
ただし、スタック領域を爆食いするので気を付けなければなりません。

以上です

投稿日時 - 2016-05-02 00:24:35

ANo.33

(前ページより:ぺーじ2)
step16)メモリーでは与えられたメモリー・アドレスをラッチ(記憶)してから、該当するアドレスからデーター(実は何らかの値)をデーター・バスへ引き出す。

step17)メモリーではデーター・バスからIOバスへデーターを乗せる(出力する)
このときノイマン型ではIOバスはすでに信号入力状態へ変化させている(変化させないとバスの衝突(入出力衝突)になるため)

step18)ノイマン型では、読み込んだデーターをターゲット・アドレスへ書き込みます。一般にはターゲット・アドレスはノイマン型の一時的なレジスター(メモリー)です。
ですからレジスターに書き込むときはIOバスはハイ・インピーダンス(ハードウエアーとしては入出力禁止状態)となります。

このようにメモリー側も必要に応じてハイ・インピーダンスになったり、入力または出力有効になったりと自動的に動きます。

以上でプログラムのREAD命令は実行されます。

WRITE命令もデーターの入出力は逆ですがこのように自動的に実行されます。

アセンブラなどではあらかじめターゲット・メモリー(内部レジスター)などが明示的に決められたコマンド(命令)もあります。

コンピューターではコマンド(命令)、数値データーは区別がありません。

あくまでも、読み込んだ順序でコマンドか、データーかを区別します。
従ってプログラムのメモリーに配置されるデーター順序は重要です。

また、ターゲットが他の外部入出力でも同じ動作をするようになっています。
例えば外部記憶装置、プリンター、モニター、機械の入力である操作パネルや出力であるランプ、モーター、エアー(オイル)バルブ、その他も同様です。

以上でハードウエアーのプログラムカウンターとIOバスの説明はおしまいです。

さて、割り込み(INTERRUPT:インターラプト)の説明です。

説明として仕事をしている時を思い出してください。
あなたが今仕事をしている途中で、誰かが「ちょとすまないけれど、この仕事を至急やってください」と言われたとします。
これを割り込みTASK(タスク)、割り込みJOB(ジョブ)と言います。
文字通り、仕事中なのに割り込まれたのです。
しかし、この割り込みTASKをやらなければなりません。

あなたは、その仕事するためにどうしますか?

この割り込みを実行するために、きっとあなたはやりかけの仕事の結果を、または計算結果をメモに書いて机の上に、または引き出しにメモを置くでしょう。
実はこのメモをコンテキスト(CONTEXT)と言います。
このコンテキストを置いた机の上、または引き出しなどをスタック(STACK)と言います

さて、割り込みの仕事が終わりました。

そこであなたは、引き続き今までの仕事をするために、先ほどのコンテキスト(メモ)を取り出し、メモを見ながら仕事を続けることになります。

このようにコンピューターも優先度の高い仕事として割り込みを許しています。

そのために割り込まれるとコンテキストをスタックという特別に指定されたアドレスに自動的にハードウエアーが記憶させてから、割り込みのタスクを実行します。
割り込みタスクが完了すると、ハードウエアーは自動的にコンテキストをスタックから取り出して計算途中のタスクを続行するのです。

これが割り込みの概要です。

ですから割り込みに対してはプログラマーはプログラムを組むうえで考慮することはしないのです。

なぜならいつ割り込まれるかわからないからです。

もしあなたの作ったプログラムを実行中割り込まれたら、それはハードウエアー(ノイマン型)がすべて必要なことを実行してくれます。

この割り込みにも複雑なことが多々発生いたします。
すなわち割り込み仕事をしているのに、またまた割り込み、またまたまた割り込み・・・。
このような状態を「多重割り込み」と言います。

しかしプログラムを作成するうえで気にすることはありません。
多重割り込みもハードウエアー(ノイマン型)は機械的に、そして自動的にどんどんコンテキストをスタックに積み上げて行き、そして最後の割り込みタスクが完了すると、スタックに積み上げてあったコンテキストを上から取り出して、割り込まれた途中の計算をしていきます。
コンピューターは最後に割り込まれたタスクを順次完了させていき、
そして最初に割り込まれたタスクを完了すると、最後にスタックに積まれたコンテキストを取り出してあなたの本来の仕事を続行することになります。
このコンテキストを積み上げていくメモリー領域をスタック領域といい、スタックはLIFO(LAST IN FIRST OUT:後入れ、先出し)でスタックから自動的に取り出されます。

このスタック領域はソースプログラムをコンパイルするときに、最初にコンパイルファイルでスタック領域をメモリー上に割り振るように指定します。

LIFO(エル・アイ・エフ・オー)は最後にメモリーに積み上げられたものから順次取り出すことを言います。

一般にスタック領域のメモリーの先頭は一番アドレスの高いところ(メモリーの終わりのところ)にするのが一般的です。
そしてスタックカウンター(スタックアドレス発生カウンター)なるものがノイマン型のハードウエアーにはあります。
このスタックカウンターはスタック領域の最新のアドレスを指示しており、割り込みが発生するたびにコンテキスをスタックカウンターのアドレスよりメモリーにデーター積み下げて(アドレスは若い方向へ、すなわちカウントダウン)いきます。
割り込み処理が完了するとスタックカウンターのアドレスの一つ手前から順次データーを取り出して、最後にスタックカウンターの値を書き換えて割り込みは終了です。
こうして自動的にLIFOを実現しています。

先ほどプログラマーはプログラムを組むうえで割り込みを考慮しなくても良い、と書きましたが正確には割り込まれるプログラムには考慮しなくてもいいのです。
しかし、割り込み処理プログラム(このプログラムは割り込みによってのみ動作するプログラム)では、明示的にプッシュ(PUSH)によりコンテキストの退避(スタックに積み上げること)、割り込みタスク終了ではコンテキスト復元(ポップ:POP)を明示的にプログラムとして書かなければなりません。
なお、割り込み最後にretern interruptの記載により割り込み処理を抜けるときに、スタックカウンターに新しいスタックアドレスを自動的に書き換えられます。

最近のC言語をはじめとする高級ソフトウエアーではキーワードとしてINTERRUTなるものをプログラムの冒頭に記載し、このプログラムは割り込み処理用として明示的に記載すると、コンパイラーがレジスターのプッシュ、ポップのコード、retern interruptキーワードを発生してくれます。

これはコンパイラーのオプションなどを見るとあるかもしれません。

なお、スタック領域は無限にあるわけではなく、通常のタスクで使用するメモリーとは衝突しないようにしなければなりません。
従って、スタック領域は制限を設けることになり、多重割り込みにも制限が発生することになります。

反対にFIFO(FIRST IN FIRST OUT:先入れ、先出し)というものがあります。
これは、メモリーに最初に入ったものから順次データー処理すということです。
イメージでいうと、データーのところてんです。
ところてんを入れる箱をメモリーと思ってください。そして後ろからところてんを押し出すというイメージです。
これは例えば待ち行列理論におけるデータキューです。
キュー(QUEUE)とはまとまったデーターの入れ物(メモリー群)です。
このキューに入れられたデーターは次々とデーターを入れていき、キュー(のメモリ)がいっぱいになると、最初のデーターが押し出されます。
そして次々に押し出されたデーターを計算に使っていくのです。
リングバッファーメモリーなどがこれに相当します。

長々とノイマン型のコンピューターのハードウエアーについて記載してきましたが、C言語の説明に移ります。

おそらくC言語で一番悩むのがポインターということだと思いますが、その説明は最後にします。

C言語は自然な言語を基に作られています。
すなわち人間に対して直感的に理解できるような構成です。

例えば
INPUT(・・・) 引数に従って入力せよ
OUTPUT(・・・) 引数に従って出力せよ
PRINT(・・・・)引数に従って印刷(出力)せよ
PRINTF(・・・) 引数によるフォーマットで印刷(出力)せよ
などです。なお(・・・・)は引数(ひきすう)と言って一つのフォーマット(規約)のようなものです。

制御文としてWHILEやIF~ELSEなどがあります。

これらの構文は専門書によるものとして、基本的な問題をハードウエアーと織り交ぜて以下に説明します。
(次ページ3へ)

投稿日時 - 2016-05-02 00:11:08

ANo.32

コンピュータシステムのハードウエアー(回路設計)、ソフトウエアー(アセンブラ、C言語、HDLでのIC内部回路設計など)を業務としている男性です。

文系ということですが、もしかしたらプログラムを通して深読み(なぜこうするの?、なぜ?なぜ?)という疑問が出てきて、そこを理解しないと先に進めないタイプではないでしょうか?

そこでノイマンのコンピューター原理をまず説明します。
ノイマン型は今でもコンピューターの基本であり、非ノイマン型を追い求めている現状です(原理的には完全な非ノイマン型はできていません)

ノイマン型はどこかに計算手順、数値データ等を外部装置の決められたある処に初期状態として蓄積します。コンピューターはその計算結果として人間に目で見える形(例えばプリンターによる印刷、モニターによる表示、ランプの点灯消灯、モーターのオンオフ等々)として出力します。
したがって、人間に対して何らかの出力をしないシステムは、システムの自己満足でしかなく、それは人間にとってはただの箱となってしまいます。

さて、回答のなかで
参考URL:https://twitter.com/mugi1208?lang=ja
とうのが紹介されており、私も読んでみましたがちょっと原理としては不満足なようが気がしますので、ここで簡単にコンピューターの基本原理を説明します。

まず、ノイマン型のハードウエアー基本はたった三つの基本構成で成り立っています。

1.プログラムカウンター(C言語ではポインターと呼ばれ、アセンブラではアドレスと呼ばれている)
このカウンターはアップ・カウンターのみであり決してダウン・カウントはしない。

2.IO(アイ・オー:入出力INPUT_OUTPUT:メモリー、外部入出力としてのスイッチやランプ、プリンター装置、モニター等々を接続するためのアドレス・データー・バス・ライン)
*バス(BUS)とは、この場合電気信号の通り道だと思えばよい。

一般に8ビットコンピュータでは8本の窓口(IOバス・ライン)、16ビットでは16本、32ビットでは32本・・・で構成される。
IOバス・ラインは入力(INPUT)か、出力(OUTPUT)かは、プログラムの命令形態によりハードウエアーで自動的に決定される。
例えばプログラム命令でINPUT、READなどは外部装置からIOへの信号入力であり、OUTPUT、WRITEなどはIOバス・ラインから外部装置への出力となる。
ただし、一般的にIOアドレスは8ビットでは0番地から2の8乗-1番地まで指定可能ですが、ハードウエアーで制限があります。
(すなわち指定してはいけないアドレスもあります)

3。割り込み(インターラプト)

のたった三つの構成で原理として成り立っています。

CUP(セントラル・プロセス・ユニット:中央処理装置)は一般にプログラムカウンターや分枝(ぶんぎ)制御、割り込み、計算装置(加減乗除)、レジスターなどを含んでいるのが一般的です。
昔のCPUは計算装置として加算回路だけで補数による減算もさせました。
また乗除算は別のユニットとして付属装置みたいなものでした。
例えば乗算はビットシフト制御と加算、除算はビットシフトと加算回路を利用して補数による減算というのもありました。


ですから、ノイマン型では上記3要素以外はすべて外部装置として扱います。
すべての外部装置はIOバス・ラインでつながっています。

従って、コンピューター・システムとしてはIOバス・ラインにメモリー(記憶装置)、ランプ(出力装置)、スイッチ(入力装置)等々外部付属装置として配線、または電線で接続されます。

IOにはそれぞれアドレス(固有の住所としての認識番号)が割り振られ(与えられ)ています。IOの固有のアドレスはハードウエアー設計時に決められ、
ソフトウエアーでは勝手に決められません。

ここで話を簡単にするためにIOにメモリー(記憶装置)が接続されているとします。

メモリーはたくさんの記憶容量がありますが、それぞれの記憶領域はアドレス(住所)によりハード的に決められているため、メモリーの読み書き(READ,WRITE)はプログラムによりアドレスを指定し、データーの読み込みか書き込みかをしてします。書き込みの時は書き込むためのデーター数値も指定しなければなりません。

例:メモリーからデーターを読み込む場合
どこ(ソース・アドレス)から、どこ(ターゲット・アドレス)へデーターを移動させのかをプログラムでは明示的に指定しなければなりません。

READ(読み込み命令)、ソース・アドレス指定、ターゲット・アドレス

これだけの指定をしないとコンピューターは動けません。

例:データー書き込みの場合

WRITE(書き込み命令)、イミデート・データー(数値そのもの)、ターゲット・アドレス

この例のようにデーターの移動は明示的に指定しなければなりませんが、一般的には外部メモリーとのデーター入出力は、ある特定のレジスター(これもメモリーですがノイマン型の内部にあるメモリー)経由で実行するのが一般的です。
ただし、プログラムの明示によりハードウエアー的にダイレクトにメモリーからメモリーへデーター転送することもできます(直接メモリー転送)。

特定のレジスターをAレジスターとすると

READ(0x200,A);16進表記の200番地からAレジスターへデーター移動

WITE(A,0x300);Aレジスターの内容(データー)を16進表記の300番地へ格納(書き込み)

以上は説明のためで、コマンド(命令語)や引数(いんすう)の順序等はそれぞれの言語の規約に従います。
また、言語によってはINPUT(=READ)、OUTPUT(=WRITE)などのコマンドもあります。
 
ここで、アドレスは、データーはどうやって発生するのか?疑問に思うでしょう。
それはノイマン型のプログラムカウンターからアドレスがIOを通してメモリーから発生します。

ソースまたはターゲット・アドレスをプログラムで指定するということは、読み書き命令によりこのプログラムカウンターのカウンター値をハードウエアーで自動的にアドレス値を書き換えることで実現されます。

実は、プログラムが実行されると、ハードウエアーはその命令、引数を読み込むために自動的に以下のstepを実行します。

step1)ノイマン型プログラムカウンターはIOバスを信号出力にし、アドレス(プログラム・カウンター値)を出力する。

step2)メモリーでは与えられたメモリー・アドレスをラッチ(記憶)してから、該当するアドレスからデーターをメモリー内部データー・バスへ引き出す。

step3)メモリーではメモリー内部データー・バスからIOバスへデーターを乗せる(出力する)
(データー値を乗せる、単にデーターを乗せる、とも言います)
このときノイマン型ではIOバスはすでに信号入力状態へ変化させている(変化させないとバスの衝突(入出力衝突)になるため)

step4)ノイマン型はデーターを読み込みます。
最初のデーターは例えば「データー読み込み命令:READ」だとします。

step5)ノイマン型ではこのデーターをREADと解釈する

step6)コマンド(命令)がREADなので次のプログラム引数を必要とするため、ノイマン型プログラムカウンターはカウントアップして次のアドレスをカウンターからカウンター値としてIOバスへ出力します。
このときIOバスは自動的に信号出力状態へ変化させています。

step7)メモリーでは与えられたメモリー・アドレスをラッチ(記憶)してから、該当するアドレスからデーター(実はソース。アドレス値)をデーター・バスへ引き出す。

step8)メモリーではデーター・バスからIOバスへデーターを乗せる(出力する)
このときノイマン型ではIOバスはすでに信号入力状態へ変化させている(変化させないとバスの衝突(入出力衝突)になるため)

step9)ノイマン型に読み込まれるデーターは、ソース・アドレス値で、内部にラッチ(記憶)されます。

step10)次にノイマン型は次のプログラム引数(ターゲット・アドレス)を必要としているので、プログラム・カウンターをカウントアップしてカウンター値をIOバスに出力する(アドレス値を乗せる、単にアドレスを乗せる、とも言います)

step11)メモリーでは与えられたメモリー・アドレスをラッチ(記憶)してから、該当するアドレスからデーター(実はターゲット・アドレス値)をデーター・バスへ引き出す。

step12)メモリーでははデーター・バスからIOバスへデーターを出力する
このときノイマン型ではIOバスはすでに入力状態へ変化させている(変化させないとバスの衝突(入出力衝突)になるため)

step13)ノイマン型はターゲット・データーを読み込みます。
ターゲット・アドレス(データー)はノイマン型にラッチ(記憶)されます。

ここでノイマン型はREAD命令によりソース、ターゲット・アドレスを読み込んだので次のステップに入ります。

step14)ノイマン型はプログラム・カウンター値をソース・アドレス値に書き換えます。(事実上のジャンプ命令と同様です)

step15)ノイマン型は書き換えられたプログラム・カウンター値をIOバスに乗せます。

(次ページへ)

投稿日時 - 2016-05-01 23:58:27

ANo.31

コンピュータエンジニアとして25年生きているものです。
今まで多くの全く知識がない新人プログラマを教育し、最前線に送り込んだ経験があります。
その経験から話をします。
かなりの長文ですが、きっとあなたの助けになると思いますので、よく読んでください。

2つの面について話をします。

1つ目は心構えの話です。
全く新しい技術や知識、他人のコードを解析して理解する場合、最初の2週間~1ヶ月というのは、
程度の差はあれ、まあ大体そんな感じの地獄です。

ITの世界は日進月歩ですから、新しい言語や新しいGPU新しい処理系等が次々と出てきます。
これから先、数年後とに技術トレンドが変化する度に、その都度苦しみながら継続的に
新しい知識と技術を勉強していくことが必要です。

IT技術者として生きるということはそういうことです。

何年もこういうことをやっていると、一定の比率の人間はウンザリしてこの業界を去っていきます。
新しい知識を苦しんで手に入れることをそれなりに楽しいと感じられる、ある意味マゾな人間でないと
向いていない業界だといえます。

ただし、あなたの場合は、まだ1ヶ月のド素人なわけですから、向いている向いていない以前の問題です。

最初の1ヶ月で全くの初心者が音をあげて電車の中で泣きたくなるのは理解できますが、
そんな話はこの世界ではごまんとある話なので、酒でも飲んで忘れてください。

心配しないでもしつこくしつこく食らいついていれば、必ず理解できるようになります。
もう1~2ヶ月、地獄の苦しみを味わっていれば、それまでの苦しみが嘘のように知識が理解できるように
なってきます。これは外国語会話が出来るようになる過程と酷似しており、大事なのはしつこく食らいつく
ということなのです。

このしつこく食らいつくということを日本の学校教育では一切教えないので、この過程で脱落していく人間が
一定数存在します。IT業界には似つかわしくない言葉ですが、この時期に大事なのは根性という動かしがたい事実があります。

今は非常に強い苦痛を感じていると思いますが、耐えて頑張れば必ず出来るようになります。

周りの理解度が高く置いてけぼりを感じるのは、なかなかのプレッシャーでしょうが、
そんなことは気にする必要はありません。あなたの先輩や上司たちも、全くの初心者のあなたが
いきなり即戦力になるとは期待していません。もし期待しているなら先輩も上司も会社もバカなのです。

とにかくしつこく先輩たちを質問攻めして、追いつく努力をする姿勢が重要です。
地獄の中で努力を続ければ、紅葉の頃には間違いなく理解できるようになっていますから大丈夫ですよ。
この業界がIT土方と呼ばれるゆえんです。


2つ目に知識面で何を理解すればいいかについて話をします。

C言語をある程度業務が可能な程度にわかるためには次の2つの面での理解が必要です。

・作法の理解
・メモリとポインターの理解

作法の理解とは、文法とか記述の仕方です。プリプロセッサの動作や構文の書き方、IF文やFOR文、配列、標準関数など純粋に知識を頭に詰め込み、それらを組み合わせてつかいこなす必要があります。

ポインターの理解とは、メモリに対するアクセスの理解です。
ハッキリいいますがポインターを理解していないということはC言語を理解していないのと同義です。

コンピュータの構成は大雑把にいって、CPUとメモリとIO(入出力)で成り立っています。
一時的にデータをメモリに保存したり演算したりするために、メモリアクセスを完全に把握し
コントロールするために配列とポインタを理解することが必須です。

逆にポインタを理解しているということは、アセンブラだろうが他の言語だろうが、
問題なく理解できるということになります。

そのメモリはどこからもってきたメモリなのか?
そのメモリにアクセスするためにポインタをどう管理しているか?
こういったことに気が回るようになれば、もうあなたは立派なC言語プログラマです。

重要なのは、これらのプログラムを実際に書いてみて、PC上で動かして試すということです。

自宅にPCはありますか?実際にプログラムを書いて実行する環境がありますか?
それらを繰り返し繰り返し試してデバッグすることで、自然と作法は身につきます。

ポインターも同様で、本を読んでコードを眺めているだけでは絶対に頭に入りません。
プログラムを書いて実行して、デバッグしてというのを繰り返さないと理解できません。

これは自転車や水泳の練習に似ています。
本や知識で泳ぎ方を知っていても、実際に泳ぐのは別ですよね?
自転車だって乗り方は誰でも知っていますが、乗れるようになるには実際に乗らないと駄目ですよね?

それと同じです。安いノートパソコンなどでいいので、自宅でコードを試せる環境を作って
盛大にバグってもいいので、プログラムを書きなぐってみるといいと思います。

これらがわかると、業務でとりあえず戦力になるレベルになります。

そこから先はより高度なことが出来るように、さらにいろいろな知識を吸収する必要があります。

飛行機のパイロットの能力や経験を飛行時間でカウントするように
プログラマの能力も業務や頭を使った時間で概ね推測できます。

頭を使って頑張った時間が500時間ぐらいになったとき、あなたは業務で戦力としてカウントされます。
700時間くらいで、周りの足を引っ張らない程度のプログラマと認識されるでしょう。
1日の努力が正味6時間なら、概ね半年といったところです。

この時間が10000時間を越えたあたりで、どんな要求がきても大体なんでもこなせて、周りに頼られて
会社で大事にされるプログラマになります。

いまどきだと、大体6年くらいかかります。このレベルになったら、大体、どこの会社に移籍しても
問題なく仕事をこなせます。そこから先、大金をつかめるかどうかはあなたの才覚次第でこれは
プログラマの能力とは完全に別の戦いになります。

先は長いですしひたすら地獄が続きますが、この世界は知識や技術を駆使して商売を新しく作ることで
大金をつかむことが可能な夢のある世界です。その割に比較的安定した世界でもあります。

私としては、若い人がこの地獄を敬遠してなかなか残ってくれないので、
ぜひ、この世界に残ってくれるとうれしいです。

頑張ってください。

投稿日時 - 2016-05-01 22:07:42

ANo.30

こんばんは

本職はパソコンの販売屋ですが、たまにCやPerlなどの言語を使ってプログラムをします。

プログラミングの基本的な概念は

「アバウト」はまず許されないという事を知ることからはじまります。

C言語を最初に習得させる理由は、書式が一番厳しく、プログラムの完成度も一番高いのも特徴です。
本来であれば、BasicやPHPなどの様なインタプリタ系を最初に学習し、その後コンパイラ系のCやJAVAを行う方がずっと建設的です。

研修の講師がどのような考えを持っているか知るよしもありませんが、物事には適性というものがあります。

C言語に限らず、プログラミング言語の習熟度を測る目安は、
「サンプルコード」を入力して見本と結果になるかが大事です。

C言語で、一番頭を抱えるのが、変数定義とポインタです。

変数は、いわゆる「名前」で、「山田花子さん」と言うものであり、これが男性か女性かと言う事を定義します。Cの場合は、この定義を1つでも忘れると即エラーになる為、初心者には非常にハードルの高い言語とも言えます。その点、Basicなどは厳密な変数定義を行わずともプログラムを組めますが、一度バグがでると原因を見つける事に相当時間が掛かります。Cとの比較でよく言われるのはこの点です。

ポインタは、C言語を使うならば避けて通れない分野です。
ポインタとは、基準値からの相対的な表示をする方法で、コンピュータの動作に一番近い動きをするコンピュータに優しい記述方法です。
例えるなら、貴方の家の3軒隣の○○さんという事がポインタの考え方です。
馴染むまでしばらく時間が掛かる為、最初のうちはノートに動作結果をメモしながらすすめると良いかもしれません。



プログラミングに限らず、物事頑張って何とかなる事とならない事があります。
向き不向きをよく見極める事が大事です。

私から見て、目の前の課題は大事だけど、何をして良いかわからない状況と見受けます。

まずは、遠回りでもプログラミングに関する本を読むより工業高校のプログラミングの授業で使っている教科書を手に入れる事がオススメです。

それと同時に、漫画で読むプログラミング講座などの本を流し読みする程度が大事で、特にプログラミングアレルギーがでるとずっとその悩みから抜け出せずコンプレックスになる可能性もあります。


少し話しがそれましたが、プログラミングの基本は「設計図」を描けることです。
最初の段階ですから、フローチャートを書く練習が重要です。
あとは、パソコン用語辞典(だいたい1500円くらい)を手元に置き、C言語の逆引きリファレンス(いずれも、技術評論社がオススメです)をもって、サンプルコードを解析すると何をするプログラムか、その手法にはどういう方法があるか?わかってくると思います。


アドバイスになるか多少疑問が残りますが言わせて下さい。

1 プログラミングの習熟度は個体差がある
2 プログラムを組むのに文系・理系は関係無く、センスである事
3 プログラムを組むのが苦痛なら、できませんと言う事も大事
(企業は適性を見るために研修している事を考えるべきなのです)
4 自分が得意だと思う事をプログラムに生かせないか考えて見る
5 プログラミングのコツは、全て法則性のあるものに気づき、パズルを解く感覚
6 解説書よりもパソコン用語辞典とポケットリファレンスの2つは必須
7 会社の課題としてプログラムを作るより、自分がやってみたい課題を見つけて取り組む
8 ウェブ系ならばPHP、PC系ならVisual BASICを使い、プログラミングのコツをつかむ
9 仕事を忘れて趣味でプログラムを組んでみる
10 周りと競争しない、自分がどうであるか?


何事も競争すると本質が見えなくなってしまいます。
社会人になって大事な事は苦労する事以上に、自分は何ができるか?を知る事に掛かっています。
しがみついて頑張る事も大事ですが、適性がないので他の職務も検討する事ももっと大事です。
この事にこだわりすぎて、体調を崩せば身も蓋もありません。

プログラミングのサンプルができるからといって、貴方の評価が変わるわけでありません。
プログラミングが苦手であっても、概略がわかれば十分なのです。
その中で自分ができる最大限の努力を続ける事が何より大事だと思います。

人生とは、自分探しです。まだまだ始まったばかり、愚直に取り組み、泣いて、苦労して得る物は、一生忘れる事がない能力になります。

勉強の成果を計る為にも、半年後(10月の第3日曜)に実施される、基本情報技術者試験の合格を目指す事が早道です。この試験には、プログラミングの読解能力を測る内容があります。
試験勉強を通じて、もっとプログラミングの事がわかり、ITに関する造詣も深まると思います。

頑張って下さい。

参考URL:http://hp.vector.co.jp/authors/VA015873/

投稿日時 - 2016-05-01 21:24:45

ANo.29

”これはあなたの人生です。
自分の好きなことをやりなさい。
そして、どんどんやりなさい。

何か気に入らないことがあれば、それを変えなさい。
今の仕事が気に入らなければ、やめなさい。
時間が足りないのなら、テレビを見るのをやめなさい。

人生をかけて愛する人を探してるなら、それもやめなさい。
その人は、あなたが好きなことを始めたときにあらわれます。
考えすぎるのをやめなさい、人生はシンプルです。

すべての感情は美しい。食事を、ひと口ひと口味わいなさい。
新しいことや人々との出会いに、心を、腕を、
そしてハートを開きなさい。
私たちは、それぞれの違いで結びついているのです。

自分のまわりの人々に、何に情熱を傾けているのか聞きなさい、
そして、その人たちにあなた自身の夢も語りなさい。
たくさん旅をしなさい
道に迷うことで、新しい自分を発見するでしょう。

ときにチャンスは一度しか訪れません。しっかりつかみなさい。
人生とは、あなたが出会う人々であり、
その人たちとあなたが作るもの。
だから、待っていないで作りはじめなさい。

人生は短い。
情熱を見にまとい、自分の夢を生きよう。”



NYのとある会社のマニフェストです。
専門的な部分は他の方に任せるとして。

最初はだれでも似たようなものです。
あまり肩肘張りすぎず、頑張ってくださいね。

投稿日時 - 2016-05-01 15:34:09

ANo.28

それはお辛いですね…。
そこまで辛いとなると、教える方にも良くない点があるのかもしれないですね。
あまりご自分を責めすぎないように。

プログラミングは、学び始めが一番難しいと思います。
ある程度勉強が進み、慣れてくると結構スムーズに勉強が進んだりするものです(あくまで私の場合ですが)。
ですから始めは周りのことは気にせず、ゆっくりと自分のペースで勉強されてみてはどうでしょうか。

C言語というのは結構難しい言語だと思うので、かえってRubyなんかを触ってみて、プログラミングというものに慣れてしまうというのも一つの手かもしれません。
要は勉強の仕方というのはいろいろあるので、自分に合ったものが見つけられるといいですね。

どこでつまづいているのかは、やはり対面に近い状況でないと見抜きづらいと思うので、親切で教え方の上手い人を見つけて、しばらくはその人に頼る、というのが一番いいとは思うのですが。
とにかくわからないところはすべて人に聞いてしまうのがベストだと思います。
会社内に限らず、だれかそういう人が身近に入るといいのですが。

投稿日時 - 2016-05-01 13:17:00

ANo.27

研修が一番つらいと思います。職種によりますが、配属されてしまえば0から書くことは少ないと思いますし、研修のようなストレスも少ないと思います。
ベンチャーに近いとほぼ0から書くというのがほとんどだと思うので、最初はつらいかも。
とりあえず研修は乗り切って、配属後にどんな雰囲気の職場なのかで判断されたほうが良いと思いますよ。

投稿日時 - 2016-05-01 07:48:26

ANo.26

C言語がわからないということですが、プログラム言語全般がわからないのだと思います。
プログラム言語の最初に詰まることといえば、おそらく以下のいずれかではないかと推測しました。
(1)printfとか#includeとかが何かわからない
(2)x=x+2などの式とか変数がわからない
(3)ifとかforとかの制御構造がわからない
(4)関数の呼び出しとかローカル変数とか返り値がわからない
(5)そういうのは分かってるけどどう組み立てていいかがわからない

そのあたりは分かってるよというのであれば以下は読み飛ばしてください。そのレベルであれば他の回答にもあるような参考となる本を読んでプログラム組んでいればいずれ組めるようになります。

(1)printfとか#includeとかがわからない場合
これは少なくとも当面は暗記するものだと思ってください。
意味はあるのですが、その意味を理解するまでにかかるのははるか先にしておいた方が効率的です。

(2)x=x+2などの式とか変数がわからない
「なんでx?そもそもxに2足したものがxってそんな数値なんて存在するはずないし。そもそもどうして値をいれたものが中身が変わるの?」
もしここで詰まっている場合、考え方が中学生の頃の方程式で止まっているか、グラフ構造をなんとなくで逃げてきてしまっているので、本音をいうと中学校数学を勉強しなおすことをお勧めします。
そんな時間がないのであれば、「x=1とはりんごが1つ、x=2はりんごが2つ、x=x+2は今あるりんごが2個増えたらいくつ?」と具体的に考えてみてはどうでしょうか?
(正直この説明で分かるかどうか自信がありません)

(3)ifとかforとかの制御構造が分からない
「if (x==1 or x==2) { x=x+2; }とか言われてもxが1かxが2以外の時とかが気になる、またはx=x+2のことを考えているうちにxがなんだったか忘れてしまう」
変数を扱うキャパシティが未成熟なケースですね。めんどくさいとは思いますが、当該コードを印刷して「今はx=1、x=x+2;実行後にx=3」とコメントを書きながら、変数の変遷を追えるようにしてみてはどうでしょうか?
本当の意味でifとかforの意味がわからない場合は(1)にあるように覚えるしかないです。

(4)関数の呼び出しとかローカル変数とか返り値がわからない
「main()関数でx=2といってるのに、sub()関数でx=3とか入れてる意味がわからない。どうしてsub()関数の中での処理結果がmain()に伝わらないかもわからない」
これはそういうものとしかいいようがないのですが、変数を扱うキャパシティが未成熟だと混乱しやすいのはたしかです。
もし自分でソースコードを書き直すことができる環境であれば、main()関数内の変数はmain_x、sub()関数内の変数はsub_xのように関数名つきで書き換えると処理を追いかける際の混乱は避けられるかもしれません。

(5)そういうのは分かってるけどどう組み立てていいかがわからない
一つ一つの(C言語の)文の意味は分かるけど、「じゃ、1から10までの数字の合計を表示するプログラムを作ってみて」と言われると、何から手をつけたらいいのかわからないような場合
2つ方法があります。
1つ目。あまりお勧めはしませんが、全部暗記する方法。門前の小僧習わぬ経を読む作戦。論理的な思考なんて後回し、全ては記憶力でカバーという、ある意味若いうちなら通用する方法です。
簡単に書きましたが、ここでいう覚えるとは「暗記する」です。暗記の方法にまでは踏み込みませんが、少なくともお題を言われたら何も見ずに全部書き出せるようにしてください。

2つ目。日本語を読み解く作戦。実はプログラムを仕様通り作るという仕事の大半はあまり理系の能力を必要としません。すごい高速化とかすごい効率化とかするなら話は変わりますが。
先の例でいえば「1から10まで」で「変わる変数が必要」「forで回す(whileでもいいですけど)」、「合計」で「加算、つまり+」、「表示」で「printf」と読み解きます。
あとはこれの組み合わせですね(変数の宣言とかは除きます)。
sum=0;
for (x=1;x<=10;x++) {
sum=sum+x; /* sum+=x;でもよい */
}
printf("sum=%d\n",sum)

要するにある目的を達成するのに対して、何をしていけばできそうかというのを日本語で書き起こしていくことができれば、それが最終的にプログラムになります。
私はフローチャートを書くことに対しては否定的ですが(記憶領域の無駄だと思う)、どうしても書いた方がわかりやすいというのであれば書いてもいいかと思います。

ただ、行き帰りに泣きたくなるのも、食事も喉が通らないのも、たいていの仕事ではよくあることなので、適度なストレス発散方法は身につけることをお勧めします。

投稿日時 - 2016-05-01 01:24:34

ANo.25

プログラム言語はとても不自由な言語です。言葉はせいぜい50ぐらいしかありません。
その言葉を組み合わせて、なんとか機械に人間のしてもらいたい動作をやってもらうのが、プログラム言語です。
サンプルの答えを自分なりに日本語にしてみて下さい。幾つか日本語に訳してみるとパターンが分かって来るはずです。
日本語で、機械にやってもらいたい作業を分解出来れば、あとはそれをプログラム言語に訳すだけです。
慣れるまでは、プログラム言語で考えるのは無理です。慣れるとどのパターンを組み合わせればいいのか自然と出て来るようになります。
焦らず、日本語でじっくり考えるようにして下さい。

投稿日時 - 2016-05-01 01:23:12

ANo.24

まず、深呼吸しましょう。
次に自分が理解できない一番簡単なプログラミングの例題を選んで、どこがわからないのか書き出してみましょう。『全部が」ではダメです。1つでも複数個でもいいから、わからない事を書く。
終わったら一番話のしやすい先輩に例題と書き出した「わからない点」のメモを持って会話してみましょう。質問が明確なら忙しい先輩の手間ヒマが軽減されます。
会話しているうちに、きっとあなた自身が一番最初に解決すべき事に気づくと思いますよ。

プログラミングの適性の有無なんて、本人にしかわかりません。文系出身で20年やってる私のようなのもいるんだから大丈夫。

投稿日時 - 2016-05-01 01:20:55

ANo.23

こんにちは。29歳からプログラムを始めてもうすぐ3年が経つ者です。
私も最初はC言語から初めて苦労した記憶があります。
まずはじめに、「C言語は難しい」です。これははっきり断言できます。
そもそもプログラムを書いて動かす環境の準備が初心者向きではないからです。
また、プログラムに必要なほぼ全てが詰まっているので難しいです。
初心者がいきなり手を出していいものではありません。

初心者はPythonというプログラム言語が一番だと思います。
正直、あなたの会社は教育が古すぎると感じます。
組み込み系の職種なのでしょうか?

前置きはさておき、まず1ヶ月で出来ないのは当たり前です。心配しないでください。
同期の初心者の方が出来ると書かれてますが、本当は初心者ではないのでしょう。
どこかで少し本を読んだことがあるとか、興味があってアプリの作り方を調べてみたことがあるのかもしれません。

勉強方法ですが、英語は読めますか?読めると世界が広がるので、時間があれば勉強をおすすめします。
参考書はなんでもいいのですが、「プログラミング言語C 第2版 ANSI規格準拠」が一番良いです。
これを読めるレベルが「C言語を最低限出来る」ということです。
私も苦しかったですが、頑張って読みました。問題は解いても解かなくてもいいと思います。
これを繰り返し何度も読んでください。わからない言葉はネットで検索しましょう。

また、プログラムの書き方ですが、英語と同じで文法という決まりがあります。
書き方に疑問を持つのは無駄です。そう書くものだと諦めてください。

仕事の仕方ですが、「わからないところをわかる」のが大事です。
質問をするときも、何がどうわからないかを説明できるのが理想です。

投稿者さんは真面目な方だと思うのですが、もう少し気楽にいきましょう。
新卒のうちはなんでも聞いて良いのが強みです。じゃんじゃん聞いちゃいましょう!!

大変だと思いますが、頑張ってください。

投稿日時 - 2016-05-01 00:23:57

ANo.22

私はC言語の初めの一歩を理解するのに3年ほどかかりました。
それまではBASICという言語でガンガンにプログラムを書いて、雑誌に投稿するくらいだったのですが、C言語を習得しようとし始めて、BASICとC言語の考え方の違いにとまどい、克服するのに3年ほど必要だったのです。

いったんわかってしまえば、あとはノリノリで書いていけるようになったのですが、その最初のきっかけをつかむまでが大変でした。

当時もやはり「プログラミング言語Cを読め」だの「K&Rを読め」だのアドバイスをもらいましたが、私には何の役にも立ちませんでした。

自分の場合の考えかたの転換点は、以下のようなものです。
C言語は、main()を起点(頂点)として、そこから条件に応じて分岐していく巨大なツリーです。関数 xxx()というのは、その巨大なツリーを構成するパーツにすぎません。
(業務として作成するプログラムは、その関数を作っていく作業です)


質問者さん、
main()で、Hello World. を画面表示するところまで行きましたか?
概念的な説明だと、いつまでたっても堂々巡りするだけで時間の無駄です。
具体的に、どんな内容でつまづいているのか、書いてしまったほうがアドバイスが着きやすいですよ。

投稿日時 - 2016-04-30 21:58:44

ANo.21

あまりに気の毒に思いましたので、会員登録をして回答します。

まず「プログラミングという困難な課題に果敢に立ち向かう姿勢」が素晴らしいと思います。
現在では私が社会人になった十数年前よりも様々な技術が進んでいますし、コンピュータの普及が進んだことで新卒学生のプログラミングスキルも平均としては向上しています。そうするとあなたのように、学生時代に経験のなかった方が、遅れをとってしまうのがかつてよりもずっと目立ってしまうと思います。

さて、2つ大事な質問があります。あなたはプログラミングを好きになれそうですか?
もうひとつはあなたの会社の規模です。

好きになれそうも無いのならば、まずは研修は「勉強」と割りきったほうがいいと思います。プログラミングを通して、社会勉強をすると思うのはどうでしょうか。
他の人には簡単なものがあなたには難しいとしてもそれでいいのです。別段、それはあなたの知性が劣っているからではありません。
しかし、プログラミングには社会で役立つ様々な知恵やスキルが潜んでいます。

複雑な問題を、バラバラに分解して一つ一つ確実に解決してやり遂げる。
一つの手順の次に別の手順を積み重ねてゴールに到達する。
状況に応じて、実施する手順を状況に応じて切り替えることを予め織り込んで計画を立てる。
ある条件が成り立つまで繰り返す。

この4つが学べれば十分だと思います。
回りのことは気にせず、プログラムが動いたときの達成感をえながら勉強してください。

さて、お勤めの会社はどのくらいの規模でしょうか?
従業員が数百人から数千人規模の会社であれば、研修の後に配属を決めるためのプロセスがあると思います。
その過程で、どのような職種につきたいのか希望を聞かれるはずです。
好きになれない職種につきたいなどとは絶対に言ってはいけません。
まともな会社ならば、適正がないことを本人が自覚している職種には付けないはずですし、すくなくとも付けないように努力するはずです。そんなことをしてもあなたにも会社のためにもなりませんから。どのような職種につきたいか、きちんとした考えを早めに固めたほうがいいと思います。

小さな会社だとそこまでの余裕がないこともありえますが、その時は転職も考える必要が生じるかもしれません。
配属が決まった後にもう一度ご質問なさってみるといいと思います。

投稿日時 - 2016-04-30 21:35:49

ANo.20

同業者です。むぎ@SEと申します。

他の方が既に詳しい回答をされているので、私は簡潔に伝えますね。

情報技術や理数系の勉強は、みんな順を追っていかないと読み解けないものが多いです。勉強のコツは、まず基本的な考え方を理解すること。順を追っていくことです。

イメージが出来てない状態でどんどん先に行っても習得に時間がかかってしまいます。

冒頭が読みやすい、わかりやすい自分のレベルにあった参考を探して1ページ1ページ理解していくこと。あとは行き詰まったらすぐ人に聞くことです。(先輩に沢山質問できるのは、新人の特権です。)

文系出身で活躍しているSEも沢山います。苦手意識を持たずに楽しんで下さいね。

参考URL:https://twitter.com/mugi1208?lang=ja

投稿日時 - 2016-04-30 21:17:16

同じような悩みをもっていた4年目のプログラマーです。
私も新卒文系の未経験スタートで、プログラミングが理解できず辛かったです。
同期の中で一番"できない"人です。
向いてないと思い、1年目は本気で辞めようかと思ってました。
まず何の処理から実装すればいいのか…
どう書けばいいのか…
このコードは何を意味しているのか…
等、とりあえず、分からないことが分からないレベルで理解できていませんでした。
でも3年目になったあたりから、分からないなりにも楽しいと思い始めました。
1年目は特に、分からないことだらけなのが普通なので、気に病むことないです。2年間プログラミングやってみてから、転職は考えてほしいなと思いました。

具体的なアドバイスではないですが…

1.分からないことは、できれば時間を決めてネット等で調べて、ここまでは理解できたけど、ここが分かりませんと先輩に質問すれば、自分の知りたいことが聞きだせると思います。
2.なんでこの書き方なのか分からないと思うことが多いかもしれませんが、その書き方が正解(というか、良い書き方?)とは限らないので、あまり悩まなくてもいいと思います。
3.『全部分からない』のではなく、『分からないことが分かる』レベルになれば、少しずつ理解できるようになって、楽しくなると思います。
4.休日に勉強されているとのことなので、書けるようになると思います。私は不真面目なので、休日にあまり勉強しませんでした…。

投稿日時 - 2016-04-30 20:02:07

ANo.18

47歳男現役のSE24年目になる。年齢的に使いこなせる言語はCOBOL,VBだけだがな。

プログラマーっていうのは適性があるかないかがハッキリしてしまう。
知識以前にものの考え方、感覚を身に付けないと理解もおぼつかないものなのだ。

私も一度だけC言語を習ったことがあるが忘れてしまった。だけど、やり直せる自信はある。(さすがにJAVAは無理と断念した。)

問題集を解くことがC言語の勉強にならないんだよね。とにかく簡単なものでも自力で作ってみる。あとはその数をこなす。
コンピューターに何をさせたいのか?それをさせるにはどんな命令を使えばいいのか。
こういう考え方をまず身に付けることは絶対条件だね。

そもそもの言語に関係なくPCでプログラミングを始めたのは中学1年のときだ。当時はBASICしか言語が無かったけど、大学ノートにBASICのプログラムを書きまくった。親はそれを見ても全然分からんって言ってたけどね。でも当時、そういう経験をしてたおかげで今でもSEを続けていられるんだと思う。

どんな言語でもIF命令は必ずある。この命令を使いこなせないようではお話しにならないかな。
C言語に限らず、ほとんどの言語は文系理系の差はないぞ。理系色の強い言語はFORTRANかアセンブラぐらいなものだよ。

一ヶ月で適性がないってお話しを終わりにしてしまうのは、早すぎるかな。そんなんではどんな業種に就職したって長続きしないからだ。
まずは3ケ月続けることだ。

あと、親兄弟、彼氏、友人にSEの知り合いはいないのか?
分からないで困っているのなら泣く暇はない。誰かに教えを乞うことはやらねばならないぞ。

投稿日時 - 2016-04-30 18:38:12

ANo.17

SEやってます。
いまでは、質とスピードを両立したプログラムを多くの言語で作れるようになりましたが、私も最初はつまづきました。

学生の頃にプログラムに興味を持ったことがあり、入門書を買って学んでみたのですが、そのときはほとんど理解できずプログラムを諦めていました。
ところが、数年後プログラマーとして就職してしまったのです。

不安もあったのですが、基本情報とプログラムを一から学んだ結果、歴代最速で研修問題をクリアすることができ、プログラマーとしてやっていくことができました。

その経験から言いますと、プログラムは自分がわかるところから少しずつ積み上げて理解していく方が結果的に早くできるようになります。
わかった気になって飛ばしたり、応用から入ったりするのはNGで、理解できない所が一つもなくなってから次のステップに進むのが原則です。
理解できない箇所は人によって違うので、できる人に尋ねて理解できなかったとしても落ち込む必要はないです。
あせらず自分がわかるところから勉強してみてください。

-----

以上が勉強の話ですが、実はプログラムに向かない人もいます。
たぶん2人に1人ぐらいの割合でいます。個人的には物理や数学が苦手だったり、暗記で乗り越えた人は向かないと思います。

向いてないことをわかっているのに続けている人もいますが、私はおすすめしません。
社内でも他の業務があると思いますし、無理そうなら上司に相談してみたらいかがでしょうか?
やめることはいつでもできますので、まずは社内に留まる方向で検討したほうが良いと思います。

誰でも向き不向きがあり、私もアルバイトを通して自分に向いてない職業がいくつもあることを知りました。
向いてないことにたまたまぶつかるのは仕方ないことですし、自分に向いている仕事を探すためにも必要な過程だと思います。

投稿日時 - 2016-04-30 14:50:55

ANo.16

プログラムはコンピュータへの命令です。

コンピュータは何も知らない子供のようなものです。包丁の使い方を知らない子供にニンジンを切ってと伝えても子供は切ることができません。包丁の持ち方、手の置き方、動かし方をひとつずつ伝える必要があります。

コンピュータには、ひとつずつ命令を噛み砕いて伝える必要があります。人間同士であれば「あれ切っといて」で伝わるかもしれませんが、コンピュータには伝わりません。命令を噛み砕くスキルが求められます。

噛み砕くスキルは人間同士でも有効です。生きてきた背景や文化が異なれば噛み砕いて伝えなければわかり合えないことがあるでしょう。プログラマーになろうがなるまいが、身に付けておくとよいスキルです。

コンピュータは子供のようなものです。こちらの都合はお構い無しです。子供のことを理解するように、コンピュータのことを理解しましょう。子育てをするときに理解するスキルが役立つでしょう。

コンピュータを理解するときに、何を伝えるとどんな結果になるのか理解しましょう。コンピュータは命令したことしかやりません。命令を変えれば、結果が変わります。命令したことと結果を観察して、法則性を見つけましょう。人間よりも分かりやすいです。人間は機嫌で結果が変わりますが、コンピュータは命令のままに動きます。

日本人に伝えるには日本語を使いますが、コンピュータに伝えるにはプログラミング言語を使います。質問者さんはC言語を学ばれていますね。C言語は日本語同様に言語です。文法があって、語彙があります。質問者さんはどうやって日本語で話せるようになりましたか?幼い頃に、試行錯誤したのではありませんか?C言語も同じです。試行錯誤してみましょう。

日本語で話していても最初は思うように伝わらなかったのではないでしょうか?C言語でも同じです。最初は自分の予想とは異なる結果が帰ってきて戸惑うでしょう。その結果から学んでください。やってみた結果から学ぶ姿勢はどんな仕事でも役立つでしょう。

質問者さんは他人と比べて焦ったり、自分はダメだと思っているのではないでしょうか?理解の仕方は人それぞれですし、早さはそれぞれです。なんとなく言葉を並べて意味もわからず英会話できてしまう人がいるかと思えば、しっかりと正しく話そうと準備を重ねてから話す人もいます。早い人が必ずしも理解しているとは限りません。なんとなくで前進して、失敗したら修正して学習する方法もあります。その手のタイプの人は悩まず行動するので習得が早いかもしれません。

プログラミングは特別な能力を求めているわけではないと私は思っています。試行錯誤する、結果を観察して法則性をみつける、語彙と文法を学んで使う、という基本的なことができれば行えると思います。

教える人と学ぶ人の相性もあります。相性が悪く上手く伝わらないときは運が悪かったと思って、他の人に教えてもらいましょう。

投稿日時 - 2016-04-30 14:44:13

ANo.15

それは、教え方が悪いのです。
プログラミングは言葉ですから、文科系の人の方が伸びる傾向があります。情報処理試験の高度の試験でもまったく不利にはなりません。むしろ、文科系の人は一般的に向いているのですね。しかし、プログラミングの初心者教育では、何が不足して理解できずにいるか、教える側が考える必要があります。それができているようには見えませんでした。会社が良くないのかもしれません。

向き不向きはありますが、やりたい仕事がどうか。
やりたい仕事なら、専門学校などに行ってから改めて仕事を探してもやり直しがきくのではないかと思います。

なぜ、そのようなコードを書くか。
納得できるまで説明しようとしない、または、出来ない会社なら、やめても惜しくはありませんよ。
そして、そのなぜ、がとても大切なポイントだったりします。

投稿日時 - 2016-04-30 12:50:18

ANo.14

No.2です。

質問者さんがいくら勉強しても分からないっていうのは、たぶんCプログラマが知っておくべき分野の知識がゼロだからではないでしょうか?。
以下のようなことが理解できていないのでは?

1.プログラム言語に関係なく、いかにプログラムを組み立てたらいいか。
2.OS(WindowsとかUnix等)の機能とそれらのおおよその動作原理。
3.ASCIIやShift-JISなどのコード体系と画面や印刷に表示される文字の関係。
4.コンパイラやリンカー、C標準ライブラリの機能。

1。を学ぶには、「ソフトウエア作法」「ソフトウエア書法」(いずれもB.W.カーニハン/P・J・プローガー)「ソフトウエアの信頼性」(G.J.マイヤー)がお勧めです。いずれも、理解しながら読み通すには、数ヶ月以上かかるかもしれません。

2.については、日経BPからでている「Windowsはなぜ動くのか」などが良いでしょうね。

3.については「プログラマのための文字コード技術入門」がいいかもしれません。ただ、この分野は深入りしないほうがいいです。

4.でお勧めの本は、「BINARY HACKS ハッカー秘伝のテクニック100選」

なお、90年代以前は、書店に行くとプログラム関連の月刊誌やゲーム関連の雑誌が山のように並んでいたものです。
そのものずばりの「Cマガジン」とか「UNIXマガジン」って月刊誌が出ていましたし、洋書では、DDJ(Dr. Dobb's Journal)という月刊誌が秋葉原のコンピュータ館などに並んでいて、C言語を学ぶ初心者にとても役にたちました。
でも、現在では、C言語など開発系の月刊誌の多くが休刊・廃刊となってしまいました・・・。

なお、私にとっては以下の書籍がC言語を学ぶに役立ちました。

・「C/その実践と応用・I/金井隆」 :アマゾンの古本で143円で買えるみたい

・「6809プログラミング デザイン/箕原辰夫」:アマゾンでは、定価2、500円のこの本が21,000円で出品されている!

・「Cの宝箱/アレン・ホラブ」:現在、入手不可能みたいです
 この書籍の27章にある「ドロップアウト宣言」がちょっと考えさせられる部分です。
 著者は、航空機の制御システム開発に参加していたそうですが、その航空機がF-16のものであることを、ある時知ったそうです。
彼は、兵器開発に参加することに疑問を感じて、彼しかできず、高給がもらえるはずのその分野からリタイアし、収入が少ないプログラム教育の分野に転身したことが書かれています。

・エキスパートCプログラミング--知られざるCの深層 :アマゾン等で中古品として入手可能です
 Cを学ぶとき、ちょっと疑問に感じるけど、知らないでも、とりあえずはなんとかなってしまうことあります。
でも、そういった漠然とした疑問にきっちりと答えてくれる唯一の書籍がこれです。


追伸:プログラムを教える立場になってみて・・・

私は現在C#で開発しています。現場に「C#をちょっとやっていました」という方がいます。
プログラム経験年数は長そうでしたが、実際には、C#開発経験がほぼゼロって感じでVBの、それも狭い範囲での経験だけって感じでした。
「まあ、C#は難しい部分があるから、VB6の方にはきついかも?」と最初は思っていたのですけど、それ以外の分野においても、素人っぽい部分が多くて、「こんなことも知らないの?」と思うことが多発しました。

教える側としては、「○○と△△と××が理解できていないのだろうなあ・・・」と推測はしますが、それを仕事中に、全部教える気にはなりません。
そういう人に教えていると、仕事中の多くの時間が取られてしまいますし、自分の仕事ができなくなりますからね。

たぶん、研修においても、先生役の人は質問者さんが分かっていないと理解しているのでしょうけど、「この人だけに手をかけ続けるわけにはいかない」ってことで、「頑張って努力してついてこれれば良し。ダメならそのうち辞めるだろう・・・」って思われているのかもしれません。

もし、質問者さん(の容姿等)を気に入ってくれる先輩男性がいるなら、そういう方に頼み込んで個人授業をしてもらうといいかもしれませんね。


ちなみに、私が以前の会社で仕事でプログラミングしていたら、「遊んでないで仕事して!」って言われたことあります。「なんで?」って聞いたら、「そんなに楽しそうにPCに向かっているのは、ゲームしているに違いないと思ったのよ」と言われました。

投稿日時 - 2016-04-30 11:17:24

ANo.13

IT業界で10年ほどSE・プログラマーを経験した後、今は教育機関で学生にプログラミングを教えている者です。
質問者さんは、文章がとてもしっかりしているので、頭が悪いわけではないことははっきりとわかります。
それでも、まったくプログラムがわからないということは、残念ですが、完全に向いてないのです。資質が無いのです。
職業によって、向き・不向きがあることはわかりますよね?
わりと誰でもできる職業もありますが、プログラマーという職業は逆に、向いてない人はとことん向いていない、人を選ぶ職業です。

資質があまり無いのに、だましだましプログラマーを続けている人も多いですが、はたから見て、なんて不幸なんだろうと思います。
プログラミングというものは、好きな人にとっては、とても楽しい行為なのです。好きな人にとっては、プログラミングの勉強は苦ではなく、遊びや趣味の一環です。
しかし、資質が無い人にとって、プログラミングの勉強は苦行以外の何物でもないでしょう。
かたやストレス解消、かたやストレス源です。

学校でプログラミングを教えていても、1分で理解できる学生もいれば、数時間かけても理解できない学生もいます。
単に理解できない学生の頭が悪いというわけではなく、数学はできたりします。本当に不思議なものです。
不真面目なのにプログラミングはできる学生もいれば、真面目なのにプログラミングができない学生もいます。

とにかく、向いていない人には本当に向いていません。
質問者さんは文面から真面目な人に見えますが、無理して続けないほうが良いですよ。一生酷いストレスとともに仕事をすることになるか、鬱になるかです。

他の回答者さんからもありますが、もし社内でプログラマー以外の職への配置転換が可能そうであれば、上司にかけあってみると良いでしょう。
それが無理なら、本当に、無理してプログラマーを続けずに、全く別の職へ変えたほうが良いですよ。
それか、もはや達観してだましだまし続け、現場で良い独身男性を見つけ、早々に寿退社することです。

これは純粋な興味なのですが、何故プログラマーになろうと思ったのでしょうか?

投稿日時 - 2016-04-30 10:39:21

お礼

ご回答ありがとうございます。

おっしゃる通り、やはり向いていないのかもしれませんね。
しかし向いていないなりに続けたいのです。一生とは言いません。いよいよ無理になって辞めたとして、転職が不可能にならない程度に続けたいのです。

>これは純粋な興味なのですが、何故プログラマーになろうと思ったのでしょうか?
多分もう見る人が見ればバレているのだとは思いますが、その理由を言うと、いよいよ完全に特定されそうなので回答は差し控えさせて頂きます…。すみません。

投稿日時 - 2016-05-01 06:06:08

ANo.12

何人か新人が入ってきましたが
質問者様と似た様な方は3人程いました。
1人は1週間しない内に辞め、
残りの二人は1年ぐらいで辞めてしまいました。
後者の二人は仕事中にガチ泣きした事もあったりして
相当つらかったんだろうなぁと。
ある意味すぐ辞めた人が一番精神的にマシだったのではないかって気がします。

>何をすればいいのか、どういう風に書けばいいのか考えればいいのかわからないのです。

これきついパターンですよね。順序立てて物事を考える能力が低いからなのか、
単純にC言語の文法や仕組みが理解出来ていないからなのか。
後者だったらまだ救いはあります。

>研修中に質問したりもしますが、何度聞いても何を言っているのか、どうしてそのコードを書くのか理解できません。

これは教えてくれる先輩が丁寧な教え方なら、なんとかなりそうではありますね。
どこまでわかっているのか頭から確認しながら探っていかないといけないパターンだから
他の人と同じ様に質問に答えてたら、ちんぷんかんぷんになるでしょうね。
最後らへんは空気読んで質問の答えがわからないけど、わかりましたって返事してたりしないですか?

>参考書を読んで載っているコードを書いて

載ってるコードそのまま書くのってあんまり意味ないですよ。
英単語を覚えるとかじゃあるまいし。
そのコードで起こる結果を少し変える様に作って
想像通りに動くかどうかとかでいいんじゃないですか?

極論ですが、文法とかで何が出来るかをおぼろげに覚えておいて
コードを書く時は、それらを組み合わせていって
書き方忘れたら見直すで良いと思うんですよね。
パズルみたいな感じです。

正直質問者さんにアドバイスするのは、書かれた情報だけじゃ非常に厳しいです。
何がわかってて、何がわかっていないのかが判断出来ないからです。
もし、頑張って続けていきたいのであれば
わからない箇所をネットで一つずつ質問して下さい。
ネットには親切に教えてくれる人が結構いるので。
本当はネットではなく、直接口頭で説明するのが理想ですが
会社の先輩にそれを求めるのはきついかもしれません。
時間的問題もありますし。出来れば先輩に今の現状を
包み隠さず伝えてください。
教える人も教える人でスケジュール管理とかありますんで。
後で蓋をあけたら…ってのが一番嫌なパターンです。

もし辞めたい辛いと思うのであれば、
質問者さんの上司、管理職などに相談してください。
配置換えなどをしてくれるケースがあるかもしれません。
プログラマの会社だからと言って
プログラマしかいないとは限りません。会社の規模にもよりますが
事務、営業、経理など他に業務があるかもしれません。

転職も新卒の時より選択肢が減りますし
何故すぐ辞めたのですか?って質問されるのが予想され、
苦労するかとは思いますが、まったく
再就職出来ないって事はまずないはずです。
仕事の適応力に関してプログラマより断然良くなる可能性が
高いので、先が無いなど悲観する必要もないと思いますよ。

投稿日時 - 2016-04-30 03:46:23

お礼

ご回答ありがとうございます。

私と似たような方が一つの会社に3人ほどいらっしゃったのですね。とても気持ちがわかります。

こう…九九の表を作りたい、となったとき、「ここでfor文の入れ子構造使えば出来るのでは?」と考えが及ばない感じですかね…。まず「どうすれば出来るの?」となってしまいます。恐らく能力だけでなく想像力も貧困なのだと思います。

>最後らへんは空気読んで質問の答えがわからないけど、わかりましたって返事してたりしないですか?

2、3回同じことを質問して相手が疲れているのを見るとつい言ってしまいます。悪いことだとは思うのですが…。

>先が無いなど悲観する必要もないと思いますよ

これほどまでに能力がない癖にわがままだとは思いますが、転職するとしたら次も正社員で働きたいのです。1ヶ月で辞めて正社員になれるとはあまり思えませんのでなんとか頑張りたいです。

投稿日時 - 2016-05-01 05:52:17

ANo.11

私はリーマンショック直撃の2010年卒で、新卒採用は某フランスのファッションコングロマリットの総合職でしたが、希望のブランドに配属されず、リテール研修先が外れ店舗で労基法アウトの劣悪な労働環境に耐えられなくなり、新卒入社9ヶ月目に転職しました。でも、最初の会社に見切りを付けて自らさっさと転職してしまったことを後悔しているので、今のあなたに伝えたいと思い、今夜初めてokwaveに登録して書いています。
私が辞めた当時も、今のあなたと同じように、食欲がなくなり何を食べても味気なく、仕事の行き帰りの電車で涙が止まりませんでした。当時の私は病院には行きませんでしたが、今のあなたは急激に大きなストレスにさらされて、それが体調に出ている状態です。生真面目に頑張りすぎて無理を続けると、適応障害になってしまうので、疲弊しすぎる前に対処しましょう。

まず、今すぐに自ら退職する必要はありません。辞めてしまおうかという覚悟まで出来ているなら、今の会社で失うものはもう何もないという心持ちで、まずは会社と状況の改善にむけて交渉しましょう。(私がやらずに後悔しているのはここです。)
新卒プログラマーになったのは、プログラマー職種に限定した形での採用でしたか?それとも総合職で採用されて、配属がプログラマー職でしたか?雇用契約を見てみましょう。
もしプログラマー職に限定した採用ではなかったのであれば、望んでもいなかったあなたにC言語をいきなりやらせようとしている会社側に判断ミスがあります。あなたには配置転換を求めて自分の適性に合う職種に社内で変更してもらう道が残っています。プログラマー限定での採用だったとしても、診断書があればまだ交渉の余地はあります。
会社との交渉の前に、心療内科か精神科に行って、現状を話して診断書をもらっておくのも大事な一手です。会社に配置転換を願い出たいということも合わせて医師に話せば、おそらく適応障害だと診断してくれると思います。もしかしたら1ヶ月の休職という形で診断書を書こうかと打診されるかもしれませんが、自分の気持ちとして職種が変われば気分も変わって頑張れるし休みたくないなら、そうハッキリ伝えれば医師も考慮して診断書を書いてくれます。
研修中ならまだ試用期間も終わっていないので、会社にこの相談をすることで試用期間中の雇用契約終了をちらつかされる可能性もあります。その際の対抗手段に診断書を手元に用意だけしておいて、研修担当者か人事部に今のあなたの状況を話し、プログラマー以外の職種に配置転換してもらえないか相談しましょう。良識のある会社なら、すぐに配置転換してくれるはずです。もしかしたら出世コースから外されるかもしれませんが、新卒最初の2-3年くらいは出世コースかどうかなんて関係ないし外からも分からないです。配置転換後に今の会社じゃ展望がないと思ったら、勤めながらゆっくり準備してブランク0日での転職を目指せばいいんです。
もし配置転換に会社が難色を示したり解雇をちらつかせたら、労働局に助けを求めましょう!あなたが自ら辞めるのは、労働局と動いてみて、それでもどうにもならなかった時です。診断書に休職が必要と書かれれば、就業規則に則って会社も休職させざるを得ません。その間に転職活動するなり次の進路を考えるなりすればいいんです。

今すぐ自ら辞めてから転職活動するんじゃなくて、まずは今の会社で受けるべき対応を求めるべきなんです。

ちなみに私は、その後もなかなかベストな仕事に出会えず、2社目の法律事務所では弁護士からストーカーを経てのパワハラによる適応障害も一度経験しましたが、無理しながら毎回ブランク無しで転職活動してこれまでに計3回転職。この2月からやっと自分にぴったりの仕事に辿り着けました。天職につくまで卒業から6年かかりました。
でも、新卒の会社で配置転換を求めていれば、2社目に転職してストーカー&パワハラにあうこともなく、私の人生こんなにバタバタと彷徨わずに済んでいたんじゃないかと、とても後悔しています。

あなたには同じような苦労をしてほしくないです。どうか今の状態で無理を続けないでくださいね。

投稿日時 - 2016-04-30 03:22:22

お礼

ご回答ありがとうございます。

とてもつらい体験をなさっていますね…。
うちの会社では、おそらくプログラミング以外の業務にはつけないと思います…。

これほどまでに能力が無いのに、わがままなのは重々承知ですが、転職するとしても今のような正社員になりたいのです。
近々心療内科に行くので、その際にまた考えてみたいと思います。

わざわざ登録してまで回答してくださり、本当にありがとうございます。
無理をしすぎないよう気をつけます。

投稿日時 - 2016-05-01 05:34:46

ANo.10

厳しいこと言うと、文系からの挑戦は無謀です
プログラミングは奥が深く理系の私でも他人のコードを理解するのに苦労することがあります
初歩を独力で勉強できないようだと畑違いの人には厳しいです

それを踏また上でJiamari459さんは、自分で努力したり素直に質問したりできる方みたいなので決意は固いという前提で書きます

まず、コンピューターが動作する仕組みを知ってください
そこを知らないとプログラミングの入門書も解らないと思います
ここに辿り着けたということはインターネットで調べ物をするくらいはできるでしょうから、「コンピューター 仕組み」で検索して出てくる(参考URLのような)サイトを覗いてみてください
解らない単語が出てきたら、その単語を検索して調べます

何か知りたいときは、インターネットで調べるように癖を付けると良いと思います
コンピューターやプログラミングに関する情報は、ほぼ全てインターネットにあります
書籍はまとまっていて読み易いかもしれませんが、情報が古くなっていることが多いので、汎用的、体系的、学術的に著名である書籍以外は、読む必要はあまりありません
インターネットで調べて独りで解決、自分が解り難かったことは後進の為にインターネットにメモを残しましょう
「MPU(CPU)」「メモリー」「OS」「アプリケーションプログラム」などを理解して、ある程度コンピューターと単語を頭の中でイメージできるようになったら、プログラミングの入門書を読むといいでしょう

可能なら師匠になってくれる人をを探しましょう
どうしても独りで解決できないときは自分よりスキルがありそうな人を師匠と仰いで頼ってみましょう
コミュニケーション苦手な人が多い業界ですが、頼られて嫌な気分になる人はあまりいませんし、私も含め教えたがりの人は多いです

参考URL:http://itpro.nikkeibp.co.jp/article/COLUMN/20061220/257441/

投稿日時 - 2016-04-30 00:55:23

お礼

ご回答と参考URLをありがとうございます。

コンピュータが動く仕組み、確かに理解していないように感じます。
載せてくださったURLを参考にさせて頂きます。

同期には頼りすぎて迷惑をかけているので、ほどほどに頼ってみたいと思います。

投稿日時 - 2016-05-01 05:11:39

ANo.9

プログラミングはそもそも難しいものなので、そこまで悲観することはありません。

英語を初めから読める日本人はいません。
C言語を初めから読める人もいません。
言語を一つ覚えるわけですから、時間がかかるのは当然のことです。

また引っかかるところも人それぞれで、コツを掴めばあなたの方が他の人よりも優れている可能性もあります。
焦らず一行一行読んでいけば、段々とわかるようになるはずです。
周りの人に合わせず、自分のペースで一行一行読んでください。
映画やドラマに出てくるハッカーのように、スラスラ読んで書いてを繰り返してはいけません。
意味を理解することが大事です。
とにかくプログラミングに対する一切の先入観を捨て、自分が理解できるペースで読むことが大事です。

あなたのように周りの環境に流されてしまうことは、初心者にありがちです。
人によって成長速度は違うので、自分のペースでやってください。

初めは参考書で学ぶことが鉄板になってくると思いますが、
ある程度力が付いた後は、自分の興味のあるものを作ることで上達できるでしょう。
逆にソフトウェア制作に全く興味がなければ、プログラミングは後々拷問でしかなくなります。
作りたいものを探すことも上達への近道ですよ。

本当に向いていないと思ったときは、早めに逃げるが吉です。
あなたの人生、仕事だけに賭けるのはもったいないですよ。
転職も簡単なことではないことはわかりますが、どうか自分自身を大切にしてください。
あなたの成功を祈っています。

投稿日時 - 2016-04-30 00:29:45

お礼

ご回答ありがとうございます。

おっしゃる通り私は周りの空気にとても左右されてしまいます。しかし焦ってしまっては身につくものも身につかないですよね。

今月から研修が本格化するので、本当にダメだと思ったらまた考えてみようと思います。

投稿日時 - 2016-05-01 04:59:56

ANo.8

悪いことは言いません。すぐに会社を辞めなさい。まだ1ヶ月しか勤めていないですよね。
良かったじゃないですか。研修中に合わないことがわかって。

研修期間が試用期間中にあたるかわかりませんが、社会保険に入ってなければ、儲けもの。
入ってても、1ヶ月では職歴として書けるわけもなく。面接で聞かれても、
うまく回答すればどうとでもなるでしょう。

貴方が続けたい、頑張りたい。と言っているので、皆さんその方向でアドバイスされてますが、
人には合う合わないがあり、無理なものは無理です。何年か後に出来るようになったとして、
それまでの地獄を耐え抜けれますか?よく考えて下さい。
まだ研修のおそらく初歩段階でこれです。実業務について仕事が出来る様になるまでに
待っているのは、多忙な業務と、先輩方の使えないヤツ。と言った評価と態度ですよ。

このまま続けても心が殺られて退職し、次の職に就くまでに何年も費やすでしょう。

まぁ、反省するとしたら学生時代の貴方が就職活動何をしていたんですか?
ということです。安易に考えてこれまでやったことも無いプログラマーなんて
技術職を選んだ貴方の考え方と、出来る様になるまでの覚悟を考慮しかなった事が問題です。
学校の就職課なんてものは、就職率を上げるために適当なこと言って就職させようとするので、
結果として、この状況を考えずに就職してしまった貴方自身の責任なんで。

これまでの学生時代は、頑張ることが美徳でしたが社会人は違います。
生き抜く力が必要となります。あらゆる意味で結果が重要となります。
心が殺られて、金が無くなれば、ゲームオーバーです。

挽回出来る年齢があるとして、貴方はまだまだまだまだ、どうとでもなる年齢です。
世の中には様々なあらゆる職があり、次は自分にあった職業を選べば良いのです。
今回辞めたとして、辞め癖をつけず次の職で頑張ってください。
どうしても就職できなかった場合は、風俗関係の仕事に就くこともありです。

引きこもらず、今回のミスマッチが起きた原因を理解したうえで次の職に就き、
お金を稼いでください。

投稿日時 - 2016-04-30 00:01:51

お礼

ご回答ありがとうございます。

向いていないのではとは思いますが、1ヶ月で辞めても転職活動が難しいのでは、と思い、心は既に半分殺られた状態ですが、一年は勤めたいと思います。1ヶ月も一年も変わらないかもしれませんが…。

投稿日時 - 2016-05-01 04:55:01

ANo.7

SEをやっております。
文系出身です。
新人研修で、はじめてコンピュータにさわり、マクロアセンブリというものをやり、参考書を購入し、電車で読んでいたことを思い出しました。

専門用語がわからないということですが、OSの初歩の本を読むと良いかと思います。プログラムはコンピュータを操作するためのものであり、プログラムはOSを介してコンピュータを操作するため、ベースの知識はOSを知ることで得られます。OSとはWindowsなどのことです。

操作中心の本ではなく、OSの仕組みを解説しているものが良いと思います。

また、プログラムを書くさいは、まず日本語で何をするのか説明できない限り書くことはできません。C言語の参考書を読むさいも、ソースコードを自分で、日本語で説明できるかどうか考えると良いと思います。

いろいろな新人さんと仕事をしてきましたが、一年もすればプログラムは書けるようになると思います。
時間が解決してくれます。

新人時代ははるか昔なため、まとはずれな部分もあるかと思いますが、ご参考願います。

投稿日時 - 2016-04-29 23:48:12

お礼

ご回答ありがとうございます。

おっしゃる通り、プログラムを書く際にまず日本語で書くことを意識してみたいと思います。
お恥ずかしいのですが、行き当たりばったりでとりあえず使えそうなコードを打っていました。

とりあえず一年を目標に頑張ってみたいと思います。

投稿日時 - 2016-05-01 04:49:16

ANo.6

最初はシャープ、HPのポケットコンピュータでしたね。
雑誌に有るコードを入力して動作を確認して遊ばれた物です。
その後仕事で『マシン語』の世界で、まずフローチャートを記載し
それに必要なコマンドを取り出して作成していました。
当時専門学校卒が作成した物を引き継いだ時コードを全て
書き直して完成させたけどその後は検査部門で検査機器
のコード修正をした事も有りますね。

参考にしたのは『コマンドが書いてある雑誌』
考え方としては
これをするのにどのコマンドが使えるかです。
全て独学で専門学校で学んだ事は有りません。
その関係かMacに移行してWindowsは単なるサブ機
(珠に電源を入れるだけ)
に成ってます。
久しぶりに連休にプログラムでも書いてみようかな。

投稿日時 - 2016-04-29 13:54:26

お礼

ご回答ありがとうございます。

やはり、好きこそものの上手なれ、ですね。

楽しくプログラミングなさっているようで羨ましい限りです。私もなんとかその段階まで登れるよう頑張ろうと思います。

投稿日時 - 2016-05-01 04:43:27

ANo.5

完全にコンピュータ業界とは無縁の素人ですが・・・。

私は、c言語、java、sql、dbで開発するまでには、それぞれに最低でも6ヶ月。

私の場合は、毎日、10時間を言語習得にあててそれでも6ヶ月してはじめてプログラムを書けるようになりました。

要は、学習量の蓄積の程度です。最初は、一冊をマスターしてもほとんど初心者の域をでません。二冊目、三冊目と頑張っても、やはり、レベルとしては初心者のそれです。でも、そこで諦めずに学習と実地とを蓄積していけば、ある日突然に開発者が眺めているステージが目の前に開けます。つまりは、学習量がスキルという質に一気に転換したということです。

山だって1500mまで登らないと辺りの景色は山地帯から亜高山帯には変わりません。プログラミング言語の学習だって同じこと。1500mまで登り切った者だけが次のステージの存在を知ります。ですから、500mまで登るスピードなんてどうだってよいのですよ。その時点で「速い、遅い」と一喜一憂する必要はさらさらありません。目指すは1500m地点に広がるステージですから。

なお、私なんぞ

10 input a,b
20 let c=a+b
30 print c

のたった3行を理解するのに一ヶ月を要したものです。mzー80の設計書を解析したり、情報科学全24巻を読んだり。その後はフォートラン演習の例題とプログラミング言語cの例題をやりきてってなんとかプログラムらしきものを書けるようになりました。ともかく、この最初の山登りが課題です。

量は質をもたらす!

を信じて頑張るのみですよ。

投稿日時 - 2016-04-29 13:08:31

お礼

ご回答ありがとうございます。
少し心が楽になったような気がします。

私はまだ学習量の蓄積が足りないのかもしれませんね。

この最初の山登り頑張ります。

投稿日時 - 2016-05-01 04:37:35

元プログラマーだったので、気持ちは分かります。
自分の場合、情報処理の専門学校を卒業してはいますが、仕事で客先でプログラミングを組んだ経験はなく、教育もない状態で会社が客先に出す経歴書では経験したことがない開発業務が記載されていて、それをつじつまが合うように年齢も実際の年齢よりも、2歳程上に記載されていました。
いわゆる、会社による経験詐称が行なわれていました。
それがバレないように客先の面接前に事前練習をさせられました。
経験者ではなく、実際に業務でプログラムを組んだことがないですが、客先でバレないようにするのが大変でした。

実際に業務でプログラミングするようになっても、ある処理のロジックが上手く動かず、精神的に追い詰められたことがありました。寝てても上手く動作しないロジックのデバッグをしている夢ばかりでした。

自分はプログラマには向いていないと思って引き留めはありましたが、辞めました。プログラム開発の会社だったのでほかの仕事はなかったため辞めました。
プログラミングに全く関わらないと言うことではないですが、今はITでも別の業務についています。

その会社にプログラミング以外の仕事があれば、違う教育をしてもらうのもいいかもしれません。
プログラミング言語はCだけではなく、java、vb、cobolがあり、DBを使用するとなるとsqlも覚えないといけません。
開発業務でどんなプログラミング言語を使うかは分からないので都度覚えていく必要があります。

英語の学習でもいろいろな方法がありますがその方法が自分にあっているのが見つからない場合もあります。
プログラムの学習方法も似たようなもので、本を読んだり、ネットで調べてプログラミングを組んでも自分が理解出来るかは自分次第なので、誰にでも合う良い方法というのはありません。
当時プログラミングが苦手で今第一線でプログラマーとして働いている人間も、恐らくあなたと同じような苦労をしていると思います。

投稿日時 - 2016-04-29 11:26:10

お礼

ご回答ありがとうございます。

おそらくプログラミング以外の業務は、うちの会社にはないと思います。
勉強方法も模索していくしかないようですね。頑張ります。

投稿日時 - 2016-05-01 04:32:30

ANo.3

プログラミングの最初の壁は、「コンピュータは、逐一正確な手順を、正確な順番で指示しないと、間違ってようが言われたとおりにしか動かない」というコンピュータに、細かく指示をどういう順番でやらせるか、という考え方に切り替えて付き合わないといけない点です。

人間なら自分で考えてできるでしょ!、と任せられるところも、全部マニュアル化するように手順書として与えないとダメなのです。その手順書をどうやって書くか、言語は得意なもので書けばいいのですが、手順そのものを立てるのがプログラマの仕事なのだ、と子どもに説明するつもりで、やってみてください。

そうすると、他の文系の方で食らいつけている人たちからのアドバイスも理解しやすくなると思いますよ。

投稿日時 - 2016-04-29 10:41:51

ANo.2

昔、私がコンピュータの仕事をやりはじめたころを思い出しますね。

質問者さんは、C言語の知識以前に、「プログラムロジックはどう組み立てていけば良いか?」とか「ハードとソフトの関係」なども理解できてないものと思います。

1つ2つくらいの疑問であれば、その疑問を放置しても、なんとか先に進むことができますけど、3つ4つと理解できないことが積み重なってくると、もうどうしようもなくなり、「わけわか」状態になってしまいますもんね。

でも、こういう状態について、「これさえ学べばOK!」なんて特効薬はありませんね。

対策としては、平日はもちろんですが、このゴールデンウイークといったまとまった休みも、朝から深夜まで、受験勉強並にコンピュータの勉強をやり続けるしかないと思います。
そして、コンピュータで学ぶべきことは、膨大になっていますし、1つの問題(疑問)を解決しようと調べ始めると、2つの疑問が追加されて3つの疑問に増えてしまう。
そして、3つの疑問を調べていると、さらに6つの分からないことが追加になってしまうかもしれません。
そういう状態になったとしても、地道に勉強を続けて、疑問を解決してゆくしか方法はありません。


ただ、言えるのはネットで調べるとか、本を読むだけってのは絶対ダメです。
参考書や専門書を調べて1時間で「これは分かった!」という気になるかもしれません。
でも、実際に手を動かして、その疑問に思ったことに関するプログラムを、自宅のPCで作ってみると、「うまくいかない!」となるものです。
これは、単なる自分のタイプミスもあるし、書籍やネットの記述が間違っているのが原因だったりします。
さらには、自分も書籍も正しくとも、バージョン違いで動かないってこともあったりします。
そういう問題を1つについて2,3日かけて地道に解決していく過程で、実力がすこしずつ身についてゆくのです。

また、そのプログラムを作る過程において、新たな疑問がいくつも生まれてきますけど、それについて、ネットや書籍を読んで勉強していたら、もしかするとその1つの疑問の解決に1ヶ月以上かかるかもしれません。

なぜなら、人間の脳みその処理速度や処理量には限界があるから、いくら一度に沢山の本を読んでも、一定の時間に理解できる量には限りがあるし、その1つの疑問は、情報系の学校で半年とか1年がかりで学ぶ分野かもしれないからです。

いずれにしても、こういう孤独で長い読書とプログラミング作業が嫌いなら、業界は同じでも、プログラミングとは関係ない分野に活路を見いだすのがいいかもしれません。

投稿日時 - 2016-04-29 10:08:07

ANo.1

まだ入社して1ヶ月なので、焦る必要も無ければ悲観する必要もありません。
文系卒/理系卒は年数が経つと全く関係無くなりますし、配属先によっては
かえって文系卒の方が有利な場面が多々あります。

プログラミングと言ってもコンピュータに分かる言語で文章を書いている
にすぎない為、最初の飲み込み文系卒の人の方が早いかもしれません。

C言語は35年程前にOS:UNIXと共に学びましたが、当時と比べ様々な
参考書や言語解説書が大量に発行されています。
35年前は、石田晴久訳「プログラミング言語C」しかありませんでした。

当時、C言語で最初につまずいたのがポインターでしたが、それも後から
考えると大したことではありませんでした。
同僚で理解が深い人からアドバイスを受けたりするのが早いと思いますが、
自分で理解しない事には身につかないので、努力を継続するしかないと
思います。

みんな、最初から簡単にC言語が書ければプログラマーなど必要ありません、
他の仕事も同じですので地道に勉強を継続して下さい。

数年すると分かりますが、プログラムを書いている時間は意外と少ないこと
に気が付きます。
自然とエンドユーザーとの打ち合わせや設計に時間が取られ、数年後には
貴方自身全くプログラムを書かなくなると思います。

投稿日時 - 2016-04-29 10:06:38

お礼

ご回答ありがとうございます。

周りの文系の人たちは出来ているのでやはり文理は関係なく、私の頭だけ悪いんだろうな、と思ってます。

まさにポインターでつまづいているところです。ポインターがわからず、何度も同期に教えてもらいましたが、その問題はわかっても次の問題になると応用が効かなくなります。おそらくわかった気になっているのだと思いますが…。

地道に勉強するしかやはり方法はないですよね!頑張ります!

投稿日時 - 2016-05-01 04:24:48

あなたにオススメの質問