【问题标题】:Learn to actually write in Java or just understand the code? [closed]学习实际用 Java 编写还是仅仅理解代码? [关闭]
【发布时间】:2013-11-24 11:12:22
【问题描述】:

很抱歉这个新手问题,但我真的需要了解这一点。

我已经尝试过无数次学习编程。特别是 java,所以我可以继续进行 android/ios 的游戏开发。事实是,经过几天的自学后,我每次都放弃了。

我在学习任何东西时从来没有遇到过困难,事实上,我的学习速度非常快,而且我的常识也飞速发展。但出于某种原因,编程已经向我挑战了极限。

我注意到的是,无论 Java 变得多么困难和复杂,我仍然理解我正在阅读的代码及其作用。但至于自己写下来呢?即使它扇了我一巴掌,我也无法做到。

话虽如此,我问这个问题......我真的需要知道如何用心写下每一个代码吗?还是阅读和理解代码足以实现我的目标?我知道有专门为此目的开发的游戏引擎,例如 Unity3d。我什至看到了用 Unity3d 构建的 android 演示游戏,看起来令人惊讶。但是很难相信每个游戏/应用程序开发人员实际上都坐下来为它编写了整个该死的代码。

我在这里缺少什么?这对我来说真的没有多大意义。

所以我想我想在这里问的主要问题是....我需要学习如何背诵每一个代码并理解它的含义吗?或者理解代码及其功能是否足以实现我的目标?如果是这种情况(幸运的是,它可能不会:))从这里开始的最佳方法是什么。

感谢您的回复,我们将不胜感激。

让我摆脱痛苦:)

阿里斯

【问题讨论】:

  • StackOverflow 用于特定的编程问题。如果您对特定代码有疑问,请发布详细信息并显示代码。该主题更适合聊天版块或其他论坛
  • 关于软件开发的概念性问题,请使用programmers.stackexchange.com/questions

标签: java android ios iphone unity3d


【解决方案1】:

我真的需要知道如何用心写下每一个代码吗?

我不会。能够从头开始编写代码更有用。

或者阅读和理解代码是否足以实现我的目标?

取决于你的目标,但我对此表示怀疑。

我知道有专门为此目的开发的游戏引擎,例如 Unity3d。

是的,很多。

我什至看到了用 Unity3d 构建的 Android 演示游戏,看起来令人惊讶。但很难相信每个游戏/应用程序开发人员都坐下来为它编写了整个该死的代码。

很可能不会。你也不必。

我在这里缺少什么?

这需要经验。经过 20 年的编码,我比五年前写的代码要好得多。

这对我来说真的没有多大意义。

你还有很多东西要学。我有两个学位,但这只是 20 年实践经验的开始。

所以我想我想在这里问的主要问题是....我需要学习如何用心写下每个代码并理解它的含义吗?

没有。记忆不是很有用。能够自己编写新代码要好得多。这需要大量练习。

或者理解代码及其功能是否足以实现我的目标?

你的目标是什么?

从这里开始的最佳方式是什么。

阅读此链接,不要对自己太苛刻。

Teach Yourself Programming in Ten Years

希望一直在学习。新技术的发展速度并没有放缓,而且已经不止一个人能学。对您只知道自己需要知道的内容并且不可能全部知道的想法感到满意。

【讨论】:

  • "所以我想我想在这里问的主要问题是......非常有用。能够自己编写新代码要好得多。这需要大量练习。明确地说,我的意思是按照您的建议学习如何从头开始编写代码。但即便如此,对于刚刚从在线教程中学习的人来说,教程会向您展示他们如何亲自编写代码。这意味着,记住他们在做什么。至于目标:Android 游戏开发。
  • @user3027066 如果有一个简单的结构你可以记住它对重用很有用,很可能是 a) 可搜索如何执行此操作的示例,因此你不需要记住它 b ) 许多图书馆都这样做。您需要编写的位不常见且特定于您的应用程序。
  • @user3027066 当你有互联网搜索东西时,为什么要记住?你需要的是如何解决问题的实践。
  • 所以你是说我应该继续我的想法,通过谷歌搜索我想放在一起的各种位来创造一些东西并在我继续前进的同时学习?
  • @user3027066 学习使用所有可用的工具,而您自己不必学习太多。我在我的 IDE 中大量使用代码完成以及调试器、分析器、代码重新格式化、静态分析等。学会委派编程工作,你会更有效率。
【解决方案2】:

我也是一个初学者开发者,但我给你我的个人意见。一开始最好从你自己的代码开始,一段时间后,当你了解你在做什么时,你可以开始复制其他部分的代码,但你需要知道如何做 for 或何时使用 while。

至少我自己不知道连接数据库的所有代码,但我有自己的代码,所以当我想连接时,我会去那个代码,我复制它并更改我的东西知道需要改变。

所以我在这里说的是,你应该尝试至少一次开发你的代码,以完全了解它的工作原理,然后再从其他项目中重用。

【讨论】:

    【解决方案3】:

    您可能认为自己了解正在发生的一切,但在您真正体验过一个错误、意外位置的null 值和竞争条件之前,您不会理解很多原因为什么事情是这样完成的。如果您可以有效地使用基于它的库/应用程序,您可能没有必要学习自己编写代码,但您不会真正了解它在后台做什么。

    【讨论】:

      【解决方案4】:

      也许您在学习编程时采用了过于形式化的方法。我对典型的教科书感到厌烦

      1. History of Java
      2. Variables
      3. For statement
      ...
      

      想想一些对自己有用的东西,例如一个小的 Android 应用,然后在途中了解您需要什么。

      【讨论】:

      • 我到底怎么了。它很可怕,但它是我在互联网上学习如何编程、变量、if、else .. 历史等的唯一方法
      【解决方案5】:

      先尝试编写简单的程序。你写的代码越多,你对它的理解就越好。没有人可以仅通过阅读书籍或编写代码来学习编程。编程一开始看起来很难,但最终它变成了第二天性。 永远不要记住代码。没有什么好的结果。只需了解特定类的作用,IDe 将帮助您编写方法和属性。如今,几乎所有 IDE 都具有自动完成功能。 不要为您在应用程序中看到的代码量而烦恼。其中很多是由游戏引擎自动生成的,尽管您应该了解它们的含义和作用。 举个例子,这是我制作的一个简单转换器应用程序的源代码。您可以看到这里有多少代码,但使用 Netbeans IDE 我只写了两行代码,所有其他代码都是自动生成的。

      /*
       * To change this template, choose Tools | Templates
       * and open the template in the editor.
       */
      package Home;
      
      /**
       *
       * @author Windows8
       */
      public class CelsiusConverterGUI extends javax.swing.JFrame {
      
          /**
           * Creates new form CelsiusConverterGUI
           */
          public CelsiusConverterGUI() {
              initComponents();
          }
      
          /**
           * This method is called from within the constructor to initialize the form.
           * WARNING: Do NOT modify this code. The content of this method is always
           * regenerated by the Form Editor.
           */
          @SuppressWarnings("unchecked")
          // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
          private void initComponents() {
      
              tempTextField = new javax.swing.JTextField();
              celsiusLabel = new javax.swing.JLabel();
              convertButton = new javax.swing.JButton();
              fahrenheitLabel = new javax.swing.JLabel();
      
              setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
              setTitle("Celsius Converter");
      
              celsiusLabel.setText("Celsius");
      
              convertButton.setText("Convert");
              convertButton.addActionListener(new java.awt.event.ActionListener() {
                  public void actionPerformed(java.awt.event.ActionEvent evt) {
                      convertButtonActionPerformed(evt);
                  }
              });
      
              fahrenheitLabel.setText("Fahrenheit");
      
              javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
              getContentPane().setLayout(layout);
              layout.setHorizontalGroup(
                  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                  .addGroup(layout.createSequentialGroup()
                      .addContainerGap()
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                          .addGroup(layout.createSequentialGroup()
                              .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                              .addComponent(celsiusLabel))
                          .addGroup(layout.createSequentialGroup()
                              .addComponent(convertButton)
                              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                              .addComponent(fahrenheitLabel)))
                      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
              );
      
              layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {convertButton, tempTextField});
      
              layout.setVerticalGroup(
                  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                  .addGroup(layout.createSequentialGroup()
                      .addContainerGap()
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                          .addComponent(tempTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                          .addComponent(celsiusLabel))
                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                          .addComponent(convertButton)
                          .addComponent(fahrenheitLabel))
                      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
              );
      
              pack();
          }// </editor-fold>                        
      
          private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
              // TODO add your handling code here:
              //Parse the celsius input into double
              int tmpFah = (int) ((Double.parseDouble(tempTextField.getText())) * 1.8 + 32);
              fahrenheitLabel.setText(tmpFah + " Fahrenheit");
          }                                             
      
          /**
           * @param args the command line arguments
           */
          public static void main(String args[]) {
              /* Set the Nimbus look and feel */
              //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
              /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
               * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
               */
              try {
                  for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                      if ("Nimbus".equals(info.getName())) {
                          javax.swing.UIManager.setLookAndFeel(info.getClassName());
                          break;
                      }
                  }
              } catch (ClassNotFoundException ex) {
                  java.util.logging.Logger.getLogger(CelsiusConverterGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
              } catch (InstantiationException ex) {
                  java.util.logging.Logger.getLogger(CelsiusConverterGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
              } catch (IllegalAccessException ex) {
                  java.util.logging.Logger.getLogger(CelsiusConverterGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
              } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                  java.util.logging.Logger.getLogger(CelsiusConverterGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
              }
              //</editor-fold>
      
              /* Create and display the form */
              java.awt.EventQueue.invokeLater(new Runnable() {
                  public void run() {
                      new CelsiusConverterGUI().setVisible(true);
                  }
              });
          }
          // Variables declaration - do not modify                     
          private javax.swing.JLabel celsiusLabel;
          private javax.swing.JButton convertButton;
          private javax.swing.JLabel fahrenheitLabel;
          private javax.swing.JTextField tempTextField;
          // End of variables declaration                   
      }
      

      【讨论】:

      • 嘿,谢谢!您写了 2 行,但您在库中找到了其余部分并将其添加到代码中,对吧?
      • @user3027066 比这更容易。例如,要生成用于在页面上显示按钮的代码,您只需将按钮拖放到设计界面中即可。 Netbeans 将负责生成代码。或者您只需从菜单中选择一个按钮事件,就会生成该事件的代码。在 WPF 和 asp.net 应用程序的 C# 开发中,情况完全相同。
      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 2010-09-05
      • 2012-04-01
      • 2019-06-13
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多