Не так давно пробовал устраиваться на работу тестировщиком Java(мой текущий уровень - 19). Получил следующий фидбек:
К сожалению, есть ошибки в задании. Ниже фидбек от нашего специалиста:
Неявная логика в методах
Отсутствие иерархии, неумение сравнивать объекты по типу
Недостаточное знакомство с базовыми вещами в Java
Исользование громоздких конструкторов вида CLEANER (false, false, true, false, false, false, false)
Спагетти-код там, где можно было упростить логику
Соль в том, что моя программа выполняет все требования. которые были описаны в ТЗ. Для ее описания мне хватило тех знаний Java, которые на данный момент есть. Но не хватило чего-то другого. Как с этим бороться? Может, я делаю что-то не так? Мне стоит что-то перечитать или что-то сделать? Моя проблема, как и многих начинающих программистов, не в том, что я чего-то не знаю, а что не умею обращаться с тем,что знаю. Все задачи решал до этого, серьезных проблем не возникало.
Если кому-то интересен мой код - https://github.com/vozni4iy/office
vozni4iy
20 уровень
Рекомендую книгу «Effective Java» by Joshua Bloch. Подойдет любому программисту от начинающего до профессионала, многие перечитывают ее по несколько раз. Есть также русский перевод, но он достаточно посредственен, предпочтительно читать в оригинале.
Это менталитет живущих в странах СНГ — это не касается только программирования, а всего — Если человек начинает что то делать, первая задача всех — опустить ниже плинтуса, ты не умеешь, ты идиот и тп и тд, т.e. не посоветовать что ты не правильно сделал, какие книги почитать и тп и тд, а сказать ты не можешь и все!!!
явный представитель kasper1987 (извини): но вопрос такой — «А сам то ты чего добился?!»
а типо ну вот с детства люди занимаются и тп и тд, не слушай, а делай и читай ты ТопикСтартер всего добьешься
Ну а в конце хороший анекдот напишу " Почему нельзя заниматься сексом на Красной Площади? Потому что каждый подойдет и даст совет, даже тот кто не разу этим не занимался"
По поводу набрать в поиске вместо того чтобы писать вопрос: level17.lesson10.bonus02 искал обсуждение на форуме прежде чем свою тему создавать? Видел то «НЕЗЫБЛЕМОЕ НЕСКОНЧАЕМОЕ количество» уже существующих тем, посвященных этой задаче? Каждая новая тема-дубль по задаче усложняет чтение обсуждений для последующих учеников, ведь вместо чтения одной темы придется перелопатить несколько десятков.
А касательно этой темы и вопроса автора: польза от этой темы будет не только ему, но и куче других учеников курса, которые увидят это обсуждение и тоже вовремя задумаются об иных, кроме собственно решения задач, важных вещах в программировании.
Да, бывает, что собеседника не растормошишь иначе, нежели такими приемами, но большинство, как правило, способны воспринимать спокойную речь и наоборот, от подобных фраз уходят в глухую оборону и из конструктивного русла обсуждение сливается в срач.
Стив Макконнелл — Совершенный код.
Читать нужно уже в «зрелом» состоянии, минимум после окончания курса. Тогда хорошо войдет.
Книга большая, да, и зайти хорошо сможет, когда уже есть опыт написания (попыток) сколь-нибудь объемных приложений.
Javarush, хорошо знакомит Вас, нас, дядю Петю с core Java, но не учит программировать правильно с самого начала оставляя это под конец.
Update. Было бы неплохо увидеть ТЗ.
Необходимо описать задачу с применением принципов ООП на языке Java или C#.
При выполнении задания просьба пользоваться системами контроля версий (GitHub, Bitbucket…).
Необходимо смоделировать рабочий процесс офиса в течении одного месяца.
В офисе работает 10 — 100 сотрудников (задается случайно), каждый из них имеет одну или более одной должности (задается случайно для каждого сотрудника): Программист, Дизайнер, Тестировщик, Менеджер, Директор, Бухгалтер, Уборщик. Уборщики не могут выполнять никакой другой работы. Должность Директора и Бухгалтера можно совмещать только с должностью Менеджера.
Каждый сотрудник имеет свой рабочий график, не более 8 часов в день и 40 часов в неделю.
Каждая должность имеет свою почасовую ставку, работа в выходные оплачивается в двойном размере. Директор, Менеджер и Бухгалтер имеют фиксированную ставку.
В фирме должны быть хотя бы один Директор, Менеджер и Бухгалтер.
В процессе моделирования каждый час Директор дает одно или более одного распоряжения своим сотрудникам. Выполнение каждого распоряжения может занять от одного до двух часов каждым сотрудником, в должности которого входит выполнение поставленного задания. Если Директор дал несколько распоряжений, которые может выполнять один и тот же сотрудник, тогда данный рабочий выполняет наиболее приоритетное задание. Если задания имеют одинаковый приоритет, тогда следует выполнять наиболее оплачиваемое из них. Сотрудник не может выполнять более одного распоряжения одновременно.
Если на выполнение распоряжения в офисе не имеется ресурсов, фирма передает задание фрилансерам (удаленным сотрудникам). Распоряжение об уборке офиса передавать на фриланс нельзя.
Каждую неделю Бухгалтер начисляет зарплату сотрудникам исходя из фактически отработанных часов. Оплата фрилансерам выполняется в конце каждого дня.
По окончании месяца необходимо сформи
Если не секрет, сколько на него времени даётся?
Я тут как раз паттерны учу, будет куда примениться на досуге :)
но суть не в том ( я не поленился и склонировал) и сразу ошибка с именим класса… понятно что фигня, а не приятно
Идя на собеседование, автор темы вряд ли осознавал, что ему чего-то реально не хватает для работы: задачи-то решаются, теория усваивается, форум полон историй о том, как народ с 20-го уровня начинает работать. И после отказа на собеседовании задает правильные вопросы: Что еще нужно для работы? Знаний-то хватило, чтобы тест решить. Подход сугубо конструктивный.
А ты тут с «бредом» и «недостаточными знаниями», когда человеку и так нелегко. Заметь, именно знаний по именно программированию-то для тестовой задачи хватило, то есть прям совсем недостаточными они в данном случае не были.
ЗЫ: кстати, обращу внимание автора так же на «Недостаточное знакомство с базовыми вещами в Java» в фидбеке. Так что Java Core не бросай. Изучишь еще некоторые концепции и конструкции языка и сможешь то же задание решить более органично ;)
Я так понимаю что автор статьи пытается стать либо dev либо Тестировщиком. Попасть в тестеры думаю попроще будет, и там скорее нужны знания процесса работы + умение находить баги чем само знания языка програмирования, конечно если это не automation позиция. Опять же тестеры есть UI есть API, где то больше ручная работа и тд и тп, в общем правильное решение пытатся устроится на работу. По опыту могу сказать, что тестерам не нужно знать кучу Java EE фреймворков, да и конкуренция там пониже. Вобщем довольно легкий старт в IT может получится.
Что касается кода выложеного. Самого задания я не нашел поэтому так и не понял что же надо было наваять.
1. Абсолютно согласен с фидбеком.
2. У автора реально какая-то маниакальня тяга к енумам. Аля Joshua Bloch.
3. Я бы не сказал спагетти, а скорее STUPID шаблан програмирования. Советую обратить внимание на всякого рода SOLID, KISS, DI и всяко разные шаблоны.
4. Для начала можно поставить в IDE findbugs + checkstyle. Думаю сразу станет легче писать более менее нормальный код, правда с архитектурой это не сильно поможет.
Удачи
забыл добавить
По сабжу. В заголовке написано Так вот какие я вижу ошибки начинающих програмистов:
1. Практически полное отсутсвие социальных скилов. Вы можете быть богом програмирования, однако иногда полезнее знать правильных людей чтобы получить свою первую работу.
2. Вместо того чтобы ходить на интервью, где лучше всего видно свои слабые стороны, занимаются на дому IT самобичеванием(нагружают светлую голову различными фреймворками свех меры).
3. Не учавствуют в hackatons & meetups.
Потом пункт 1 бред. В первую очередь человек должен уметь грамотно кодить. Во вторую очередь уметь себя прорекламить. Преподнести себя так сказать правильно. Социалка тут не причём, на улице с девочками её применишь. А на работе только рабочий аспект, и профессианальные качества.
2. Не у всех есть время ходить куда либо вообще. Потому что они могут работать или что либо ещё.
3. Этот пункт выполняется только при наличии знаний в целом. А то сидеть и слушать то о чем особо ничего не понимаешь, кроме слов знакомых которые пролетают.
А как умозаключение. Конкретно в данном случае по теме: рекомендую поверхностно изучить рынок и выбрать направление, одно или два не более и изучать его. Сначало ядро, а потом все остальное по очереди. Не спешить с трудоустройством. Читать, учавствовать и т.д. И т.п. А то что автор темы пока не грамотный в коде — это очевидный факт.
Всем хочется лёгкого пути, разве можно за это судить?
Бывает опыт положительный, бывает опыт отрицательный, не бывает опыта бесполезного — бесполезным его может сделать только бездеятельность.
Кстати, Вы немного ошиблись на счёт Лучше выразить свое мнение, свою идею, мысль, чем прибегать к чужим выражением, так построена наша жизнь, подавляющая масса наших знаний позаимствована у других людей и это здорово, только благодаря этому возможен прогресс… представьте, что-бы было если бы каждое новшество, язык JAVA, любую фразу, достижение надо было бы придумывать заново и исключительно самому?
«марально-этнических» — это как? В Африке негры испачкались? Если речь про мораль и этику, то тоже никаких проблем. Разве кто-то кого-то обманул? Или пытался обмануть? Была попытка, проверка и фидбек. И это лучше, чем отсутствие такого опыта.
К тому же взрослеют не год и не десять, взрослеют всю жизнь :)
Не казнить же людей за то, что они вдыхают кислород, а выдыхают углекислый газ:)
Ошибки указывать стоит, советы давать но всё как-то гармонично быть должно :)
Вы не боитесь своё мнение высказывать, это здорово, но человек просит помощи если есть возможность нужно помочь :) Я согласен иногда жесткость это наиболее опитиальный способ достучаться, но далеко не всегда.
К тому же даже после неудачи получил очень ценную обратную связь и узнал о вещах, о которых в ином случае еще не скоро бы задумался.
Да еще и куча мотивирующих статей здесь говорит, как народ идет работать после 15 — 20 уровней. Само собой, забивать на java core на этом этапе нельзя, но пробовать силы в трудоустройстве уже вполне можно.
Отсюда к коду предъявляются дополнительные требования: быть читаемым и поддерживаемым. То есть таким, чтобы если ты отвлечешься от программы на другие дела и вернешься к проекту через полгода, ты смог бы быстро снова войти в курс дела и продолжить работу. Чтобы если ты забелеешь или уволишься, другой программист смог быстро понять, что происходит в твоей программе и как она устроена. Чтобы ты мог писать такие классы, которыми удобно было бы пользоваться другим программистам.
Чтобы этому научиться, нужно поработать над паттернами проектирования: рекомендую книгу из серии Head First.
А еще полезно почитать Роберта Мартина «Чистый код» («Clean Code»)
Обе книги на примере Джавы показывают, как писать программы так, чтобы они, разрастаясь, не превращались в запутанный клубок.
В частности, громоздкие конструкции вида CLEANER (false, false, true, false, false, false, false) сложны в использовании, например, потому, что программист легко забудет или запутается в том, какой порядок аргументов, какой из аргументов что означает и т.п. Нужно будет открыть определение этого метода (в этом случае, видимо, конструктор енумератора) и внимательно сверять с тем, что ты передаешь ему и все равно ошибиться =)
Если при проектировании структуры программы ограничиться, например, 3-мя аргументами (специально продумать программу так, чтобы больше не было: чаще всего 1 или 2, в крайних случаях 3), то часто не придется даже вспоминать что там нужно — все будет интуитивно.
Еще поможет дойти до 20-го уровня и попрактиковаться в «больших задачах», посмотреть, как ведется проектирование и постепенное написание приложений там.
Удачи! =)