Если вы разработчик, вы должны быть в состоянии написать код
Я провел немало интервью в прошлом году, и для моей части интервью я должен был проверить, как люди думают, и как они реализуют простые и умеренные алгоритмы на белой доске. Сначала я начал с вопросов, таких как:
Учитывая, что Pi можно оценить, используя функцию 4 * (1 - 1/3 + 1/5 - 1/7 + ...) с больше терминов, дающих большую точность, напишите функцию, которая вычисляет число Пи с точностью до 5 десятичных знаков.
Это проблема, которая должна заставить вас задуматься, но не должна быть недоступна опытному разработчику (на нее можно ответить примерно в 10 строках C #). Однако многие из наших (предположительно предварительно отобранных агентством) кандидатов даже не смогли начать отвечать на них или даже объяснить, как они могли бы ответить на него. Поэтому через некоторое время я начал задавать более простые вопросы, например:
Учитывая, что площадь круга определяется как число умноженных на квадрат радиуса, напишите функцию для расчета площади круга.
Удивительно, что более половины кандидатов не смогли написать эту функцию на любом языке (я могу читать большинство популярных языков, поэтому я позволяю им использовать любой язык по своему выбору, включая псевдокод ). У нас были «разработчики на C #», которые не могли написать эту функцию на C #.
1112 Я был удивлен этим. Я всегда думал, что разработчики должны иметь возможность писать код. Похоже, что в настоящее время это противоречивое мнение. Конечно, это среди кандидатов на собеседование!
Редактировать:
В комментариях много дискуссий о том, является ли первый вопрос хорошим или плохим, и стоит ли вам задавать такие сложные вопросы, как это, в интервью. Я не собираюсь углубляться в это здесь (это совершенно новый вопрос), за исключением того, чтобы сказать , что вы в значительной степени упускаете смысл поста .
Да, я сказал, что люди не могут добиться успеха с этим, но второй вопрос тривиален , и многие люди также не могут добиться успеха с этим! Любой , кто называет себя разработчиком, должен иметь возможность написать ответ на второй вопрос за несколько секунд, даже не задумываясь. И многие не могут.
There's getting the "project" completed efficiently and there are "short cuts". I suspect the following may fall into the "avoiding wasted effort" category rather be truly short cuts but if any of them get you to then end more quickly then I perhaps they help.
1). Decomposition and separation of concerns. You've already identified high-level chunks (UI, persistence layer, parser etc.). Define the interfaces for the provider classes as soon as possible and have all dependent classes work against those interfaces. Pay a lot of attention to the usability of those interfaces, make them easy to understand - names matter. Even something as simple as the difference between setShutdownFlag(true) and requestShutdown(), the second has explicit meaning and hence I prefer it.
Benefits: Easier maintenance. Even during initial development "maintenance" happens. You will want to change code you've already written. Make it easy to get that right by strong encapsulation.
2). Expect iterative development, to be refining and redesigning. Don't expect to "finish" any one component in isolation before you use it. In other words don't take a purely bottom up approach to developing your componenets. As you use them you find out more information, as you implement them you find out more about what's possible.
So enable development of higher level components especially the UI by mocking and stubbing low level components. Something such as JMock is a short-cut.
3). Test early, test often. Use JUnit (or equivalent). You've got mocks for your low level components so you can test them.
Subjectively, I feel that I write better code when I've got a "test hat" on.
4). Define your error handling strategy up front. Produce good diagnostics when errors are detected.
Benefits: Much easier to get the bugs out.
5). Following on from error handling - use diagostic debugging statements. Sprinkle them liberally throughout your code. Don't use System.out.println(), instead use the debugging facilities of your logging library - use java.util.logging. Interactive debuggers are useful but not the only way of analysing problems.
Изучите / используйте Spring и создайте свой проект, чтобы он запускался без конфигурации Spring (эти вещи обычно выйти из-под контроля), сохраняя при этом возможность настроить параметры вашей среды на более позднем этапе. Вы также получаете единообразный способ интеграции других фреймворков, таких как Hibernate, Quartz, ...
И, по моему опыту, держитесь подальше от разработчиков GUI. Это может показаться хорошей сделкой,
Разумная платформа сборки и конфигурации поможет вам на этом пути, Ant:
или Maven (желательно):
Тем более, что размер проекта и количество модулей в увеличении проекта.
В Apache Commons есть много кода для экономии времени, который вам, скорее всего, понадобится и можно использовать повторно.
Не сбрасывайте со счетов Swing для графического интерфейса. В зависимости от ваших потребностей доступно множество хороших сторонних библиотек Swing (с открытым исходным кодом и коммерческих), например
Используйте среду ведения журнала (например, Log4J) и спланируйте ее. Надежная система ведения журнала экономит много времени при исправлении ошибок.
Для меня большая экономия времени:
Разработка через тестирование
Выясните, какие функции вам нужны, и напишите тесты, чтобы продемонстрировать их. Затем напишите кода ровно столько, чтобы пройти тесты. Это будет иметь несколько серьезных побочных эффектов:
Если вы не уверены, что должны использовать SQL, для обеспечения устойчивости данных вам следует взглянуть на альтернативные библиотеки хранения данных:
Имейте в виду, что у них есть компромиссы по сравнению друг с другом или со стандартной базой данных SQL! И, конечно, могут быть и другие подобные варианты, но это те, которые я знаю и люблю. :)
PS: Мне не разрешили размещать соответствующие ссылки, потому что я новый пользователь. Просто погуглите для них; первые попадания - правильные.
Вы можете сэкономить время между перезапусками, используя JavaRebel (коммерческий) . Вкратце, этот инструмент позволяет писать код в Eclipse и мгновенно получать изменения кода.