私の道はプログラマーです。 QAの学生からリモートのJava開発者まで

こんにちはHabr! この記事では、IT分野での私の道についてお話したいと思います。 現時点では、すでに6年かかっていますが、まだ完全にはほど遠い状態です。 私はまだ学生である間にQAエンジニアとしてスタートしましたが、今ではかなり大きなアメリカの会社でUpworkを介してリモートで作業しています。 私が働いた特定の会社を示すことは意味がないので、すべての名前は「ここにあるもの」と「その他」のスタイルになります。



だから、6年。 それほど多くはありませんが、正直なところ、私は有用なことは何も知らないと確信しており、私は優れた開発者ではありません。 しかし、この期間はある程度の経験を得るのに十分だったので、結論を導き出し、まだ旅行の非常に最初の段階にいる人にはほとんどアドバイスを与えません。



ステージ1:QAエンジニア



私は2010年の夏にQAエンジニアとして働き始め(この記録は労働力であるため、「テスター」ではなくこの非常に賢い言葉を書きます)、大学4年目に切り替えました。 大学は非常に尊敬されていますが、問題ではありません。



私は12歳のときに開発者になることを固く決心しましたが、まだコンピューターを持っていませんでしたが、単純なプログラムを作成できるすばらしいプレフィックスSIUBORがありました。 しかし、8年後、私はテスターに​​なりました...つまり、QAエンジニアです。 事実、最初はプログラミングが私にとってかなり難しいものであり、OOPの概念を適切に把握することができませんでした。関数型プログラミングでは、私もかなり平凡でした。



だから、開発にかなり近いプロファイルを取得し、それが私を慰めました。 さらに、私のテストのリードはほとんどすぐに自動テストに任せることにしたので、手動テストはほとんど行いませんでした。 本当にありがとうございます! Javaを使用してSelenium WebDriverで自動テストを作成しました。 スクリプトを書く過程で、JUnitやEclipseなどに会いました。 同時に、Javaの本を読みました-かなり馬鹿げていますが、それでもある程度の知識は得られました。



1年が経ち、私はすでに仕事に慣れていてそれに慣れました。 そして彼は、プログラミングに対する彼らの夢を実現する時が来たという事実について考え始めました。 テストした製品のアーキテクトおよびリードプログラマーと会話をしましたが、この会話は私を圧倒しました。 私はまったく何も知らなかったことが判明し、私のレベルは私を後輩として連れて行くのに十分ではありませんでした。



私自身の結論: Javaの学習により多くの時間を割く必要があります。 さらに、あなたはより深く学ぶ必要があり、試してみるのがさらに良い。 表面的な知識だけでは十分ではありません。



さらに6ヶ月間、私は自己啓発に従事していました。 私は再び話しに出かけたと同時に、別の会社へのインタビューに行きました。 そして-私の労働は報われました! プロジェクトの担当者は、私は大きく成長し、おそらく1か月で開発者に異動できると言っていました。 そして1週間後、彼らは別の会社から私に電話をかけて、私を祝福しました-結局、彼らは私をジュニアiOSデベロッパーの地位に連れて行く準備ができています! 私がJavaでインタビューし、対応する質問に答えたので、iOSの理由はまだ謎です。 しかし、あなたは私が何をしたか知っていますか? 3週間後に開発者に転勤しなければならなかったので、私は拒否しました!



もちろん、彼らは私をどこにも転勤させませんでした。 この頃、サードパーティのJava開発者コースに行き、3か月後に辞めました。 コースは私の解雇の2か月後に終了するはずでしたが、私は最高の学生の1人として、私は採用されると信じていました。 無駄ではありません。



結論:本当に欲しいものを確実に達成できます。 あなたは平凡に満足することはできません。 (先を見てください-快適ゾーンに長く留まることはお勧めしません。快適ゾーンを離れるだけで、新しい高さに到達できます-これについては、終わり近くにあります)



ステージ2:Java開発者



はい、彼らは2012年の夏に私を開発者として連れて行った。最初はほとんど陶酔していた-結局のところ、私は今開発しており、私をテストすることにあまり興味がない! 今回は楽しかったです。



会社に到着してすぐに、私はベンチに着きました。会社がプロジェクトのために私をすぐに特定できなかったからです。 私は約2週間ベンチに座っていました。そのとき、私は簡単なトレーニングプロジェクトに従事していました。そこで、Struts2とMercurialを垣間見ることができました。 それから、私のリソースマネージャーは、彼らが私を本当の戦闘プロジェクトと見なす準備ができているという良いニュースを書いてくれました! 主任開発者はすでにそこで働いていて、賢い友人が必要でしたが、できればジュニアよりも高いレベルが必要です。 そして、ここには恐ろしい詳細がありました-モスクワの男性とのSkypeインタビューをしなければなりませんでした! おそらく、ほとんどの経験の浅い初心者のように、私はインタビューの単なる考えでパニックに陥りました(これは、楽しいギャップとして、知識のギャップを特定できるようになりましたよね?)。 簡単に説明します。良い面接を行い、テスト作業として2つのストリームでピンポンを書きました。 私と並行して、別の開発者がベンチからインタビューを受けましたが、最終的に彼らは私を優先しました。 私はそれを隠しません-特に彼らが少なくともいくらかの経験豊富な人を連れて行きたかったというニュースの背景に対して、私は非常に喜んでいました。



最初は、ant、SVN、JDBC、そしてもちろんJava Coreのすべてが新しいものでした。 全部でたくさんあったので、余分な仕事をすることさえしないと決めたので、私は毎日仕事の多くを勉強しました。 その結果、いくつかのツールを使用することを多かれ少なかれ学びましたが、それらがどのように機能するかについて明確に理解していませんでした。 この結果、私は自転車や複雑なものを発明することがよくありました。



ヒント:対処方法を常に徹底的に研究してください。 詳細を知ることは、より効率的で簡潔なコードを書くのに役立ちます。 多くの人は、車を運転するためにエンジンの設計を知る必要はないと言うでしょう。 これはかなり妄想的なアナロジーであり、開発者はドライバーではなくメカニックであると言えます。 しかし、彼はまだ少し知っている必要がありますよね? 悪い開発者の仕事は、それを機能させることです。 優れた開発者のタスクは、効率的に作業することです。 (非常に優れた開発者の仕事は、コードを読みやすくすることです)。



約1年、このプロジェクトに取り組みました。 オフィスは自宅から遠く離れていたことを思い出し、次の理由で午前7時30分までに仕事に行くことにしました。





この間、ブルース・エッケルの本「Java Philosophy」と、ケイ・ホルストマンとゲイリー・コーネルによるJava本の第1巻を読みました。 正直なところ、読書は困難でした。 これは、私がそれらを終えた後に何が起こるかを完全に想像していなかったという事実によると思います。 私は自分の将来を本当に想像していませんでした。「良い開発者になる」というような曖昧な目標しかありませんでした。



ヒント:本を読むときは常に目標を設定してください。 「この本を読んでいるのはなぜですか?」 読んだ後に何を知りたいですか? これはどのように役立ちますか?」 簡単な読書はすぐに決まりきったものになり、時間の経過とともにますます少なくしたいようになります。



さまざまな理由で、プロジェクトは縮小され、2013年の夏のどこかで別のプロジェクトに参加しました。 おそらく生涯で最悪のプロジェクト。 私はSAPに対して何もしていませんが、このプロジェクトはSAPに基づいています。 私はあまり覚えていません-おそらく、私の脳は私を守るためにこの記憶の部分を故意に守っていたので、そこにあったものを簡単に説明します:





このプロジェクトはわずか2か月しか続きませんでしたが、多くの感情を描くことができました。



だから、2013年のどこかで、私は本当のエンタープライズに乗った。 そこでMavenと多くのIBM製品(WebSphere、RAD、DB2)に出会いました。 私が特に気に入ったのは、JavaScriptとjQueryに精通したことです(そして、それは同様に使用されていました)。 そして、Hibernateの非常に厳しい自己記述アナログがありました。 これは、Hibernateが「ブレーキ」であり、レコードを即座にデータベースに入れてそこから取得するORMジェットエンジンが必要だったためです。 私はこれに同意するとは言いませんが、その時点では理にかなっています-システムには毎日何百万ものクエリがあったので、JDBCまででした(あなたがJavaの世界からいない場合、JDBCはJava DataBase Connectivityであり、単なる相互作用メカニズムですデータベースレコードをオブジェクトに変換せずにデータベースを使用する場合)。



約6ヶ月後、私は停滞していることに気づき始めたので、別のプロジェクトに移るように頼みました。 私はこの要求を正当化しました。私はプロジェクトにうんざりしている、それはかなり古く、しかし私は何か新しいものが欲しい。 経営陣は正常に反応し、1か月後にさらに古いプロジェクトに着手しました。 それから、私はもっと抜本的な対策を講じる時だと決めました。 一般的に、目標は達成されました-私は開発者になりましたが、新しい目標を設定する必要があります-優れた開発者になり、最新のスタックを使用して作業を進めます。 そして、1つの理論がうまくいかないので、自分のプロジェクトに対処する必要があると決めました。 このとき、私は新しいステージに移りました。



ステージ3:仕事とプロジェクトの変更



私の現在の仕事は私に成長をもたらさないことに気付きました。 私はかなり古くて不器用なプロジェクトに取り組んでいて、それが気になり始めました。 事実上何も学ばなかったので、私は1か所に定住する準備ができていませんでした。



ささいなことをスキップ-私はひどい会社に入ったが、より高い給料と他の技術のために。 主な短所を書きたい:





長く働くほど、このステージが短命であることをより明確に理解しました。 このプロジェクトでは、GWTとSpringに出会い、Hibernateとより緊密に連携しました。 実際、私はGWTが本当に好きではなかったので、最新のツールの背景に対して完全に無能だと考えました。 まあ、私もGWTを勉強しませんでした。 これは彼との衝突の印象に過ぎないとすぐに言います。



しかし、その時、私は私の友人と共通の小さなプロジェクトを持っていました。 このプロジェクトは非常にシンプルでしたが、それを設計して実装することは依然として興味深いものでした。 JavaScript、Spring、Hibernate、およびJUnitに精通しました。



この期間中、私は一般的なコードを書くほど技術的ではない本を読み始めました。 多くの点で、私はボブおじさんの「Clean Code」の本に触発されました。



事実の声明:ある段階で、使用されている技術だけでなく、構造、アーキテクチャ、リファクタリング、そしてもちろんテストなどの一般的な良いコードを書くためのルールも知る必要があるという認識が生まれます。



仕事を変えてから9か月後、私は現在の場所が私を引っ張っていることをはっきりと理解したので、以前の仕事の場所に戻ることにしました。 当然、わずかに高い給与と興味深いプロジェクトのために。



ヒント:作業にかなり強い不快感がある場合は、これに終止符を打つことを恐れないでください。 転職を犠牲にしても。 最後に、心配することは何もありません。 契約は最初は相互に有益であると見なされ、それがあなたにとって有益でない場合は、状況を修正します。



PS:狂信なし。 私は自分の地位と給料を上げるために、あちこちジャンプするという考えを支持しません。 まず第一に、あなたは絶えず何かを学び、会社の利益のために知識を適用する必要があります。 しかし、あなたが停滞している、あなたの知識が要求されていない、または人々があなたを運転していると感じたら、上のアドバイスを読み直してください。



ステージ4:帰国



それで、開発者としてのスタートを切った会社に戻りました。 Big Dataを使用したかなり大規模なプロジェクトに出会い、Spring、Hadoop(およびそのエコシステム:HBase、Oozieなど)、Maven、TestNGなどの完全に最新のスタックを使用しました。 おそらく、多くの人はHadoopをそれほど現代的ではないと考えますが、これはトレンド自体の現代性を損なうものではありません。 そしてちょうどその時、私はSlackに出会い、このツールに本当に感謝しました。



私たちのプロジェクトは、私たちのオフィスのマネージャーと2人のJava開発者、および米国のマネージャーとJava開発者で構成されていました。 私が戻ったとき、私はすぐに良いプロセスとその不在の間の完全な違いを感じました:





このプロジェクトに取り組んでいる間、私はすでに特定の経験があり、特定のイニシアチブを取りました。 そして今回は、必要に応じてすべての提案に耳を傾け、修正して受け入れました。 モジュールの設計に初めて参加し、自分で作成したアーティファクトを実装しました。 もちろん、同僚は落とし穴を見つけるのに役立ちましたが、それにもかかわらず、私は非常にやる気があり、優れた開発者として認識され、対等な立場でコミュニケーションを取っているという事実を高く評価しました。 ほぼ半年間、私は働いてトラブルを知りませんでしたが、とにかく何かが変わり始めました。



私は突然、クライアントの近くで仕事をしたい、おそらくフロントエンドをやりたいという切望を感じました。 私はビッグデータを扱うことに本当にうんざりしました。 いくつかのリモートデスクトップを経由してサーバーに移動するのはうんざりです。 ジョブを開始してからログを長時間調査して分析するのはうんざりです。 決して退屈で退屈な仕事とは言いませんが、何かが変わりました。 最初は非常に新しくて面白かったように見えましたが、しばらくすると、それが気になりルーチンになり始めました。 私は当局に行き、正直にすべてを言いました:フロントエンドを試してみたかったです。 これと並行して、彼はチャンスの仕事に「クレイジー」な履歴書を送りましたが、非常に興味深いものです。



経営陣は再び私に耳を傾け、考えることを約束しました。 そしてその時、私はインタビューに行って、テストのタスクを得ました。 そして、正直に言うと、ここで急いで始めました。 一方で、欠員は非常に魅力的であり、他方では、帰国後6か月間私を信頼してくれる良い会社を辞めたくありませんでした。 テストタスクには2週間が割り当てられましたが、私は1か月間引きずりました。 最後に、彼らは私に二度目のインタビューを呼び、申し出をしました。



要するに-私は申し出を受け入れた後、私はRMと不快な会話をしました。 思ったように、「そのような行動の後にあなたを信頼する方法」のようなことを聞​​いたので、不快です。 しかし、この6か月の間に会社に一定の利益をもたらし、プロジェクトを支援したため、私はそれを心に留めないことにしました。 将来を見据えて-私はそれを後悔していません。



ヒント:もう一度-あなたは誰にも何も借りていない。 可能であれば、お見逃しなく。 これがあなたの開発です。 しかし、あなたの雇用主を理解して扱ってください-あなたのケアがプロジェクトに影響を与えないように、可能な限りのことをしてください。 この2週間で一生懸命働き、すべてのタスクを閉じて、実績に関するドキュメントを作成します(まだ行っていない場合)。 あなたの場所に誰かに助言してください。 しかし、機会をお見逃しなく。



ステージ5:RoR開発者



はい Ruby on Railsで書き始めました。 新しい言語の学習プロセスについては詳しく説明しませんが、最も重要なことだけを説明します。





どうやら、この会社ではすべてが非常に良かった。 半年ほどで、コードを書く過程で問題が発生するのを止めるのに時間がかかりました。 言語の繊細さをよりよく学び、Rails Wayで書き始めるにはさらに6か月かかりました。



だから、2015年の晩秋。私はすでに新しい会社で6ヶ月間働いていました。プロジェクトは最も面白くありませんでしたが、私にはたくさんの新しいものがあったので、私は退屈しませんでした。 このプロジェクトで、私は多くの興味深いツールに出会いました:Amazon、Heroku、rspecサービス、そしてレール用の多くの宝石。 しかし最も重要なことは、動的なプログラミング言語を感じたことです。 そして、最初はそれが完全に明確ではなかった場合、6か月後にこの魔法による幸福感が始まりました。 そして、再びそれは理解不能になりました。



意見:動的言語は非常にクールです。 文字通り、メタコードを1行で記述できます。これにより、別のコードがその場で記述され、多くの作業が行われます。 ActiveRecordはクールです。 一方、幸福感が過ぎて灰色の日が来ると、この魔法はますます好きになり始めました。 時々、コードは読みにくく、デバッグするには不便でした。 最終的に、私は静的言語が個人的に好きであるという結論に達しました。静的言語を書く方が楽しいです。 とはいえ、それは直接の手でしかなく、RoRに取り組んで1年で完全に成長することはできませんでした。



だから、Ruby on Railsで書いてから6ヶ月が経ちました。 この頃、私はUpworkに興味を持ちました。 しかし、私はJavaFXで注文を見つけ、週に10〜20時間、約1か月間それに取り組みました。 私はそれが好きでしたが、スケジュール40 + 10(20)は疲れ始めたので、プロジェクトの終了後、私はUpworkから数ヶ月休憩することを決めました。



次に、Ruby on Railsで既に別のプロジェクトを見つけました。 率は25ドル/時間で、条件もありました:フルタイムの仕事。 期間-1か月から3か月。 要するに、私は1か月働いた後、プロジェクトがスタートアップのために縮小されました。 それは非常に困難でした-最初の週、私はメインの仕事で40時間に加えて、40時間すべて働いた。 次に、2、3、4週目にそれぞれ35、30、25時間働きました。 それは私を非常に悩ませたので、数ヶ月間、追加のプロジェクトから休憩することを決めました。 ただし、この期間中に私が非常によく稼いだことは注目に値します。



だから、私はメインの仕事に集中し、夕方にはリラックスしたり、他のことに取り組むのではなく、独学に従事することにしました。 そのような体制はしばらく続きました-私は自分に負担をかけず、新しいことを学び、平和に暮らしました。 そして、このプロジェクトはインド人に与えられ、彼らは私を投げました...古いRubyと私たちがサポートしていた古いレガシーシステムに関する最も古いプロジェクトです。 どうやら、これは私の岩です-古いプロジェクトに取り組んでいます。 これに加えて、私は会社のプロセスのわき柱をますますはっきりと見始めましたが、最初は注意しませんでした。 主なもの:プロジェクトの乏しいセットと分析の完全な欠如、およびプロジェクトのテスターの欠如。



アドバイス: 「求職者からの期待」セクションの欠員に「完全な要件なしで仕事をする能力」という項目が含まれている場合は、「会社には分析がありませんので、それを行う必要があります。 そして、独自の要件に従ってタスクを実現します。」



覚えておいて、快適ゾーンを離れるだけで新しい高さに到達できると言ったのですか? この仕事で働いて、私は良い給料を受け取りました、そして、私はチームとオフィスに満足しました。 一般的に、それは快適で、特にダウンロードが完了していないと思われる場合は、私はそのプロジェクトにとどまることができました。 空き時間に記事を読んだり、個人的なプロジェクトに参加することさえできました。 しかし、私の個人的な努力に加えて、どのような開発を受けましたか? 現在の仕事は私の開発にどのように貢献しましたか? 一度の研究では遠くまで行けません。練習が必要です。 そして、自由時間だけでなく、日常の仕事でも練習が必要です。



アップワークに取り組むことにしました。



ステージ6:アップワークのフルタイム



少し検索して、自分に合った仕事を見つけました。 これは、かなり大きなアメリカ企業との長期的なコラボレーションです。 最初の3週間は2つの仕事で並行して働いていましたが、雇用主が私の仕事の質に非常に満足しており、クールな仕事と楽しみの海に終わりがないことを示すメールを受け取った後に辞めました。



現時点では、ここで2か月以上働いていますが、これまでのところ、スタック、プロセス、チームなど、すべてが私に合っています。 私は西洋の経営スタイルがより好きです。 私の作品を評価するとき、「素晴らしい」、「素晴らしい」、「素晴らしい」という言葉を聞くのが好きです。 もちろん、私もこれらの言葉を聞くためにあらゆる努力をしています。



Upworkで仕事を見つける方法については説明しません。このトピックに関する多くの記事がHabréにあります 私の意見では、最も重要な主な点について説明します。





最後の段落に関して、例を挙げます。 私はどういうわけか良い時間ごとの注文を見つけました、そして、クライアントは良い評価を持っていました。 これは、クライアントがすぐにタスクを数時間で評価するように要求し、見積として納められた時間に対してのみ支払うと言ったという事実で終わりました。 その結果、次の内容について対話しました。



-このタスクは12時間よりも早く完了することができます。 私は10だけを支払います。

-もしあなたが私を雇ったのなら、私の見積もりに従ってください。 これが正確に12時間かかる理由を詳しく説明しました。

-私は過去に開発者として働いていて、何かを理解しています。 さらに、リスクのために取っておいた時間に同意しません。 除外できます。

-古いコードを維持する必要があるため、この時計を見積もりから除外することはできません。機能の実装中に何かがうまくいかない可能性があります。

-Artem、あなたはプロであり、これがビジネスであることを理解する必要があります-私はあなたの時間ではなく、実際に行われた仕事に対してのみ支払います。

-まず、あなたのビジネスは私には関係ありません。 また、あなたは専門家であり、実際に実行された作業だけでなく、プロジェクトをサポートする開発者によるプロジェクトの知識にも投資していることを理解する必要があります。 タスクに12時間費やした場合、12時間以内に支払いが行われます。 8を費やす場合、8時間を支払います。 言い換えれば、私はあなたのプロジェクトに費やすすべての時間の支払いを期待しています。 第二に、1時間ごとの作業について合意があり、現在のイベントの展開は私には向いていません。

「さて、お持ちのすべてをコミットしてください。」 別の開発者を見つけます。


だから私は再び繰り返します-おもしろいと思われた最初のプロジェクトに急いではいけません。 この雇用主の歴史を最初に研究してください。



歌詞から離れ、現在の職場で見られる主な利点を説明します。





正直に言うと、私の頭の上にある空がどれほど長く雲ひとつないのかわかりません。 一方では、ロシア連邦の労働法に従ってロシアで働くことはより信頼できるように見えます。 一方、非常に快適なエアバッグを作成するには、数か月のリモート作業で十分です。 現時点では何も悪いことはありません。雇用主は今後数か月間、仕事の範囲が広く、私の仕事は彼にぴったりです。 そして毎週、Upworkに対する私の評判が高まっているので、必要に応じて新しい仕事をすぐに見つけられることを願っています。 また、私はロシア連邦の労働法に厳密に従って働いていることを付け加えます-私は知的財産を登録し、税金を支払います。



ヒント:時間をかけてください。 合計で、Upworkの4つのプロジェクトで、多くのひどいコードを見ました。 多くの場合、人々は十分な経験を持たずにフリーフィールドに行きます。 誰も自分の鼻づまりに鼻を突っ込んでいないし、それを正しくする方法を言っていない。私のこれまでの道のりには6年かかりましたが、そのうち4年は開発と継続的な自己教育に専念してきました。80%の時間は、経験豊富で賢明なチームリーダーから指揮され、彼らの経験の一部を私に渡しました。急いでフリーランス/リモートワークに行きません。



おわりに



はい、6年は少しです。しかし、まだかなり長い道のりがすでに旅をされています。私はこの道に沿った一歩を後悔していません。ほとんどの場合、この記事は私の思い出であり、ハイライトの抜粋です。そして、私が発言できるようにしたすべてのアドバイスは、できれば自分に与えるアドバイスです。しかし、それでも、この回想録が誰かを助けたり、何かに影響を与えたりしたら、とても嬉しいです。頑張って!



All Articles