Прошлые операторы If Массивы, циклы ... И что теперь?

9

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

Здесь моя проблема.

Я прочитал несколько книг и посмотрел видеоуроки на C # / Java, следовал примерам и закончил книгу. В конце они, кажется, всегда оставляют меня ошеломленным относительно того, что делать дальше.

Что значит, что они учат вас от вашего базового приложения «hello world» вплоть до if и массивов, и, похоже, ожидают, что вы узнаете, как выйти в мир кодирования и создать что-нибудь.

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

Я полагаю, что простым ответом было бы «начать кодирование», но где? Я читаю "Head First Java", например; вплоть до того, что они скажут вам взять все, что вы узнали, и создать гоночную игру для собак ....

«постарайтесь не обманывать и смотреть на предоставленный исходный код, вы должны быть в состоянии сделать это сейчас» _ это не точная цитата, но в основном это то, что мне сказали .......

Полчаса назад они просто объясняли, как делать массивы, и тогда без какой-либо теории я собирался создать работающую игру?

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

Спасибо за любой совет

user76625
источник
«Собачья гонка» может означать много вещей. Начнем с того, включает ли она вообще какую-либо графику? Пока то, что вы создаете, не включает в себя графику, то я думаю, что это идеально подходит для новичка. Возможно, вместо этого сделайте палача, просто чтобы не думать об изображениях ...
jhocking
Это вполне возможно построить небоскреб с этими небольшой панелью инструментов - большие программы просто организованы коллекциями в Л маленькие кусочки. Вы не сможете СЕЙЧАС , однако, вы должны начать строить скворечник и идти вверх. Как сказал jhocking, пока не пытайтесь что-либо делать с графикой - есть веская причина, по которой начальный материал всегда основан на неформатированном тексте.
Лорен Печтел

Ответы:

10

Что значит, что они учат вас из вашего основного приложения «Привет, мир», вплоть до if и массивов, и, похоже, ожидают, что вы узнаете, как выйти в мир кодирования и создать что-нибудь.

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

Вообще-то, нет. Это не так. Строительные блоки всех программ - абстракция и повторное использование. Многие языки программирования даже не имеют массивов, ifs или циклов.

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

Как разрабатывать программы ака HtDP это такая книга. Он учит вас, ну, как разрабатывать программы. И делает это, давая вам рецепты, чтобы следовать за тем, как анализировать проблемы, решать их, преобразовывать их в алгоритмы и далее в рабочие программы.

Обратите внимание, что «рецепт» - это, по сути, другое слово «программа», иными словами, книга учит вас программам для людей, которые запускаются у них в голове, чтобы генерировать программы, которые будут выполняться компьютерами. Как это круто? :-)

В настоящее время авторы работают над черновиком для второго издания HtDP , которое вы можете прочитать вместо первого. Материал об императивном программировании был удален и будет описан во еще не написанном втором томе « Как проектировать компоненты» , но вы можете прочитать эти недостающие главы из первого издания.

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

Конкретные Абстракции - также хорошее чтение по подобным венам. Как и HtDP, он не предполагает никаких знаний в области программирования.

Другая книга, о которой вы могли бы упомянуть, - « Структура и интерпретация компьютерных программ», также известная как SICP. Это одна из величайших книг по программированию, когда-либо написанных, и опять же, она не предполагает никаких знаний в области программирования.

Это будет , однако, направлено на комплектные новичок , которые учатся в MIT . И так, в то время как она не предполагает каких - либо знаний в области программирования, он делает предположить , совсем немного области знаний, например , в области электротехники, физики и математики. Примечание: они не имеют никакого отношения к изучаемым концепциям , они просто необходимы для понимания упражнений и примеров . Поэтому, может быть, лучше сначала прочитать HtDP или Конкретные абстракции, а затем прочитать SICP.

Йорг Миттаг
источник
1
Я никогда не слышал о языке программирования без каких-либо ifутверждений или чего-то подобного loop: он не был бы полным без них.
Восстановить Монику - М. Шредер
@Martin Schröder: Существуют языки программирования без loopоператоров, и они завершены по Тьюрингу.
Джорджио
@ Джорджио: Например? AFAIK вам нужен какой- то цикл / goto.
Восстановить Монику - М. Шредер
2
@ MartinSchröder: лямбда-исчисление полно-тьюрингово (фактически это язык, для которого был изобретен этот термин), и оно имеет только абстракцию функций и применение функций. У него даже нет рекурсии, вы должны закодировать это с помощью комбинатора с фиксированной точкой! С другой стороны: существует множество языков программирования, которые не являются полными по Тьюрингу, например, SQL (до 2003 года) или, что более тонко, C (для полноты по Тьюрингу требуется бесконечное хранилище, но C гарантирует, что вы можете взять адрес чего угодно и сохранить его в переменной конечного размера).
Йорг Миттаг
2
@ MartinSchröder: Или другой трюк: есть языки программирования, где простая компиляция программы может заставить компилятор решать сложные задачи. В C # вы можете кодировать проблемы 3-SAT как проблемы с разрешением перегрузки и заставлять компилятор решать их, а в Haskell вы можете фактически кодировать проблемы, эквивалентные проблеме останова, в систему типов и заставлять компилятор решать их. Вы, кажется, думаете о «языках программирования» как о императивных языках, но есть много неимперативных языков, которые могут представлять сложные вычисления.
Эрик Липперт
5

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

  1. Изучая книгу, постарайтесь найти реальные сценарии, в которых можно применить некоторые примеры кода / технику из книги.
  2. Попробуйте смешать примеры программ, приведенных в книге, чтобы сделать что-то большее и сложное. После этого попытайтесь минимизировать код и напишите другой код, который даст тот же результат.
  3. Google для практических проектов для рассматриваемого языка.
  4. После того, как вы убедитесь, что изучили базовый элемент языка, поэкспериментируйте с выбранной вами структурой. Впервые выбрали что-то, что имеет более легкую кривую обучения.
  5. Ищите какой-нибудь существующий проект и попытайтесь изучить его дизайн.
  6. Пойдите для продвинутых книг, которые научат вас более продвинутым вещам разработки приложений, таким как шаблоны приложений, разработка и реализация ОО и т.д.

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

mlakhara
источник
2

Смотрите это для C #. Это очень полно: http://www.programmersheaven.com/ebooks/csharp_ebook.pdf Я сам использовал это, всего полгода назад. Я использую компилятор #Develop с ним для примеров. Я не могу вам сильно помочь с Java, потому что я почти никогда не использовал его.

Когда приходит время программировать, многие люди не понимают, что вы обычно используете дополнительный SDK или инфраструктуру для разработки. Поэтому не ожидайте немедленного перехода с Java или C # на программирование телефона, потому что вам, скорее всего, понадобится хорошая промежуточная структура, и кривые обучения для них могут быть такими же утомительными, как и кривые обучения для самих языков программирования. Хотя учебник по C #, который я опубликовал, охватывает только C #, многие из рассматриваемых концепций встречаются в других объектно-ориентированных языках, таких как Java.

Изменить: сценарий, который вы описываете, к сожалению, путь, которому следуют многие учебники. Вам не обязательно следовать такому руководству, и если оно работает против того, как вы учитесь, вероятно, лучше попробовать и другое (я не знаю ни одного, но, вероятно, Google). Но просто чтобы убедиться, проверьте, объясняет ли автор этой книги, которую вы описываете, код построчно. Не беспокойтесь о том, насколько вы умны, только вундеркинд может перейти прямо из книги в рабочую игру. Просто помните, что учебные пособия отнюдь не являются стандартным измерением способностей, поэтому выбирайте то, что преподает вам лучше всего, и не падайте духом!

person27
источник
Отличный ответ, и я хотел бы добавить, что вы должны выбрать проект, который вы хотели бы предпринять. Google предлагает способы решения проблем, представленных в проекте. Вы многому научитесь, ища лучшие способы решения проблем, с которыми вы сталкиваетесь.
смертный человек
1

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

Ни одна книга не научит вас, как решать проблемы.

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

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

Telastyn
источник
1
«Ни одна книга не объясняет, как разрабатывать программы». - Авторы книги « Как разрабатывать программы» могут не согласиться :-)
Йорг Миттаг
1
@ JörgWMittag: У них будут некоторые общие приемы и демонстрации типичных программ, но все, что нетривиально, потребует большой степени научного человеческого суждения, которое по состоянию на 2013 год все еще не может быть механизировано.
WhatsName
1

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

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

Я бы порекомендовал вам поставить перед собой цель, такую ​​как « Я хочу создать приложение Javascript, которое рисует прыгающий круг », а затем использовать уже приобретенные знания для запуска и поиска всего остального в языковых SDK / документации и / или здесь. на ТАК.

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

редактировать Конечно, некоторые более общие книги учит вас , как разработать приложение или какой процесс (SCRUM, XP, V-Modell) для наблюдения является хорошим дополнением к знаниям чистого языка.

пресмыкаться
источник
1

Я согласен с Йоргом в том, что вам также следует прочитать некоторые общие книги по понятиям программирования, а не изучать слишком много деталей о конкретном языке на данном этапе. Что касается книги « Как разрабатывать программы» , она используется в качестве справочного материала в этом курсе , который может вас заинтересовать.

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

Джорджио
источник
+1. Я знаю людей, которые ходят на конференции, не заходя ни на один разговор. Они просто идут туда, чтобы тусоваться в коридорах и обсуждать проблемы с совершенно незнакомыми людьми, просто чтобы получить другую точку зрения.
Йорг Миттаг
0

Я бы предложил найти проекты с открытым исходным кодом и превратить их в личные песочницы. Изменить существующее поведение, добавить новое поведение и удалить некоторые тоже. Поиграйте, воплотите в жизнь свои собственные идеи и «что, если я попробую это».

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

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

Мэтт Раффель
источник
-5

Это жизнь кодеров. Вы не знаете технологии, но вы развиваете «привет мир» и становитесь экспертом. В компаниях (в реальной жизни) так все и работает. Удачи

user76655
источник
2
Это не очень полезный ответ.
svick