Лучшие способы учить новичка к программе? [закрытый]

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.

blockquote>

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.
blockquote>

Как это исправить?

Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

Идентифицирует нулевые значения

. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, где эти значения взяты из

Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name - null.

Трассировка, где эти значения должны быть установлены

Где установлен this.name? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. ​​

Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().

Другие исправления

Переменная может иметь значение по умолчанию setName может помешать ему установить значение null):

private String name = "";

Либо метод print, либо printString может проверить значение null например:

printString((name == null) ? "" : name);

Или вы можете создать класс, чтобы name всегда имел ненулевое значение :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

См. также:

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

324
задан 34 revs, 8 users 58% 24 November 2011 в 00:03
поделиться

81 ответ

Я думаю, учась программировать, потому что Вы хотите учиться, никогда программировать не будет так же хорошо как обучение программировать, потому что Вы хотите СДЕЛАТЬ что-то. Если можно найти что-то, что брат интересуется созданием работы, потому что он хочет заставить его работать, можно просто оставить его с Google, и он сделает это. И у него будете Вы вокруг, чтобы проверить, что он продвигается правильный путь.

я думаю, что одна из самых больших проблем с обучением программирования в кратком обзоре - то, что это не получило реальный контекст, в который можно эмоционально инвестировать ученика. Программирование трудно, и должна быть некоторая реальная выплата для создания его стоящим усилия по выполнению его. В моем случае я сделал информатику в uni, изучил Паскаль и КОБОЛ там, и изученный ОСНОВНОЙ дома перед этим, но я никогда действительно добрался где угодно с ним, пока я не стал работающим не по найму веб-дизайнером назад в 90-х, и мои клиенты нуждались в функциональности на своих веб-сайтах и были готовы заплатить о 10x больше для функциональности, чем для дизайна. Помещение еды на таблице является адским фактором мотивации!

, Таким образом, я изучил Perl, затем ASP/VBScript, затем JavaScript, тогда Flash/ActionScript тогда PHP - все для создания материала, я хотел произойти.

0
ответ дан Polsonby 23 November 2019 в 00:53
поделиться

Я рекомендую начать их с C/C++. Я нахожу, что это - хорошая основа для примерно любого языка. Кроме того, различные версии ОСНОВНЫХ могут быть довольно изворотливыми, в лучшем случае и не иметь никакой реальной корреляции к фактическому программированию.

0
ответ дан Ed. 23 November 2019 в 00:53
поделиться

Я на самом деле требовал бы выбирать более простой язык с меньшим количеством инструкций. Я лично учился на ОСНОВНОМ дома, поскольку сделал Jeff. Таким образом, Вы не должны копаться в более сложных проблемах как объектно-ориентированное программирование, или даже процедурах, если Вы не хотите. Как только он может обработать простой поток управления, затем углубить к чему-то немного более сложные, но только простые функции.

, Возможно, запускаются с очень простых программ, которые просто добавляют 2 числа, и затем растут до чего-то, что могло бы потребовать ответвления, тогда возможно, читая вход и ответив на него, тогда некоторый цикл, и начинать комбинировать их всех вместе. Только запустите мало и проложите себе путь. Не делайте никаких больших проектов, пока он не может схватить основные принципы (иначе, это может быть слишком пугающим, и он мог сдаться на полпути). Как только он освоил ОСНОВНОЙ или независимо от того, что Вы выбираете, движение к чему-то более сложному.

Просто мои 0,02$

0
ответ дан Mike Stone 23 November 2019 в 00:53
поделиться

Python легок для новых разработчиков учиться. Вы не попадаете в историю в специфических особенностях управления памятью и вводите определение. Погружение В Python является хорошим руководством новичков по программированию Python. Когда моя сестра хотела изучить программирование, я указал на нее на строку "Head Start" книг, которые она нашла очень легким читать и понять. Я нахожу, что трудно только начать преподавать кого-то, потому что у Вас нет словаря для использования с ними. Сначала сделайте, чтобы он прочитал несколько книг или учебных руководств и попросил у Вас вопросов. Оттуда можно присвоить проекты и градуировать их. Мне трудно преподавать программирование, потому что я изучил его почти за 15 лет лужения вокруг.

1
ответ дан 2 revs, 2 users 86% 23 November 2019 в 00:53
поделиться

Я предложил бы проявить подход similiar к той из книги, Ускоренный C++ , в котором они покрывают части C++, которые вообще полезны для того, чтобы сделать простые программы. Для любого плохо знакомого с программированием я думаю, имея что-то для показа для небольшого усилия, хороший способ сохранить их заинтересованными. Как только Вы покрыли основные принципы Python тогда, необходимо расслабиться и позволить ему experiement с языком.

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

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

я также рекомендовал бы придерживаться далеко от IDE на стартовых этапах. Используя командную строку и текстовый редактор даст ему большее понимание процессов, вовлеченных в компиляцию/сборку кода.

я надеюсь, что имел некоторую справку.:)

1
ответ дан 2 revs, 2 users 96% 23 November 2019 в 00:53
поделиться

как только Вы преподавали их, как программировать, они могли бы хотеть изучить, как разработать программное обеспечение.. для этого я думаю Greg Wilson Плотницкие работы программного обеспечения , курс является большим.. это также использует Python в качестве языка студента.

1
ответ дан jbdavid 23 November 2019 в 00:53
поделиться

Я думаю "мудрость толп" работа здесь. Как сделал большинство людей, изучают, как программировать? Многие утверждают, что они сделали так путем копирования программ других, обычно игры, в которые они хотели играть в ОСНОВНОМ.

, Возможно, что маршрут будет работать с ним также?

0
ответ дан Jon Limjap 23 November 2019 в 00:53
поделиться

Книга: Программирование Java для Детей, Родителей и Бабушки и дедушки (PDF)

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

1
ответ дан Esko Luontola 23 November 2019 в 00:53
поделиться

Очень хороший видео вводный ход Стэнфордским университетом (никакие требуемые предварительные знания):

Методология программирования

будет преподавать Вам хорошие "методологии", которые каждый программист должен знать и некоторое программирование Java.

1
ответ дан Gu1234 23 November 2019 в 00:53
поделиться

Как только у него есть основы, я предлагаю Ханойская башня как хорошее осуществление. Я рекомендую начать с деревянной игрушки, если у Вас есть тот; позвольте ему попытаться решить проблему один и описать его метод систематическим способом. Покажите ему, где рекурсия играет роль. Объясните его, как количество перемещений зависит от количества дисков. Тогда позвольте ему записать программу для печати последовательности перемещений на предпочтительном языке.

1
ответ дан Federico A. Ramponi 23 November 2019 в 00:53
поделиться

Я скользил через комментарии и ни на кого не похож, упомянул Основы Программирования от www.CodeBetter.com . Хотя требуется немного основы, это может, конечно, быть следующий шаг в процессе обучения.

1
ответ дан 2 revs, 2 users 67% 23 November 2019 в 00:53
поделиться

Если бы ему интересно, чем я не волновался бы о фокусировке на играх или этажерке. Я просто захватил бы это, новички 'преподают себе x' книга, которую Вы собирались бросить и дать ему его и позволить ему бороться через него. Возможно, разговор об этом после и затем делает другого и другого. После того, как тогда я соединил бы программу с ним так, он мог изучить, насколько мелкий и хромой те книги, которые он прочитал, были. Тогда я начал бы иметь его, кодируют что-то для себя. Веб-сайт для отслеживания статистики софтбола или независимо от того, что привлекло бы его. Для меня это была база данных для вина назад в день.

После этого я запустил бы в на реальных книгах, доменном дизайне, и т.д.

1
ответ дан Jake Hackl 23 November 2019 в 00:53
поделиться

Хороший ресурс для обучения молодых людей является бесплатной электронной книгой, "Изобретают собственные игры с Python":

http://pythonbook.coffeeghost.net/book1/IYOCGwP_book1.pdf

1
ответ дан Martin Salias 23 November 2019 в 00:53
поделиться

Начните путем задавания ему этого вопроса: ", Какие виды вещей Вы хотите сделать со своим компьютером? "

Тогда выбирают ряд операций, которые соответствуют его ответу и выбирают язык, который позволяет тем вещам быть сделанными. Тем лучше, если это - простое (или simplifiable) сценарии среды (например, Applescript, Ruby, любая оболочка (Ksh, Bash, или даже .bat файлы).

причины:

  1. , Если он интересуется результатами, он, вероятно, будет более мотивирован, чем если Вы сделаете, чтобы он считал кроликов Fibonacci.
  2. , Если он получает результаты, ему нравится, он, вероятно, продумает изменения на операциях, которые Вы создаете.
  3. , Если Вы учите его, он (еще) не продолжает серьезную карьеру; там пора всегда переключить на "промышленную силу" языки позже.
1
ответ дан joel.neely 23 November 2019 в 00:53
поделиться

Я не знаю наверняка, что будет лучшим для Вашего брата, но я знаю, что запустил с Python. Я играл в различные игры с очень раннего возраста и хотел сделать свое собственное, таким образом, мой дядя представил меня Python с библиотека pygame . Это имеет много учебных руководств и делает все это легким (ПУТЬ легче, чем openGL, по-моему). Это ограничено 2-м, но необходимо начинать простой так или иначе.

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

я лично нашел, что основное программирование просто изучило программирование, неприлично скучное в то время, но взял значительный энтузиазм, когда я пошел. Я действительно хотел учиться для создания чего-то, не только для изучения его.

1
ответ дан dwestbrook 23 November 2019 в 00:53
поделиться

Я рекомендовал бы книгу Charles Petzold Код - Скрытый Langauge Компьютерного оборудования и программного обеспечения как превосходное общее введение в то, как работают компьютеры.

существует партия из информации в книге (382 страницы), и абсолютному новичку может потребоваться некоторое время для чтения, но это определенно стоит того. Petzold удается объяснить многие из базового понятия компьютеров и программирующий от простых кодов, реле, памяти, центральных процессоров к операционным системам & графический интерфейсы пользователя очень ясным и приятным способом. Это предоставит любому читателю хорошее чувство того, что на самом деле происходит негласно, когда они пишут код.

мне, конечно, жаль, что это не было вокруг, когда я сначала учился программировать!

1
ответ дан Jonathan Webb 23 November 2019 в 00:53
поделиться

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

1
ответ дан Jared Updike 23 November 2019 в 00:53
поделиться

Существует книга, названная Код . Я не могу помнить, кто записал его, но это проходит основы большого количества материала, который мы (программисты) знаем и берем для предоставленного, который людей мы говорим для знания также. Все от того, как Вы считаете двоичный файл к тому, как процессоры работают. Это не имеет ничего имеющего дело с языками программирования в нем (хорошо от того, что я помню), но это - довольно хорошая краткая информация. Я признаю, что имею также школу, которая полагает, что необходимо знать, как компьютер работает, чтобы быть в состоянии эффективно программировать вещи для нее.

1
ответ дан kemiller2002 23 November 2019 в 00:53
поделиться
1
ответ дан Peter Stuifzand 23 November 2019 в 00:53
поделиться

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

Так, мой скромный совет: не делайте understimate основы (как хороший ввод). Это звучит коррективным, и даже глупым, но это сохранило меня так много горя рано в моем процессе обучения, когда я наткнулся на простой метод ввода полного "скелета" структуры кода и затем просто заполнения его.

Для, "если" оператор в Python, запустите с:

if  :

В C/C ++/C#/Java:

if () 
{

}

В Паскале/Дельфи:

If () Then
Begin

End

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

Редактирование: [ Justin Standard ]

спасибо за Ваш вклад, Крыло. Связанный с то, что Вы сказали, одна из вещей, я попытался помочь своему брату помнить синтаксис за обзор Python, то, что каждый раз существует двоеточие, он должен расположить следующую строку с отступом, и любое время, он думает, что должен сделать отступ, там лучше быть двоеточием, заканчивающим предыдущую строку.

1
ответ дан 3 revs, 2 users 85% 23 November 2019 в 00:53
поделиться

Это может звучать немым, но почему ВЫ пытаетесь учить своего брата к программе?

Часто лучшая среда обучения состоит из цели, которая может быть достигнута увлеченным новичком (пример программы), вполне достаточное предоставление ресурсов (Google/учебные руководства/книги) и хорошо осведомленный источник совета, который может дать представление при необходимости.

можно определенно помочь с предложениями для первых двух, но последней является основная роль.

1
ответ дан Andrew Grant 23 November 2019 в 00:53
поделиться

Скопируйте некоторую простую строку кода с методической точностью и заставьте их читать и интерпретировать ее, как они продвигаются. Они скоро разработают его. Я начал программировать на Acorn Электрон с отрывками кода из журналов Acorn. Я понятия не имел о программировании, когда мне было 6 лет, я раньше копировал текст, но постепенно я изучал то, что означали различные слова.

1
ответ дан Mark Ingram 23 November 2019 в 00:53
поделиться

Уже был набор больших ответов, но для абсолютного новичка, я искренне рекомендовал бы Взлом Hackety . Это было создано необоснованно плодовитый why_the_lucky_stiff конкретно для обеспечения среды BASIC/LOGO/Pascal-like для новых программистов для экспериментирования в. Это - по существу гладкий IDE Ruby с некоторыми большими библиотеками (флеш-видео, IM, веб-сервер) и интерактивные уроки. Это делает хорошую подачу для программирования, поскольку это выбрало уроки, которые делают забаву, полезные вещи. "Привет, мир" не может произвести впечатление сразу, но создание пользовательского клиента IM через 20 минут может вдохновить кого-то продолжать учиться.развлекайтесь!

1
ответ дан Nick Mabry 23 November 2019 в 00:53
поделиться

Я думаю, что Python - действительно отличный язык для начала:: -)

Предлагаю вам попробовать http://www.pythonchallenge.com/

Это построен как небольшое приключение, и каждое решение связывает вас с новой красивой проблемой.

После решения проблемы вы получаете доступ к симпатичному форуму, чтобы поговорить о вашем коде и увидеть, что создали другие люди.

1
ответ дан 23 November 2019 в 00:53
поделиться

Я могу порекомендовать свой проект PythonTurtle .

Резюме:

PythonTurtle стремится предоставить самый низкий порог в изучении Python. Учащиеся управляют интерактивной оболочкой Python (аналогичной среде разработки IDLE) и используют функции Python для перемещения отображаемой на экране черепахи. Иллюстрированный экран справки знакомит учащихся с основами программирования на Python, демонстрируя, как перемещать черепаху.

Это выглядит так:

альтернативный текст http://www.pythonturtle.com/screenshot.gif

1
ответ дан 23 November 2019 в 00:53
поделиться

Попытайтесь найти в Интернете копию (Трогательного) Руководства по Ruby Почему. Исходный сайт оффлайн, но я уверен, что там есть несколько зеркал. Это не обычное руководство по программированию; это придает уникальный (и забавный) вид изучению нового языка, который может подойти вашему другу. Не говоря уже о том, что Ruby - отличный язык для изучения.

1
ответ дан 23 November 2019 в 00:53
поделиться

Academic Earth предлагает ссылки на бесплатные курсы информатики ведущих университетов. . У них есть раздел, посвященный началу компьютерных наук. Языки, преподаваемые на начальных курсах, различаются:

  • MIT - Введение в информатику и программирование - Python
  • Стэнфорд - Компьютерные науки I: Методология программирования - Java
  • Гарвард - Введение в информатику I - C (основное внимание), и несколько других, добавленных для хорошей оценки (например, SQL, PHP, LISP, Ассемблер и т. д.)
  • ​​Berkeley - диалект языка LISP
1
ответ дан 23 November 2019 в 00:53
поделиться

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

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

Тогда это - просто код, код, код. Кодируйте каждый пример прямо из книги. Тогда измените его немного, чтобы сделать другое действие. Обучение программировать является активным процессом не пассивный. Вы не можете только считать C++, Как Программировать Dietal и затем ожидать кодировать C++ не активно сделав его при чтении.

, Даже если Вы - опытный кодер, который это помогает записать коду в книге для изучения чего-то нового.

0
ответ дан David Basarab 23 November 2019 в 00:53
поделиться

Для меня, исследуя и экспериментируя в самом IDE помог мне изучить Java и Visual Basic, но я изучил основы программирования твердого пути: Perl 5. Тогда не было свободного IDE, таким образом, он означал вводить коды в Блокнот, сохраняя его, и затем выполнял интерпретатор жемчуга.

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

int a = 5;

for (int i = 0; i < a; i++) {
     System.out.println("i is now " + i);
}

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

0
ответ дан pkchukiss 23 November 2019 в 00:53
поделиться

По моему смещенному мнению C является лучшей точкой для запуска. Язык является маленьким, это - функции высокого уровня, повсеместны, и низкоуровневые функции позволяют Вам изучить машину.

я нашел Краткая информация C Плюс, 5-й Выпуск очень полезный как начинающий программист почти ни с каким опытом программирования. Это не принимает предшествующего опыта программирования, забава читать и покрывает C подробно (включая последний стандарт C99).

0
ответ дан Imran 23 November 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: