JavaRush/Java блог/Архив info.javarush/Типичные ошибки начинающих программистов
vozni4iy
20 уровень

Типичные ошибки начинающих программистов

Статья из группы Архив info.javarush
участников
Не так давно пробовал устраиваться на работу тестировщиком Java(мой текущий уровень - 19). Получил следующий фидбек: К сожалению, есть ошибки в задании. Ниже фидбек от нашего специалиста: Неявная логика в методах Отсутствие иерархии, неумение сравнивать объекты по типу Недостаточное знакомство с базовыми вещами в Java Исользование громоздких конструкторов вида CLEANER (false, false, true, false, false, false, false) Спагетти-код там, где можно было упростить логику Соль в том, что моя программа выполняет все требования. которые были описаны в ТЗ. Для ее описания мне хватило тех знаний Java, которые на данный момент есть. Но не хватило чего-то другого. Как с этим бороться? Может, я делаю что-то не так? Мне стоит что-то перечитать или что-то сделать? Моя проблема, как и многих начинающих программистов, не в том, что я чего-то не знаю, а что не умею обращаться с тем,что знаю. Все задачи решал до этого, серьезных проблем не возникало. Если кому-то интересен мой код - https://github.com/vozni4iy/office
Комментарии (34)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
HansNoodles
Уровень 31
3 июня 2016, 13:54
Только практика и изучение best-practice помогут тебе понять как нужно делать так, чтобы другим было приятно читать твой код.

Рекомендую книгу «Effective Java» by Joshua Bloch. Подойдет любому программисту от начинающего до профессионала, многие перечитывают ее по несколько раз. Есть также русский перевод, но он достаточно посредственен, предпочтительно читать в оригинале.
Romab
Уровень 30
26 мая 2016, 11:46
Честно прочитал все комментарии в этой ветке, и что я скажу:
Это менталитет живущих в странах СНГ — это не касается только программирования, а всего — Если человек начинает что то делать, первая задача всех — опустить ниже плинтуса, ты не умеешь, ты идиот и тп и тд, т.e. не посоветовать что ты не правильно сделал, какие книги почитать и тп и тд, а сказать ты не можешь и все!!!
явный представитель kasper1987 (извини): но вопрос такой — «А сам то ты чего добился?!»
а типо ну вот с детства люди занимаются и тп и тд, не слушай, а делай и читай ты ТопикСтартер всего добьешься
Ну а в конце хороший анекдот напишу " Почему нельзя заниматься сексом на Красной Площади? Потому что каждый подойдет и даст совет, даже тот кто не разу этим не занимался"
kasper1987
Уровень 20
26 мая 2016, 16:39
То чего я добился ты не добьешься. В той сфере в которой я работаю(автосервис). И мой план овладеть так же программированием, а именно ООП языками, пока что штурмую джаву. Не в обиду!!! Но в силу того что сейчас труд физический не оплачивается, и куда более место есть логическому развитию, математическому складу ума, аналитеческому конструктивному мышлению. Глупо задавать вопрос тут, о помощи, помощь человека прослабляет. А если человек не в состоянии найти ответ на свой вопрос в гугле, яндексе и т.д. То я ему не позавидую, им явно управляет лень. Место того чтобы развиваться, он хочет чтобы ему преподнесли все на блюдечке. И как вывод это плохо чем закончится. В интернете много ресурсов, порталов, информации о том как можно развиваться, где и с чего начинать, как начинать, какие книги в первую очередь читать, как их читать, НЕЗЫБЛЕМОЕ НЕСКОНЧАЕМОЕ количество видео курсов. Это малая часть того что можно найти, зайдя в тот же самый ГУГЛ. Romab и такая идиома не связана с географическим положением, и она не привязана к национальности, эта идиома больше походит на развитые страны и является основой на пути в развитии человечества, а так как Россия является развитой страной. То моя критика автором темы должна послужить толчком к саморазвитию и самореализации, способностью саморазвития. Только после таких слов он откроет интернет наберет предложение из магических строк, и найдёт ответы на вопросы, даже те о которых и не думал, и впредь больше не будет задавать их тут. Думаю ответил сполна на Вашу реплику. Вы тот человек, благодоря которым человек отступает, либо останавлмвается в развитии. Иксренне извиняюсь если обидел. Но такова правда жизни. Я занимаюсь программированием 3 с хвостиком месяца, до этого был только ексель и ворд. И то нашёл уйму ошибок в коде который выложил автор.))) не в обиду^^
EvIv
Уровень 30
26 мая 2016, 17:29
Тебе здесь неоднократно уже указали, что, хотя твоя критика и во многом справедлива, ее форма никуда не годится. Почитал другие твои посты/комментарии, и везде стилистика такая, будто, извините, обосрать оппонента стараешься. Потому и я отреагировал на твоё «Бред!!!» и начал отвечать и спорить. Ты чего злой такой?
По поводу набрать в поиске вместо того чтобы писать вопрос: level17.lesson10.bonus02 искал обсуждение на форуме прежде чем свою тему создавать? Видел то «НЕЗЫБЛЕМОЕ НЕСКОНЧАЕМОЕ количество» уже существующих тем, посвященных этой задаче? Каждая новая тема-дубль по задаче усложняет чтение обсуждений для последующих учеников, ведь вместо чтения одной темы придется перелопатить несколько десятков.
А касательно этой темы и вопроса автора: польза от этой темы будет не только ему, но и куче других учеников курса, которые увидят это обсуждение и тоже вовремя задумаются об иных, кроме собственно решения задач, важных вещах в программировании.
kasper1987
Уровень 20
26 мая 2016, 17:35
Поэтому и существует всеми либимое понятие «спор»)) я не злой, а воспринимаю все и отдаю как есть) зачем кого то обманывать, все мои успехи всегда имели место в таких ситуациях когда было некому помочь, и это был весомый толчек к развитию. Мой жизненый опыт и все тут) я пложу тему потому что это моя тема, и когда все методы испробованы. А то как рашка принимает большой большой секрет я шарю все темы, если из них я ненашел толкового и доходчивого объяснения то создаю тему. Но в каждой ситуации получается найти ошибки и ихвлечь из них пользу!)
EvIv
Уровень 30
26 мая 2016, 17:44
«бред», «ошибки дурака» «для чего предыдущие темы проходили?? чтобы велик сооружать!!!???????????» — не самые удачные фразы для ведения спора ;)
Да, бывает, что собеседника не растормошишь иначе, нежели такими приемами, но большинство, как правило, способны воспринимать спокойную речь и наоборот, от подобных фраз уходят в глухую оборону и из конструктивного русла обсуждение сливается в срач.
kasper1987
Уровень 20
26 мая 2016, 17:49
Если по теме, и ты смотрел код автора! То пожалуй не знаю чем он руководствовался писал ТЗ не код простите а ерунда которую школьник написал) то что можно посоветовать человеку, только учиться) что я в начале и написал. А поспориь все любят. Я всего лишь говорю все как есть в реальном мире. А как учиться автор сам найдёт, я вообще не понимаю подобные мольбы. Учись брат, учись, только учись, пожить успеешь!!!
kasper1987
Уровень 20
26 мая 2016, 17:49
П.с. Мы и не сремся)
Fry
Уровень 41
25 мая 2016, 21:59
От себя добавлю еще одну хорошую книгу, где описаны все рецепты.
Стив Макконнелл — Совершенный код.
Читать нужно уже в «зрелом» состоянии, минимум после окончания курса. Тогда хорошо войдет.
EvIv
Уровень 30
26 мая 2016, 09:36
Отличная книга. Тоже ее читал. С нее, можно сказать, и начал знакомство с «большим миром» программирования и заинтересовался современными приемами и практиками разработки.
Книга большая, да, и зайти хорошо сможет, когда уже есть опыт написания (попыток) сколь-нибудь объемных приложений.
kasper1987
Уровень 20
26 мая 2016, 16:42
Я её себе уже давно добавил в список необходимых книг))
AndreGold
Уровень 28
25 мая 2016, 21:32
Мне кажется тут даже к гадалке не ходи. Только зайти на ваш GitHub, уже можно отказ писать. Нет пакетов в которых размещаются классы, соотвественно на первый взгляд не понятно, не читая Ваш код, что именно он делает. Там где не нужно наклепали Enum, зато там где аж просится, например isAdmin и т.д в классе Person не сделали через Enum явно или как static nested class/Enum

Javarush, хорошо знакомит Вас, нас, дядю Петю с core Java, но не учит программировать правильно с самого начала оставляя это под конец.

Update. Было бы неплохо увидеть ТЗ.
vozni4iy
Уровень 20
25 мая 2016, 21:43
Тестовое задание на должность Специалиста по автоматизации тестирования

Необходимо описать задачу с применением принципов ООП на языке Java или C#.
При выполнении задания просьба пользоваться системами контроля версий (GitHub, Bitbucket…).

Необходимо смоделировать рабочий процесс офиса в течении одного месяца.
В офисе работает 10 — 100 сотрудников (задается случайно), каждый из них имеет одну или более одной должности (задается случайно для каждого сотрудника): Программист, Дизайнер, Тестировщик, Менеджер, Директор, Бухгалтер, Уборщик. Уборщики не могут выполнять никакой другой работы. Должность Директора и Бухгалтера можно совмещать только с должностью Менеджера.
Каждый сотрудник имеет свой рабочий график, не более 8 часов в день и 40 часов в неделю.
Каждая должность имеет свою почасовую ставку, работа в выходные оплачивается в двойном размере. Директор, Менеджер и Бухгалтер имеют фиксированную ставку.
В фирме должны быть хотя бы один Директор, Менеджер и Бухгалтер.
В процессе моделирования каждый час Директор дает одно или более одного распоряжения своим сотрудникам. Выполнение каждого распоряжения может занять от одного до двух часов каждым сотрудником, в должности которого входит выполнение поставленного задания. Если Директор дал несколько распоряжений, которые может выполнять один и тот же сотрудник, тогда данный рабочий выполняет наиболее приоритетное задание. Если задания имеют одинаковый приоритет, тогда следует выполнять наиболее оплачиваемое из них. Сотрудник не может выполнять более одного распоряжения одновременно.
Если на выполнение распоряжения в офисе не имеется ресурсов, фирма передает задание фрилансерам (удаленным сотрудникам). Распоряжение об уборке офиса передавать на фриланс нельзя.
Каждую неделю Бухгалтер начисляет зарплату сотрудникам исходя из фактически отработанных часов. Оплата фрилансерам выполняется в конце каждого дня.
По окончании месяца необходимо сформи
Grif
Уровень 11
25 мая 2016, 22:05
Забавное задание :)
Если не секрет, сколько на него времени даётся?
Я тут как раз паттерны учу, будет куда примениться на досуге :)
vozni4iy
Уровень 20
25 мая 2016, 22:16
по времени меня не ограничивали, хотя уже дня через 4 спрашивали о результате. А в чем забавность этого задания?
Grif
Уровень 11
25 мая 2016, 22:26
Не берите близко к сердцу, это своего рода радость, не прийдётся придумывать себе дополнительные задачи :) Забавность в том, что хоть и появилась новая пища для тренировки и она вполне мне по силам, есть повод применить новые знания (с задачами JAVARUSH в этом особо не разгонишься, валидатор капризный:)), но жаль не кому оценить будет кроме меня самого:)
Romab
Уровень 30
26 мая 2016, 12:12
Вот за такой комментарий "+" по делу,
но суть не в том ( я не поленился и склонировал) и сразу ошибка с именим класса… понятно что фигня, а не приятно
kasper1987
Уровень 20
25 мая 2016, 19:14
Слишком наивно так полагать. В реальной жизни все иначе. Неопытный человек, очень сильно будет тормозить коллектив в целом. А нормальные компании таких не возьмут и не берут. Поэтому прежде чем принимать дают задачи, по которым можно на 90% определить уровень человека. Твоя очередная попытка увенчается успехом в какой ниьь стартапной фирме, где в основном такие же как ты, и парачка более умных, у которых мало времени будет на чтобы сидеть и учить тебя. Тебе дадут задачу, ты её должен будешь выполнить — тебе же платят?! Платят! Ты погуглишь, задаш пару глупых вопросов новому другу из компании. Тебе там там помогут. Но твой код или программа так криво написаны, что либо ты сдашься либо тебя просто вышвырнут как шавку. Твоя самооценка упадёт, и дай бог ты не здашься и как дурак попрешь в другое место устраиваться, натыкаясь на те же грабли… Не зря в обучающих книгах пишут про то, что лучше в самом начале дороги(в данном случае обучения) как можно дальше откладывать реализацию как можно дальше. Самая главная ошибка начинающих, это избытычная самооценка, думает что знает дофига, а на деле ничего!!! А от этого качество страдает!
EvIv
Уровень 30
25 мая 2016, 19:36
О разных подходах к началу карьеры можно спорить долго. Есть плюсы и минусы и у твоего подхода, и у подхода автора темы. Есть люди, которые очень долго не уверены в себе, чтобы начать, а есть те, кто слишком уверены в своих силах. Вообще, будучи новичком, очень трудно провести границу достаточной компетентности для реальной работы и пока не попробуешь сам, не поймешь.
Идя на собеседование, автор темы вряд ли осознавал, что ему чего-то реально не хватает для работы: задачи-то решаются, теория усваивается, форум полон историй о том, как народ с 20-го уровня начинает работать. И после отказа на собеседовании задает правильные вопросы: Что еще нужно для работы? Знаний-то хватило, чтобы тест решить. Подход сугубо конструктивный.
А ты тут с «бредом» и «недостаточными знаниями», когда человеку и так нелегко. Заметь, именно знаний по именно программированию-то для тестовой задачи хватило, то есть прям совсем недостаточными они в данном случае не были.
ЗЫ: кстати, обращу внимание автора так же на «Недостаточное знакомство с базовыми вещами в Java» в фидбеке. Так что Java Core не бросай. Изучишь еще некоторые концепции и конструкции языка и сможешь то же задание решить более органично ;)
kasper1987
Уровень 20
25 мая 2016, 19:53
Мой бред равен пополам решению тех кто его не принял. Между тем задачи решаются многими способами но как и везде есть одно или несколько именно верных решений. Решений по которым можно определить знаешь ли ты технологии или нет. Бред — это после 19 лвл думать что тебя куда либо возьмут вообще. Если бы всех брали так давно мест не было б. Даже на Джаве раш заданию принимаються очень узким кругом решений, по мнению разработчика являющимися правильными. П.с.: это не мой подход, а подход с психологической стороны, и марально-этнических аспектов человека. Купить баскетбольный мяч, и играть им в футбол очень глупо выглядит со стороны профессионального футболиста, впринципе так и оценили автора специалисты компании!
tanzwud
Уровень 34
25 мая 2016, 21:07
kasper1987
Прочитав ваш пост, я так и не понял: «Как же люди становятся Java девами, не зная что такой ресурс как JavaRush вообще существует, не то что прошли 20+ уровней там и тп».
Я так понимаю что автор статьи пытается стать либо dev либо Тестировщиком. Попасть в тестеры думаю попроще будет, и там скорее нужны знания процесса работы + умение находить баги чем само знания языка програмирования, конечно если это не automation позиция. Опять же тестеры есть UI есть API, где то больше ручная работа и тд и тп, в общем правильное решение пытатся устроится на работу. По опыту могу сказать, что тестерам не нужно знать кучу Java EE фреймворков, да и конкуренция там пониже. Вобщем довольно легкий старт в IT может получится.
Что касается кода выложеного. Самого задания я не нашел поэтому так и не понял что же надо было наваять.
1. Абсолютно согласен с фидбеком.
2. У автора реально какая-то маниакальня тяга к енумам. Аля Joshua Bloch.
3. Я бы не сказал спагетти, а скорее STUPID шаблан програмирования. Советую обратить внимание на всякого рода SOLID, KISS, DI и всяко разные шаблоны.
4. Для начала можно поставить в IDE findbugs + checkstyle. Думаю сразу станет легче писать более менее нормальный код, правда с архитектурой это не сильно поможет.
Удачи

забыл добавить
Яков Файн: «Иди и получи свой отказ!»
kasper1987
Уровень 20
25 мая 2016, 21:25
Можно сколько угодно цитировать, но так и не поняв что автор этим имел ввиду. Люди которые становятся девами, не из-за ресурса джава раш. А от жизни своей, в которой они либо такими родились, либо по наследству, семейное, или с детства или раннего возраста увлечены этим глубоко.Поэтому они и не знают что такое джава раш, они его еще в лет 14-18 переросли раз 100. Большая часть тех кто сидит на рашке это те кто знают другие языки, остальные, это, те кого не устраивает своя работа и они хотели бы ее поменять!
tanzwud
Уровень 34
26 мая 2016, 01:07
Что же такое автор цитаты которую я привел имел в виду, но так я и не понял. Просветите простака.
По сабжу. В заголовке написано
Типичные ошибки начинающих программистов
Так вот какие я вижу ошибки начинающих програмистов:
1. Практически полное отсутсвие социальных скилов. Вы можете быть богом програмирования, однако иногда полезнее знать правильных людей чтобы получить свою первую работу.
2. Вместо того чтобы ходить на интервью, где лучше всего видно свои слабые стороны, занимаются на дому IT самобичеванием(нагружают светлую голову различными фреймворками свех меры).
3. Не учавствуют в hackatons & meetups.
kasper1987
Уровень 20
26 мая 2016, 02:40
Насчёт цитаты не просветлю. Не припомню в каком контексте или промежутке времени её читал, какой книге, статье или гле её слышал. Но суть её сокрыта от ума нашего, и повода говорить её здесь не дано. Лучше выразить свое мнение, свою идею, мысль, чем прибегать к чужим выражением, смысл которых чужд только автору. Как по мне, так беглым взглядом прочитав код по ссылке, не удивлён что ему отказали, очень грубый код, ограниченный очень узким познанием ооп в целом, методы убогие, классы написаны ужасно. А константы true true true false false так это вообще порно какое то. Извиняюсь за выражение. Задачу то он решил, молодец, но такое мало кто оплатит, если и оплатит кто либо вообще.
Потом пункт 1 бред. В первую очередь человек должен уметь грамотно кодить. Во вторую очередь уметь себя прорекламить. Преподнести себя так сказать правильно. Социалка тут не причём, на улице с девочками её применишь. А на работе только рабочий аспект, и профессианальные качества.
2. Не у всех есть время ходить куда либо вообще. Потому что они могут работать или что либо ещё.
3. Этот пункт выполняется только при наличии знаний в целом. А то сидеть и слушать то о чем особо ничего не понимаешь, кроме слов знакомых которые пролетают.
А как умозаключение. Конкретно в данном случае по теме: рекомендую поверхностно изучить рынок и выбрать направление, одно или два не более и изучать его. Сначало ядро, а потом все остальное по очереди. Не спешить с трудоустройством. Читать, учавствовать и т.д. И т.п. А то что автор темы пока не грамотный в коде — это очевидный факт.
Grif
Уровень 11
26 мая 2016, 08:32
Хочется согласиться со многими Вашими доводами, но сильно стиль изложения похож на пощёчины, автор статьи совета попросил, а Вы его в ответ избили :)
Всем хочется лёгкого пути, разве можно за это судить?
Бывает опыт положительный, бывает опыт отрицательный, не бывает опыта бесполезного — бесполезным его может сделать только бездеятельность.
Кстати, Вы немного ошиблись на счёт Лучше выразить свое мнение, свою идею, мысль, чем прибегать к чужим выражением, так построена наша жизнь, подавляющая масса наших знаний позаимствована у других людей и это здорово, только благодаря этому возможен прогресс… представьте, что-бы было если бы каждое новшество, язык JAVA, любую фразу, достижение надо было бы придумывать заново и исключительно самому?
EvIv
Уровень 30
26 мая 2016, 09:17
«Даже на Джаве раш заданию принимаються очень узким кругом решений, по мнению разработчика являющимися правильными.» — не понял что написано.
«марально-этнических» — это как? В Африке негры испачкались? Если речь про мораль и этику, то тоже никаких проблем. Разве кто-то кого-то обманул? Или пытался обмануть? Была попытка, проверка и фидбек. И это лучше, чем отсутствие такого опыта.
kasper1987
Уровень 20
26 мая 2016, 12:15
Думаю надо взрослеть, и принимать эту взрослую жизнь как есть) надо нести ответственность за все свои деяния. Пуступил глупо, на подзатыльник, Накасячил уволили, Написал код криво, очевидно криво, плюс к этому задал вопрос че не так в нем, да ещё и пометил меткой «типичные ошибки программиста», на жёсткий ответ все справедливо. Чтобы человек задумался. Да и название темы больше подходит «типичные ошибки дурака»)
Grif
Уровень 11
26 мая 2016, 12:49
:) Не бывает только чёрного или только белого :)
К тому же взрослеют не год и не десять, взрослеют всю жизнь :)
Не казнить же людей за то, что они вдыхают кислород, а выдыхают углекислый газ:)

Ошибки указывать стоит, советы давать но всё как-то гармонично быть должно :)

Вы не боитесь своё мнение высказывать, это здорово, но человек просит помощи если есть возможность нужно помочь :) Я согласен иногда жесткость это наиболее опитиальный способ достучаться, но далеко не всегда.
kasper1987
Уровень 20
25 мая 2016, 18:44
Зачем пытаться устраиваться на работу, без знаний достойного уровня? Неужели решил, что решив пару задач с джава раш можно попасть на работу? Бред… Читать, читать, читать и в два раза больше писать писать писать. Не удивительно, что тебе так ответили. Успехов в учёбе!
EvIv
Уровень 30
25 мая 2016, 18:50
А я думаю, что попытка не пытка. Могло получиться, что взяли бы джуном и многому бы научился очень быстро. По восемь часов в день, будучи погруженным в реальные задачи и с кучей опытных людей вокруг.
К тому же даже после неудачи получил очень ценную обратную связь и узнал о вещах, о которых в ином случае еще не скоро бы задумался.
Да еще и куча мотивирующих статей здесь говорит, как народ идет работать после 15 — 20 уровней. Само собой, забивать на java core на этом этапе нельзя, но пробовать силы в трудоустройстве уже вполне можно.
kasper1987
Уровень 20
25 мая 2016, 19:16
Даже если и возьмут то высок шанс того что вышвырнут из за недостатка знаний. Что в данном случае принимающая компания сделала ещё на стадии проверка при устройстве на работу к ним)
Eli_Ver
Уровень 27
25 мая 2016, 18:32
Ссылка не рабочая — 404 выдает
vozni4iy
Уровень 20
25 мая 2016, 19:36
исправил ссылку
EvIv
Уровень 30
25 мая 2016, 17:57
Работающая программа — это полдела. Мы живем в неидеальном мире, в котором требования к программе изменяются, в котором люди болеют, увольняются, да и просто не могут сделать любую задачу в-одиночку.
Отсюда к коду предъявляются дополнительные требования: быть читаемым и поддерживаемым. То есть таким, чтобы если ты отвлечешься от программы на другие дела и вернешься к проекту через полгода, ты смог бы быстро снова войти в курс дела и продолжить работу. Чтобы если ты забелеешь или уволишься, другой программист смог быстро понять, что происходит в твоей программе и как она устроена. Чтобы ты мог писать такие классы, которыми удобно было бы пользоваться другим программистам.
Чтобы этому научиться, нужно поработать над паттернами проектирования: рекомендую книгу из серии Head First.
А еще полезно почитать Роберта Мартина «Чистый код» («Clean Code»)
Обе книги на примере Джавы показывают, как писать программы так, чтобы они, разрастаясь, не превращались в запутанный клубок.
В частности, громоздкие конструкции вида CLEANER (false, false, true, false, false, false, false) сложны в использовании, например, потому, что программист легко забудет или запутается в том, какой порядок аргументов, какой из аргументов что означает и т.п. Нужно будет открыть определение этого метода (в этом случае, видимо, конструктор енумератора) и внимательно сверять с тем, что ты передаешь ему и все равно ошибиться =)
Если при проектировании структуры программы ограничиться, например, 3-мя аргументами (специально продумать программу так, чтобы больше не было: чаще всего 1 или 2, в крайних случаях 3), то часто не придется даже вспоминать что там нужно — все будет интуитивно.
Еще поможет дойти до 20-го уровня и попрактиковаться в «больших задачах», посмотреть, как ведется проектирование и постепенное написание приложений там.
Удачи! =)