百科问答小站 logo
百科问答小站 font logo



你会如何重新学习编程? 第1页

  

user avatar   ze.ran 网友的相关建议: 
      

游戏里常有这样的设定,开局的时候,整张地图都是雾蒙蒙的,什么也看不见。先选个地方造兵采矿,建立基地,再派兵去周围的地方探索,继续造兵采矿,占领的地方越来越多,整张地图也越来越清晰。

编程也是这样,一开始的时候,什么都看不清,什么都不懂,学了几年也写不出个软件。传统的学习模式是,学习,理解,运用,而学编程的时候,可以灵活一点。

把编程知识想象成一个3D网络,每个知识点都是网络中的一个节点,每个节点上有一盏灯,你学会了,灯就亮了,可以看到周围的节点,接着走,点灯,再走,再点灯,这样,灯亮的越来越多,看的越来越清楚,对于自己要走的方向也越来越有信心。

基本的思想是,先用后学,缩短反馈,反复迭代。

举个例子来说,假如初学Java,想写个下载软件,怎么办?

第一次迭代:写出个下载文件的类。

破冰阶段。这个阶段的目标是,先跑起来,懂不懂没关系,先有一份能运行,能打印log的代码出来。这样就有了反馈。其实很简单,网上搜一下,直接可以找到代码段,放进IDE就可以跑。

       public class DownloadFile {    public static void main(String[] args) throws IOException {        String fileName = "file.txt"; //The file that will be saved on your computer    URL link = new URL("http://shayconcepts.com"); //The file that you want to download         //Code to download    InputStream in = new BufferedInputStream(link.openStream());    ByteArrayOutputStream out = new ByteArrayOutputStream();    byte[] buf = new byte[1024];    int n = 0;    while (-1!=(n=in.read(buf)))    {       out.write(buf, 0, n);    }    out.close();    in.close();    byte[] response = out.toByteArray();      FileOutputStream fos = new FileOutputStream(fileName);    fos.write(response);    fos.close();      //End download code        System.out.println("Finished");   }  }        

学习阶段。捋出代码中的知识点,分别点亮。文件系统,Input/OutStream,URL,这些都是用到的知识点,研读官方文档,尝试调用不同的method, 跑起来就能看到结果,尽快学会运用。

专家阶段。想象自己是专家,试图理解为什么是这样。为什么要用ByteArrayOutputStream?还有其他的OutputStream吗?组织结构是什么?为什么要用URL类?还有其他的选择吗?各有什么优缺点?很多问题可能解答不了,但只要想了,就会很不一样。

这样,一轮迭代就完成了,也点亮了几个知识点,File, input/out stream, url。接着来,

迭代2:实现断点续传。知识点:http request, response.

迭代3: 管理多个下载文件。知识点:多线程,embedded db,sql。

迭代4: 加个UI。知识点:GUI,消息处理,响应模式。

到这时候,基本上代码已经改的乱七八糟,难以为继了。

迭代5:重构。知识点:软件工程,代码管理,设计模式。这是相当痛苦的过程。

迭代6: Web版,通过网页管理下载任务。知识点:web ui,server,db,各种协议,通讯模式,相当不容易。

迭代7: App版,同样的server端,通过手机客户端管理下载。知识点: app开发,各种实现方式。

迭代8: 爬虫版,专门用来爬网页,或者特定信息的版本。知识点: 爬虫,文本处理,dom。

迭代9: 股市版,爬下股票价格,画出各种图表,指标。知识点:画图,数学计算,金融知识。

在这个过程中,同步学习专业课里的OS,DB,软件工程,网络,会时不时有醍醐灌顶的感觉。

点亮的知识点越来越多,路也会越来越好走。可以选择向上走,做应用,也可以向下走,做底层。有的喜欢做app,有的能给玩具熊编程,有的可以操纵空调,有的可以做股票交易。

学习的过程不是线性的,而是在不断的调整,朝向最重要,最有兴趣的方向,完善自己的技能树。

就当作是程序员养成游戏吧。




  

相关话题

  法律是否可能被代码化? 
  怎么理解元编程? 
  知乎上为什么学历歧视那么严重? 
  几乎零基础的电子开发人员,如何成为优秀的程序员? 
  有哪些好的C#开源项目推荐? 
  如果编程语言变成高考科目会怎样? 
  有哪些老程序员都知道对新手很有用的经验? 
  准大一,零基础自学C语言,有什么简单易懂的自学书籍和课程推荐吗? 
  高级程序员的技能,对产品而言挺简单的,而初级程序员的技能,对产品反倒是最难的。这种错位意味着什么? 
  程序员写代码不应该是一件很酷的事情吗?为什么在国内被打上无聊和呆板的标签? 

前一个讨论
维修工修 15 个公用电话亭,主管说在前 8 个中有 5 个需修理。维修工听后直接走向了 8 号电话亭。为什么?
下一个讨论
大龄未婚男青年们主要把钱花在哪里了?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利