百科问答小站 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,有的能给玩具熊编程,有的可以操纵空调,有的可以做股票交易。

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

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




  

相关话题

  程序员兄弟们生涯中写过最大的bug是什么? 
  在初期用户不多的时候,服务器的核心数,内存和带宽应该优先升级哪个? 
  大部分女生都不愿意找程序员当男朋友的吗? 
  同事一点都不在乎程序性能,该怎么沟通? 
  为什么很多计算机上的阿拉伯数字零(0)中间都有一个斜杠(/)? 
  同事一点都不在乎程序性能,该怎么沟通? 
  linux 在终端打开程序后关闭终端,程序也跟着关闭了怎么办? 
  如何优雅地利用c++编程从1乘到20? 
  如何看待Windows系统性能不及国产麒麟操作系统? 
  大二学生,计算机科学与技术专业,学到数据结构和组原有点心态爆炸了,看不懂敲不出代码,还有救吗 ? 

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





© 2024-11-08 - tinynew.org. All Rights Reserved.
© 2024-11-08 - tinynew.org. 保留所有权利