Discover best selling sofas, Lounge chairs and get an extra 10% off using the code SEDONA10
更新记录(点击展开):

2024/06/02:更新前端(主要为html/css/bootstrap以及cms)部分。
2024/05/29:更新完成Java-OOP-WEB service路线,以及数据库部分。

前提

技术领域,如果单独拆开去看一项一项地技术和框架的话,内容既多、又庞杂,也很难在真正走上工作岗位之前掌握所有需要的技术。但不同技术和框架,往往有共同点,共享的底层基础、类似的学习方式(比如阅读技术文档),它们也往往属于后端、前端、数据库等领域,因此对这些领域基础掌握的扎实程度,以及良好学习习惯的养成,对于学习并不断学习新技术是有巨大的帮助的。反言之,如果每次学新东西都当成全新的技术来学,一方面效率很低,另一方面也会割裂技术之间的深层联系。所以我反复想强调的就是打好基础,尤其是代码基础,它是你技术入门和消除那层隔阂的必由之路。

学习路线简介

你们这一学期的学习内容,基本涵盖了基础代码、前端、后端等各个领域,以及数据分析、Web Service等细分领域,因此我的想法是划分若干线路,以相对而非绝对的主次安排来进行具体说明。

  • Java基础部分,涉及基本语法以及面向对象编程(OOP)
  • 数据库部分,数据库是各领域技术的共同基础,需要非常熟练的掌握基本sql语句
  • 前端技术,html+css+若干框架(比如boot strap),前端是热门,即便不从事具体的前端,掌握基本的前端技术也是刚需,尤其是现在各种成熟框架越来越多的情况下。
  • 前端技术的脚本部分,主要是JavaScript,以及基于JavaScript的各种五花八门的框架。
  • 后端技术,比如后端脚本PHP,也包括web service. Web service这部分其实蛮重要的,因为它涉及很多请求(request)的发送、验证、数据交换(比如json)等等,应用范围非常广泛。
  • python以及数据分析,那么python是必须掌握的,因为能用python做的事情很多,比如AI领域,当然只要Java能学精通,继续掌握python并不是难事;数据分析是可选的,我的建议是掌握一些基本分析方法,即便不从事相关职业,也是有实际用途的。

因为重要性不一并且时间有限,不太可能所有内容都一视同仁。我的建议和侧重点还是在于Java以及数据库部分,这一部分需要大量的练习,其中包括基本算法的练习(类似于斐波那契数列那种)也包括小项目的练习(比如你们课程里的小游戏,同时我还会找一些更正经的小项目来给你练习)。JAVA-OOP-WEBSERVICE这是一条主线,外挂数据库

第二条线就是html+css+bootstrap,至少要掌握基础的页面布局。

第三条线结合第二条线,掌握网页CRUD的基本操作,JavaScript以及PHP方法的调用,跟数据库打交道等等。

第四条线就是复习一下python以及基础的数据分析方法,毕竟下学期还有数据分析的课。

Java-OOP-WebService线

Java基础

Java基础部分的学习素材部分,Moodle上给的学习资料就够了,你需要的是深入学习和思考,而不是用其它材料来补充,因为它的原理并不复杂,复杂的是通过练习提升熟练度,因此,利用这些材料我认为是足够了:
Topic: Basics of Programming | BBCAP23A3 Introduction to IT studies | Learn (hamk.fi)
学习并完成上面的所有exercise,有些练习可能非常简单,比如可能就一两个println,有些可能比较绕,需要仔细思考,甚至需要调试很久,那么我希望你无论简单还是难,都能一个个做下来,不要复制、规范代码、尤其是注释部分。注释一方面能反应你对程序的结构理解是不是清晰,同时也是帮助其它人理解你代码的重要手段,这一点非常重要。

P.S, 我希望你可以创建一个GitHub库,用来管理你的练习代码,至于如何布局,你可以自己考虑,你也可以视为GitHub练习的过程。

仅仅依靠Moodle上的这些练习是不够的,接下来我再补充一些(注意,练习是大头,需要占据大量的时间):

  • 首先是w3resource上的,之前分享了一部分,那么现在我觉得也不用去挑题了,可以穿插再学习过程中慢慢刷完。https://www.w3resource.com/java-exercises/
    这个练习分为很多部分,目前不需要你全部完成(除非你确实学有余力),我觉得至少需要完成Basic Part-I-II,Conditional Statement,Recursive Methods(这部分可能略有挑战,因为设计到递归这一经典算法,考验一下你的学习能力),Array。在OOP部分还会用到接下去的练习,这个一会到OOP部分再说。
    需要注意的是,w3resource上的题量是很大的,因此并不是说要一次性完成之后再看其它的内容,而是把它穿插到整个学习过程当中。
  • w3resource的练习聚焦于基础语法和算法,但不涉及具体项目;具体项目的需求又有别于基础练习,它会更全面的考察你对语言的理解、使用、整合的能力,因此我会挑一些小项目来供你练习。
    1、用户购买机票时,机票原价会按照淡季、旺季,头等舱还是经济舱的情况进行优惠,优惠方案如下:5-10月为旺季,头等舱9折,经济舱8.5折;11月到来年4月为淡季,头等舱7折,经济舱6.5折,请开发程序计算出用户当前机票的优惠价。
    2、开发一个程序,可以生成指定位数的验证码,每位可以是数字、大小写字母。
    3、在唱歌比赛中,可能有多名评委要给选手打分,分数是[0-100]之间的整数。选手最后得分为:去掉最高分、最低分后剩余分数的平均分,请编写程序能够录入多名评委的分数,并算出选手的最终得分。
    4、某系统的数字密码是一个四位数,如果1983,为了安全,需要加密后再传输,加密规则是:对密码中的每位数,都加5,再对10求余,最后将所有数字顺序反转,得到一串加密后的新数,请设计出满足本需求的加密程序。
    5、请把一个整型数组,例如存了数据:11,22,33,拷贝成一个一模一样的新数组出来。
    6、一个大V直播时发起了抢红包活动,分别有:9、666、188、520、99999五个红包。请模拟粉丝来抽奖,按照先来先得,随机抽取,抽完即止,注意:一个红包只能被抽一次,先抽或后抽哪一个红包是随机的,示例如下:example_6
    7、(又到了我最喜欢素数环节)判断101-200之间有多少个素数,并输出所有素数。
    8、双色球彩票,由前区6个红球号码和后区1个蓝球号码组成。前区6个红球号码是从1-33中选择;后区蓝球号码是从1-16中选择;而且前区6个红球号码是不能重复的。编写程序,能够让用户录入一注双色球彩票;也可以随机产生一注双色球彩票。

    严格来说,这些对于面向过程编程而言都不算复杂的项目,需求也较为简单,但对于巩固基础还是很有帮助的;关键在于多思考,独立完成,最好再想一想有没有其它算法可以更加优雅的实现,而不要满足于一种方法。

面向对象编程——OOP

如果说前面一部分是编程基础中的基础,那么面向对象就是现代编程的基础结构,“一切皆是对象”。就像上学期最后学的web service,你会发现其中所有的发送请求、接收请求、处理请求,以及读取写入文件等等几乎所有的方法,都是通过一个个对象来实现的。面向对象编程不仅可以使得你的代码结构性更好,更容易维护,自然也方便利用其它人开发的许许多多的框架,拿来即用;就像web service当中,有多少是我们需要from scratch编写的代码呢?其实非常少,依赖于面向对象和封装,我们可以在短暂的学习之后快速构建自己需要的应用。

因此熟悉OOP是非常重要的,熟悉OOP和熟悉基础一样,不是看懂例子就行,因为实际应用当中会有非常多的变化,所以必须通过许多的练习来熟悉OOP的这种抽象性,并且就像设计数据库结构一样学会设计一个项目的对象结构(例如生物-哺乳动物-人类这样的结构),为项目服务,也使得自己的代码更具可读性和可维护性。

这一部分的复习我依然不推荐第三方的材料,Moodle材料足矣。
练习上,首先可以快速过一遍Moodle上的练习包括Coderunner里的内容,因为确实比较简单,也没什么要绕的,应该很快可以完成,写一下是为了进一步熟悉。
然后补充w3resource上的练习,Java Object Oriented Programming – Exercises, Practice, Solution (w3resource.com),19个,数量也不多。
最后补充一个偏向实践的小项目,描述如下:

模仿电影信息系统:
  • 展示系统中的全部电影(每部电影展示:名称、价格)。
  • 允许用户根据电影编号(id)查询出某个电影的详细信息。

要求:无需图形界面,无需数据库,通过console实现即可。
提示:这个项目的实现需要自己先构建一个实现的结构,也要联系很多面向过程的内容。这样贴近实际的项目才能真正理解并熟悉面向对象的一些工作流程。因此我希望在这个项目上你可以多花点时间,它实际上是在接触数据库之前熟悉并结合面向对象、面向过程的一个很好的案例。

数据库

数据库实际上是一切应用的基础,尽管数据库可以以不同的形式存在,比如学过的mysql这种服务端、客户端分离的形式;也有基于文本的数据库,它不需要单独的服务端,而是通过文本的形式写入数据。但无论是哪种形式,只要是关系型数据库,原理都是相通的,也几乎会应用到你所做的一切项目中,因此对熟悉数据库以及SQL语句,是极为重要的。

你们的Moodle上关于数据库这块的内容是非常丰富的,Topic: Databases (3 Cr) | Introduction to Software Development (BBCAP23A) | Learn (hamk.fi),学习+练习+补充。

我认为比较重要的部分提一下:一方面是数据库的设计以及实体之间的关系,那么实体可能是来源于某个对象,比如学生对象,而在数据库里面,它就是对应一张表;那么学生和课程两个实体之间必然存在着某些关系,这种关系在数据库当中是如何体现的,这就是数据库的理论部分。它的直接影响数据库的设计,以及在具体项目中录入查询数据的方法,甚至像outsystems这种low-code平台,你也是要去设置实体之间的关系的,也许它不用敲那么多代码,但依然需要理解。因此在Moodle的第一部分,Introduction to Databases & Database Design,它是比较抽象的,阅读是需要费一些时间的,但也是非常重要的。

另一方面重要的必然是,肯定是select语句,尤其是涉及两张表的时候,你要理解inner join,left/right join和outter join的区别,以及如何选择属性(attribute)进行连接,在实际项目中,这种查询可能会变得非常复杂,写好多行,因此不可怠慢,只要相对简单的查询写的非常熟练,才能在复杂项目中游刃有余。

关于术语准确性的一点提示(这里可以点开)

说到这里插一些其它内容,在技术领域,术语的重要性不亚于任何其它领域,混用术语不仅不专业,还会严重影响沟通效率。就像表格、表单、表之间的区别,表一般指数据库里的表,英语是table;表单是UI上用来收集数据的一组组件的集合,英语是form;而表格则更为普通的普遍,excel是表格,UI上也可以有表格,它们一般仅仅用来呈现数据,而不需要接收数据。那么英语用哪个单词要看情况,像excel里就是sheet,网页上可能有grid,也可能有table,但肯定不能用form。我说这些是因为术语专业性需要从一开始就培养,如果你没有养成这种习惯,无论是在团队项目中还是在工作岗位,都会出现交流的问题,也会让人感觉不专业。

除了Moodle的练习外,那就是w3resource上的练习,练习内容和所需要的数据库pak已经帮你们整理好了,MySQL Practice · GitHub

其它一些练习可能就需要结合一些更加综合的项目来进行,根据项目的需求来设计数据库,具体在项目中处理数据等等,这也是一个需要结合具体项目来真正理解和巩固的内容,光靠练习也是不行的。那么一方面在Moodle(比如php)或者outsystems的练习和项目里面,会有一些需要设计并使用数据库,同时在这个指南的最后,我看能不能找几个综合项目,来涵盖这些内容,如果有的话我会更新在最后。

Restful Web Service

restful可以认为是web service的一个模板,学了restful之后,更便于学习其它web service,包括spring框架等等。我觉得现在的问题是怎么把web service是个什么东西以及它的重要性表述清楚。说白了,就像web service英文单词本身那样,说的是一种服务,基于网络的服务。我们拿openai举例,如果直接使用chatgpt,那么需要登录它的网站,通过网页来使用。但其实在更多的开发及商用领域,我们都是通过API来调用的。比如我自己开发一个软件,里面需要集成chatgpt的某些功能,那么我就可以通过申请openai的API和密钥,并根据使用量支付一定的费用,就可以在我的项目中来使用了。那么openai提供的API接口,实际上看上去就是一串网址,例如https://api.openai.com/xxxxxx,后面跟上分配给你的密钥之类的。然后通过这个地址传送我们需要处理的信息。这个实际上跟我们在restful里面的地址localhost:8080/rest/xxx是一个意思,它们都是web service,这样是不是容易理解了?而这个访问具体服务的地址就是API。也就是说web service是可以给多种其它应用来服务的,比如你们的项目就是接入了乐高,让乐高来调用,对吧?它虽然看上去是网址,但是跟网页并没有必然的联系。因此,web service实际上是一种基础的服务架构,适用范围是很广的,并且可以基于Java(当然其它语言也可以)所以它应该是接着Java这条线需要来复习和巩固的。

这一部分我认为不需要考虑Lego部分,因为这属于具体用例,跟web service本身关联并不是很紧。Moodle上给了非常好的教程和练习,
https://learn.hamk.fi/mod/resource/view.php?id=718076,这是教程,
外加8个task,说实话教程和这8个task我自己都是花了不少时间去琢磨去写的,涵盖范围和难易程度我觉得都不错,并且实际上chatgpt在其中也帮了很多忙,前前后后查了许多回答,查阅回答反复测试的过程本身也是学习的过程。看似花了不少时间,但如果没有gpt,只是单纯自学或者通过搜索引擎去搜的话,那可能就远不止这些时间了,所以一定要多加利用gpt,即便是plus的价格相对一个靠谱的助手来说,也是非常超值的。所以简言之吧,不需要你去补充额外的内容,教程+8个task,真真正正自己写出来,真正搞懂,那这一块就过关了。后面如果要用要学spring之类的框架就会容易很多。其实我一直强调的是,学技术,需要迈过新手门槛,那什么是新手门槛呢?就是真正学会并深入理解这 一系列的基础内容,比如Java的基础编程,比如前端的HTML/CSS/JS,当然也包括基础的web service,当你真正熟悉这些内容的时候,如果什么时候需要学习新的内容和框架,那么你就很容易上手,否则的话,每个新东西对你来说可能就是真正的全新的东西。那么技术领域的技术细分实在是太多了,比如基于JavaScript的框架VUE,那如果你js几乎不会,那vue都是一个全新的内容,bootstrap甚至tailwind css可能也是全新内容,如果html/CSS的基础不掌握的话。只有你迈过这个砍,才不会觉得迷茫,才能对各种新技术都有信心可以学会。

既然说到这了,索性再说点题外话,就是关于AI的学习。我觉得很多人虽然觉得AI很重要,但仍然是忽视对它的学习的,我可以比较不负责任的说,AI的学习的重要性甚至比其它所有技术加起来都要重要,只要你关注这个领域,就会发现隔三岔五就会有激动人心的新技术出现,这些技术甚至可以完全改变既往的软件开发方式和流程,所以无论如何,不管学校课程是否涵盖,都要尽量抽时间,甚至抽很多时间去深入学习AI。那么芬兰语当然重要,它可以保证你的下限,但想要提高上限,只能靠包括技术在内的各种能力;同时也要相信自己,不要轻易怀疑自己,因为一个怀疑可以扩散到另一个怀疑,很容易就会编程全盘的怀疑,所以往往会出现那种学的好就各种领域都学的好,学的差就基本全盘都很差的情况,积极的暗示和消极的暗示在各领域之间是会互相影响的。

(后面还包括网络、前端、python数据处理、重要性不一,未完待续。。。
简要提一下就是:1、css/html基础是必须掌握的,即便你不做前端,也会遇到需要微调或者需要看其他人代码的时候,包括bootstrap当中通过class name来调用不同的样式这种基本操作范式,在其它框架,甚至在low-code的outsystems当中也是能用上的;2、python同Java一样,语言本身也需要掌握,但这个本身不难;那么关于数据分析这一块,那么我建议你可以复习一下data analysis这部分的内容,因为新学期涉及到不少关于数据处理和分析的课;学python更重要的实际上还是为学习AI服务,如果你并不打算做数据分析的话,基于AI的编程基本都是用python,那么你那个选修课,基于python的数据结构和算法的课,就是一个不错的introduction。这些内容后面更新的时候再展开。。。

前端路线

首先关于前端这个概念,现在前端和后端早已不是功能意义上的区别,也就是说什么前端主要管界面后端主要管功能,不是这样了。后端可以跟数据库打交道,实现逻辑功能,实际上前端也可以,它们更多的是实现方式和使用场景的区别,而不简单是功能的差别。因此现在很多项目也可以完全用前端来做。

那么在现阶段如何面对前端呢?我觉得底线是,要对html/CSS,以及若干框架比如bootstrap,tailswind有基本的认识,知道这些框架的基本操作逻辑。比如说,在bootstrap当中,我们是通过不同的class name的选择和叠加来控制样式的,那么比如你在outsystems的low-code环境中,它也有一套自己的css样式库可以使用,也是通过class name来调用,这些基本的东西要知道。至于html/CSS代码,也是类似的要求,复杂的可以暂时不会,但基本的要能看要能写,因为即便你不做前端,有时候也要修改测试一些网页或者看其他人的代码,你起码要知道一些改动和微调如何实现。所以我的建议是,如果你不是立志于从事前端,或者现阶段还不清楚是不是要做前端,那么起码的,你要熟悉Moodle上HTML/CSS/BOOTSTRAP讲解部分的视频和文档,以及除了项目以外的其他小练习,wp部分可以不看,我觉得你多用一用这个wp,多看看这个后台,就会很有收获。具体来说:

  • 在静态网页部分,Topic: Building a Static Website | Web Development (CA23) | Learn (hamk.fi),也就是这门课当中,我希望你复习Learning Materials当中除了项目以外的内容,以及那个HTML/CSS的作业和Final HTML Assignment。如果你已经立志,必须或者极大概率要做前端,那么其实就相对简单了,独立完成一遍后面那个团队project,其实这种体量的project就是适合个人完成的,它可以比较全面的磨练技术。就像我之前说过的,过早分工其实不利于掌握技能。
  • PHP部分我认为不需要看,暂时。它本质上是一种脚本语言,它的难度不会大过Java。因此只要你把Java部分学好了,以后即便需要用php,那也很容易上手,这个阶段不用花费时间去看。
  • wordpress部分,我上面说不用特意去看,倒不是说不重要,其实这些内容管理系统都还是蛮实用的,很多时候你需要为自己为团队为公司快速搭建一个内容平台,其实用CMS就足够了,因此是否熟悉搭建流程,是否熟悉后台操作,倒也是蛮重要的。那么这一部分,首先关于搭建,我录过一个还是两个视频,那么除此之外就是具体上手来用,这有一个现成的wp在这里,真的就是,利用空闲实践去操作实践一下,收获都是点滴之间的。

3 Comments

  • shanmengqi

    a little summary,
    w3resource上的题很多,尽可能多刷,也可以在学其它内容的时候每天刷一点。
    补充的小项目比较贴近实际,没什么复杂算法,主要是把语言灵活运用到实践当中。
    数据库既要重视理论,也要重视练习,重视理论是即便在low-code中,也得知道数据库怎么设计,多表连接的查询如何处理,练习是为了巩固这种理解。
    web service这部分不难,但需要非常仔细地调试,我自己都花了挺多时间学习和搞那个8个task的。高效利用时间就行,总时间相比内容重要性和后期收益来说不算什么。

Leave a Reply