学习新语言时,什么是好的技巧或者练习?

时间:2020-03-06 14:46:54  来源:igfitidea点击:

当我们学习一门新语言时,有什么特别好的/有效的练习可以把握住这门语言呢?又为什么呢?

编辑:
最好寻找比" Hello World"更复杂的东西。

解决方案

'你好,世界!'

我确实认为这是一个不错的起点。它的基本操作仅需几秒钟,但我们要确保编译器正在运行,并且一切就绪。完成此操作后,我们可以继续操作。添加一个变量,打印到数据库,打印到文件。确保我们知道如何发表评论。这可能需要5分钟的时间。但是它很重要。

我个人喜欢制作一个简单的回显服务器和客户端,以使用该语言来进行网络编程。

以某种方式连接到数据,无论是数据库,文件还是其他...

红黑树。

射线追踪器。

除了hello world,我尝试将现有程序之一移植到新的languange。这将挑战我学习新语言的一些旧技巧,并帮助我建立一个新的类或者助手库。

我喜欢通过执行"真实"任务(供"个人"使用)来学习新语言。

我的第一个Java程序是在线多人游戏的客户端(然后我将其发布到了公共领域)

我的第一个vb.net程序是我的数字录像机的前端

我的第一个VHDL"程序"是64x32 led阵列控制器

除非我有一个将其应用到的"真实"项目,否则我通常不会做得很好。即使是化妆的人也会很快变得无聊。实际上,我发现将自己投入到更大的项目中间并对现有的项目进行一些小的更改是有帮助的。

青年汽车

通常,我会实现k-means聚类算法。

我相当于打个招呼世界是执行以下操作:

  • 检索多个输入(例如,命令行中的参数,GUI上的文本框)
  • 操纵该输入(即,对数字进行数学运算并处理文本)
  • 在gui上使用列表框。
  • 读取和写入文件。

完成上述操作后,我会感到对语言有很好的了解,并对IDE有了很好的介绍,以及使用该语言及其运行环境有多容易(或者实际上有多困难)。

在那之后,如果我想走得更远,我将在需要执行的实际项目中使用该语言(可能是某种实用程序)。

拖放图像库。

当我开始使用Win32和MFC时,这是我的第一个项目。我很快将所有代码移植到ActiveX控件中。然后,我用Java重写了这个东西。对于踢球,我再次用纯Javascript重写了它。闯入.Net时,我再次用C#重写了该内容。最后但并非最不重要的一点是,我将其用作学习Objective-C和UIKit的练习。

为什么?一方面,它是一种视觉上吸引人的玩具。我认为,从代码中获得即时满足是很高兴的,使用图像是我能想到的最令人满意的事情之一。

拉里·奥布莱恩(Larry O'Brien)撰写了许多博客,标题为"了解编程语言的15项练习",第1部分,第2部分,第3部分

有关详细信息,请参见Larry的博客。

第1部分。计算

  • 编写一个程序,该程序将单词" sum"," product"," mean"或者" sqrt"中的一个作为第一个自变量,并为进一步的自变量添加一系列数字。该程序将适当的功能应用于该系列。
  • 编写一个程序来计算数字数组上的Haar小波。 。
  • 编写一个程序,将位图图像的名称作为其参数。将Haar小波应用于像素值。将结果保存到文件。
  • 使用上一个练习文件的输出,编写一个可重构原始位图的GUI程序(注:Haar小波无损)。
  • 编写处理位图图像的GUI程序

第2部分。数据结构

  • 编写一个仅存储与放置在其中的第一个对象相同类型的对象的类(或者模块,或者我们拥有的功能:请将OOP术语映射到适当的范式),如果添加了不兼容的类型,则会引发异常。
  • 使用语言的习惯用法,实现基于树的数据结构(展开,AVL或者红黑色)。
  • 创建一个使用自定义比较器的新类型(即,覆盖"等于")。将以上对象无法容纳在内存中的对象放置到上面创建的数据结构以及标准库中,并在其中容纳更多对象。将标准库的性能与我们自己的实现进行比较。
  • 为数据结构实现一个迭代器。考虑多线程问题。
  • 编写一个多线程应用程序,该应用程序使用数据结构,可比较的类型和迭代器来实现特定于类型的存储功能,如练习6中所述。如何处理并发插入和遍历?

第3部分。库

  • 编写一个程序,该程序将当前日期和时间输出为网页上的ISO 8601格式的反向值(即:" 2006-06-16T13:15:30Z"变成" Z03:51:31T61-60-6002")。创建相同的XML接口(POX或者WS- *)。
  • 编写一个客户端程序,该程序既可以抓取上面的Web页面,又可以返回XML,并以另一种格式重新显示日期。
  • 编写监视电子邮件帐户的守护程序。当收到经过强编码的电子邮件,该电子邮件将解密为有效的ISO 8601时间时,程序会将系统时间设置为该值。
  • 编写一个程序,该程序连接到邮件客户端,对其内容进行统计分析(请参阅"垃圾邮件计划"),并将结果存储在数据库中。
  • 使用上一个练习,编写一个垃圾邮件过滤器,包括在邮件客户端中移动邮件

如果我们可以用2种语言来做所有这些事情,那么我相信Google可以为我们找到一份工作

我通常按​​照以下顺序执行以下操作:

  • 打印由用户提供的高度的金字塔(检查基本I / O,条件和循环)
  • 编写具有多态性等的类层次结构(检查OO概念)
  • 将小数转换为罗马数字(检查枚举和基本数据结构)
  • 编写一个链表实现(检查内存分配/取消分配)
  • 编写JUnit和JMock的克隆(检查反射/元编程)
  • 编写基于控制台的聊天系统(检查基本网络)
  • 修改(6)以支持通过多播进行群聊(检查高级联网)
  • 为(7)编写GUI(检查GUI库)

在那之后,它成为一个真正的项目...

基于控制台的俄罗斯方块

我喜欢用于学习编程的游戏,因为业务规则是精心划分的。我用一种新语言编写的前三个程序是Ro-Sham-Bo,BlackHyman和Video Poker。

选择一个我们已经了解的任务。这样,我们就可以限制需要吸收的"新东西"的数量。

我认为,对我而言,通过移植现有代码(例如,从另一个平台)进行学习始终是一项挑战和乐趣。只是简单的演示,桌游等