Будущее, когда я учусь программировать [закрыто]

10

Я хочу научиться программировать, ориентируясь на будущее, если хотите. Хотя Windows доминирует на рынке настольных ОС (на данный момент), очевидно, что есть много смысла в изучении ее языков / фреймворков / API и т. Д. - это может измениться, когда появятся новые устройства или Windows выстрелит себе в ногу (более предварительный просмотр Windows 8 не выглядит слишком привлекательно ...).

Буду ли я прав, полагая, что наличие глубоких знаний C / C ++ для внутренней логики / низкоуровневого программирования и т. П. В сочетании с чрезвычайно переносимым языком, таким как Java для GUI и т. Д., Станет хорошей основой для разработки программного обеспечения что окажется полезным на большинстве систем? - Я говорю о настольных ПК, планшетах, телефонах.

анонимное
источник
11
Там нет такой вещи
Иов
Постройте логово и заполните его книгами.
Эдвард Стрендж,
4
Постройте логово и заполните его консервированными продуктами. Самый перспективный программист - это программист, который жив после апокалипсиса.
Том Андерсон
1
Не изучайте языки программирования или кодирование, но в основном изучайте программирование, и это занимает много лет , почти десять, и вы должны продолжать изучать всю свою жизнь
Старынкевич,

Ответы:

31

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

Так что не изучайте API вслепую. Узнайте, как они задуманы. Каковы философии за сценой? Каковы их преимущества и недостатки? Подумайте, программное обеспечение в целом, а не конкретная технология.

Вы также можете работать над хорошей концепцией программы, переходя на ООП, и АОП - это хороший выбор ИМО. Но не просто понять механизм, а по-настоящему поработать над философией механизма.

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

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

Изучите эффективные методы отладки (разумное использование журнала и отладчика) и тестирования (как написать код, который можно легко тестировать модулем, и как автоматизировать эти тесты).

Тогда вам понадобится общий технологический фон. Я говорю об очень обширных знаниях, таких как, как работает процессор (хорошее начало кеша или предсказание переходов), о системах UNIX, о сетевых протоколах, таких как IP, TCP и Ethernet и т. Д. , ,

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

Вам понадобятся глубокие знания в конкретных технологиях, чтобы найти работу, но они очень быстро устарели (например, подумайте о COBOL или веб-программировании во время войны IE / Netscape). Так что не надейтесь на то, что они ориентированы на будущее. Они будут ключевыми для найма, но определенно не то, что делает великого программиста, а то, что сделает ваши навыки долговечными со временем.

РЕДАКТИРОВАТЬ: Если вы только начинаете, вы должны окончательно сделать что-то. Ничего действительно. Игра вроде тетриса или змеи - хорошее начало и веселье. Если у вас ничего не получится, вы потратите много времени на обучение и действительно не получите опыта, необходимого для полного понимания того, что вы изучаете.

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

Так что, определенно, делайте вещи, они учатся на своих ошибках. Я не могу настаивать больше: ПОЛУЧИТЕ СДЕЛКИ !

deadalnix
источник
Хорошо ... Отличный * ответ и кое-что, что я понимаю - я понимаю необходимость понимать тему «программирования» в целом, а не каждую из упомянутых вами тем. Я не слишком беспокоюсь о поиске работы в этой области, поскольку у меня есть хорошо оплачиваемая компания, управляющая сайтом электронной коммерции, которым я определенно доволен в обозримом будущем. Мой интерес к программированию я бы отнес к серьезным увлечениям, хотя я бы хотел использовать его для улучшения рабочего процесса, как моего, так и другого.
Аноним
Добавлено редактирование, чтобы сделать вещи понятнее с точки зрения новичка.
Deadalnix
4

Что отличает хороших программистов от плохих, так это их способность программировать на ЛЮБОМ языке. Как отмечали другие авторы, знание любого значимого объектно-ориентированного языка даст вам инструменты для создания великолепных программ и будет востребовано.

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

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

Билл Липер
источник
Я ценю хорошее знание концепций программирования, чтобы быть хорошим «в этой игре», но знание реального синтаксиса языка / стандартной библиотеки и того, что еще не доказано, важно для использования всех возможностей языка (где это уместно). К сожалению, я еще не в школе, я работаю - хотя, как я уже сказал в предыдущем комментарии, мне довольно хорошо платят, поэтому я не слишком беспокоюсь об этом. Спасибо за ответ. =)
Аноним
4

Ответ от @deadalnix хорош. Я бы добавил к этому три вещи:

  1. многократно используемая информация исходит из середины, а не из крайностей. Минский подробно описывает это в своей книге «Общество разума», поэтому я просто подытожу это следующим образом: верхний слой слишком близок к конкретному решению, и большая часть его не может быть применена к следующей проблеме, тогда как нижний слой слишком близок к конкретная платформа для большей части этого, чтобы применить к следующей проблеме. Средний уровень - это место, где находится повторно используемая информация - алгоритмы, шаблоны, таксономии, тактики, стратегии, методы, организации, протоколы и т. Д., Которые обычно полезны для решения аналогичных проблем независимо от домена (верхний уровень) или платформы (нижний уровень). ). Примечание: эти уровни не имеют ничего общего с 3-уровневой архитектурой, здесь мы говорим о семантике проблема-пространство / пространство решения.
  2. вы не будете знать, что является общим / общим / повторно используемым, пока не увидите по крайней мере два его экземпляра. Итак, изучите внутреннюю работу Windows, затем изучите внутреннюю работу linux / unix и сравните их. Общие вещи многоразовые. Разные вещи - это дизайнерские решения, которые также могут привести к многократному пониманию.
  3. для любой конкретной ситуации или проблемы подумайте о том, как вы можете реализовать решение, затем сравните свое решение с креслом с фактическим решением и постарайтесь понять возможные причины различий.
Стивен А. Лоу
источник
Большие дополнения!
Deadalnix
2

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

Итак, в начале не слишком задумывайтесь о том, чтобы быть «ориентированным на будущее». Тем не менее, по мере продвижения, старайтесь овладеть языками, которые сильно отличаются друг от друга. По сути, (как вы сказали) вам должен пригодиться низкоуровневый (-ish) язык, такой как C / C ++, высокоуровневый язык программирования, такой как Java, а также язык сценариев (Python, Ruby и т. Д.). Если вы хотите заняться действительно продвинутыми вещами, вы также должны знать Assembly.

Но не напрягайте себя слишком много об этом прямо сейчас. Обучение программированию занимает годы. На данный момент, просто выберите язык, такой как Java или C # или любой другой и пойти на это. :)

Павел
источник
Мне нравится «выбрать один» и пойти на это отношение ... Я, вероятно, приму это. Можно или нет выбрать один язык низкого уровня (C), один язык высокого уровня (Java) и один язык сценариев (Python) и изучить все 3 одновременно?
Аноним
Вы только начинаете программировать? Тогда не изучайте больше чем один язык за раз, это только запутает Вас. В начале вам нужно изучить понятия, а не языки. Вы должны переходить на новые языки только тогда, когда это требуется. Например, я только недавно почувствовал необходимость перейти на языки сценариев, и это потому, что я решил сделать свою игру сценарием с Python.
Пол
Я бы не сказал, что только начинаю - я знаю html / css годами (хотя они на самом деле не подходят / не имеют значения) и уже несколько месяцев создаю сайты на PHP / MySQL. Веб-разработка, с которой я могу «обойтись», я занимаюсь разработкой программного обеспечения. Я прислушаюсь к тому, что ты говоришь.
Аноним
If you want to go into the really advanced stuff you must also know Assembly- Вы можете сделать это на любом уровне, проблемы просто разные.
sixtyfootersdude
1

Буду ли я прав, полагая, что наличие глубоких знаний C / C ++ для внутренней логики / низкоуровневого программирования и т. П. В сочетании с чрезвычайно переносимым языком, таким как Java для GUI и т. Д., Станет хорошей основой для разработки программного обеспечения что окажется полезным на большинстве систем?

Я говорю о настольных ПК, планшетах, телефонах.

Нет. Ничего из этого не поможет.

Твердое знание структур данных и алгоритмов - независимо от какого-либо конкретного языка программирования - более ценно, чем «низкоуровневое программирование и тому подобное».

«Чрезвычайно переносимый язык, такой как Java» такой же переносимый, как C, и не помогает. Next Big Thing будет настолько отличаться от этих языков , что ваш супер-портативный Java будет ответственность, не является активом.

Mac OS (настольный компьютер, планшет и телефон) - все это сделано в Objective C. Это может быть место для начала.

Windows (рабочий стол, стол и телефон) все сделано в C #. Это может быть место для начала.

С. Лотт
источник
Я сравнивал Java с C как с переносимыми языками - Java низкоуровневый и высокоуровневый, соответственно, что является своего рода правдой ... Как вы только что сказали, Mac OS = Obj-C, Windows = C #, что где я не хочу специализироваться на одном и отрезать свои варианты, или оба, и быть «мастером ничто», если вы поймете мой дрейф. Я ценю то, что вы говорите, но твердое знание структур данных и алгоритмов без знания языка программирования так же бесполезно, как и знание языка программирования без последнего.
Аноним
@ Крис Бриджетт: Вы полностью ошибаетесь. Есть универсальные основы, а язык программирования - ни тот, ни другой. Сначала изучите основы. Тогда язык (или ОС) просто застывает на торте. Основы являются тортом и ориентированы на будущее.
С.Лотт