Я новичок в программировании и я читаю книги, учусь, читаю статьи и еще много чего. Я получаю отличные результаты с тех пор, как начал изучать программирование, и когда я был новичком, я думал, что знаю все о программировании, но, узнав больше, я понял, насколько это сложное поле (На самом деле все поля сложны, но дело не в этом).
В настоящее время я написал функциональное программное обеспечение, и я выучил основы 3 языков, и я на среднем уровне только на одном языке. Когда я смотрю на сложные вещи, такие как MYSQL, или программирование на OpenGL, или даже на код Visual C ++, это вызывает у меня головную боль, и даже при визуализации исходного кода HTML на многих веб-сайтах (большинство исходных кодов на веб-сайтах, которые видит Google Chrome, кажутся очень грязными и неорганизованными ) это смущает меня до самого предела моего мозга. Сначала все кажется простым, но когда я смотрю на эти продвинутые вещи, я просто задаюсь вопросом, как можно так многому научиться.
Вкратце, вопрос в том, станут ли эти вещи понятнее программисту по мере его продвижения в карьере. Стали ли сложные темы, как перечисленные выше (OpenGL, MySQL, продвинутые html-сайты), легче читать, писать и понимать по мере того, как вы узнаете больше, или они просто усложняются? Как вы можете бороться с этим чувством, что вы муравей в мире программирования, и эта штука может вас раздавить?
Ответы:
Краткий ответ: нет.
Длинный ответ:
Читать код других людей становится проще, да. Но только чтение. По мере того, как вы приобретаете опыт и навыки, ваши личные требования как разработчика растут.
Вы не хотите просто писать код. Вы хотите написать красивый код .
Вы не предполагаете, что ваш код работает в идеальных условиях . Вы начинаете думать обо всех плохих вещах, которые могут случиться при запуске кода, обрабатывать исключения, думать о проблемах с оборудованием, задержке в сети, и проблема растет по мере роста ваших навыков.
Вы не читаете и не пишете код на единственном языке, который знаете. Как опытный разработчик, вы знаете, что для решения этой конкретной проблемы, которая у вас есть сейчас, функциональное программирование является гораздо лучшей альтернативой , поэтому вы должны теперь читать и писать код на языке функционального программирования.
Вы не ограничиваете себя небольшим набором библиотек, которые вы знаете. Если вы пишете код на C #, вы хотите знать и использовать все возможности многих библиотек .NET Framework.
Вы больше не используете блокнот. Вам нужна мощная IDE , и вы хотите знать, как выполнять модульное тестирование кода, что такое метрики кода и что означают сотни вариантов и окон, которые ваша IDE может показать вам.
Вы не хотите скромно ограничивать себя базовым набором инструментов, которые дает вам язык . В C # вы хотите использовать дженерики, контракты кода, рефлексию, разработку на основе событий, функциональные аспекты с LINQ, расширения Reactive и массу других вещей, которые вы изучили, и все это в одном проекте, если эти вещи помогут вам лучше писать код.
Вы не начинаете писать код . Вы тратите от 80 до 90% своего времени на сбор требований , создание архитектуры вашего приложения, написание модульных тестов, написание документации и т. Д., И только от 10 до 20% своего времени на написание реального кода .
Вы заботитесь о безопасности . Вы знаете правовые вопросы, которые могут возникнуть с данными, которыми манипулируют ваши приложения. Вы знаете, что такое ITIL . Вы знаете некоторые стандарты ISO и ежедневно применяете их в своей работе.
Да, вы приобретаете опыт и навыки, и вам становится легче решать данную проблему со всеми приобретенными вами знаниями и интеллектуальными способностями. Но проблемы, которые вы должны решать, тоже растут, и вы просто не в восторге от решения проблем того уровня, который я решил, когда начал программировать.
Приобретая навыки, вы также получаете представление о сложности разработки программного обеспечения, изучаете аспекты, которые вы даже не могли себе представить, когда начинали изучать программирование, и вы хотите и должны применять все, что вы изучаете ежедневно.
Короче говоря:
В первый день, когда вы начинаете учиться программировать, задача перечисления всех чисел от 1 до 100, делимых на два, очень сложна: вы только что узнали, как создавать циклы и отображать числа на экране, но вы не знаете, как найти число делится на два.
Десять лет спустя это же упражнение кажется чрезвычайно простым. Но также, спустя десять лет, вы пишете приложения, которые должны использовать транзакции, размещаться на нескольких серверах и должны правильно обрабатывать состояние сеанса между серверами, а также хранить банковские реквизиты ваших клиентов со всеми вытекающими отсюда аспектами безопасности и правовыми аспектами.
... И вы задаетесь вопросом: "Как я мог это сделать?" точно так же, как вы это сделали десять лет назад, когда вам приходилось отображать числа на экране с циклом.
Когда вам становится легко в домене, это означает, что вы достигли совершенства в этом домене, или вам уже все равно.
Достичь совершенства в такой обширной области, как разработка программного обеспечения, невозможно, независимо от того, насколько вы умны.
источник
В детстве вы учитесь говорить, а затем читать на своем родном языке. Простая механика этого - сначала борьба, но в какой-то момент она проходит свободно. Тем не менее, у вас все еще есть бесконечный запас книг, которые вы еще не читали, и по некоторым темам сначала нужно увеличить словарный запас, чтобы понять книгу.
То же самое касается компьютерного программирования. В какой-то момент сам язык перестает ощущаться как иностранный, но на этом языке еще много написано, чего вы еще не знаете. Но все доступно для вас с некоторыми усилиями.
Некоторые задания по программированию являются очень повторяющимися, в основном, повторное внедрение очень похожего программного обеспечения для разных клиентов. На этих работах вы можете почувствовать, что попали на плато обучения. На других работах вы все время делаете что-то новое и уникальное, и никогда не переставаете учиться новому.
источник
Здесь уже есть несколько действительно хороших ответов, но я подумал, что могу добавить еще пару коротких моментов:
Это называется эффектом Даннинга-Крюгера . Это чрезвычайно распространено среди начинающих программистов, и фактически, новичков во многих областях.
Люди, которые писали эти веб-сайты, хотели, чтобы вы могли их понять? Возможно нет. В их интересах иметь код, который трудно понять.
По специализации . Я эксперт в чрезвычайно узкой области: разработка и реализация семантических анализаторов компилятора C #. Если бы я потратил пятнадцать лет на изучение OpenGL, XML, HTML или чего-то еще, я был бы экспертом в этом и был бы озадачен семантическими анализаторами. Но я этого не сделал, и поэтому у меня есть только очень базовое понимание OpenGL, XML и HTML.
Да, потому что вы начинаете видеть большие образцы. Взять, к примеру, OpenGL. Вы, вероятно, видели множество «библиотек API» - большие куски связанного кода, где способ взаимодействия с кодом заключается в вызове группы именованных функций с определенными аргументами. И вы можете получить базовое понимание OpenGL, просто поняв, что это API.
Когда вы приобрели больше опыта и увидели множество различных методов программирования, вы понимаете, что, казалось бы, не связанные технологии - скажем, OpenGL и LINQ в C # - имеют общие черты. Оба являются API-интерфейсами, в которых вы создаете рабочие процессы, которые передают данные, и в которых вы можете выполнять оптимизаторы и другие преобразования в рабочем процессе разнообразными и интересными способами. Как только у вас есть эта концепция в вашем наборе инструментов, внезапно становится намного проще задействовать всю мощь любого API, использующего этот шаблон.
Они становятся и проще, и сложнее. Проще, потому что, как я уже сказал, вы начинаете распознавать более широкие шаблоны мышления, лежащие в основе конструкции системы, что позволяет вам использовать систему более эффективно. Сложнее, потому что теперь вы можете использовать систему для решения более сложных проблем , и вы начинаете сталкиваться с ограничениями системы.
Ты муравей; мы все муравьи. Но это не та нога, которая тебя раздавливает; это мир, который вы можете исследовать, жить, извлекать выгоду и улучшать. Вы, муравей, можете исследовать только крошечную, крошечную его часть. Выберите понравившуюся вам часть, где вы сможете добавить реальную ценность и стать экспертом в этом.
источник
Краткий ответ, да.
Со временем и выдержкой эти вещи легче понять.
Помните, что когда вы просматриваете сайты с помощью инструментов dev в вашем браузере, они часто создаются фреймворком. Пусть это будет любое количество вещей ... ASP.NET, JSP, RoR, Django, ... кто знает. Некоторые из этих структур производят более чистый код, чем другие.
В заключение ... воздействие приводит к мастерству. Нет способа уничтожить это чувство. Просто опыт и обучение. Требуется время, чтобы перейти, получить знания в предметной области и освоить навыки, используемые в вашей среде.
источник
Я согласен с некоторыми из ответов, которые уже даны, но я думаю, что они также лежат в основе, не обсуждаемой при чтении кода. Когда я впервые начал смотреть на некоторый открытый исходный код, он казался ошеломляющим и огромным. Но угадайте что? это всегда будет огромным. В какой-то момент вы понимаете, что вы лучше извлекаете то, что конкретно хотите знать, и двигаетесь дальше.
Однако один пример, который вы привели, рассматривал кучу HTML-кода:
Почему вы смотрите на HTML-код? Вероятно, не потому, что вы хотите изучить HTML весь сайт. Вероятно, есть определенный трюк, который вы надеетесь поднять. В этом случае просто найдите соответствующий HTML с помощью такого инструмента, как firebug.
Если вы действительно хотите узнать, как создается весь сайт, вы поняли, что визуализированный HTML - это не способ сделать это. Вам было бы лучше взглянуть на проект с открытым исходным кодом, использующий аналогичную технологию. Однако попытка выучить весь код проекта не так полезна, как кажется. Это скучно, отнимает много времени, легко забыть то, что вы узнали, и вам нечего показать в конце. Вы будете меньше учиться, читая код других людей бесконечно, и гораздо больше, используя конкретные интересные фрагменты этого кода для написания плагинов, дополнений к функциям или в качестве основы и рекомендаций для своих собственных проектов.
Попробуйте выучить абсолютный минимум, чтобы получить что-то свое. Возвращайтесь к своим ориентирам только тогда, когда вы застряли или хотите узнать что-то новое. Это противоречит общепринятому мнению, что вы должны понимать все, иначе программируете в темноте. Но, в конце концов, вы понимаете, что цель невозможна, и вы учитесь балансировать цели - знать все и цель - фактически закончить то, над чем вы работаете.
источник
Краткий ответ - ДА, но многое зависит от того, как вы определяете опыт.
Я думаю, что есть как минимум 3 части для разработки. Когда вы становитесь лучше в каждом сегменте, некоторые вещи становятся яснее.
Понимание требований бизнеса . Это дает вам лучший вид приложения с высоты птичьего полета. Чем лучше вы поймете, почему бизнес-правила такие, какие они есть, тем быстрее вы поймете, почему определенные вещи выполняются определенным образом. Например, ваши клиенты должны соблюдать государственное постановление X, поэтому им нужно подготовить документ Y, поэтому им нужна эта, казалось бы, бесполезная информация.
Понимание ТЕХНИЧЕСКИХ требований . Это похоже на # 1, за исключением того, что нужно больше понимать, почему на техническом уровне. У некоторых инструментов и технологий есть свои причуды, пока вы не разберетесь с ними, пока трудно понять, почему все делается определенным образом. Это становится более очевидным, когда вы имеете дело с устаревшими системами. Например, приложение использует определенную служебную шину, которая принимает только XML.
Понимание требований ЯЗЫКА . Как уже упоминали другие, чем опытнее вы владеете языком, тем быстрее вы сможете прочитать, чего пытался достичь оригинальный кодер. Но без № 1 и № 2 вы обнаружите, что эта увеличенная способность достигает пика довольно быстро.
Постарайтесь участвовать во многих аспектах разработки, потому что это действительно не станет легче, пока вы не пройдете все области хотя бы несколько раз.
Помните, что совершенство (и цель) в чужом коде всегда относительно # 1 и # 2. Это основные причины того, почему код находится в том состоянии, в котором он находится. Частые изменения в этих двух областях являются основной причиной, по которой мы постоянно получаем код спагетти. Поэтому, если вы не разбираетесь в деловых и технических требованиях, задача чтения кода всегда будет королевской PITA.
источник
Это становится проще и сложнее одновременно!
переведено на разработку программного обеспечения
источник
Я собираюсь пойти немного другим путем, чем другие респонденты; Я считаю, что на самом деле чтение и написание кода становятся проще, чем больше, и я продемонстрирую это на простой аналогии.
Вспомните, когда вы впервые начали заниматься спортом. В самом начале, когда вы изучали первый вид спорта, базовая координация простых задач одного вида спорта, вероятно, казалась действительно сложной. По мере того, как вы становитесь немного более опытным, вы начинаете осваивать простые задачи, чтобы вам больше не приходилось думать о них, и вы заметили, что есть более сложные задачи, на которые вы могли бы обратить внимание (например, смотреть, как другие игроки предсказывают) их поведение).
Затем, когда вы попробовали свои силы в другом виде спорта, вы, вероятно, обнаружили, что не сильно отстали, когда начинали. Поймать баскетбол очень отличается от ловли бейсбола, но кому-то, кто освоил один из них, будет гораздо легче подобрать другой, чем человеку, который никогда не делал ни одного раньше. Имея опыт занятий вторым видом спорта, вы обнаружили, что первый вид спорта дает вам как специфические, так и общие навыки. Специальные навыки (ловля баскетбола) полезны только в своей области, но общие навыки (отслеживание быстро движущегося объекта, приближающегося в трехмерном пространстве и разработка плана для борьбы с ним) делают вас лучше во всех связанных областях.
Какое это имеет отношение к программированию? Первая строка кода, которую вы читаете, открывает вам мир, построенный на определенных правилах. Вы изучили эти правила (синтаксис и идиомы этого языка) как особые навыки, но вы также узнали некоторые ценные общие навыки: понимание того, как работают компьютеры внутри, и как выражать свои намерения так, как компьютер может их понять. Каждый новый язык, который вы изучаете, дает вам новые специфические навыки, но он также усиливает ваши общие навыки и помогает вам увидеть шаблоны, просматриваемые через все компьютерные языки, такие как залежи минералов, наслоенные вдоль стены каньона. Когда вы по-настоящему познакомитесь с несколькими разными языками, вы начнете распознавать «форму» практически любого кода, если простите за неопределенность, даже если вы ничего не знаете о языке, на котором он написан.
Например, все три языка, которые вы упомянули (MYSQL, OpenGL, C ++), имеют некоторые общие особенности:
Чем больше вы программируете, тем больше вы понимаете, что независимо от того, каков шар, он все равно просто приближается к вам, и вы знаете, что с ним делать, не думая об этом слишком много. Все программирование - это попытка выразить свои намерения так, чтобы компьютер мог их понять; выучите достаточно, и вы начнете читать намерения вместо кода.
PS- Каждый раз, когда вы, наконец, начинаете чувствовать, что знаете свой путь, вы сталкиваетесь с чем-то, что абсолютно ломает ваш мозг и заставляет вас чувствовать себя новичком. Это то, что мы любим в этой работе, всегда есть чему поучиться.
источник
Краткий ответ: да , в общем
Однако вы не станете специалистом, если будете обобщать. Стать специалистом также означает осознать все то, чего вы не знаете: это может быть ошеломляющим чувством.
По мере движения во времени вы приобретаете опыт.
По мере продвижения во времени другие языки / шаблоны и т. Д. Развиваются параллельно с вашим развитием.
Еще одна переменная в вашем вопросе, если вы приобретаете значимый опыт в отношении отрасли, поскольку она также проходит через то же постоянное время. Технологическая индустрия является движущейся мишенью и в отличие от большинства других отраслей.
Хороший вопрос также может быть: вы слишком толстый или слишком толстый на определенном языке.
источник
Это бесконечный источник удивления (и беспокойства), сколько существует компьютерных языков и степень, в которой они продолжают изменяться. Добавьте к этому количество различных платформ на каждом языке и для каждой платформы, широкий спектр доступных библиотек и плагинов. Добавьте к этому количество редакторов кода и IDE.
Все эти варианты имеют два аспекта сложности.
У них также есть одна общая черта. Тьюринговая полнота. С достаточным усилием со стороны программиста, все они могут быть использованы для решения всех проблем! Так что, если вы начнете с языка, подобного C (маленький вокаб, сложный синтаксис и почти без абстракций), вы определенно почувствуете, что можете делать что угодно (совершенно правильно).
Затем переключитесь на «простые вещи», такие как CSS, HTML, Javascript и, возможно, также на фреймворки, такие как Bootstrap и React, и ваш мозг заработает, как у Альберта Эйнштейна. Люди думают: «Я знаю французский, поэтому учить немецкий язык должно быть легко». Нет!
Многие программные абстракции могут быть изучены из шаблонов программного обеспечения . Есть несколько книг, посвященных этой теме. Шаблоны повсюду, не зависят от языка и могут быть изучены и поняты один раз . Если вы знаете свои шаблоны, вы можете использовать их на любом языке и распознавать их, когда они встроены в языки и чаще в различные структуры.
Большинству людей требуется 1-2 года, чтобы овладеть новым языком, и работодатели это знают. Вот почему они не нанимают людей, не имеющих опыта работы со своим языком, потому что новый сотрудник будет тратить много времени на борьбу с языком, а не на то, чтобы реально решить деловые проблемы.
Таким образом, принципы / абстракции в области компьютерных наук, шаблоны программного обеспечения и тип проблем, с которыми вы сталкиваетесь, медленно меняются. Вы можете учиться один раз и постепенно накапливать новые знания. И наоборот, компьютерные языки, платформы, так называемые «экосистемы» и библиотеки компонентов меняются очень быстро, как и все инструменты, которые их окружают. Здесь ожидайте, что темп обучения будет медленным и отнимает много времени!
источник
Когда какой-либо прогресс достигнут, мы не учимся и заново изучаем то, что, как мы думали, мы знали раньше. - Генри Дэвид Торо
Есть история о мастере дзен и переполненной чашке .
Иногда нам нужно отпустить наши предвзятые представления и мнения из прошлого, чтобы мы могли позволить себе изучать новые концепции.
Помните: если вы чувствуете себя подавленным новой концепцией, вам нужно искать многих учителей.
Недавно, когда мне дали задание обновить какое-то внутреннее программное обеспечение компании, использующее язык сценариев, я был незнаком. В начале это было очень напряженно. Однако после того, как я изменил свое отношение, я начал находить ресурсы, объясняющие синтаксис и основные понятия. Я завершил проект и теперь использую этот язык сценариев как один из моих инструментов, чтобы добиться большего.
Ваше отношение имеет все значение.
источник