Я начинающий разработчик, который хочет создавать большие системы, такие как PayPal. По какому пути я должен идти? - PullRequest
9 голосов
/ 31 августа 2010

Я учусь на втором курсе по компьютерной инженерии в Эфиопии, Африка. Мы взяли C и C ++, и я научил себя HTML, CSS, PHP (также и инфраструктура cakePHP) и небольшому javascript, JQUERY и mySQL для разработки небольших систем, таких как блог. Но я хочу создавать большие системы, которые являются безопасными и надежными. Мне очень скучно видеть очень умных и опытных разработчиков здесь, в SO. Я колеблюсь относительно того, чему следовать в начале, то есть (ASP.NET или PHP) и какие другие языки или системы я должен изучить, чтобы это произошло. Заранее спасибо.

PS. Я могу справиться с любым типом математики.

Ответы [ 7 ]

7 голосов
/ 31 августа 2010

Я чувствую себя стариком, который говорит это, но со временем вы поймете, что две самые большие проблемы в разработке программного обеспечения:

  • Повторное использование кода - Возможностьнаписать код, который можно использовать повторно.Даже не очевидно, что код можно многократно использовать со временем в том же программном обеспечении, которое было написано для .Весьма вероятно, что при открытии кода, который вы написали некоторое время назад, вы потратите время на себя, потратив несколько часов, пытаясь изменить его, и решите не использовать его в следующей версии программного обеспечения, а переписать.Это настоящее искусство писать код, который можно использовать повторно, а также это настоящее искусство повторного использования кода.Разработчики программного обеспечения всегда хотят переписать и заново изобрести колесо.Это весело.Но это не поможет вам очень далеко.
  • Фактическое использование - Создание программного обеспечения, которое полезно, не очевидно.Потому что разработчики программного обеспечения имеют совершенно другие ожидания от программного обеспечения, чем пользователи их приложений.Мы склонны переоценивать, переоптимизировать и усложнять вещи, вводить слишком много функций, , чтобы учитывать слишком много «что-если» .Мы предпочитаем сосредотачиваться на интересных деталях, а не пачкать руки хорошими пользовательскими интерфейсами или другими скучными, отнимающими много времени и неуместными проблемами.Мы производим много того, что никто не хочет или не может использовать.

Как это отвечает на ваш вопрос?

  • Повторное использование кода: вам обязательно нужно освоить это.Познакомьтесь со многими библиотеками и фреймворками.Разработайте приложение, а затем попытайтесь соединить его вместе, используя существующие компоненты и архитектуры.Написание кода для клея - самая трудная и важная задача.Кроме того, в своем стремлении создать такую ​​большую систему выделите отдельные задачи системы и попробуйте написать свои собственные компоненты, предназначенные для этих отдельных задач.Постарайтесь сделать каждый из них надежным и пригодным для повторного использования.Не пытайтесь создать целую систему сразу.Вы потерпите неудачу.Возможно, вы чему-то научитесь, может быть, многому, но у вас ничего не получится (или вы чертовски гений).
  • Фактическое использование: Ну, очень амбициозно хотеть создать что-то такое большое, как PayPal, ностарайтесь не создавать что-то большое.Попробуйте создать что-то хорошее.Хорошо, что он полезен, пригоден и используется.Вы увидите вовремя, это достаточно сложно.Попробуйте создать что-то, что другие будут использовать и довольны.

Сосредоточьтесь на том, чтобы стать лучше в этих двух.Выберите любые библиотеки / фреймворки / платформы / языки, которые вам нравятся и которые подходят для выполнения ваших задач.ИМХО PHP не является хорошим языком по ряду причин, но в конечном итоге вы должны использовать то, что вам нравится, и чувствовать себя хорошо.Я лично использую Haxe для своих проектов.Вы можете попробовать.В конце концов, я думаю, что вы должны попробовать много языков и структур, чтобы понять различные концепции.Большинство вещей, которые вы изучите, выходят за рамки конкретных языков и структур, но вы можете изучать их, только действительно, очень хорошо узнавая некоторые из них.

Прежде чем закончить, я хотел бы указать вам на мой 5 заповедей ;)

2 голосов
/ 01 сентября 2010

Здесь есть две цели. Решать их индивидуально:

Построение больших сложных систем:

Большие сложные системы возникают в результате двух вещей:

  • Видение какого-либо продукта или услуги, которая полезно и обращается к большому рынку
  • Бизнес-план с нуля до выполнения ваших видение

Выполнение этого может означать партнерство с другими людьми. Понятно, ты Заинтересованы в технической стороне вещей - это ваша сила. Вам может понадобиться найти других людей, которые разделяют ваше видение, чтобы помочь управлять нетехнической стороной вещей. Это будет включать в себя такие вещи, как привлечение капитала, продвижение и маркетинг. Каждый член вашей группы должен ввести другую прочность сердечника.

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

Развитие общих навыков CS

Теория никогда не устареет. Получить сильный опыт в области науки вашего компьютерная инженерная программа. Пройти курсы по теории языка, дискретной математике, разработка / анализ алгоритмов, компьютерная архитектура, архитектура приложений и т. д. Они хорошо послужат вам до конца вашей карьеры.

Тогда есть практическая сторона вопроса: какие языки, технологии и структуры вы должны изучить сейчас? использовать свою карьеру (с надеждой сделать что-то действительно большое). Для этого вы уже на правильном пути. Будьте любопытны, подвергайте себя столько инструментов, сколько сможете. Чем больше вещей ты знаешь, тем легче учиться новые. Потратьте время, чтобы понять модель, на которой основан каждый инструмент и как он похож на другие инструменты, которые вы использовали, но отличается от них.

Имейте в виду, что языки программирования - это всего лишь «инструменты торговли», а не сама торговля. Со временем вы будете найти новые инструменты и отказаться от других.

Собираем все вместе

Дайте волю своему воображению, чтобы придумать это "убийственное приложение". Подружиться с люди, имеющие навыки, дополняющие ваши собственные. Общайтесь и мечтайте о больших вещах вместе.

Работа над развитием ваших основных навыков CS

Получите некоторое представление о различных инструментах и ​​языках, которые вам нравятся. Получить хорошее рабочее знание лишь немногих, которые вы считаете наиболее полезными для всего, что вы делаете на момент. Овладение каким-либо одним инструментом может занять годы, но позвольте вашему текущие потребности будут вашим гидом. Будьте готовы позволить вашему техническому набору инструментов со временем развиваться.

2 голосов
/ 31 августа 2010

Большие системы - все о соединении между компонентами и тестированием.

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

Затем для тестирования, начните смотреть на методологию разработки, основанную на тестировании . Охват тестами очень важен, когда важны надежность и безопасность.

Наконец, я мог бы даже порекомендовать взглянуть на Haskell , если не по какой-либо другой причине, кроме как перейти к более «формальному» режиму работы. Haskell более или менее заставляет вас быть более формальными в том, как вы выражаете проблемы через свою систему типов. (Также, если вы действительно любите продвинутую математику, вы, вероятно, полюбите haskell:))

2 голосов
/ 31 августа 2010

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

  1. Найдите проблему, для решения которой людям нужно
  2. Напишите простейшее, что может работать, используя то, что вы уже знаете
  3. Продолжайте улучшать его
  4. Беспокойство о масштабировании позже
2 голосов
/ 31 августа 2010

PayPal изначально не был большим - со временем он стал большим, потому что они были успешными.И они не стали успешными из-за определенного выбора платформы.Они добились успеха благодаря своей бизнес-модели, предоставляемым услугам и привлеченным клиентам.

Так что изучайте либо ASP, либо PHP, либо и то и другое.Они примерно одинаково полезны для программиста.И в равной степени способны поддерживать высоко масштабируемые системы.

1 голос
/ 31 августа 2010

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

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

0 голосов
/ 01 сентября 2010
  • Если вы собираетесь разрабатывать проект в одиночку, PHP в порядке
  • Если вам нужно создать команду разработчиков, я бы посоветовал Java

Кроме языкаНе забудьте про SSL / шифрование / безопасность.

Paypal, как и всем платежным системам, необходим надежный план безопасности для обеспечения (насколько это возможно)

  • сервер является тем, кем он притворяется (сертификат, подписанный известным органом)
  • данные не могут (практически) шпиониться в пути browser <-> server

См. HTTP , SSL

...