Допомогти молодшим програмістам подолати свої недоліки? [зачинено]


15

Які ваші загальні поради щодо молодших розробників, які приєднуються до вашої команди або з якими вам доведеться працювати? Очевидно, що вони недосвідчені, тому ви не можете очікувати, що вони все знають, але яких навичок часто незрозуміло не вистачає - і як, зокрема, ми можемо допомогти їм у формуванні цих відсутніх навичок?

Я не маю на увазі міжособистісні навички, такі як "слухати поради", я маю на увазі технічні питання на кшталт (якщо застосовується):

  • "Ви ніколи не робили SQL?"

  • "ти ніколи не писав одиничний тест?"

  • "Ви не знаєте, як використовувати командний рядок Unix?"

Речі , які ви б очікувати , - я хотів би почути ваші зауваження і методи для навчання нових програмістів , щоб отримати повз цих конкретних недоліків.


13
Єдине, що дуже дратує: постійно питати, що дратує. :-)
Джеррі Коффін

12
Я не думаю, що слід дратуватися, коли люди не знають того, чого ти очікував би від них. Важливо те, що вони готові вчитися =)
koenmetsu

Так, згоден з @KoMet, якщо ти маєш бажання навчитися слухати, я думаю, що це важливо :)
MalsR

8
Мені це питання не подобається, у нього неправильний менталітет для розробника. МИ БУЛИ ВСЕ ОЩЕ, що новачок, і щодня ми є новачком у чомусь. Я б ніколи не дратувався над тим, хто щось не знає. Це відчуває, що тут задіяно занадто багато зарозумілості ...
Темна ніч

3
Ой, закрито, БРАВО. Я прочитав шість вказівок конструктивних суб'єктивних питань, і це відповідає всім їм. Відверто кажучи, неконструктивна частина зайнята тілами, що закривають нитку, на яку вже відповіли 13 людей, лише тому, що вони неправильно зрозуміли питання. Це просто реальність, що старші розробники часом будуть розчаровані у здібностях молодших розробників, це питання лише прагне знайти якісь закономірності цього розчарування, щоб ми могли краще уникнути труднощів. Ігнорування законних скарг і критики нікому не приносить користі, і це не має нічого спільного з зарозумілістю.
Ендрю М

Відповіді:


25

Не знаючи, що таке управління версіями, або як правильно ним користуватися .

Один з молодших розробників, який нещодавно був у моїй компанії, мусив навчитись самим основам Subversion. Мене це справді змусило ... вона весь час перевіряла код, щоб жити проектами ... і поняття не мала, що вона робить ...?


4
Вішалка? Їй пощастило, що вона ще має роботу.
Рейн Генріхс

2
Це здається, що це більше питання "не знати того, чого не знаєш" або "не визнати того, чого не знаєш". Якби вона попросила допомоги з самого початку, чи це взагалі було б великою справою?
Майкл МакГоуан

1
ой, це звучало так, як я, ха-ха, ми не впроваджували контроль версій до недавнього часу, і я приєднався до компанії як свіжий клас, я навчився трохи контролювати версії та підривну діяльність у Університеті, але ніколи цього не застосовував.
Суфенді

1
"Це інструмент для резервного копіювання, чи не так? Ви використовуєте його для збереження коду кожного вечора?"
Девід

2
Одне велике, що вони майже ніколи не навчають вас у школі
Ілля Саункін

23

Не задаючи достатньо питань

Я знаю, що вони юніори, сподіваюся, що вони помиляться і просто не знають речей. Стільки королівських f ** k ups можна було уникнути, просто задавши питання, а не припускаючи щось. Чесно кажучи, я не можу бути достатньо скутим.

У мене виникли TONNES запитань, коли я починав - задаючи їх, рятував мою дупу. Чорт, у мене ще багато запитань ... Мені просто подобається вважати, що вони зараз кращі.


Джи ... майже таку саму відповідь, яку я і написав, ти йдеш приблизно за 5 секунд до цього.
quick_now

2
"Ви дратуєтеся! Я тут зайнятий, хіба ви не можете самі подумати?" якщо вам не пощастило !! haha
Sufendy

4
+1 - підзаголовок цього запиту не пояснюється після пояснення. Це насправді розчарувало мене, коли я пояснив якийсь завдання молодшому, він кивнув, я подумав, що він його отримає, і він дістається до роботи, а потім через два тижні він повертається, знову задає ті ж запитання, знову киває, потім ще два тижні пізніше ... Досить справедливо, це було не тривіальним завданням, але заради Бога, не робіть вигляд, що ви це розумієте, якщо цього не зробите. І якщо ви думаєте, що щось зрозуміли, зробіть замітки, щоб через два тижні запам'ятати це.
Péter Török

1
Деякі люди, з іншого боку, задають занадто багато запитань (про переповнення стека).
BoltClock

1
@SnOrfus: Некваліфіковані - це те, кого я маю на увазі: P
BoltClock

14

Скопіюйте пасту, випробування та помилки, а не намагайтеся зрозуміти основні основи

Багато молодших розробників скопіюють код, який виглядає близько, а потім майже випадковим чином спробують різні перестановки модифікацій грубою силою, поки вони не потраплять на той, який працює. Якщо ви не знаєте, чому це працює, швидше за все, ви вводите помилки в прикордонних випадках, коли хтось, хто це розуміє, повинен буде прибрати пізніше.

Зберігаючи свій "перший проект" коду

Коли досвідчений розробник пише нову функцію певної складності, вони починають із заглушки, яка не робить нічого, крім компіляції, після чого перезаписують, щоб додати коментарі псевдо-коду високого рівня для загального алгоритму, а потім переписують ці коментарі по черзі за допомогою фактичний код, додаючи та видаляючи фіктивний код у міру необхідності для тестування, потім перепишіть, щоб видалити надмірність, що з’явилася під час впровадження тощо, у серії послідовних та поступових удосконалень.

Молодші розробники мають тенденцію писати це в один великий шматок, а потім робити масивну грубу силу налагодження. Їм не подобається видаляти рядок коду, як тільки він набирається в редактор, і вони такі щасливі, що нарешті змусили його працювати, що їм неприємно переписувати для нефункціональних вдосконалень, але саме вони повинні зробити тому найбільше.


1
+1 для "копіюйте та вставляйте замість того, щоб шукати розуміння", хоча, звичайно, це не проблема, характерна лише для нових програмістів, лише для поганих. Нові програмісти, принаймні, мають шанс вирости з цього - хлопці, з якими я працюю, які десятиліттями були програмістами і досі цього не роблять.
Том Андерсон

Частина цього також може бути наслідком стилю управління. Завдання вже розмовляє довше, ніж очікувалося, і завтра менеджер бажає вашої функції. Ви поспішаєте змусити його працювати і швидко переходите до наступного завдання. Все розбивається на мікророзмірні картки завдань, тож немає часу на рефакторинг чи крок назад і дивитись на більшу проблему в цілому
Джеймі Макгуйган,

14

Вважаючи, що ви вперше зіткнулися з ситуацією.

Кожна проблема програмування, з якою ви стикаєтеся, стикалася з іншими, у деякій загальній формі. Є чому багато чому навчитися досвідченим програмістам. Я досить стара, щоб запам'ятати програмування перед Google, і це смоктало . Ще гірше було, коли у нас були пошукові системи, але в Інтернеті ще не було стільки хорошої інформації. Зараз програмування набагато продуктивніше, тому що ви маєте доступ до глобальних знань за лічені секунди. Люди, які не користуються ним, ігнорують це на свій страх.

Редагувати :

Щоб було зрозуміло, я не виступаю за програмування копіювання / вставки. Я впевнений, що вам потрібно переглянути наявні знання, перш ніж ви зможете самостійно приймати хороші рішення.


1
Ну, також ви не хочете, щоб розробник копіював і вставляв увесь код з сумнівних ресурсів з Інтернету. Пошук хороший для отримання якихось ідей, можливо, вирішення деяких принципових питань розуміння, але ніколи не отримувати готових рішень. Це також робить розробника тупішим; можливо, це робить його хорошим колекціонером, але не винахідником.
Ілля Саункін

Я погоджуюся в якийсь момент з Іллею, копіювання кодування, не встигаючи дізнатися, що він робить, не прискорює ваші навички програмування. Найгірше, що це перейме і стане поганою звичкою.
сетзамора

1
Звичайно, але @Scott нічого не сказав про копіювання та вставлення коду, він просто сказав, що не вважайте, що ви вперше зіткнулися з ситуацією, тобто зрозумійте, що там може бути якась інформація та досвід, від якого ви можете отримати користь. Приклад: Я хочу знати, чи схожі дві струни. Чи існує вже відомий алгоритм вирішення цієї проблеми? Уявіть, якби розробник просто вирішив розпочати власну передачу, навіть не усвідомлюючи, що відповіді вже є.
Девід Конрад

@David Conrad - це правильно, якщо взяти пункт, ми знаходимося на одній сторінці тут.
Ілля Саункін

10

Думаючи, що вони все знають.

У мене був молодший. стажер, який намагався вирішити все за допомогою JavaScript. Намагався пояснити кілька понять, але завжди думав, що може зробити це краще. Тепер він кинув і переробляв основну програму, яку він створив для друку, використовуючи HTML, а не технологію готової до друку, як PDF. Не кажучи вже про купу інших великих проблем.

Урок - це попросити людей похилого віку про основні загальні рекомендації на початку проекту, не запускайте архітекторів без сторонньої допомоги. Ви можете написати код і деталі самостійно, але переконайтеся, що ви принаймні використовуєте правильну технологію.


5

Мене рідко дратують, коли юніори не знають основ, їх не навчають галузевим навичкам, таким як SCC в університеті. Це навчити їх старших розробників. Мене дратують лише сутички особистості. Але мене найбільше дратують старші розробники, які не знають основ.


1
@Graig має рацію: багато чого, що дратує нас досвідчених розробників щодо юніорів, - це те, чого нам довелося вивчати не в університеті, а в комерційному середовищі.
Nickz

5

Не бажаючи просунути свої знання - натомість ставте на шлях найменшого опору.

Днями стажист разом із графічним дизайнером (який напрочуд досвідчений у програмуванні) попросили допомоги, оскільки у них виникли проблеми з реалізацією чогось у jQuery - закриття може бути болісним, якщо ви не бачите, що це прийде.

Я сів із стажером і пояснив, що саме пішло не так і чому. Ми виправили помилку, тоді я вказав на кілька додаткових вдосконалень, які можна було б зробити («оскільки я тут»), і ми закінчили переписати функцію вини в 10 рядках замість 20 і без помилок. Відповівши на будь-які запитання, переконавшись, що у світі все в порядку нормально, я пішов.

Наступного дня стажер прийшов із запитанням, яке виявило, що "гм, хотів внести деякі зміни і переписав функцію на мій шлях, тому що мені було важко зрозуміти" (здебільшого скасовуючи мої вдосконалення).

Він може або спробував важче замість (задавати додаткові питання, читаючи на поняттях , які я згадував) - код таке коротке ніколи не може бути , що важко зрозуміти - або взяти легкий вихід. Мене це засмучує кожен раз, коли я бачу, як хтось робить останнє.


Цікаво, мені цікаво, хоча, якщо можливо, ви зробили це важче для читання. Я пам’ятаю, що мій перший керівник проекту робив це кілька разів (і я також був винен, що я його змінив) Хоча я запевняю, що заднім часом його підхід був кращим, я просто не був достатньо просунутим у той час, щоб зрозуміти, чому і як це працює .
Максим Гершкович

3

Не розуміючи ООП. На жаль, це спосіб більш поширений, ніж, мабуть, усвідомлює більшість із нас.

Знати, як створити клас, абстрактний клас, інтерфейс або навіть знати поліморфізм - це одне; розуміння того, як правильно їх використовувати на користь вашої програми - це інше .


Якщо ви хочете уникнути цього, я знайшов ці питання та відповіді на них освічуючими:


Як і на базовому рівні, вони не знають, що ви маєте на увазі під створенням об'єктів, класів та невідповідності? Або більш вдосконалені речі, такі як використання дизайнерських моделей (ви повинні визнати, книга GoF досить непроста, хоча, звичайно, є й інші книги / путівники)
Ендрю М

@Andrew Я трохи розширив відповідь.
Ніколь

1
І я бачу зворотне: не знаючи, як написати звичайний старий процесуальний кодекс на C через те, що тільки навчають ООП. Знову ж таки, не змушуйте мене говорити про людей, яких більше не вчать писати парсери, бо їм кажуть, що всі ці проблеми можна вирішити за допомогою lex та yacc.
quick_now

1
@quickly_now Це хороший момент, хоча writing code other ways than OOPі writing bad OOPдві абсолютно різні речі. По-перше, у мене немає проблем.
Ніколь

Більшість університетів не викладають об'єктно-орієнтований дизайн. Також багато робочих місць працюють як силоси навіть з молодшими розробниками ... або мають "старших" розробників, які не знають об'єктно-орієнтованого програмування. Є "старші" розробники, які отримали назву від працюючих x років, і старші розробники, які знають свої речі ....
Cervo

3

Не знаючи того, чого не знаєш, і в невідомості думаючи, що ти знаєш усе.

(А його близький двоюрідний брат, не бажаючи питати.)

Частково це організаційна річ - відповідна індукція може пройти довгий шлях до того, щоб деякі з цих речей не стали проблемами. Але дуже мало компаній мають час або людей, доступних для введення в дію - щось, що повинно зайняти від кількох днів до декількох тижнів, а розробників відводить від роботи. Тож ми маємо замість цього гасити пожежі.


2

Я вражений тим, скільки молодших програмістів відносно свіжих із програми CS слабкі за алгоритмами. Поганий вибір алгоритму може насправді не виділятися серед бізнес-додатків, але при обробці мільярдів запитів веб-служб на день це дійсно має значення.

Ось питання про інтерв'ю, я використовую, що майже всі програмісти молодшого віку пропускають, що висвітлює проблему:

Напишіть код, який обчислює число N-го Фібоначчі .

Вони майже завжди йдуть на те, що більшість пише очевидне, але неефективне

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

На запитання прокоментувати алгоритмічну складність я зазвичай отримую "це гірше, ніж O (N) ... uhm ... O (N logN)". Це насправді (набагато) гірше, ніж це ...


1
щоб відповісти на ваше запитання щодо compleixty, слід знати цю формулу для обчислення чисел у полі без рекурсії, яку він використовуватиме замість рекурсії.
П Швед

1
@Pavel: Є рішення O (n) та O (1) ... насправді Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibach_number#Closed-form_expression
Ерік Дж.

1
Я не кажу, що рішення, яке ви розмістили, ідеальне. Я просто ставлю під сумнів відповідність вашого подальшого запитання для такого рішення, питання про складність. Чого ви хочете досягти, задавши це питання, і - найголовніше - чому ви очікуєте, що те, що ви хотіли, буде досягнуто, отримавши відповідь на попереднє питання? (Чи я задумався?)
П Швед

Щоб зробити більш зрозумілим, я б запропонував вам запитати про те, як можна вдосконалити код, а не просити оцінити складність. Я впевнений, що деякі випускники CS запропонують запам'ятати або сказати, що вони знають формулу, але не хотіли показувати її одразу, тому що ви думаєте, що вони розумні.
П Швед

На практиці таку функцію можна було б виявити за допомогою профілера та оптимізувати, додавши в кеш пам'яті. Неефективність - це справді проблема лише для великих значень N. Найкращий спосіб навчити молодшого про такий код - змусити їх перейти через все виконання коду за допомогою відладчика. Для дійсно великих значень N, виявляється, є математична формула maths.surrey.ac.uk/hosted-sites/R.Knott/Fibach/…
Джеймі

1

Зробити відступ коду назад!

Звичайно, це не дуже "типово". Я ніколи не міг повірити, що це навіть можливо, але як би написав звичайний розробник

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

вона писала б так (Боже, мені це все ще здається неможливим!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Розчарування, чи не так?


Що від імені ...
Майк Швидкість

1
Це дуже дивовижно !!!
javanna

Це майже так, ніби вони там, де арабською, івритом або китайською, де ви читаєте праворуч ліворуч, а не західною конвенцією зліва направо. Це ідеально правильний спосіб відступу вашого коду, але означає, що вам потрібно повторно відступити весь файл на основі найглибшого рівня вкладеності, і він робить ваш код несумісним з усіма, хто поділяє протилежну умову.
Джеймі Макґуйган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.