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

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

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




  

相关话题

  Python 的练手项目有哪些值得推荐? 
  有什么理论复杂但是实现简单的算法? 
  2021年你读了哪些觉得比较好的计算机书籍? 
  我连续加班4天就快崩溃了,996的人是怎么坚持的? 
  为什么大学程序设计老师不去外面公司当程序员? 
  为什么谷歌不像微软、思科、甲骨文那样搞认证体系? 
  为什么不同的死循环占用资源不同? 
  既然程序员一到deadline干活效率超高 ,那为什么不把距离deadline时间定的很短? 
  如何优雅地叫一个程序员给我修电脑呢? 
  程序员找不到对象到底是为什么? 

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





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