过去的If语句数组,循环…现在呢?


9

一年前,当我不断碰壁时,我放弃了编程。我正在重新研究该主题,因为我想创建基本的Android应用程序。但是我觉得我有限的知识是不够的。

这是我的问题。

我已经阅读了几本书,并观看了有关C#/ Java的视频教程,并跟随了示例,然后完成了这本书。最后,他们似乎总是让我对下一步该怎么做感到震惊。

这是什么意思,他们从基本的“ hello world”应用程序一直教您到if和array,然后看似希望您知道如何进入编码世界并创建任何东西。

我在这里想念什么吗?我知道这些是所有程序的基础,但我读过的书从未真正向我展示下一步该怎么做。

我想简单的答案是“开始编码”,但是在哪里?例如,我读过“ Head First Java”。直到他们告诉你把学到的一切都用来制作狗赛车游戏为止。

“不要欺骗并查看提供的源代码,您现在应该可以做到这一点。” _这不是确切的引用,但基本上就是我被告知的……

半个小时前,他们只是在解释如何做数组,然后我毫无理论地打算创建一个工作游戏?

我之所以这样问,是因为我担心这至少是我应该知道的,至少开始编码了,但是感觉就像是给了我一个小工具箱,并被告知要建造一座摩天大楼。

谢谢你的建议


“狗赛车游戏”可能意味着很多事情。首先,它甚至涉及任何图形吗?只要您创建的内容不涉及任何图形,那么我认为这对于初学者来说是完全合适的。也许做hangman只是为了避免考虑图像...
j

这很可能建立与小工具箱中的摩天大楼-大项目都只是一个组织的集合LOT小位。您将无法NOW,但-你必须开始了建设禽舍和您的方式工作。正如jhocking所说的,请不要尝试对图形做任何事情-有一个很好的理由,开始的东西总是基于未格式化的文本。
罗伦·佩希特尔

Answers:


10

这意味着他们从基本的“ hello world”应用程序一直教您,直到if和array,然后看似希望您知道如何进入编码世界并创建任何东西。

我在这里想念什么吗?我知道这些是所有程序的基础,但我读过的书从未真正向我展示下一步该怎么做。

其实没有 他们不是。所有程序的构建块都是抽象和重用。许多编程语言甚至没有数组,ifs或循环。

有一些很棒的书教您如何编程,而不是特定的编程语言如何工作,这似乎是您正在阅读的书。

如何设计程序又名HtDP就是这样一本书。它教您如何设计程序。为此,它为您提供了食谱,以指导他们分析问题,解决问题,将其转化为算法以及进一步转化为可运行的程序。

请注意,“配方”基本上是“程序”的另一个词,因此,这本书教导您让人们在脑海中运行的程序,以便生成要由计算机执行的程序。多么酷啊?:-)

作者目前正在为第二版HtDP编写草稿,您可能希望阅读而不是第一版。有关命令式编程的材料已删除,并且将在尚未成文的第二卷“ 如何设计组件”中进行介绍,但是您可以阅读第一版中那些遗漏的章节。

请注意,HtDP假定没有编程知识,并且针对高中学生。但这不要阻止您:它只是意味着您可能可以更快地完成一些早期章节,但我认为您不会感到无聊。

沿着类似的脉络阅读具体摘要也是不错的选择。像HtDP一样,它不需要任何编程知识。

您可能会听到的另一本书是《计算机程序的结构和解释》,又名SICP。它是有史以来最伟大的编程书籍之一,而且,它没有任何编程知识。

,然而,面向完全新手在麻省理工学院的研究谁。因此,尽管它不具备任何编程知识,但确实具有相当多的领域知识,例如在电气工程,物理学和数学领域。注意:这些与所讲授的概念无关,仅需理解练习示例即可。因此,最好先阅读HtDP或具体抽象,然后再阅读SICP。


1
我从来没有听说过没有声明或某种形式的编程语言:没有它们就不会完整ifloop
恢复莫妮卡-M.Schröder13年

@MartinSchröder:存在没有loop语句的编程语言,并且它们是图灵完整的。
Giorgio 2013年

@乔治:例如?AFAIK,您需要某种循环/定位。
恢复莫妮卡-M.Schröder13年

2
@MartinSchröder:Lambda微积分是图灵完备的(实际上,这是该术语的发明语言),并且仅具有函数抽象和函数应用程序。它甚至没有递归,您必须使用定位点组合器对其进行编码!另一方面:有很多不图灵完备的编程语言,例如SQL(在2003年之前),或更巧妙地是C(图灵完备性需要无限存储,但是C保证您可以使用任何东西的地址,并且将其存储在大小有限的变量中)。
约尔格W¯¯米塔格

2
@MartinSchröder:或者,另一种方法是:在某些编程语言中,仅编译程序会迫使编译器解决难题。在C#中,您可以将3-SAT问题编码为重载解决问题,并让编译器解决它们,而在Haskell中,您实际上可以将等效于Halting Problem的问题编码到类型系统中,并使编译器解决它们。您似乎认为“编程语言”是命令式语言,但是有许多非命令式语言可以表示复杂的计算。
Eric Lippert 2013年

5

好吧,您的处境并不特殊。编程语言初学者的大多数书籍都倾向于将重点更多地放在语言的基本构建模块上,这是一件好事。但是,正如您遇到的那样,最终,我们发现自己处在一种学习了该语言必须提供的每一种构造但无法将其用于解决某些实际问题的情况下。简而言之,只有当您尝试使用代码时(如Telastyn所说的),才能弥合文本示例与实用程序之间的鸿沟。

  1. 从书中学习的同时,尝试找到一些可以应用书中某些代码示例/技术的真实场景。
  2. 尝试将本书中给出的示例程序混合在一起,以使其变得更大,更复杂。之后,尝试最小化代码并编写不同的代码以提供相同的结果。
  3. Google对于正在考虑的语言的实际项目。
  4. 在确定学习了基本的语言元素之后,请尝试使用您选择的框架。第一次选择学习曲线更轻松的东西。
  5. 寻找一些现有项目并尝试研究其设计。
  6. 寻求可教您更多高级应用程序设计知识的高级书籍,例如应用程序模式,OO设计和实现等。

最后,所有关于实践和研究的知识将帮助您提高编程技能,并最终使您成为许多摩天大楼的建筑师。


2

请参见C#。它非常完整:http : //www.programmersheaven.com/ebooks/csharp_ebook.pdf 半年前,我自己使用了它。我将使用#Develop编译器作为示例。我对Java的帮助不大,因为我几乎从未使用过它。

当需要进行编程时,许多人没有意识到的是,您通常会使用其他SDK或框架来进行设计。因此,不要指望立即从Java或C#过渡到电话编程,因为您可能需要一个良好的中介框架,并且这些框架的学习曲线可能与编程语言本身的学习曲线一样累人。尽管我发布的C#教程仅涵盖C#,但它涵盖的许多概念在其他面向对象的语言(如Java)中也可以看到。

编辑:不幸的是,您描述的场景是许多教程遵循的路线。您不必遵循这样的教程,并且如果它与您的学习方式背道而驰,则最好尝试选择其他教程(我不知道,但Google可能会这样做)。但是只是为了确定一点,请检查一下您所描述的那本书的作者是否逐行解释了该代码。不必担心自己有多聪明,只有一个神童才能从书本直接变成可以玩的游戏。请记住,教程绝不是能力的标准衡量标准,因此,尽一切努力教给您最好的知识,不要气!!


很好的答案,我想补充一点,您应该决定要执行的项目。Google解决项目存在的问题的方法。通过寻找解决所面临问题的更好方法,您将学到很多东西。
mortalapeman

1

是的,制作超级基础程序应该足够了。在这一点上,您尝试制作一个比您编写的书略复杂的程序。当您需要做一些特定的事情,甚至不知道如何工作时,您可以搜索Internet或咨询老师/导师。这将导致更高级的功能(由于您不知不觉地选择了比您可以做的事情更复杂的方法,因此常常会死胡同)。

没有书会教你如何解决问题。

没有书会解释如何设计程序-这是实践带来的。没有书会教你如何进行非平凡的应用-太多的细微差别。您将学习如何构建实现而不是类似的东西。

此时最好的学习方法是涉猎。玩弄代码来创建东西。就像艺术家经常从涂鸦的小窍门开始,它们变得越来越复杂和美观一样,程序员也需要这种探索性的进步。


1
“没有一本书是要解释程序设计方法” -的作者程序设计方法可能不同意:-)
约尔格W¯¯米塔格

1
@JörgWMittag:他们将具有一些常见的技术和典型程序的演示,但是任何不琐碎的事情都需要大量的人为判断力,到2013年,仍然不能机械化。
whatsisname 2013年

1

我真的不记得我是否曾经使用过一本书来学习编程,但是我想那时候它更多是语法参考手册,而不是教程书。它教会了我编程语言可以做什么,但不能教我如何用它来构建真正的应用程序。

幸运的是,我曾经输入过一些示例(是的,那时没有可下载的源代码示例),然后试图弄清楚它是如何工作的。这不是学习编程的最佳方法,但对我而言,这很有趣。

我建议您为自己设定一个目标,例如“ 我想构建一个绘制弹跳圆的Javascript应用程序 ”,然后使用您已经掌握的知识来启动和查找SDK /文档和/或语言中的所有其他内容在这样。

当我尝试跳入一种新语言并学习我的第一步时,这就是我使用的方法。最近几天我读的大多数书令我感到不满意,因为我有错过重要事物的感觉。但是幸运的是我们现在拥有互联网,因此,无论您想学习哪种语言,都可以在互联网上找到示例源代码,并使用它来继续学习。

编辑当然,一些更通用的书籍教您如何设计应用程序或应遵循的过程(SCRUM,XP,V-Modell)是纯语言知识的不错的补充。


1

我同意Jörg的观点,您还应该阅读一些有关编程概念的一般书籍,而不是在此阶段学习太多有关特定语言的细节。关于《如何设计程序》这本书,本课程将用作参考,您可能会感兴趣。

否则,其他人没有提到的另一个工具就是与其他开发人员交流。我记得对我来说,学习编程的最有效方法之一就是花很多时间与同事或其他程序员讨论编程,编程语言,技术或我在特定时刻面临的具体问题的各个方面。口头传播知识仍然可以是学习新技能的最有效手段之一。


+1。我知道参加会议而不谈一个话题的人。他们只是去那里闲逛,与陌生人讨论问题,只是换一种观点。
约尔格W¯¯米塔格

0

我建议您找到开源项目并将其变成个人沙箱。修改现有行为,添加新行为并删除一些行为。试一试,实施自己的想法和“如果我尝试过该怎么办”。

我不是在提倡您转换别人的开源项目并声明您自己的开源项目。

我说的是看看其他工作项目,以此来教自己如何进行下一步。有很多网站可以下载开源代码。以下是一些建议: CodePlex CodeProject


-5

那就是程序员的生活。您不了解技术,但是您开发了“ hello world”并成为专家。在公司(现实生活)中,它就是这样运作的。祝好运


2
这不是一个非常有用的答案。
svick
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.