聊天截图
前言
开局两张图,剩下全靠吹了。
上面这两张图便是写这篇文章的原由。
对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平静的文字背后透露着迷茫与困惑,还对未来的焦虑。
透过屏幕,似乎看到了大一时的自己,不会装环境、不知道怎么编译, 错也不会解决,更不知道除了计算水仙花数、打印乘法口诀表…还能写些什么。
感同身受让我觉得有必要认真的好好回答一下(其实是因为这是小姐姐问的?,也算是对大一时的自己一个隔空对话。
怕自己不能够站在他们的境地去思考问题,搞成了「B」乎似的回答,也担心自己的回答不能帮到他们,甚至在某些方面对他们产生误导。
所以一般我都是选择回答比较政治正确的那种,比如:
“加油,你要多去实践,xxx”
“嗯嗯,你要多去看书,balabala”
“刚开始都是这样的,你多坚持一下呢,xxx”
…
怎么说呢,这都是正确的废话,谁都知道要多看书,要实践,要去动手写代码。
有时候想回答得更细致一些,但是迫于各种原因,也没时间去挨个的回复。
但这次学妹特地打了很长一段字,我看到了她想要快速适应计算机学习却又不得其法的迷茫,也许我的回答会对她有所帮助呢p>
因此我让她描述得更加细致一点,也很好针对性的提出一些建议。
可能有小伙伴没细看聊天截图的内容,我在这里再贴一次学妹的问题:
Java版五子棋
但是由于当时没有存 Github 的习惯,代码在换电脑之后没能留下来。
通过写这些项目,我像打通了任督二脉一样,不是学了什么厉害的算法、也不是高深的设计模式、更没有分布式这样高级的东西。
那是什么呢p>
我感觉到编程就好像搭积木一样,基本的函数、库、组件就是一个个的积木块,写的代码就是胶水。
只要我们心中有设计图纸,那就能通过胶水把这些积木搭建成想象的模样,缺少什么积木块,用到的时候再去搜索就行了。
在程序的世界,只要你想,你就能。
这段时间大概是我编程能力提升最快的一个阶段之一。
关于这个五子棋,还有个小插曲:
我写的不是联机五子棋嘛,然后启动的时候输入对方的 IP 和 Port 就能连上对战。
后来,我找了一个在其它城市上大学的高中同学,让他和我一起玩五子棋,但是呢,我傻乎乎的让他用 ifconfig 查看自己 IP 后告诉我,然后我在这边连接。
那个 ip 呢,大概长得像 192.168.1.xxx,熟悉的同学都知道,这个就是局域 内使用的 IP 了,并非公 上的 IP。
局域 内的 IP 只能在内 才能使用,所以我用这个 IP 是永远连不上的他的电脑的。
但是那时候我才大一,没学过计 ,根本不懂这里面的原理。
为啥我和室友能连上呢(因为在一个局域 )和其它学校的同学就不行p>
别看现在这个东西在我看来是常识,但我那时候是一点计 知识都没,就是硬着头皮学的 Socket 编程,去理解 IP 和 Port。
那是怎么解决的呢p>
当然是找谷歌呀!
在 上一番查询后,大概明白了,如果想让不同局域 内的主机进行 P2P 通信,需要一个公 中转服务器辅助进行 NAT 打洞。。。后来,我就又去尝试 NAT 打洞了,其中细节就不再描述了。
其实把我个人编程经历上写这么多,就是想展现我是如何一步步去实践的,遇到了什么问题,又是怎么解决的,把这个过程展现出来。
你看我没学任何计 知识,还不是通过边学边用,完成了 络相关的项目。
所以你离项目只差一个开始。
说到这里,不少同学又会说,我知道要多实践、多动手,道理我都懂。
可我还是不知道如何开始去写一个五子棋、贪吃蛇之类的东西。
好,那我就要问问你了
小北:为什么你学了 C 语言还是不会写贪吃蛇呢p>
学妹:老师没教我贪吃蛇如何在 C 语言中表示,也没教我如何让画面动起来,更没教我如何绘制 GUI ,所以我不知道怎么做。
这应该是大多数同学最典型的问题吧p>
那我们以贪吃蛇为例拆解一下,看看是如何从问题到代码的。
首先,贪吃蛇是一个个的节点组成的,节点肯定有横纵坐标吧个的节点组成了一条蛇,那自然应该想到链表吧p>
蛇还有什么属性移动的方向
还要食物位置吧些属性在 C 语言中用结构体表达出来就是这样:
typedef struct node{
int x;
int y;
struct node* next;// 单向链表
} SnakeNode;
typedef struct snake {
SnakeNode *pHead; // 蛇头
SnakeNode *pFood; // 食物
int direction; // 方向 0-3 依次表示:上、下左、右
…
}
接下要考虑的就是如何去绘制蛇,这个简单呀,就把整个链表从头开始把每个节点打印出来。
每个节点可以是一个圆点,也可以是方形。
那如何让蛇动起来的动,其实就是不断的将蛇打印出来,然后又清除。
并且不断的根据移动方向更新蛇的位置,只要这个过程够快,快过人眼能够分辨的帧率,那看起来蛇就像是在连续的动一样。
然后这个过程你还要去考虑如何检测碰撞,如何判断吃到了食物,还要随机产生食物。。。这些东西首先你得想清楚逻辑,代码实现其实if、else 、for 就足够了。
做项目的过程总会遇到不会的东西,也会遇到问题。
但是要相信,所有的问题在你之前基本上都已经有人遇到过了,只需要把问题准确的描述出来,然后去搜索引擎上搜就肯定能找到解决的线索。
如果你要等学会所有东西,才去开始做项目,那估计等到本科毕业也没机会。
本科上的就那几门课,Java/C/C++、操作系统、计 、编译原理、离散、数据结构……
可能没有学校会单独开一门课教你 Java Web、Python 写爬虫等等。
学完这些理论课,等到毕业,你会发现,依然好像什么都做不了,所以说,要动手,趁早。
并且理论上,学完一门语言,掌握了数组、链表、 if、for、函数这些编程最基本的概念,就有能力去实现一些诸如贪吃蛇、五子棋、扫雷这样的小玩意了。
这种通过项目去学习,以解决问题为导向的学习才是更加精准和高效的。
课堂上的学习大多数是老师灌输知识、学生记住,然后考试就能拿高分。
实际上有多少知识能转化为解决问题的能力呢p>
不好说。
还是那句话,编程就像搭积木,学完基础的,积木块都给你了。
你能搭出房子、车子、还是火箭这全靠自己。
二、善用工具、学会搜索
学会用工具,更要用好的工具。什么是好的工具p>
诸如 VSCode,Github、Stackoverflow、Google、知乎、Jetbrains 全家桶都是不错的编程工具,有的提高生产力,有的能解决问题。
都 2020 年了,就不要在机房装着 VC6 写练习题了。
不要等到大一结束了,还没上过 Github,更不知 issue、pull request 为何物。
计算机专业的学生,如果还在用百度搜索技术问题,送给你一段陈皓(左耳朵耗子)前辈的话:
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览212970 人正在系统学习中 相关资源:GHOST系统只剩C盘数据恢复软件_ghost分区丢失只剩c盘数据恢复…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!