Недавно у меня был первый экзамен по программированию ... и я его провалил. Не очень хорошо. Я могу винить только себя, потому что вне студенческого времени я почти ничего не делал.
Теперь у меня есть еще один подход к летнему времени, и я не позволю этому случиться снова. Уже пару недель я читаю, читаю и еще читаю. Я продолжаю изучать старые вещи, которые я пропустил, и новые вещи, которые мы делаем. Итак, очевидно, я могу заметить огромную разницу в моем понимании языка. Тем не менее, это об этом. Я могу читать код, и теперь у меня есть представление о том, что происходит в коде ... но когда дело доходит до написания самого кода, я просто не понимаю. Как будто я никогда не знаю, какой подход выбрать, и никогда не смогу полностью понять вопросы.
Я каждый день много читаю (около 5-6 часов в течение последнего месяца или около того) каждый день ... Но, открывая IDE, я всегда чувствую себя обреченным, это действительно демотивирует. Тем более, что у меня есть знания об узлах, списках, массивах, интерфейсах и т. Д., Кроме того, что я читаю их на странице, которая об этом. Я могу точно указать на все, что происходит в программе, поэтому аннотирование кода предварительной выборки мне кажется прекрасным ... но написание собственного кода - другая история ...
источник
Ответы:
Вы узнаете, как писать программы, написав программы.
Но ты должен начать с малого, чувак.
Оттуда начните строить ...
а потом...
... и так далее. Как только вы поймете основы работы объектов, вам будет намного легче писать большие программы.
источник
Отличный вопрос! Важно понимать, что у вас есть несколько кривых обучения, чтобы подняться. Просто для того, чтобы вы не думали, что изучаете только язык программирования. Вы делаете немного больше, чем это.
Вы узнаете о ...
Я подозреваю, что это третий пункт, где вы боретесь. Вы учитесь говорить вещи в коде (синтаксис), но на самом деле вы спрашиваете нас, что я должен говорить в коде. Есть ли правильный и неправильный способ делать вещи?
Я хотел бы предложить вам принять вызов. Посмотрите на следующее как упражнение.
http://en.wikipedia.org/wiki/Eight_queens_puzzle
Теперь это сложная задача. Вы должны поместить восемь королев на шахматную доску, чтобы каждая из них была в безопасности друг от друга.
Так что, как ученик, это может быть непосильным, однако вы можете посмотреть на эту проблему и использовать ее, чтобы научиться писать код.
Вот стратегия, чтобы попробовать ...
Перефразировать проблему намного проще, чем заявленная проблема, подлежащая решению . Забудь восемь королев. Сосредоточиться только на одном. Узнайте, как написать код для представления шахматной доски в памяти, поместите одну королеву на эту доску и затем отобразите ее пользователю на экране в виде простого текста.
После того, как вы сделали удар в Шаге 1. Поместите две королевы так, чтобы они оба были в безопасности.
Наконец, попытайтесь разместить более 2 ферзей на доске, чтобы они все были в безопасности.
Вышеуказанные шаги являются поворотом стратегии проектирования, называемой пошаговым уточнением. Это немного старая школа с точки зрения дизайна, но она быстро перенесет вас с пустого экрана на интересный код.
Существуют и другие стратегии проектирования и реализации: тестовое проектирование, объектно-ориентированное проектирование и шаблоны проектирования.
Со временем вы добавите эти стратегии в арсенал и будете использовать их по мере необходимости. Чем больше дизайнерских стратегий вы изучаете и практикуете, тем легче вам станет.
Пусть источник будет с вами.
источник
Быстрое Предисловие
Учись на практике: знание против ноу-хау
Там огромная разница в знаниях и ноу-хау. Для новых учеников является распространенной ошибкой думать, что, поскольку они могут «понимать» программу во время ее чтения, они на самом деле понимают, почему программа написана так, как она есть.
И единственный способ добраться до этой второй части - тренироваться. Сядьте, откройте текстовый редактор, командную строку и приступайте к ней.
Программирование в малом
Вероятно (и ожидается), что на этом этапе ваша способность понимать, как несколько сложных программных компонентов взаимодействуют друг с другом, ограничена. И это на самом деле хорошо, так как заставляет вас начинать с основ. Не прыгайте с пистолетом и двигайтесь в правильном темпе: начните с небольших упражнений для небольших задач.
Честно говоря, я никогда не был убежден, что начинать учиться программированию на Java - это путь (я раньше преподавал программирование для жизни в университете, и до сих пор время от времени учусь в частной школе). Само по себе это слишком сложно, чтобы начать, и большинство книг по Java будут выглядеть довольно устрашающими. Тем не менее, это, безусловно, может быть сделано (по крайней мере, для некоторых областей этого глобального знания, которые мы ожидаем от программистов), если вы ограничиваетесь обучением шаг за шагом.
книги
Поскольку вы настроены на Java, и если вам нужна приличная книга по Java, я бы порекомендовал:
Я упоминаю об этом только потому, что не знаю, что вы используете в классе. Там тонны других книг. Некоторые хороши. Некоторые будут калечить студентов в течение многих лет.
Ваш учебный процесс
Основной рабочий процесс
С этого момента я бы посоветовал вам следовать этому двухэтапному процессу для всех упражнений и примеров кода, которые вы видели в классе:
В случае отказа
Если вы терпите неудачу и чувствуете, что вам нужно взглянуть на книгу, ваша ошибка может быть либо:
Первой причиной, вероятно, будет то, с чем вы сталкиваетесь чаще всего. Второй анекдотичный. Обе эти проблемы решаются путем повторяющейся практики.
Каждый раз, когда вам не удается реализовать один из этих ранних примеров, снова посмотрите книгу, затем закройте ее снова. Не пишите код, глядя на книгу. Я даже советую вам удалить все ваши решения и начать заново. Повторение является раздражающей, но важной частью процесса обучения.
Не воспринимай это легко. Каждый раз, когда вы чувствуете желание сказать себе: «Да, хорошо, я знаю это» или «Я там на 90%, это почти так же хорошо, как сделано», и вы хотите перейти к другому разделу, бороться с этим побуждением и начать все сначала. Очень трудно честно признаться себе, что вы не до конца поняли концепцию.
Дополнительное замечание: я считаю большой плохой услугой то, что большинство школьных программ в настоящее время пытаются «дать старт» курсам программирования, слишком затухая и предоставляя инструменты, которые слишком сложны для учащихся: цель не состоит в том, чтобы сделать вашу жизнь несчастной или для вас тоже учиться наизусть вещи, которые позже в твоей карьере будут автоматизированы твоими инструментами, и которые ты иногда даже почти не помнишь. Это чтобы научить вас всем, что плавает вокруг.
В случае успеха: выйти за рамки!
Если вам удается выполнить упражнение, не обязательно переходить непосредственно к следующему. Попробуйте посмотреть, что вы можете сделать, чтобы улучшить это. Можете ли вы изменить вывод, который был запрошен? Добавить небольшую функцию? Опция? Постарайтесь, поскольку вы сейчас находитесь в этой веселой зоне, где вы преодолели основную сложность, и эти навязанные самим собой крошечные требования с большей вероятностью будут поднимать вам настроение.
Однако не заходите слишком далеко: вы не переходите от печати алфавита и его переворота к внезапному отображению его по диагонали на экране с градиентом цветов. Делай маленькие шаги. Обучение - это длительный и итеративный процесс, и вам нужно подходить к проблемам с возрастающим уровнем сложности (например, посмотрите, как я обычно думаю об объяснении рекурсии ).
Это просто обучение - сравнение
Ваша проблема на самом деле не связана с программированием. Это та же самая проблема, с которой сталкиваются тысячи людей, пытаясь выучить математику.
Если вы дадите им проблему, они не поймут, как проложить себе путь к решению. Однако, если вы напишите решение для них, большинство поймет это и подумает: «Черт, это было так просто!». Тем не менее, вы дадите им аналогичную проблему с различными мерами и гипотезами, и они не смогут ее решить: они не поняли логику, стоящую за этим, и им нужна практика, чтобы иметь возможность сделать это самостоятельно.
Обратите внимание, что это общая проблема с математикой, но, по моему мнению, вы видите ее в тоннах других областей, где требуется некоторая логика: изучение сольфеджа, грамматика языка, физика и т. Д. И это не просто «естественная» способность чтобы понять эти вещи: это просто сводится к практике (будь то в этой области или в других, которые приводят человека к более легкому пониманию концепций в этой области).
Там нет причин, вы не можете научиться писать код. Ты просто продолжаешь пытаться, пока не достигнешь "ах ах!" Эврика Момент. Затем переходите к следующей, более сложной проблеме.
Это также может помочь (позже):
источник
Я знаю, что это не тот ответ, который вы захотите услышать, но: напишите больше кода!
Точнее рассмотрите код, который вы понимаете. Это часто помогает мне «перевести» это на обычный английский (поскольку я относительный новичок).
Не бойтесь мозгового штурма своей идеи сначала написать кусок кода (например, «Я хочу объявить переменную здесь, выполнить итерации по этому сегменту и т. Д.»), И ТОГДА по кусочкам посмотреть, как сделать эти различные сегменты.
Помните, что кодирование - это не упражнение на запоминание, а нахождение способа конструирования чего-либо из строительных блоков. Подобно изучению реального иностранного языка, понимание приходит на первом месте, это хороший знак того, что вы уже в пути.
Просто верьте, что чем больше вы пишете и читаете код, тем больше это будет иметь смысл.
источник
Как уже говорили другие, это тот случай, когда вы должны практиковаться, практиковаться, практиковаться.
Напишите несколько небольших программ, которые решают только одну проблему
Иногда самая сложная часть - это придумать что-то стоящее программирования. Если вы можете, попробуйте поработать над темой, с которой, по вашему мнению, вы боретесь, - например, с классами, наследованием и т. Д. Некоторые идеи мне не нравятся:
GetArea
. Теперь сделайте классы Triangle и Rectangle наследуемыми от Polygon и убедитесь, что они реализуют GetArea. Продолжайте делать это для полигонов более высокого порядка (пятиугольник, шестиугольник и т. Д.).* Цель кода гольф состоит в том, чтобы выполнить поставленную задачу, используя наименьшее количество символов, байтов или какой-либо другой показатель, указанный в вопросе. Если вы прочитаете некоторые ответы, вы быстро оцените умные способы решения этих проблем. Не зацикливайтесь на решении проблемы в наименьшем количестве байтов! Люди, которые пишут в гольф, очень опытные программисты. Но некоторые вопросы предлагают простые задачи сами по себе.
Несколько забавных примеров игры в гольф:
Базовая структура решения проблемы:
Многие из них дают вам хорошее представление о том, как должна выглядеть функция. Учитывая X, сделайте Y, и результат должен быть Z:
Для изучения основ и ознакомления с языком достаточно вышеуказанного шаблона. Более объектно-ориентированный шаблон будет:
Если это поможет, запишите это на бумаге. Поговорите с самим собой о том , как вы , как человек, решили бы эту проблему. Пример: учитывая числа i, j и k, отображать их в порядке убывания. Как человек, это легко решить. Сложная часть - это перевод ваших идей в построчные инструкции, чтобы компьютер мог их решить.
Попробуйте придумать свои собственные идеи. Это может быть сложно, но даже самые простые программы могут научить вас чему-то, чего вы не знали. Все дело в том, чтобы тренироваться с основами, пока они не станут второй натурой.
источник
Вы не получите ничего, просто читая код; вам нужно писать код. Просто напишите код. Не волнуйтесь, если код, который вы пишете, дерьмо; каждый написал дерьмовый код. Некоторые люди зарабатывают на этом. Никто не начинает писать хороший код, и я считаю, что во время обучения почти необходимо писать плохой код, потому что только тогда разница между хорошим и плохим кодом становится действительно очевидной.
Трудно оценить разницу между хорошим и плохим кодом при чтении двух блоков кода, которые делают одно и то же, но когда вы написали сценарий и у вас есть кто-то знающий, чтобы просмотреть его и предоставить обратную связь, разница часто становится намного более очевидной, потому что Вы можете непосредственно применить это к тому, что вы знаете.
Программирование - это не то, что вы можете выучить наизусть; это не похоже на ваши временные таблицы или даты в истории. Программирование - это практический навык, который требует постоянной практики, чтобы оставаться острым. Обучение программированию без написания кода похоже на обучение плаванию, читая книгу.
источник
На этот вопрос уже есть несколько действительно хороших ответов, но есть несколько мыслей, которые я еще не видел.
Изучение языка программирования очень похоже на изучение «настоящего» языка: его всегда намного легче читать, чем писать, будь то одно предложение, научная статья или книга. При чтении многое можно понять только из контекста, понимая текст или код по мере того, как вы его читаете. Когда вы видите слово, которое вы не знаете, может быть, вы знаете другое слово с таким же основанием; когда вы видите метод, имя метода дает вам хорошее представление о том, что он делает. При написании вы должны помнить не только синтаксис, но и фактические слова для использования. И то же самое для программирования.
Как уже говорили другие, вы не можете научиться писать программы только из чтения программ.
Начните с малого. Ищите учебник по Java и выполняйте все модули один за другим. И когда вы достаточно уверены, выберите небольшой проект, чтобы проверить свои навыки, возможно, какую-то простую игру, которую вы хорошо знаете, которая не требует слишком большого взаимодействия с графическим интерфейсом. Когда вы решили, не просто открывайте Eclipse и смотрите на «пустую страницу». Создайте раскадровку. Вам не нужно рисовать сложные UML-диаграммы, просто подумайте о том, как можно решить некоторые аспекты программы, - так сказать, как разворачивается история или ваш аргумент. А при написании кода начните с черновика. Я обычно пишу много комментариев, описывающих, что должна делать программа, в каком порядке, а затем начинаю заполнять фактический программный код.
источник
Как говорят другие, вам просто нужно попрактиковаться в написании кода. Для того, чтобы это было выполнено, вам необходимо решить какую-то проблему, будь то печать предопределенных сообщений, создание простого интерактивного калькулятора или решение какой-то конкретной задачи.
Если вам не хватает вдохновения, Project Euler предлагает множество упражнений по математике и программированию, которые становятся все сложнее. Они ставят перед вами четкие и сложные задачи и должны помочь вам более комфортно разрабатывать программы.
источник
Просто подумал, что я буду вмешиваться в эту тему, потому что это действительно близко к дому.
Вам просто нужно начать кодирование. Не поймите меня неправильно, чтение - это замечательно, но то, что действительно дает вам знание кодирования, на самом деле что-то строит. Из одного летнего размещения я узнал больше, чем читал об этом в предыдущем году.
Я должен также добавить, что вы не должны просто начать писать вслепую . Сделайте проект для себя. Вам нужно какое-то направление, чтобы понять, что вы хотите сделать. Вы будете удивлены, увидев, как много вы узнаете быстро. Если вы просто откроете интегрированную среду разработки и начнете делать простые примеры из мира приветствия, это демотивирующее чувство быстро на вас нарастет. Найдите что-то с небольшой глубиной, и, прежде чем вы это узнаете, вы углубитесь в это.
источник