Я хочу научиться программировать, ориентируясь на будущее, если хотите. Хотя Windows доминирует на рынке настольных ОС (на данный момент), очевидно, что есть много смысла в изучении ее языков / фреймворков / API и т. Д. - это может измениться, когда появятся новые устройства или Windows выстрелит себе в ногу (более предварительный просмотр Windows 8 не выглядит слишком привлекательно ...).
Буду ли я прав, полагая, что наличие глубоких знаний C / C ++ для внутренней логики / низкоуровневого программирования и т. П. В сочетании с чрезвычайно переносимым языком, таким как Java для GUI и т. Д., Станет хорошей основой для разработки программного обеспечения что окажется полезным на большинстве систем? - Я говорю о настольных ПК, планшетах, телефонах.
источник
Ответы:
Если вы хотите быть на будущее, лучший совет, который я могу вам дать, - не погружаться в технологию.
Так что не изучайте API вслепую. Узнайте, как они задуманы. Каковы философии за сценой? Каковы их преимущества и недостатки? Подумайте, программное обеспечение в целом, а не конкретная технология.
Вы также можете работать над хорошей концепцией программы, переходя на ООП, и АОП - это хороший выбор ИМО. Но не просто понять механизм, а по-настоящему поработать над философией механизма.
Не пренебрегайте общими компьютерными науками, такими как структуры данных и алгоритмы, потому что они являются межотраслевым знанием, которое всегда полезно.
Также пойти на хорошие практики. У вас часто есть дюжина способов сделать что-то, но большинство из них - дерьмо: подвержено ошибкам, трудно поддерживать, трудно понять позже или другим программистом и т. Д. , , Обычно код сложнее читать, чем писать. Так что научитесь тратить немного больше усилий на написание, чтобы облегчить чтение (потому что вы будете читать код больше, чем пишете).
Изучите эффективные методы отладки (разумное использование журнала и отладчика) и тестирования (как написать код, который можно легко тестировать модулем, и как автоматизировать эти тесты).
Тогда вам понадобится общий технологический фон. Я говорю об очень обширных знаниях, таких как, как работает процессор (хорошее начало кеша или предсказание переходов), о системах UNIX, о сетевых протоколах, таких как IP, TCP и Ethernet и т. Д. , ,
В конце концов, научитесь учиться. Если вы знаете, как учиться, то вы можете адаптироваться.
Вам понадобятся глубокие знания в конкретных технологиях, чтобы найти работу, но они очень быстро устарели (например, подумайте о COBOL или веб-программировании во время войны IE / Netscape). Так что не надейтесь на то, что они ориентированы на будущее. Они будут ключевыми для найма, но определенно не то, что делает великого программиста, а то, что сделает ваши навыки долговечными со временем.
РЕДАКТИРОВАТЬ: Если вы только начинаете, вы должны окончательно сделать что-то. Ничего действительно. Игра вроде тетриса или змеи - хорошее начало и веселье. Если у вас ничего не получится, вы потратите много времени на обучение и действительно не получите опыта, необходимого для полного понимания того, что вы изучаете.
Давайте подадим пример с шаблонами проектирования. Шаблоны дизайна великолепны, и вы должны их окончательно использовать. Но при чрезмерном использовании они сделают ваш код сложным и трудным для понимания. Вам придется столкнуться с проблемой, которую решает шаблон проектирования, и потерять некоторое время, пытаясь решить его или его побочные эффекты, чтобы полностью понять, что такое шаблон проектирования. Шаблоны проектирования должны использоваться в качестве небольших рефакторингов с течением времени по мере роста кода. И вы будете знать, когда нужен шаблон проектирования, когда выгода от него больше, чем сложность кода, вызванная его использованием. Это требует опыта.
Так что, определенно, делайте вещи, они учатся на своих ошибках. Я не могу настаивать больше: ПОЛУЧИТЕ СДЕЛКИ !
источник
Что отличает хороших программистов от плохих, так это их способность программировать на ЛЮБОМ языке. Как отмечали другие авторы, знание любого значимого объектно-ориентированного языка даст вам инструменты для создания великолепных программ и будет востребовано.
Также, если вы еще учитесь в школе, обязательно посещайте уроки письма. Лучшие инженеры и программисты также хорошо передают свои идеи.
Как только вы начнете работать, лучшее, что можно сделать, чтобы избежать устаревания, это идти в ногу с современными тенденциями. Не бойтесь оставить работу для другой, если они не используют текущую технологию или имеют ужасный процесс и т. Д. Худшее, что вы можете сделать для своей карьеры, - это взять работу, на которой вы работаете со старой технологией или со слабыми процессами.
источник
Ответ от @deadalnix хорош. Я бы добавил к этому три вещи:
источник
Поскольку вы в начале, я бы сказал, просто выучить язык, не важно, какой. Трудность не в самом языке (синтаксисе), а в понимании концепций; и эти общие концепции программирования применимы ко всем языкам программирования, поэтому изучение вашего второго, третьего и четвертого (...) языков будет намного проще.
Итак, в начале не слишком задумывайтесь о том, чтобы быть «ориентированным на будущее». Тем не менее, по мере продвижения, старайтесь овладеть языками, которые сильно отличаются друг от друга. По сути, (как вы сказали) вам должен пригодиться низкоуровневый (-ish) язык, такой как C / C ++, высокоуровневый язык программирования, такой как Java, а также язык сценариев (Python, Ruby и т. Д.). Если вы хотите заняться действительно продвинутыми вещами, вы также должны знать Assembly.
Но не напрягайте себя слишком много об этом прямо сейчас. Обучение программированию занимает годы. На данный момент, просто выберите язык, такой как Java или C # или любой другой и пойти на это. :)
источник
If you want to go into the really advanced stuff you must also know Assembly
- Вы можете сделать это на любом уровне, проблемы просто разные.Нет. Ничего из этого не поможет.
Твердое знание структур данных и алгоритмов - независимо от какого-либо конкретного языка программирования - более ценно, чем «низкоуровневое программирование и тому подобное».
«Чрезвычайно переносимый язык, такой как Java» такой же переносимый, как C, и не помогает. Next Big Thing будет настолько отличаться от этих языков , что ваш супер-портативный Java будет ответственность, не является активом.
Mac OS (настольный компьютер, планшет и телефон) - все это сделано в Objective C. Это может быть место для начала.
Windows (рабочий стол, стол и телефон) все сделано в C #. Это может быть место для начала.
источник