Які навички важливі для професійного програмування, які зазвичай не навчаються в школах? [зачинено]


14

Я є першим курсом інформатики першого курсу. Я поїхав на ярмарок вакансій, роздав резюме, до свого здивування я отримав співбесіду та врешті-решт стажування як розробник.

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

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

Будь-яка порада дуже вдячна, але якщо ви маєте на увазі будь-які книги, будь ласка, повідомте. Спасибі!


8
це питання задавали багато разів на цьому сайті по-різному. спочатку пошукайте, а потім запитайте. подивіться на поширені запитання; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/…
tgkprog

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

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

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

1
Насправді мені дуже не подобається працювати з людьми з сильними математичними навичками. Вони перетворюють все на математичну формулу, а не застосовують принципи інженерії програмного забезпечення. Програмне забезпечення НЕ математика. Важливо, щоб ви написали свій код, щоб його було легко зрозуміти.
Роб К

Відповіді:


21

У школі ви дізнаєтесь про написання коду. Те, про що ви не дізнаєтесь, - це решта розробки програмного забезпечення. Основні речі, про які я ніколи нічого не дізнавався у школі:

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

Це дуже важливі навички для будь-якого розробника, і ви, на жаль, не отримаєте їх у класі, на жаль.


4
Працювати як частина команди розвитку - це точно тонке і складне мистецтво. Я не розумію, хоча контроль над версіями та відстеження помилок завжди визначаються як основна перешкода для нових розробників. Вони, безумовно, важливі інструменти, але ви вказуєте нову людину на сторінки чоловіків, книгу O'Reilly або онлайн-підручник, і вони зможуть за хліб зібрати хліб та масло за лічені години. Чому б ви витрачали час на заняття на щось подібне?
Чарльз Е. Грант

1
@ CharlesE.Grant Управління версіями схоже на програмування, оскільки ви можете знизити основи за порівняно короткий час, але для його ефективного використання потрібен досвід. І DVCS, як git і Mercurial, потребують розуміння, ніж CVCS, як svn.
Ізката

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

1
@ CharlesE.Grant: Я кілька років викладав курси випускників з програмування та суміжних тем. Навіть аспірантам важко зрозуміти, чому вони повинні використовувати систему контролю будь-якого виду. І коли вони з недоліком починають його використовувати, вони, здається, дуже швидко плутаються в ньому. +1 до Мейсона за те, щоб підняти його як важливу не вивчену тему.
Пітер К.

1
+1 +1 +1, по одному за кожен бал. Це так нерозумно, що вони не навчають тебе цього ...
Раду Мурзеа

20

Я хотів би, щоб я знав на початку своєї кар’єри, що як розробник я маю дуже важливу роль у бізнесі . Я не просто кодова мавпа.

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

Якщо ваша компанія не пише тести на свій код, починайте писати тести вже зараз.

Якщо вони не відстежують помилок, знайдіть відповідний трекер помилок зараз.

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

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


9

Моя школа ніколи не навчала мене вирішувати проблеми. Вони навчили мене механіці кодування, але вміти вивчити проблему, зрозуміти її та придумати рішення - це те, чого вони не навчили. Окрім розуміння мови програмування, вона потребує терпіння, суворості та інтуїції.

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

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


+1 для тестової частини. У моєму університеті і цього не вчать. У мене був 1 клас (так: один), де вчитель згадав одиничне тестування ... близько 3 хвилин. Це воно.
Раду Мурзеа

Я знаю, що це пізня відповідь, але це було однією з речей, які зробили мій ступінь математики привабливим для моїх роботодавців. Цю думку, безумовно, поділяють і роботодавці.
Ерік

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

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

... У гідних школах ви не отримуєте кредиту за те, що просто навчитеся кодувати. Якщо вам здається складним використовувати контроль над версіями, тоді у вас є набагато серйозніші проблеми, яким жодна школа не зможе допомогти. Коли ви придумаєте остаточний спосіб написання коду, який легко підтримувати, тоді напишіть книгу і розбагатійте. Ніхто ще не вирішив цю проблему. Ви, мабуть, пропустили в школі ті частини, де вам довелося звернутись до своїх програм для тестування. Тестування на прийняття / регресію є специфічним для галузі, і їх краще навчати на роботі, а не в школі.
Данк

7

На мою думку, деякі з найважливіших речей, яких не вивчили (або правильно засвоїли) у школі:

  • Як правильно користуватися та IDE; використання повної потужності сучасного IDE забезпечує величезне збільшення продуктивності: автоматичний рефакторинг, кодова навігація, інтеграція в VCS, аналіз коду, заповнення коду тощо.
  • Як правильно використовувати налагоджувач: віддалена налагодження, налагодження багатопотокової програми, експресна оцінка тощо.
  • Виправлення та обслуговування помилок; в університеті вони не навчають вас майже нічого з цього приводу, але в промисловості досить часто виправляти помилки.
  • Як працювати у великій команді та над великим проектом; в основному в університеті проекти є на зразок малих, порівняно з великими промисловими проектами.
  • Як написати хороший код і як акцентувати увагу на читанні; це пов'язано з досвідом, але є кілька книг, які навчають вас основ (Code Complete, Clean Code тощо).
  • Як використовувати рамку на повну потужність, використовуючи її налаштування; в університеті, можливо, ви навчилися використовувати деякі рамки для деяких дуже базових сценаріїв; в промисловості ви досягнете кутових шаф.
  • Як зрозуміти і написати код після специфікації; Ви, мабуть, навчитеся писати специфікацію, але тепер, як її читати та як її інтерпретувати

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


aka "Програмування" - це не просто знання мови програмування, є "навколишнє середовище", "екосистема", "рамка" ...
umlcat

4

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

Якщо у вас є досвід розробки програмного забезпечення з відкритим кодом з використанням сховищ вихідного коду (наприклад, GitHub ), ви на крок попереду mostсвоїх однокласників.

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

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


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

@SouthpawHare: Я не кажу, що це не існує, вони навіть навчали його ще в мої дні. Тільки те, що люди, які виходять з університету з таким досвідом, все ще в меншості. І як такі люди, які це мають, цінніші. Я не погоджуюся, що це сильно змінилося за останні 20 років.
Мартін Йорк

3

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

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

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


2

яку саме майстерність ви хотіли б засвоїти, перш ніж стати справжнім програмістом?

З мого досвіду, моя школа ніколи не навчала мене вирішувати проблеми.

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

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


2

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

Якщо компанія використовує методологію Agile для розробки програмного забезпечення, було б корисно її розуміти.


2

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

Вони можуть виходити лише з досвіду роботи безпосередньо на місцях.

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

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

  • Знання, як збалансувати хороші практики кодування з практичними міркуваннями. Набуття здатності судити, коли код "достатньо хороший", "перероблений" або "потребує рефакторингу".

  • Навчитися долати власні слабкості та невпевненість. Набуття здатності протистояти критиці. Відпустити своє его. Дізнатися, що означає брати на себе особисту відповідальність, а потім взяти на себе.

Про все це легко читати. Зовсім інша річ - реально реалізувати це на практиці. Єдиний спосіб - це зробити. Вас покусають багато разів, і це, мабуть, зашкодить, але ви вийдете з нього сильніше і краще.

Відповідне читання: Шаблони учнівства


1

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

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

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


1
  • вимоги - помиліться, а відпочинок - це здебільшого марнотратство
  • пріоритети (яка функція в якому випуску)
  • робити або використовувати поза коробкою (купити / безкоштовно)
  • командна робота
  • управління проектами - вимоги, якість (зразки даних у виробництві, тестові випадки, як протестувати, покриття перед кодом, більше схоже на вартість, але не актуально. читайте книгу PMI
  • засоби комунікації (пошта, зустрічі: планувальник календаря)
  • управління вихідним кодом

0

Мені б хотілося, щоб я вирішив раніше в грі, чи хочу я бути загальним програмістом, вивчаючи багато різних речей, мов, баз даних та платформ, а згодом став веб-розробником, чи повинен я просто спеціалізуватися на одній CMS, або навіть просто спеціалізуватися на Photoshop, будучи фахівцем, ваші навички були б настільки ж цінними і вигідними, ніж насправді, знаючи, що повинен знати справжній програміст. Іншими словами, якщо вам просто потрібно добре заробити гроші, просто спеціалізуйтеся на ОДНІЙ. Якщо ви любите комп’ютер і любите вирішувати проблеми, то будьте програмістом.

[рефлексуючи після та після навчання, як-то 4 або 5 різних "фреймворків JavaScript", перш ніж JQuery вийшов сильним, отримавши сертифікацію в JAVA і ніколи не отримавши позицію java та працюючи на декількох платформах; AS400- rpg,> .NET - c # і PHP, перш ніж побажати, я просто освоїв фотошоп і заробляв рівні гроші без необхідності виправляти помилки чи писати програмне забезпечення. ]

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


2
Так, але такий фахівець ніколи не збирається відкривати власний магазин. Якщо ваша мрія - колись у майбутньому бути генеральним директором власного стартапу, вам знадобиться ВЕЛИЧЕЗНИЙ набір навичок.
Давор Ждрало
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.