x > 0 and x < y
), пока разработчики языка не удосужились поддержать общую форму в математике, (0 < x < y
).
В большинстве языков оператор сравнения возвращает логический тип. В случае 0 < x < y
, если это интерпретировать как (0 < x) < y
, это было бы бессмысленно, поскольку <
не имеет смысла сравнивать булевы значения. Следовательно, новый компилятор может интерпретировать 0 < x < y
как tmp:=x, 0 < tmp && tmp < y
без нарушения обратной совместимости. Однако в случае x == y == z
, если переменные уже являются булевыми значениями, неясно, означает ли это x == y && y == z
или (x == y) == z
.
В C # я использую следующий метод расширения, чтобы вы могли написать someColor.IsOneOf("Red", "Blue", "Yellow"
). Это менее эффективно, чем прямое сравнение (как в случае с массивом, циклом, вызовами Equals()
и боксом, если T
является типом значения), но это, безусловно, удобно.
public static bool IsOneOf<T>(this T value, params T[] set)
{
object value2 = value;
for (int i = 0; i < set.Length; i++)
if (set[i].Equals(value2))
return true;
return false;
}
Практически все предлагают заняться программированием. Хотя это очевидно важно, я считаю важным понимать среды, в которых работают ваши программы.
Я бы исследовал, как работает операционная система (как они распределяют ресурсы для вас, как они планируют программы и потоки), как работают сети (маршрутизация , Поведение и ограничения TCP / UDP и т. Д.), А также немного теории баз данных.
Я вижу много молодых программистов с отличным знанием языка, но за пределами песочницы своей программы они не имеют ни малейшего представления о том, как компьютер / сеть позволяет их вещам работать.
Знание чего-то из вышеперечисленного сделает вас лучшим программистом с точки зрения того, как вы пишете свои программы и как вы понимаете, как они будут работать (и действительно, как их отлаживать или анализировать их сбои)
My multi-advise:
Вот мое многостороннее предложение:
1) Работа над общей картиной - посмотрите на различные методологии разработки программного обеспечения и посмотрите, как при программировании вы следуете одному из этих подходов. Вы работали с Java, было ли это веб-приложение, приложение Windows, консольное приложение или что-то еще? Немного узнать о других типах также может оказаться полезным
2) Средняя работа с картинками - вы смотрели рефакторинг и шаблоны проектирования? Это может быть очень полезно, но может потребоваться немного больше опыта в программировании, чтобы увидеть, как они могут быть полезны.
3) Работа с небольшими изображениями - Изучите различные алгоритмы и поймите различные компромиссы, которые можно сделать при выборе различных реализаций структуры данных, например, связанные списки или массивы. Есть большая белая книга об алгоритмах, которую некоторые используют при их изучении.
Узнайте о передовых методах работы (например, обучающие видео на windowsclient.net). Получите любую проблему и решите ее, используя базу данных в качестве входных данных и базу данных в качестве выходных данных. Начните заново несколько раз. Это максимально близко к сценарию реального мира. Прочтите книги, рекомендованные Джоэлем.
Напишите программы для автоматизации вещей, которые вы делаете вручную ежедневно.
Например, списки дел, ведение учетных записей, проверка RSS-каналов ... список может быть бесконечным. Если вы занимаетесь каким-то бизнесом на стороне, напишите простой код, который поможет вам в этом.
Суть такова:
Похоже, вы с удовольствием пишете программы и являетесь достойным программистом на Java. Так что написание большего количества может быть не самым продуктивным способом изучения нового.
В результате я бы сказал, выучите новый язык - знание более одного языка всегда открывает вам новые концепции. Как java-программист, я бы предложил C / C ++, поскольку они очень популярны, но они заполняют области, в которые не входят «управляемые высокоуровневые» языки, низкоуровневые высокопроизводительные, готовые к работе приложения. Если вы изучите C # (например), вы обнаружите, что просто используете другой диалект java (примерно), и вы не узнаете слишком много.
Если вам не нравится идея C / C ++, используйте вместо этого язык сценариев - bash, VBScript / WMI, perl или python. они будут достаточно разными, чтобы научить вас чему-нибудь хорошему.
Или сделайте и то, и другое!
Вы уже умеете программировать; для того, чтобы подготовиться к реальной работе, самое главное, вероятно, не в том, как лучше программировать, а в том, чтобы научиться тому, что вам придется делать, кроме программирования.
На рабочем месте вы, скорее всего, не будет предложено писать программы типа «запустил и забыл», а будет работать в команде над большими приложениями. Чтобы делать это эффективно, вам необходимо научиться:
Это тоже может быть наиболее эффективно изучено на практике в реальном проекте. Для меня самым большим открытием была работа в группе из 10 студентов в экспериментальном проекте, организованном университетом при некоторой поддержке отрасли. Возможно, вы сможете найти или организовать что-то подобное в своем университете? Если в нем есть кафедра, занимающаяся разработкой программного обеспечения, они должны быть счастливы сделать что-то подобное, если они еще этого не сделали. В противном случае присоединиться к проекту с открытым исходным кодом тоже хорошо.
Возможно, вы сможете найти или организовать что-то подобное в своем университете? Если в нем есть кафедра, занимающаяся разработкой программного обеспечения, они должны быть счастливы сделать что-то подобное, если они еще этого не сделали. В противном случае присоединиться к проекту с открытым исходным кодом тоже хорошо. Возможно, вы сможете найти или организовать что-то подобное в своем университете? Если в нем есть кафедра, занимающаяся разработкой программного обеспечения, они должны быть счастливы сделать что-то подобное, если они еще этого не сделали. В противном случае присоединиться к проекту с открытым исходным кодом тоже хорошо.Помимо выбора интересного проекта и его реализации с нуля, чтение чужого кода также может быть полезным для улучшения ваших навыков. У Скотта Хансельмана есть хорошая серия по чтению кода: Weekly Source Code
Я увидел интересную ссылку на сайт под названием CodeKata , которая может вам помочь. Для быстрого развития ваших навыков важно на самом деле кодировать практические проблемы, с которыми вы, вероятно, столкнетесь в любой реальной работе.
Поскольку вы уже знаете основы программирования и, очевидно, имеете желание учиться, я бы начал любимый проект .
Ничто не заставляло меня узнавать больше о технологии, языке или идее больше, чем наличие довольно сложного домашнего проекта, в который я мог бы вложиться.
Я бы порекомендовал, как уже упоминалось, выбрать проект, который действительно интересует вас. В противном случае он быстро надоест, и вы не поймете, зачем вы над ним работаете. Думаю, было бы разумно сделать проект достаточно нетривиальным. Я всегда находил, что чем менее тривиален проект, над которым я работал, тем больше я узнал и извлекал из него.
Также, если вы живете рядом с колледжем / университетом, исследовательские лаборатории на территории кампуса почти всегда ищут летних стажеров для работы над кодом в одной форме или форме. Некоторые даже заплатят вам. Я делал это в течение 4-5 лет в средней школе и в каком-то университете, и это был отличный опыт обучения.
Очевидно, что участие в проекте с открытым исходным кодом - отличный способ получить опыт работы с другими разработчиками. Ознакомьтесь с материалами на github , sourceforge , bitbucket .
Я бы только предупредил вас, чтобы вы просили помощи и беспокоили основных разработчиков вашего проекта очень заинтересованы, и вы собираетесь придерживаться этого. Обычно разработчиков с открытым исходным кодом, посвятивших себя этому проекту, немного. Их время действительно ценно для общества, и тратить его на кого-то, кто просто собирается лететь ночью и больше никогда не будет замечен, - это своего рода позор.
Вам определенно нужно писать код, чтобы стать лучшим программистом. Если у вас нет конкретной идеи для написания программы, выберите программу с открытым исходным кодом (в идеале, которую вы используете), свяжитесь с ними и узнайте, что им нужно сделать; внести что-то. Исправьте ошибку, внедрите функцию ... начните с малого и двигайтесь вверх. Это поможет вам узнать о работе в команде, написании поддерживаемого кода, предотвращении проблем и работе над полезными задачами. Многое из того, что люди пишут во время обучения программированию, является просто кодом упражнений, а не на самом деле полезным и не представляет чего-либо реального. Вот почему настоящая полезная программа - лучшее, что можно сделать.
Я бы порекомендовал вам использовать многосторонний подход . Чтение книг может увести вас далеко, поскольку они не дают вам практического опыта в разработке приложения с нуля. Программирование теперь гораздо больше связано с написанием кода; вы должны уметь разрабатывать приложения, читать документацию и знать, как удовлетворить потребности клиента, который не знает, как сказать вам, что писать.
Если вы все еще учитесь в колледже, попробуйте найти стажировку в фирме по развитию. Вы получите доступ к людям и ресурсам, у которых уже есть этот опыт. Если вы по какой-то причине не можете пройти стажировку, найдите и найдите друга, который является разработчиком. Влияние того, чтобы иметь дело с кем-то, кто знает, что он делает, чтобы отразить идеи, неизмеримо.
Помимо окружения людей знаниями, вы также должны самостоятельно написать приложение. Выберите то, что вас интересует, но в то же время постарайтесь не усложнять его, вы не хотите расстраивать себя написанием скучного приложения или выбором чего-то, что требует слишком крутого обучения. Помните, что приложение является его ядром, инструментом, который поможет вам в обучении, так что ничего страшного, если оно окажется менее сложным, чем вы себе представляли, или если код, который вы практикуете, не работает.
Навыки программирования - это лишь малая часть того, что делает успешного программиста, ИМХО. Также очень важна возможность читать спецификации, задавать вопросы и взаимодействовать с другими людьми для извлечения информации, необходимой для программирования. Обратите внимание на свои «мягкие» навыки, они очень помогут вам стать успешным программистом в коммерческой среде.
Есть только одна вещь, которая может улучшить ваши навыки как программиста: Программа .
Чтение книг о программировании сродни чтению книг о велоспорте. Это не превратит вас в велосипедиста.
Запрограммируйте то, чем вы будете пользоваться и в чем будете заинтересованы. Затем просто опустите голову и делайте это - читая любую вспомогательную информацию по ходу движения.
Это слово быстро меня беспокоит ... Предлагаю вам прочитать Научитесь программировать за десять лет - Почему все так спешат? ~~ Питер Норвиг
Простите себя, если вы не поджигаете мир через три недели после того, как сели за клавиатуру ... может быть, вам суждено поздно расцвести?
; -)
Из 99 способов стать лучшим разработчиком :
Участие в проектах с открытым исходным кодом оказывает удивительно большое влияние на вашу способность разрабатывать программное обеспечение , в отличие от способности писать код :
процитирую лишь некоторые из них. Некоторые хорошие места для поиска: