Помимо простого кодирования: куда идти дальше?

Я занимаюсь кодированием с раннего подросткового возраста. Я начал с HTML, перешел к PHP/MySQL (создал свои собственные форумы, сайты социальных сетей и т.д.), А затем разветкился на более традиционные языки, такие как Java и С++ (также поднял немного VB.NET в высоком школа). Сейчас я больше всего знаком с С++, так как это язык выбора, который мы изучили в Computer Science II (пропустили Comp Sci I) в RPI. Теперь я чувствую, что очень хорошо знаю, как программировать из этого класса (домашние задания были жестокими).

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

Мой вопрос: куда я иду отсюда? Я пробовал следить за учебниками онлайн, но они были слишком просты. Затем я попытался перейти к sourceforge и помочь в различных проектах. Но, как только я загрузил код, я потерялся в его сложности. Я никогда не создавал фактическое программное обеспечение реальной применимой шкалы. И я не знаю, с чего начать. Как вы переходите от знания программирования к созданию программного обеспечения?

Я также открыт для изучения новых языков (javascript/jQuery, ASP.NET, С#, Python) или использования новых библиотек и/или фреймворков с С++ (мы использовали только STL в Comp Sci II) и других языках, Опять мой вопрос: куда мне идти? И я приветствую все возможные ответы.

Большое спасибо, Майкл

Ответ 1

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

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

Выберите технологию, которую вы хотите для нее. Я бы рекомендовал Ruby on Rails, потому что это потрясающе и полно интересных концепций, которые улучшат способ накопления сверхурочного времени (DRY, RESTful, MVC...)... но вы можете выбрать то, что хотите.

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

Поскольку вы начнете проект с нуля, вы увидите, с чего начать и как это будет развиваться. Я возьму инструмент управления проектами. Мы начали с "Проект имеет todos", и мы получили все другие функции, такие как сложный календарь, полный интерфейс ajax, встроенный чат...

Как только вы увидите, как вы это сделали, попробуйте сделать то же самое с вашим другом, чтобы получить возможность совместной работы в разработке. Узнайте, как использовать SVN, basecamp... узнать о процессах разработки программного обеспечения (Agile!), одноранговое программирование.

Там много, чтобы испытать! Затем вы можете попробовать с открытым исходным кодом попробовать.

Надеюсь, что поможет

Ответ 2

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

Я рекомендую книгу Real World Haskell для ее изучения.

Изменение: В ответ на комментарии, моя интерпретация вопроса, куда он может пойти отсюда как программист. Функциональное программирование - это логическое направление. Для тех, кто изучает функциональное программирование в первый раз, Haskell хорош, потому что он действительно не учитывает императивные методы программирования. Кроме того, он имеет в основном все функции, которые вы найдете в других функциональных языках, что означает, что будет легко выбрать другие функциональные языки.

Ответ 3

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

Ответ 4

Я думаю, что лучший способ улучшить свои навыки программиста - это сделать то, что предназначалось для программирования: решать проблемы. Я уверен, что вы играли на своей машине и когда-то думали про себя: "Я бы хотел, чтобы была программа, которая сделала это..." или "Интересно, есть ли какие-нибудь программы, которые делают X..." Вместо того, чтобы просто искать, если кто-то написал это, напишите сами. Начните с чего-то малого, и постепенно сделайте его более сложным. Добавьте функции. Позвольте себе потерпеть неудачу, и когда вы это сделаете, спросите себя (или нас в stackoverflow), как преодолеть это препятствие. Как только у вас есть основы программирования, все остальное просто делает большие вещи из маленьких вещей, а мелочи обычно довольно легкие.

Когда вы делаете что-то, что знаете, вы действительно будете использовать, это будет более забавно и приятнее, когда вы закончите.

Ответ 5

Вы понимаете все следующее и как они работают?

  • Связанные списки (одиночные и двойные)
  • Последовательный и двоичный поиск
  • Двоичные деревья
  • Стеки
  • Красно-черные деревья
  • Алгоритмическая сложность и большая нотация O
  • Рекурсия
  • Хэш-таблицы и алгоритмы хеширования

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

Ответ 6

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

PS: Создание программного обеспечения - это нечто большее, чем просто знание того, как обходиться с языком.

Ответ 7

Ознакомьтесь с шаблонами проектирования.

Я считаю, что помимо простого простого кодирования.

Ответ 8

Вы можете предлагать свои возможности некоммерческой организации или другу или кому-то, кому нужен сайт или программа.

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

Например, я немного пораньше, у меня была программа Peel www.getpeel.com на моем Mac. Но продал свой Mac для ветра, когда я путешествую.

Увидев, что ничего не было для Windows (или ничего, что я мог найти), как Peel. Я создаю свой собственный PHP и до 4-го его пересоздания, поскольку я узнаю, как лучше делать каждую новую вещь, которую я изучаю.

Ответ 9

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

Ответ 10

Хорошо, мой совет будет заключаться в поиске интересующей вас проблемы/проекта и попытке ее кодировать. Попытка реальной проблемы - это то, что вас заставляет. Найти что-то не сложное, но не слишком простое. Что-то попробовать при запуске нового языка - написать некоторые инструменты. Например, вы можете запрограммировать python script, который отображает метрики в проекте С++. Вы можете написать инструмент, который извлекает некоторые статистические данные с сайта, который вы используете, и т.д. Когда я изучаю программирование, программирование игры было довольно забавным (я был молодым:-)). Вы можете попытаться запрограммировать некоторую простую игру, используя 3D-движок, например, Ogre3D. Участие в проекте с открытым исходным кодом тоже велико, но, как вы уже заявили, возможно, немного подавляющим, -)

Найдите то, что вам нравится, и у вас есть РЕАЛЬНАЯ полезная цель для вас. Вы преуспеете, чтобы решить проблему и многому научиться на этом пути!

Ответ 11

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

Когда мы приходим к более крупным проектам, возможно, со многими циклами выпуска, вместе с разработчиками, работающими вместе, возникают различные проблемы. Я помню, что был шокирован, когда увидел свой первый крупный план проекта - какое маленькое определение времени было на самом деле написанием кода!

То, что я нашел полезным в качестве младшего, было "Сидеть Нелли", мне посчастливилось работать для просвещенных работодателей, которые поставили меня с очень опытными и полезными разработчиками. Иногда работать, иногда работать вместе. Я считаю, что это помогло мне преодолеть препятствия, которые вы описываете.

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

Ответ 12

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

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

Например, если вы хотите какое-то программное обеспечение, которое проверяет RSS-каналы каждые 5 минут и делает небольшое всплывающее окно, как только появляется новый. Или вы хотите, чтобы программа позволяла вам делать простые презентации, просто перетащив несколько фотографий.

Тогда, что бы вы ни выбрали, начните с простого решения проблемы и оттуда (например, сделайте различные настройки, дополнительные функции и т.д.)

Ответ 13

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

Ответ 14

Нет никаких волшебных пулей перехода от академических программ решения головоломок к приложениям реального мира. Лучший способ научиться - просто прыгнуть в голову первым. Вам понадобится очень много времени, чтобы узнать, что вам нужно, если вы только посмотрите на свой собственный код. Вы должны смотреть на код, написанный профессионалами, и пытаетесь понять, почему он работает так, как вы это понимаете.

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

Например, вы можете попробовать подход "снизу вверх", где вы пытаетесь понять, как обрабатываются взаимодействия с базой данных, прежде чем смотреть на код, который использует уровень базы данных. Вы продолжаете двигаться вверх, пока не дойдете до обработчиков событий GUI.

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

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

Ответ 15

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

В прошлом spring я принял должность у своего первого кооператива, переработав свой первый крупный проект, который я начал с моего кооператива. У меня есть список побочных проектов, которые я также хочу завершить, что поможет завершить мои навыки, а также изучить некоторые другие языки.

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

Ответ 16

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

Ответ 17

Единственный способ начать это начать! Другого пути на самом деле нет... Лучшие ответы, которые вы получите, всегда скажут вам об этом. У вас есть знания, теперь примените их к работе!