- ベストアンサー
ブラックのクソ企業でプログラマーしてますがだまされました
プログラマー未経験で採用されました。ブラックのクソ企業でした。採用され3ヶ月研修を受けただけなのに仕事にいかされてます。今2ヶ月目です。僕の経歴もなにもかもうそ!!!嘘だらけでいきなり仕事をやらされています。過去にいた人は皆やめています。今は食品会社のパートのシフト決めるプログラムを書かないといけない。5人いるパートから3人を無選別に決めるプログラムがかけません。出来たけど3人選ぶときに同じ人が入らないようにしないといけないのが出来ないくて同じ人が選ばれてしまう。ランダムなので同じ人が選出されてしまう。僕の研修は3ヶ月ずっとVBだったのに食品会社ではCでそんな会社にいかされるしその食品会社の上司はプログラミング経験がほぼない。自分にできないことを平気で部下にやらせるDQNな上司です。僕の会社に連絡してもブラックな企業だから何もしてくれないし辞めろと言っているのでしょうか?僕の会社からは僕一人です。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>僕の研修は3ヶ月ずっとVBだったのに食品会社ではCでそんな会社にいかされるしその食品会社の上司はプログラミング経験がほぼない。 もうこの時点でおかしいんけど。 そもそもVBを三ヶ月研修してぶっつけでC言語を使わせる事じたい、大きな間違え。C言語はそんなに簡単な物じゃないからね。 大事にならないうちにちゃんとした所へ行った方がいいよ。 回答が後半に行くにつれて凄い事言ってるんですけど。 ま~今回の回答者達は、類まれなる天才的なプログラムセンスを持ってるんだろうから、是非ともプログラミングのカテゴリで、その技術を見せてもらいたいものだね♪ ど~せ、やれるわけ無いんだろうけど。
その他の回答 (7)
わかった、わかった。じゃあウチも。手抜きで不完全な所もあるけど、そこはかんべんしてな。 /********************************************************************************************* Macros.h *********************************************************************************************/ #ifndef _Macros_h_ #define _Macros_h_ #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> /*関数の呼び出し規約*/ #define CALL __cdecl /*固定配列から要素数を数える*/ #define Array(a) (sizeof(a) / sizeof(a[0])) #endif /********************************************************************************************* Macros.h *********************************************************************************************/ /********************************************************************************************* Vector.h *********************************************************************************************/ #ifndef _Vector_h_ #define _Vector_h_ /*コンテナハンドル*/ typedef struct _Vector Vector, *ContainerHandle; extern ContainerHandle CALL construct(int elementPerByte); extern void CALL destruct(ContainerHandle p); extern void CALL push_back(ContainerHandle p); extern void CALL pop_back(ContainerHandle p); extern void CALL clear(ContainerHandle p); extern void CALL erase(ContainerHandle p, int zeroBaseIndex); extern void* CALL at(ContainerHandle p, int zeroBaseIndex); extern int CALL count_of(ContainerHandle p); #endif /********************************************************************************************* Vector.h *********************************************************************************************/ /********************************************************************************************* Vector.c *********************************************************************************************/ /*コンテナハンドルの中身*/ typedef struct _Vector { char* pchData; /*配列を割り当てる*/ int elementPerByte; /*一要素辺りのバイト数*/ int count; /*割り当てた要素数*/ } Vector; /*コンテナハンドルを作成する*/ ContainerHandle CALL construct(int elementPerByte) { Vector* p = calloc(sizeof(Vector), 1); p->elementPerByte = elementPerByte; return p; } /*コンテナハンドルを消去する*/ void CALL destruct(ContainerHandle p) { clear(p);/*要素を消す*/ free(p);/*自分を消す*/ } /*末尾に追加*/ void CALL push_back(ContainerHandle p) { if(p->count++ == 0) p->pchData = calloc(p->elementPerByte, p->count); else p->pchData = realloc(p->pchData, p->elementPerByte * p->count); } /*末尾を削除*/ void CALL pop_back(ContainerHandle p) { if(!p->count)return; p->pchData = realloc(p->pchData, p->elementPerByte * (--p->count)); } /*コンテナハンドルの中をクリア*/ void CALL clear(ContainerHandle p) { free(p->pchData); p->pchData = 0; p->count = 0; } /*指定した場所を消去*/ void CALL erase(ContainerHandle p, int zeroBaseIndex) { int distance = 0; if(zeroBaseIndex < 0 || p->count <= zeroBaseIndex) return; distance = (p->count - (zeroBaseIndex + 1)) * p->elementPerByte; memcpy(at(p, zeroBaseIndex), at(p, zeroBaseIndex + 1), distance); pop_back(p); } /*指定した場所のポインタをロック*/ void* CALL at(ContainerHandle p, int zeroBaseIndex) { if(p->count - 1 < zeroBaseIndex) return 0; return &p->pchData[zeroBaseIndex * p->elementPerByte]; } /*要素の数を返す*/ int CALL count_of(ContainerHandle p) { return p->count; } /********************************************************************************************* Vector.c *********************************************************************************************/ /********************************************************************************************* PersonData.h *********************************************************************************************/ #ifndef _PersonData_h_ #define _PersonData_h_ typedef ContainerHandle PersonHandle; /*C++のbool型を真似する*/ typedef enum _boolean { false = 0, true = 1, }boolean; /*エラー値*/ typedef enum _ERROR_VALUE { INDEX_ERROR = -1, GENDER_ERROR = -1, AGE_ERROR = -1 }ERROR_VALUE; /*性別を示す値*/ typedef enum _GENDER { MALE = 0, FEMALE = 1, BISEXUAL = 2, }GENDER; extern PersonHandle CALL openPerson(const char* pNameDB); extern boolean CALL closePerson(PersonHandle h); extern int CALL getPersonCount(const PersonHandle h); extern const char* CALL getPersonName(const PersonHandle h, int PersonNumber); extern char CALL getClinetAge(const PersonHandle h, int clinetNumber); extern GENDER CALL getPersonGender(const PersonHandle h, int PersonNumber); #endif /********************************************************************************************* PersonData.h *********************************************************************************************/ /********************************************************************************************* PersonData.c *********************************************************************************************/ /*人間を示すデータ 実装者からここは見えない*/ typedef struct _PersonData { char achName[32]; /*名前のバッファ*/ char chAge; /*年齢*/ GENDER gender; /*性別*/ /*何か必要になったらここから追加する*/ } PersonData; /*本当はファイルからデータを読んでハンドルを作る*/ PersonHandle CALL openPerson(const char* pNameDB) { const PersonData aPersons[] = { {{"Aさん"}, 24, FEMALE}, {{"Bさん"}, 50, MALE}, {{"Cさん"}, 33, MALE}, {{"Dさん"}, 21, FEMALE}, {{"Eさん"}, 43, BISEXUAL} }; int i; Vector* pVector = construct(sizeof(PersonData)); for(i = 0; i < Array(aPersons); ++i) { PersonData* pData = 0; push_back(pVector); pData = at(pVector, i); *pData = aPersons[i]; } return pVector; } /*ハンドルを消す*/ boolean CALL closePerson(PersonHandle h) { destruct(h); return h != 0;; } /*人間の数を返す*/ int CALL getPersonCount(const PersonHandle h) { return count_of(h); } /*人間の名前を返す*/ const char* CALL getPersonName(const PersonHandle h, int PersonNumber) { const PersonData* p = at(h, PersonNumber); return p ? p->achName : 0; } /*人間の年齢を返す*/ char CALL getPersonAge(const PersonHandle h, int PersonNumber) { const PersonData* p = at(h, PersonNumber); return p ? p->chAge : AGE_ERROR; } /*人間の性別を返す*/ GENDER CALL getPersonGender(const PersonHandle h, int PersonNumber) { const PersonData* p = at(h, PersonNumber); return p ? p->gender : GENDER_ERROR; } /********************************************************************************************* PersonData.c *********************************************************************************************/ /********************************************************************************************* Application.c *********************************************************************************************/ /*numCompは[aFrom, aFrom + arrayCount)間に存在するか?*/ static int CALL isIn(const int aFrom[], int arrayCount, int numComp) { int i = 0; for( ; i < arrayCount; ++i) if(aFrom[i] == numComp) return INDEX_ERROR; return i; } /*インデックスをシャッフルする*/ static void CALL shuffleIndex(const PersonHandle h, int aSelect[]/*output*/, int arrayCount, int complete) { int num = INDEX_ERROR; if(complete >= arrayCount) return; num = rand() % getPersonCount(h); if(isIn(aSelect, arrayCount, num) != INDEX_ERROR) aSelect[complete++] = num; shuffleIndex(h, aSelect, arrayCount, complete); } /*性別の値に対応した文字列を返す*/ static const char* convertStringFromEnum(GENDER gender) { struct hoge { GENDER e; const char* pch; } const aHoge[] = { {MALE, "男性"}, {FEMALE, "女性"}, {BISEXUAL, "おかま"} }; int i; for(i = 0; i < Array(aHoge); ++i) if(aHoge[i].e == gender) return aHoge[i].pch; return 0; } /*人間のデータを表示する*/ static void outputPerson(const PersonHandle h, int index) { printf("/************************/\n"); printf("<名前 : %s>\n", getPersonName(h, index)); printf("<性別 : %s>\n", convertStringFromEnum(getPersonGender(h, index))); printf("<年齢 : %d>\n", getPersonAge(h, index)); printf("/************************/\n"); } /*スタート*/ int main() { int i; int select[3]; PersonHandle h = openPerson("DataBase.bin"); srand(time(NULL)); shuffleIndex(h, select, Array(select), 0); for(i = 0;i < Array(select);++i) outputPerson(h, select[i]); closePerson(h); return 0; } /********************************************************************************************* Application.c *********************************************************************************************/
ご質問はこれ? >辞めろと言っているのでしょうか 辞めろじゃなく、居られないということ。 まあ、辞めるんだから貴方にとって同じでしょうね。 ブラックのクソ企業でお怒りね。 でもブラックのクソ企業が雇うのはブラックのクソ社員ですもの。 言葉が汚くてごめんなさいね。 貴方風に書いてみただけです。 ヨーック考えよう、実際は貴方にも立派な経歴というものが無いはずです。 だからその企業にいく、そこしか受からないとかじゃないの? 研修3ヶ月+2ヶ月目で5ヶ月やってるわけですよね? それでこんな簡単なプログラムもかけないほうが問題。 スキル不足以前の話です。 何故出来ないか分析できていますか? 何が出来ない?アルゴリズム?書式?それともその他や言語の変更した環境整備? VBで研修してCへってのはVBの案件がなかったんでしょうね。 VBもCも同じです。 でもVBのほうが初心者向きですからね。それででは? 考えが同じで書式が違う程度です。 怒りはわかる、わかるのは貴方一人で出すのは酷だなと思うから。 普通ならどこか既に同じ会社のものが入っている会社に入れるのが筋ですものね。 でもそれで辞めてちゃ意味ないじゃない? 会社が悪い、クソ企業だ!そう書いて何かがかわる? 自分で勉強して生き残る、それだけ。 自分で学べないならプログラマーは向かないので辞めたほうがいいわ。 これからもっと勉強しないといけないですから、もっとキツイです。 辞めるなら早めがいいし、やるなら努力は必要ってことで考えてほしい。 わかっているのは、出来なければ辞めないといけないという事実があるということです。 あ、出来なくても図太く居続ける度胸も選択肢にありますけど、それも時間との勝負でしょう。 そうね説教だけ言うとご不満でしょうからソースも1つ書きましょうかね。 もし不明な部分があれば自分で3日考えて。 それでもわからなければ補足ください。 プログラミングカテで聞く場合は詳しい仕様もよくわからないので書かないとだめ。 今回はここで書いてあることのロジックのみを書いていますから。 同じ人の重複を避けようとするなら選ばれた人は記憶する。 後は残った人から選出すればいいだけです。 それはちゃんと考えにはいってますか? よく考えて。 こんなの”類まれなる天才的なプログラムセンス”などなくても出来ますのでね♪ #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> int main() { int i,j; int num; char* str[] = {"Aさん","Bさん","Cさん","Dさん","Eさん"}; int select[3]; srand(time(NULL)); for(i = 0;i < 3;++i){ do{ num = rand() % 5; for(j = 0;j < i;++j) if(num == select[j]) break; }while(j < i); select[i] = num; } for(i = 0;i < 3;++i) printf("%s\n",str[select[i]]); return 0; }
お礼
回答ありがとうございます。書かれているように僕はだめ人間です。会社のせいにして反省しています。僕がだめだからとこも採用してくれなかった事実を忘れていました。プログラマーは向かないかもしれないと感じました。書いてくれたソースで今はできましたけどこれから先が不安です。自分のこれからを考えると転職は早いほうがいいのかもしれません。どうもありがとうございました。
- bouhan_kun
- ベストアンサー率19% (1032/5208)
スキルがなくって、納品が間に合わないだけでしょう。上司に相談すれば? なるべく早く。 ただ、できないことを棚に上げてもね。未経験ってのは、錦の御旗にはならないし。私がバカでできませんって言ってるだけであって。
- DESTROY11
- ベストアンサー率23% (804/3490)
文章を読む限り、3ヶ月も研修があるなんて優良ですよ。 ワタシが以前いた会社は1ヶ月で現場入りでした。 言われたプログラムが書けないのは、貴兄の実力が劣っているだけです。 >食品会社の上司はプログラミング経験がほぼない。 だから、金を払って他人にやってもらってるんでしょうが。 自分が出来ないことを、報酬を払って他人にやってもらうことの何がいけないのです? はっきりいって、DQNは貴兄です。
- rockers200
- ベストアンサー率17% (24/137)
僕もプログラマーやってましたが、みんなそうでしたよ。 3ヶ月研修は普通です。それ以上の研修期間を設けている会社は見たことがありません。 研修ではたいしたことは学べません。実際に現場で試行錯誤しないと技術をつきません。あと、VBをやってたからCはできない、って話をするならば、あなたの仕事はないですよ。 プロジェクトアサインの空きは会社にとって死活問題です。 あなたが会社をやめるか、Cの仕事をやるか、どちらかしかないですよ。仕事とはそういうものと思ってください。
- massule
- ベストアンサー率15% (115/754)
どのへんがブラックなのかサッパリ分からないですが。 研修も普通に3ヶ月やってるし、経歴をオーバーに書かれて どこかに送り込まれるのは派遣とかでは当たり前にあるし、 VBを研修でやってて実際にはCを使うなんて、別になんてことないし、 分からなければ自分で勉強すればいいし。 上司がプログラミングできなくても、別の仕事してるんだから、 自分にできない仕事を部下にやらせるのは当然だし。 「してくれない」って言ってますが、何か自分でやってますか? 業務をクリアするために自分で勉強するとか、 他の先輩に連絡を取ってみるだとか。 甘えが許されるのは学生までですよ。お金儲けしてるんですし、 貴方はお客さんから見たら入社年度なんて関係ないプロですから。 辞めたきゃ辞めればいいと思いますが、プログラマーの業界じゃ ハードワークは当たり前ですし、自分で勉強するのが当たり前ですよ。
- hideki1976
- ベストアンサー率17% (20/116)
私が勤めているところの、新人研修は、未経験者でも2ヶ月ぐらいです。 #技術研修だけでなく、ビジネス研修も含め 毎年、GW明けに配属されます。 なので、3ヶ月も研修をしてくれるところは、恵まれていると思います。 まぁ、そうゆうブラックなくそ企業を、志望したのは他人じゃなく、貴方なので 不満を抱えながら、長々と居続けるより早々に見切りをつけたほうがよいのでは?
お礼
>そもそもVBを三ヶ月研修してぶっつけでC言語を使わせる事じたい、大きな間違え。C言語はそんなに簡単な物じゃないからね。 回答ありがとうございます。本当にそう思います。僕はそう思ってました。でもここで回答してくれる人は出来ないとおかしい、という回答で僕は本当にむいて無いと自信を無くしてました。ちょっとそういって欲しかったし誰も居ない職場でひとりでいるのは拷問で甘えたことを言ってすいません。素晴らしいソースもありがとうござました。