JavaRush /Java блог /Random UA /Java Middle за 2.5 місяці.
novago219
34 рівень

Java Middle за 2.5 місяці.

Стаття з групи Random UA
Вітаю всіх читачів, які подумали, що за 2.5 місяці з нуля можна стати Middle. Поспішаю Вас засмутити - це можливо тільки при дуже старанній роботі над собою, а я знаю, як усім хочеться всього і відразу - прямо зараз і ніяк інакше. Та й фраза з нуля до мене застосовна лише в певному умовному статусі, адже Java, як мова програмування, у мене справді була абсолютно нульовою. Але дещо я все-таки вже знав і вмів ще до знайомства з JavaRush і мабуть мені хотілося б почати свою розповідь саме з цього, тому що мій кар'єрний зріст - досить дивне поєднання знань, умінь і удачі певною мірою. Отже, дозвольте мені навести список, який створив для мене конкурентну перевагу перед іншими, а також дозволив пройти JavaRush (до 34 рівня) досить швидко і без особливих складнощів (принаймні вони мене не дивували). Список складається зі знань, яким мене наділив університет, а також тим, що мені було цікаво. Не розділятиму, де що лежить і називатиму університет теж не буду. За бажання варто освоїти всі ці знання самостійно, якщо у Вашому університеті їх не дають.
  1. Алгоритми та структури даних: мій шлях у цьому напрямі розпочався з вивчення принципів побудови алгоритмів, читання класичних книг (Кнут) та вивчення мови програмування Pascal, а продовжився він мовою C, реалізацією всіх структур даних та розбором переваг та недоліків кожного з них. Не буду говорити, що до всього іншого я вмію працювати з Машиною Тьюринга та Алгоритмами Маркова, точніше я вже це сказав, але Ви можете пропустити це повз вуха, хоча, на мій погляд, поняття про нескінченну стрічку пам'яті та рух покажчика по ньому, дає найбільш правильне уявлення про те, як все-таки працює комп'ютер зсередини, але це тільки моя скромна думка.
  2. Архітектура комп'ютера та Assembler: коли Ви вирішите, що повністю розібралися з принципом роботи комп'ютера, спробуйте пописати програми на дуже низькому рівні (інакше як Ви оціните всі принади Java?), причому особисто я розглядав усі навчальні варіанти з одним, двома, трьома регістрами та зрозумів, як доводиться викручуватися, коли регістр всього один, а програма працює (дивно, правда?).
  3. Дискретна математика: звичайно, паралельно вищепереліченому варто ще й взятися за цей предмет, тому що він дає повне уявлення про логічне мислення, а теорія кінцевих автоматів розповість Вам, як влаштовані начинки процесора і як вони організовані в інтегральних схемах. Не забуватимемо, що тут також вивчається Теорія Графів, яка 100% зайвою не буде.
  4. Вища математика: вирішив виділити всі інші математичні предмети в один пункт, щоб не надто забивати голову. Тут лежать: математичний аналіз, теорія ймовірностей та статистика, лінійна алгебра – до речі, дуже дуже важлива річ, якщо Ви хочете займатися тривимірною графікою (знаю, у всіх мрія – писати ігри, правда Вам для цього доведеться ще й пройти курс диференціальних рівнянь та чисельних методів, але це так - дрібниці), та й інші області.
  5. Архітектура ОС. Linux: після того, як освоїтеся тут - багатопоточність у Java викличе набагато менше питань, та й виявиться, що казку про філософів Ви вже десь чули.
  6. ООП, мова C++: ну ось, майже дісталися вершини харчового ланцюга. Не роз'яснюватиму тут у подробицях і не говоритиму, чому реалізацію ООП саме на C++ дивитися набагато цікавіше.
  7. Додатково ще пара дрібниць, яку я вже знав, були: комп'ютерна графіка (OpenGL, Unity 3D) і C# (Core).
До чого тут JavaRush?
Ну ось, разом з усім цим барахлом знань, ще у вересні минулого року я натрапив на JavaRush, перегорнув пару рівнів і забив, тому що досить просто знайшов роботу після університету (не програміста, але в IT, може хтось здогадається, що це могло бути ?). Але невдовзі виявив, що мені це стало зовсім не цікаво, за пару місяців я майже досяг стелі і зрозумів, що розвиватися тут немає сенсу, хоча керівництво компанії пропонувало майже цікаві варіанти (серед яких був DevOps), які я відкинув. Паралельно я займався підготовкою школярів до олімпіад з інформатики (забув згадати - мені дуже подобалося спортивне програмування), та й після відходу з основної роботи пішов туди з головою. Приблизно 4-5 місяців мене все влаштовувало, доки і ця справа мені не набридла. Питання повторювалися, всі теми були пройдені і ось тут я і згадав про JavaRush. Будучи раціоналістом (жадіною), я спочатку від кірки до кірки пройшов 10 початкових рівнів, потім заглянув подалі (вистачило рівня до 15 на кшталт), зрозумів, що це досить цікаво і у властивій мені манері - займався цим просто у будь-який вільний момент. Чи є зайві 5 хвабон? Добре, допишу логіку методу. Отже: я купив дві місячні підписки. За перший місяць пройшов від 10 рівня до 28, за другий неповний (приблизно 15 днів) – пройшов від 28 до 34 рівня. За хронологією – це був квітень-середина травня, тобто витрачено 1.5 місяці (у рублях самі порахуйте). Не говоритиму, як варто займатися, а як не варто – про це вже дуже багато сказано.
Працевлаштування
Десь на 30 рівні я переглянув вакансії у своєму місті і вирішив не поспішати і не розсилати резюме всім підряд, але точково вибрати бажану компанію, підготуватися до неї і після цього відправляти свої каракулі HR-відділу. Каракулі я теж дуже старанно вивів і вийшло дуже нічого. Мене досить швидко запитабо на співбесіду і я пройшов її дуже впевнено (принаймні те, що стосується Java Core). Не розписуватиму, які були питання. Проблеми почалися, коли у мене запитали, як працює Spring, і чи знаю я взагалі якісь Enterprise технології. Власне, я сказав, що не знаю, а з таким рівнем - Junior гарантований (вище не стрибнете), але я все ж таки стрибнув і ось тут, напевно, починається найцікавіша частина. Загалом, коли мені пояснабо умови (2 місяці – випробувальний термін, позиція – Junior та вилка зарплат), я зрозумів, що мені вони не дуже подобаються, але сказав, що згоден, і запитав, чи можу я приступити до роботи пізніше, мотивувавши тим, що мені необхідно було закінчити справи на поточній роботі, перш ніж приходити до нової компанії. Таким чином, я вибив майже місяць для підготовки. На співбесіді я був на початку травня, а працював 23 числа. Звичайно, я ще раз вивчив вимоги, дізнався, які використовуються технології (Java EE 6) і готувався до роботи.
Middle чи Middle?
Ну що ж, я почав роботу і виявив, що вони набрали близько 5 Junior-ів, серед яких я звичайно виділявся, але не сильно. Насамперед я познайомився з безпосереднім керівником, помітив, що він курить і почав виходити курити разом з ним (а так взагалі я не курю). Також з нами ходив ще один програміст, про нього розповім трохи згодом. Загалом, за курінням (3-4 рази за робочий день) я спілкувався з керівником, більш докладно розповідав про свої успіхи, ненароком згадував свої знання (мали ж вони знадобитися) і взагалі - входив у довіру, як тільки міг. Шашлик з пивом наприкінці першого тижня дозволив встановити найкращі стосунки, які я організував. В офісі я залишався працювати до 11-ї вечора (робочий день до 18:30), поки мене не виганяв охоронець. Зі мною в офісі іноді залишалися генеральний директор компанії та CTO, з якими я теж спілкувався, ми разом вечеряли та разом виходабо з офісу (мені CTO навіть пропонував підвезти до дому, але я чемно відмовлявся). Таким чином, я по-перше – встановив добрі стосунки з безпосереднім керівником, по-друге – показав вищому керівництву, що дороблю завдання, а тільки потім піду додому. Звичайно, все це ще не робить мені Middle. То що зробило? Нагадую, що я не знав до співбесіди жодного фреймворку (крім JUnit). Ось тут саме варто повернутися до програміста, якого я згадав вище. Це був дуже потужний програміст з 20-річним досвідом, який пропрацював 5 років у Москві, близько 7 років в Америці (як головний архітектор проектів) і багато де ще, включаючи урядові проекти особливої ​​важливості (все це я дізнався, поки курив разом з ним). Так от цьому програмісту дали дуже серйозне завдання і він вирішив взяти мене в помічники. Після того, як йому дали це завдання, виявилося, що йому треба терміново виїжджати з країни і працювати він не зможе. Він написав каркас програми і залишив мене за головного, сказавши, що стежитиме здалеку. Саме цей момент допоміг мені стати Middle та закінчити випробувальний термін не за 2 місяці, а за один і претендувати на більш серйозну зарплату. Тому що стежити здалеку цього програміста не виходило і проект повністю залишився на мені. За місяць я успішно його завершив, за що й отримав свою посаду та можливість претендувати на більш високу зарплату.
У чому мораль?
Ви можете сказати, що мені пощастило вчитися там, де дали всі ці знання (але зауважте, я використав їх просто для згадки перед начальством), що обставини склалися так, що випав такий проект на мої плечі, та й до чого тут, здавалося б JavaRush ? Ще раз нагадаю, до JavaRush рівень володінь Java у мене був 0 – це раз. По-друге, коли вирішуєш завдання з 52 спроби, що-небудь так запам'ятовується - у мене була набита рука на винятках, перевірках та інше, що теж було конкурентною перевагою перед іншими, та й загалом - JavaCore починаєш розуміти дуже ґрунтовно (що підтверджує сертифікат OCA, який я здав за рахунок компанії і набрав 94%), а без цього далі рухатися особливого сенсу не бачу. Наступного тижня мене призначають на новий проект з нуля, який я вестиму сам (включаючи проектування бази даних, вибір технологій, а також набір команди). Також, я вестиму співбесіди і розглядатиму прогрес Junior-ів для визначення: варто, не варто. Хочу сказати, що у цих питаннях мені допомогли не лише фактичні знання, а й уміння налагоджувати спілкування з командою, добре показувати себе перед керівництвом, уміння справити враження та доказ того, що я доведу все до кінця. Дякую за увагу, бажаю всім побільше завзятості та уваги до деталей.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ