Досить часто на співбесідах при влаштуванні на роботу задають задачі, які відносяться до класу алгоритмічних, от і вирішив створити гілку форуму для обговорення цього питання.
Досить цікаві 2 задачки на блозі : )
перша - чисто алгоритмічна, навіть гріх підказувати.
друга - дуже цікава. Але правда, я із нею давно стикався, колись їздив на шкільне змагання в Чернівці, і в поїзді попалась людина яка шарить в айті. і здається, наша команда школярів справилась із цим викликом, або принаймі напрям був правильний.
Думаю, буде корисно для всіх щоб кожен сам подумав над такими задачами.
Але буде цікаво, щоб тут висловлювали думки люди, які стикались із подібними співбесідами, розказали про досвід, результати та самі ж задачки та питання.
InterLogic 2 роки тому розігрувало стипендію, для перемоги треба було пройти співбесіду. Ось дві задачки(доволі прості та стандартні)
1. Задано матрицю з 0 та 1. 1 означає, що це є частина якогось обєкту. Якщо дві одинички суміжні(не по діагоналі) то це є частини одного обєкта. Потрібно знайти кількість обєктів.
2. Написати процедуру яка приймає два числа N та e. Необхідно знайти квадратний корінь з числа N зі заданою точністю e. Використовувати готові математичні функції не можна.
Повідомлень: 167 Звідки: ЛНУ ім. Івана Франка Зареєстрований: 21.10.06
Опубліковано 06-05-2010 01:37
kobra написав:
InterLogic 2 роки тому розігрувало стипендію, для перемоги треба було пройти співбесіду. Ось дві задачки(доволі прості та стандартні)
1. Задано матрицю з 0 та 1. 1 означає, що це є частина якогось обєкту. Якщо дві одинички суміжні(не по діагоналі) то це є частини одного обєкта. Потрібно знайти кількість обєктів.
2. Написати процедуру яка приймає два числа N та e. Необхідно знайти квадратний корінь з числа N зі заданою точністю e. Використовувати готові математичні функції не можна.
Мені цієї першої задачі не давали. А давали якусь іншу. А от яку, я вже пригадати не можу...
webmaster написав:
Досить часто на співбесідах при влаштуванні на роботу задають задачі, які відносяться до класу алгоритмічних...
От мені цікаво наскільки часто? Поки що я зустрів лише 3 компанії, які це роблять: Microsoft, Google, Facebook. В Україні (як в принципі і в інших країнах, окрім трьох монстрів перерахованих вище) я не чув жодної компанії, в якій на співбесідах на роботу просять розв'язати алгоритмічні задачки на будь якій зручній мові програмування. Хтось чув? Якщо так, то поділіться, цікаво було б почути.
А от щодо задач, то перша була б на багато цікавішою, якби там у міст була ще і координата Y
А от друга задача цікава тим, що про неї можна говорити, розглядаючи з різних аспектів: коли дано N і коли не дано, можна говорити про скінченність списку, про зв'язок області визначення і значень функції getNext() з існуванням циклу, розглядати задачу теоретично. Ну тобто задачу можна дуже навіть непогано використати, щоб оцінити абстрактне мислення кандидата.
Ну а найвеселіше - це читати коментарі до цього посту на Хабрі Я, звісно, всі не перечитав, але ті що прочитав, повеселили. От друге питання виникло: Чи можна вважати людину, яка не має алгоритмічних навичок кваліфікованим програмістом? В поняття алгоритмічних навичок я вкладаю розвинуте абстрактне мислення та розуміння і вміння застосовувати базові алгоритми (наприклад обходи дерев, бінарний пошук, таке інше...)
DixonD написав:
Зустрічне питання: Чи завжди людина, яка має алгоритмічні навички, є кваліфікованим програмістом?
У мене є чітка думка у відповідь на це питання. Узагальнювати зовсім не буду, тому що кожен випадок індивідуальний. Але, я вважаю, що в своїй більшості люди з алгоритмічними навичками можуть набратися необхідного досвіду в результаті роботи і таким чином досягнути необхідної кваліфікації. Це не якісь надприродні можливості, просто для мене той факт, що людина розвинула в собі ці навички говорить про працелюбність, бажання навчатися і наявність абстрактного мислення. А в розумінні багатьох парадигм програмування дуже важливо вміти мислити абстрактно.
Не відкидаю і варіанту, коли людина набирається алгоритмічних навичок після того, як почала професійно займатися програмуванням. Порядок значення не має. Для мене важлива наявність в кінцевому результаті.
Крім цього, відповідь на твоє питання ніяк не впливає на відповідь на моє. Щоб було зрозуміліше, якщо:
подія А - це наявність алгоритмічних навичок,
подія В - це кваліфікованість програміста,
то я запитав чи:
!А => !B
а ти запитав чи:
A => B
Ну і прошу вибачення, що не відповів питанням на питання
Повідомлень: 167 Звідки: ЛНУ ім. Івана Франка Зареєстрований: 21.10.06
Опубліковано 10-05-2010 02:33
З мого невеличкого досвіду можу сказати, що:
1) Є дуже хороші девелопери, які тим не менше, не особливо шарять в алгоритмах.
2) Є хороші алгоритмісти, які тим не менше мають слабке уявлення як будувати хороші архітектури, писати якісний код (швидкий код не обовязково якісний, адже якість визначається багатьма параметрами)
НМСД наявність міцних алгоритмічних навиків свідчить про деякий склад розуму та логіки, проте цього ще не достатньо, щоб бути хорошим інженером ПЗ. З іншого боку, відсутність алгоритмічних навичок не свідчить ні про що взагалі, по тій простій причині, що людині на її життєвому шляху могло просто не випасти можливості тим займатись. Або їй просто не цікаво було тим займатись
Власне кажучи, як правило хороше знання алгоритмів потрібне для тих розробників, які стикаються з тим у роботі - щоправда це в основному стосується провідних компаній світу, які розробляють ідейне ПЗ. Погодься таких компаній особливо в Україні не надто багато
Отже підсумую вищесказане: на мою думку, алгоритмізація - це просто ще одна область знань зі світу програмування, яка не має такого вже тотального впливу на все і всюди.
І виходячи з мого запитання, точніше з його заперечення вибудовується такий логічний ланцюжок:
якщо не завжди людина, яка має алгоритмічні навички, є кваліфікованим програмістом, то кваліфікованому програмісту не обовязково мати алгоритмічні навики. От така от життєва логіка на протимагу сухій математичній
Ну твою думку, Діма, я зрозумів вже з першого пункту. Очевидно, що ти не вкладаєш в поняття "дуже хороший девелопер" наявність алгоритмічних навичок, бо для тебе вони не впливають на визначення того чи людина дуже хороший девелопер чи ні.
Для того я і підняв це питання, щоб почути думки різних людей. Кінець кінцем навіть саме поняття "кваліфікований програміст" трохи суб'єктивне і різні люди можуть його оцінювати по різному. Тому думка кожного мені цікава.
От з кількома твоїми аргументами можу посперичатися.
Власне кажучи, як правило хороше знання алгоритмів потрібне для тих розробників, які стикаються з тим у роботі - щоправда це в основному стосується провідних компаній світу, які розробляють ідейне ПЗ. Погодься таких компаній особливо в Україні не надто багато
Кожна реальна задача має кілька різних розв'язків. Бувають задачі, в яких можна застосувати алгоритмічні знання. Якщо людина таких знань не має, то вона їх, очевидно, не застосує. Тому можна сказати, що ця людина у роботі з алгоритмами не стикається.
Всі ми бачили приклади гавнокодів на різних форумах і всі ми вважаємо, що це погано. В той же час є величезна кількість коду, який працює далеко від оптимальності, але це вже не так просто помітити.
Якщо програміст без алгоритмічної бази успішно виконує свою роботу це може також свідчити про низькі вимоги до нього і про те, що він робить низькокваліфіковану роботу. Це я щодо прикладу більшості українських компаній.
Мабуть, статистика покаже, що більшість теперишніх інженерів не мають великих алгоритмічних навичок. Але мені цікаво чи еволюція професії не буде їх відсіювати з часом, шляхом природнього відбору.
Чомусь ми все таки називаємо компанії, які набирають розробників алгоритмістів, "провідними". Отже ми вважаємо ці компанії кращими за інші.
Підсумовуючи хочу висловити думку про яку я вів мову в своєму оригінальному пості:
Алгоритмічні навички є однією з необхідних якостей для високо кваліфікованого розробника.
Це означає, що для того, хто хоче стати кваліфікованим програмістом потрібно такі навички отримати.
Самі лише ці навички потрібної кваліфікації не надають, звісно. (Прошу не прив'язувати мою відповідь на питання Діми до мого питання. Там я висловлював своє особисте ставлення до алгоритмістів.)
Ну і трохи свого досвіду. Я був на співбесідах у кількох різних львівських компаніях. Всі крім однієї спеціалізувалися на аутсорсингу, який по своїй природі являє собою роботу не найвищого рівня (компанії, які аутсорсять свої проекти в Україну, зазвичай, залишають цікаву висококваліфіковану роботу собі). В більшості компаній на мої алгоритмічні навички особливої уваги не звертали. В одній з цих компаній мені досвідчений і розумний інженер на співбесіді порадив спробувати свої сили в Гугл чи Майкрософт, якщо я хочу скористатися своїми навичками. І в одній компанії, на яку я згодом успішно працював на протязі року, мій алгоритмічний (читай - олімпіадний) досвід зіграв головну роль при проходженні співбесіди. Ця компанія не велика і займається розробкою власного програмного продукту.
Зараз я працюю на компанію, яку прийнято називати однією з "провідних компаній світу". При прийомі на роботу сюди, на співбесідах перевіряли мою мотивацію, алгоритмічні навички, вміння проектувати, аналізувати та швидко мислити.
Не помиляється той, хто нічого не робить!
Змінив(ла) Ostap, 10-05-2010 08:56
DixonD написав:
Отже підсумую вищесказане: на мою думку, алгоритмізація - це просто ще одна область знань зі світу програмування, яка не має такого вже тотального впливу на все і всюди.
Вже і я долучусь до цього флуду.
Коли ти пишеш звичайний код, то знання алгоритміки тобі звісно допоможуть у написанні якіснішого коду.
Коли ти пишеш який запит до бази даних, тобі також знання алгоритміки допоможуть у написанні якіснішого запиту.
Коли ти будуєш архітектуру, то використання алгоритмічних навичок, але у більш глобальному значенні, тобі також допоможуть.
І те саме можна сказати про розробку формочок, контролів.
Сподіваюсь із цим багато погоджується.
Як на мене алгоритміка, це таке саме як і арифметика у математиці.
От без знань арифметика (або із мінімальними) люди на базарі справляються за допомогою калькулятора, але провідні фінансисти думаю значно рідше використовуються калькулятор у таких примітивних цілях.
Тобто, алгоритміка - це база програмування.
Якщо ти хочеш стати гарних спеціалістом, то тобі потрібно знати АРІ, бази даних, бібліотеки і т.д. (вибирай все або декілька, або одне), але без знань алгоритміки ти все будеш робити гірше ніж той самий спеціаліст, що має ці знання.
Потрапив на дуже цікаву статтю: "Как стать спонсором чемпионата Урала по программированию".
У якій один із спонсорів роздумвоє над питанням спонсорства і поряд з тим чим хороші спеціалісти, які займаються програмування і як до них відносяться різні компанії.
Я минулого тижня вже і сам почав проводити співбесіди на роботу. Але які питання я задаю не скажу Насправді, я ще поки в пошуку своїх оригінальних питань. Хочу з часом щось таке придумати, що б було моєю особистою візитівкою
Ostap написав:
Я минулого тижня вже і сам почав проводити співбесіди на роботу. Але які питання я задаю не скажу Насправді, я ще поки в пошуку своїх оригінальних питань. Хочу з часом щось таке придумати, що б було моєю особистою візитівкою
Ну я ж казав, що які питання задаю не скажу, це було б не професійно. Хоча я думаю, якщо в інтернеті поритися, то можна знайти кілька питань зі співбесід на фейсбук.
Насправді, я поки тільки одну співбесіду провів, наступна в п'ятницю. Так що як я й казав, я тільки почав
Якщо комусь цікаво і ліньки в інтернеті довго шукати: середньостатистична співбесіда на фейсбук являє собою 45-хвилинну розмову, в якій вам пропонують розв'язати 2 алгоритмічні задачки і "закодити" їх маркером на дошці. Щоб попасти на роботу треба пройти таких 4 співбесіди з різними інженерами. А перед ними треба пройти ще 2-3 схожі співбесіди по телефону.
Ostap написав:
Ну я ж казав, що які питання задаю не скажу, це було б не професійно. Хоча я думаю, якщо в інтернеті поритися, то можна знайти кілька питань зі співбесід на фейсбук.
Насправді, я поки тільки одну співбесіду провів, наступна в п'ятницю. Так що як я й казав, я тільки почав
Якщо комусь цікаво і ліньки в інтернеті довго шукати: середньостатистична співбесіда на фейсбук являє собою 45-хвилинну розмову, в якій вам пропонують розв'язати 2 алгоритмічні задачки і "закодити" їх маркером на дошці. Щоб попасти на роботу треба пройти таких 4 співбесіди з різними інженерами. А перед ними треба пройти ще 2-3 схожі співбесіди по телефону.
"але ж ті компюторщики, ну ніц не хочуть робити" (с) Набла, деталі у задачі 1135.
Я мав наувазі деталі, про тебе і співбесіди.
Чому ти проводиш? На яких засадах? Для кого проводиш? Коли почав? Як то тобі виходить? Як після півсбесіди ти пишеш фідбек? Ну ще багато може питань таких задати. Навіть мабуть буде краще, щоб ти дав цю розгорнуту відповідь у себе на блозі.
І ще раз повторюсь, технічні деталі співбесіди не цікавлять, принаймні мене. Мені цікаво як бути тобі "на тій стороні".
The world has very unique scenery. Everyone curious about that. These days travel is so easy thanks to technology. We can know what is happening the other country. That’s why we want to see other country. The point is curious. The many tourist genera Country of in My Dream Canada