Стек — С#

Опыт — 7 лет

Работа — студент университета + фрилансер

Моя первая оплачиваемая работа

Позволь мне задать тебе настроение, бедный студент универа, физик-первокурсник, слишком много курсов одновременно, мало сна; Я думаю, вы поняли идею (и, возможно, то, на что это похоже). Теперь я знаю, что мы все хотели бы иметь немного денег, чтобы гулять и наслаждаться нашим временем. Мы все можем найти минимальную заработную плату 9–5, но я искал что-то получше и подумал, что смогу использовать свои навыки разработчика, чтобы найти работу.

К счастью для меня, друг семьи искал кого-то, кто мог бы что-то для них разработать. Работа была хорошим сочетанием моих знаний и навыков. У этого друга была фабрика по производству оборудования для водоподготовки и очистки воды, и у него было узкое место в отделе ценообразования. Каждое предложение, которое требовалось отделу продаж, требовало, чтобы инженер составлял планы, затем кто-то должен был рассчитать не только стоимость различных деталей, но и такие вещи, как длина сварных швов, количество необходимой краски, количество необходимых болтов и так далее. До этого момента это делалось в Excel с поиском и требовало много ноу-хау.

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

Работа с/для клиента в качестве фрилансера

Я уверен, что все вы, разработчики, думаете: «Хорошо, у него есть документы с требованиями о том, как/что строить». Это не могло быть дальше от истины (и на удивление более распространено, чем я ожидал). Мне пришлось опросить всех людей, вовлеченных в компанию, чтобы попытаться понять, что нужно. После этого я садился и писал свои собственные документы с основными требованиями, которые затем обсуждал с клиентом.

Если вы вынесете из этого один вывод:"Всегда обсуждайте требования с клиентом в письменном виде"

Это много раз спасало мои @$$.

Потребовалось некоторое время, чтобы научиться работать с клиентами, и я многому научился. Этот первый клиент помог мне научиться, навыки разработки — не единственное, что важно, важно понимать потребности клиентов, болевые точки и то, на чем сосредоточить свои усилия, это верно на протяжении всей моей карьеры.

Мне повезло (в садистском смысле), что мой первый клиент понятия не имел, как писать требования и как обращаться с циклом разработки. В последующие годы я получил много «требований» типа «поставить туда кнопку, которая делает то-то»; и в 9/10 случаях есть лучший способ сделать то, что лучше решает проблемы клиентов. Я призываю вас смотреть на все, что вы разрабатываете, и пытаться понять бизнес-вариант использования, стоящий за этим, и смотреть на более широкую картину. Вы будете удивлены, обнаружив, что это значительно поможет вам писать лучший код.

Просто для примера мне сказали сделать кнопку для экспорта предложения, звучит достаточно разумно, но тогда отправка копий клиенту, руководству и руководителю проекта будет работой агента по продажам. Я бы не знал этого, если бы просто разработал кнопку. Вместо этого я предложил, чтобы в системе были проекты с информацией о менеджерах проектов и кнопка «отправить по электронной почте». Это может показаться незначительным, но после разговора с генеральным директором я обнаружил, что это избавило его от множества душевных страданий, потому что не раз неправильная цитата была отправлена ​​​​не тому клиенту только потому, что агент прикрепил неправильный файл.

Чему нельзя научиться в универе

За время учебы в университете я многому научился по разным предметам, включая программирование. Несколько предостережений по этому поводу заключается в том, что в большинстве случаев преподаваемые языки были устаревшими, а профессора на самом деле не знали, как программировать продукт, больше похоже на написание блоков кода. К сожалению, в старой поговорке «Кто не может, тот учит» больше правды, чем я надеялся.

Думаю, я могу с уверенностью сказать, что на своей первой внештатной работе я узнал больше, чем всему, чему мог научить универ. Нет ничего лучше, чем «запачкать» руки и просто поработать. Вот небольшой список основных вещей, которым я научился на работе:

  1. Поймите бизнес — как я уже говорил ранее, поймите, «почему» вашему клиенту нужна эта функция, а не только то, как они видят ее реализацию.

2. [Принцип 80/20] (https://en.wikipedia.org/wiki/Pareto_principle) — старайтесь тратить свое время с умом, покрывая большинство потребностей и оставляя «известные проблемы» для действительно редких крайних случаев.

3. [KISS](https://en.wikipedia.org/wiki/KISS_principle) — «Оставь это, простой дурак» (или иногда я думаю, что это «Оставайся простым, тупица»), попробуй упростить свой код, сломай на более мелкие кусочки, которые в долгосрочной перспективе принесут дивиденды.

4. Производительность — это еще не все (или даже не самое важное в большинстве случаев). Современные компьютеры быстрые (ну, очень, очень быстрые), а тот причудливый алгоритм бинарного поиска, который вы выучили, не имеет большого значения в реальной жизни (в большинстве случаев). , когда вы фильтруете список даже из нескольких десятков тысяч, на самом деле это не изменит среду выполнения.

5. Используйте открытый исходный код везде, где можете. Существует так много замечательных проектов с открытым исходным кодом, и они могут значительно сократить ваше время программирования. Кроме того, они могут (обычно) сделать это лучше, чем если бы вы попытались написать это самостоятельно.

Пожалуйста, ознакомьтесь с моей библиотекой с открытым исходным кодом и, возможно, даже пометьте ее. Я был бы очень признателен!