如何优雅地进入IT世界

以下三段是废话,请跳过。

 
(废话段1)有文科生想了解IT世界。这并不是多么神奇的事,想中小学时代还不分文理时,该喜欢IT的本来就喜欢。小学时,我当着全班的面说将来想成为“电脑大师”,称呼虽然脑残,至少证明我从小就热爱这东西;高中时姑父问我以后想做什么,那时词库大了,我说想做软件工程师,非常精准、到位,庆幸自己在成长的同时并未抛弃儿时的爱好与理想;大学志愿,我把软件工程填在第一专业,并如愿以偿地进去了,然后发现根本没人愿意报这专业,全是调剂过来的。有这么一份从小到大毫不动摇的爱好与理想,这是一个多么励志的故事啊!
 
(废话段2)然而与此形成鲜明对比的是,我并没有如饥似渴地学习专业知识,既没成学霸,也没成大牛。小学时,光是记住鼠标发明者的名字就胜人一筹了,如今真正接触这个领域,越来越意识到自己是何等无知,结果就在无知中彷徨度日,进步甚微。现在,我这枚渺小的IT屌丝要写一篇《如何优雅地进入IT世界》,顿时发现这纯粹是件不自量力高调寻喷的蠢事。
 
(废话段3)然而题既已开,又怎能轻言放弃,上网查询,思忖片刻,柳暗花明。做这件事,上有大神无数,装逼无路,况自己尚在学校,不了解外头行情,断不敢班门弄斧,把自己知道的说出来就可以了。从水平上讲,我也只算刚踏入门槛,如何再往进走自己也正在摸索,于是只好把“如何抬腿跨进门槛”的经验拿出来分享。我是个学生,所能道者大抵也便是学校里教的内容,但这些课程本身便是让一个外行成为内行的系统化途径,如此而言,我以下要写的还是具有一定价值的(自我安慰状)。
 
IT者,Information Technology也,乃信息技术之意,简释之就是处理信息的技术合集,笼统地说包括软硬件两大部分,个人出于兴趣去接触,软件是个很好的选择,零成本,可操作性高,故而此处只讨论软件部分。
 
IT是个魅力十足的神奇世界,它不像别的领域那样只可远观难以把玩。你若对医学感兴趣,最多抓只老鼠研究研究,不可能有机会在人身上动刀子;你若对园艺感兴趣,大抵只能买几样盆景,一般人无法真正去大规模种植、管理、营销。IT则好比文学,你写首打油诗就步入了文学殿堂,你写个hello world就进入了IT世界,而这一切都是极易上手、无需成本的。
 
然而IT比文学复杂得多,小学生作文与莫言的书用的都是那些字,而在IT界中不同领域、不同层面所用到的技术则截然不同,一辈子都没法了解全部。我们所能做的是,通过一些基础知识入门,然后选择自己感兴趣的方面再深入学习。PS:这里要给的不是学习方法,仅是学习内容。
 
基础中的基础
我们不妨就从最简单的hello world开始,从编程开始。众所周知,计算机的运行靠的是01码,我们称之为机器码(机器语言),计算机能识别,人看着就头大了,于是出现了汇编,汇编使用了人能看懂的自然语言中的单词代替对应的机器码,比如ADD表示两数相加,瞬间有了可读性。汇编相当于对机器语言的直译(它们同属低级语言),编写复杂程序时难度依然很大。其实别说复杂程序了,我单看入门书上的那些简单的例子就要疯掉了,一个简单功能它要写好多句。而且汇编面向硬件,这台机子上写的程序可能在另一台上就没法用。
 
于是伟大的发明诞生了,那就是高级语言,我们现在常听说的C、C++、Java、Pascal、Python等等都是高级语言。编程入门首选C,许多人建议以Python、Ruby作为第一语言,说是容易上手,但我仍建议选C,或许上手会慢些,但它更接近硬件,更有助于掌握编程语言的思想精髓。而话说回来,学C其实也不难,找本合适的薄书一看。
 
C之后就是C++,这是为了理解面向对象的思想,所谓世间万物皆对象,具体怎么回事这里就不赘述了。Java也是典型的面向对象语言,但C++与C一脉相承,它们的语法是一样的,甚至可以混用,学起来比Java轻松一些。虽然Java用途甚广,但你不必担心,学会C++之后Java掌握起来轻而易举。
 
至此,在语言学习上其实已经足够了,在没有应用需求的情况下,不必急于接触更多其他语言。编程思想达到一定程度,掌握一门新语言是分分钟的事,或者说根本不需要掌握,用的时候搞本书查一查就完了。关键是,对于编程而言,最重要的并不是看书学习,而是实际动手操作。刚入大学时,学长就忽悠我们说这个专业动手性强,可以自己做很多东西,结果到头来学了那么久编程,做了那么多作业,为自己做的程序少得可怜。或许是我想象力不够丰富,不是初学者的好榜样。练习编程,除了完成练习题之外,最好能尝试去实现一些自己的想法,比如小游戏,比如手机端的APP,还可以做个小网站,挂在自己电脑上,别人可以访问,成就感满满,再正式些,申请个域名,租个服务器,都可以开始创业了!想想还有点小激动,但这一切都是建立在牢实的基础之上的。
 
在实际应用中,若想做好程序,光学语言是片面的,我们还需要其他一些必备基础,它们使你对程序、对计算机了解更全面、更透彻,我总结为五大方面(以对编程的影响程度排序),也是我们专业求职的必考内容。
 
1) 数据结构与算法
既已编程,又何能脱离数据结构与算法,表、树、图,排序、检索,虽然许多语言都已经做好了封装,但掌握一点基本思想还是十分必要的。这些东西十分锻炼人的思维能力,不止编程,在其他地方也大有作用。许多人对算法兴趣浓厚,智商大考验,考验说是脱离于IT的,进入了数学领域,深入下去,你会为那些NB算法而惊叹。
 
2) 数据库
刚接触数据库时我瞬间凌乱了,原来除了文件系统还有其他组织数据的方式,它是如此犀利,操作灵活,安全性高。重要的是,许多程序都需要数据库支持,因此编程必备。
 
3) 操作系统
操作系统是人和计算机之间的桥梁,它管理着计算机所有的软硬件资源。程序运行于操作系统之上,就如船只浮于水,你若对操作不够了解,做程序便只能停留在面上,你的浆划不到水里,船也没法控制。举个简单的例子,不了解进程的工作原理,怎么做多进程软件呢?
 
4) 计算机网络
网络在当今的IT界扮演着越来越重要的角色,现在一台不联网的电脑能做的事少之又少。于编程而言,不学网络写不了分布式软件;于素养而言,一个不懂网络的IT人士未免也太水了吧!
 
5) 计算机组成原理
如果你对计算机这复杂的玩意儿的构成及原理很感兴趣,这方面的知识不容错过。它是揭开计算机神秘面纱的关键,小到编码与指令,大到存储与I/O,是了解计算机硬件的好途径。它看似对编程没有直接影响,更多的是属于素养型的知识(但学通之后猛一回头,相信你对程序设计会有更高层次的领悟)。
 
基础中的扩展
1) 编译原理
当你程序写到一定程度,成就感会渐渐消失,为什么呢?因为你所用的高级语言都进行了一定程度的封装,你接触不到它们的工作原理,这个时候就该编译原理登场了。编译是将高级语言转换为机器语言的过程,是将人类思想翻译给计算机去执行的过程。编译原理告诉你高级语言的工作原理、它们是如何被设计出来的、为什么一句代码你这样写可以那样写不行。
 
2) 汇编语言
除非做一些特殊产品,现在已经很少使用汇编,况乎业余人士。若你学有余力,可适当了解之;若你兴趣浓厚,我也不拦着你成为大神。当然话说回来,汇编对于IT素养是不可或缺的,百度百科有言:“至今为止,还没有程序员敢断定汇编语言是不需要学的。一个不懂汇编语言的程序员,只是三流的程序员,这是大部分人的共识;同时,技术汇编语言是面向机器的程序设计语言,精湛的汇编程序员,已经脱离软件开发,挤身于工业电子编程中。一个电子工程师,主要的开发语言就是汇编,C语言使用只占极少部分,而电子开发工程师更是千金难求,在一些工业公司,一个核心的电子工程师比其它任何职员待遇都高。”
 
应用方向
基础学好之后便可以选择一些自己感兴趣的方向深入了解了,遗憾的是,众多的应用方向虽然有趣,但若不从事这样的行业,我们大抵也只能停留在纸上谈兵的层面。而既兴趣使然又何所谓呢,仍然抑制不住自己挖掘理论知识的冲动吧。PS:有不尽处,恳请补充。
 
1) 嵌入式
嵌入式是一个应用极广的方向,工业中的车床、监控,航天领域的卫星、火箭,上网用的路由器、交换机,生活中的汽车、手机、各种家电……只要是一台实现了一定程度自动化的用电机器,就无不涉及嵌入式系统。如果你好奇这些玩意儿是怎么实现的,果断走起。
 
2) Linux/Unix
相信你在学习操作系统的时候就已经接触到这货,没错,这货就是个操作系统。平时大家都习惯于Windows,初接触Linux/Unix一定多少有点别扭,这里不单是操作习惯的区别(比如Mac OS与Windows的区别),它们在根本上有着很大不同。不同在哪里,不必赘述,百度一下你就知道,知乎一下更能得到许多切实的回答。电脑里要是装了个Linux/Unix,感觉瞬间高大上了有木有,随便输两句命令,各种装逼范不解释,异常专业。国家现在也仍未放弃做自己的操作系统,你若有心,不妨炼成大神,勇敢地去实现OS报国的梦想吧!Linux的艺术在于开源和命令行,你若是出于好奇想体验一下手感还是算了吧,作为普通计算机用户,若是没有非要在Linux下跑的软件,根本不需要装这玩意儿,完了许多事还做不了(or不好做)。我自己就相当不喜欢Linux/Unix,作为一名“专业人士”着实不该,找工作时多重要呀,尼玛再重要我也不想去碰。
 
3) 云计算
云计算是分布式计算的一种,你可以先了解一下分布式计算,但相信你会对云计算最感兴趣。云是一个比较新的概念,现在计算机的许多硬件技术都发展到了一定的瓶颈,单台计算机的计算能力十分有限,而超级计算机的成本又非常高,于是人们考虑将普通的计算机联合起来使用,正所谓众人拾柴火焰高。好比寒暑假作业一大堆,同学们分工合作,每人负责一小部分,一瞬间就做完了。《电磁炮》里的御坂网络就是一个云计算的例子,性能表现堪比“树形图设计者”,在第二季中还成果计算出导弹轨迹,咳咳,扯远了。云时代以通信的代价换取计算效果,现在如火如荼的云存储、云服务器想必大家都有耳闻,不少人都已经在用了。然而目前不论是云计算还是分布式计算都仅处于初级阶段,尚未达到理想中的那种状态,基本上还是采用集群(依然是集中式)实现的,依然分服务器和客户端。以云存储为例,我们的个人PC上并未划出一部分硬盘为云服务。但看形势人们似乎并没有想往这方面发展,而是致力于实现终端的简化,简言之,以后你买一台能上网的显示器就可以当PC用了,所有的计算与存储均在云端完成。然而我相信云的力量远不如此,只有想不到,没有做不到。
 
4) 存储
计算机一强于计算,二强于存储,这就是其人类远不能及的两大能力。数据在计算机中的组织形式非常有趣,也是我个人最喜欢的部分,存储的金字塔结构、存储介质、文件系统、云存储什么都老有意思了。可以说,存储是计算机离普通用户最近的部分,上网也好,听歌也罢,我们几乎每天都在电脑里存取东西。4G以上的电影拷不进FAT32的U盘、迅雷会员的离线下载、网盘的云秒传,无不与日常生活息息相关。
 
5) 无线通信
这部分内容特别有意思,至少我是这么认为,可能是贴近生活的原因:我们天天在使用手机,也好奇着手机通信是怎么实现的。上面基础部分的计算机网络大抵覆盖了有线通信的内容,而人类所用的通信基本上就是有线和无线两类,在这里补一补无线,你就理解全面了。并且现在无线的分量越来越重,4G手机的网速能秒杀绝大部分家庭宽带,无线路由器也逐渐成为家中必备,笔记本、平板、手机无不如饥似渴地接进WiFi,有线正被无线蚕食鲸吞。如今都诞生了无线充电的方式,何况通信呢!(推荐丁奇《大话无线通信》一书,大量比喻,由浅入深。)
 
6) 语音、图像处理
如果你对语音输入、语音合成、指纹识别、人脸识别这类技术有兴趣,欢迎进入此坑。当时我差点就选这方向了,幸亏灵机一动,哎妈这不都是算法和数学么,罪过罪过。开个玩笑,了解一下其基本原理还是比较轻松的。
 
行业资讯
IT是个日新月异的行业,光顾着技术研究而不跟着前沿走是闭关锁国的陋习。拿经典的摩尔定律来说,计算机配置翻番那么快,而现如今的新产品换代更加迅猛,资讯跟踪真可谓是逆水行舟不进则退啊!若是条件允许,能订些杂志是最好的,实在不行只好淘电子版、关注各种博与微信了。
 
配件:CPU/APU、显卡、硬盘、主板、显示器,甚至鼠标、键盘、机箱、电源,配件控、性能控、装机控走起,游戏发烧友更是这方面的专家。现在配件们已经涉足庞大的手机平板市场了,更是不得不关注。
 
产品:PC、一体机、笔记本、平板、手机,各大品牌,配置如何,卖点何在,价格多少,高端货什么的买不起看看也舒服啊。
 
新发明:技术改变生活,你崇尚自由,不妨在家里搭个NAS,坐着躺着拿平板看部高清电影;你喜欢客厅里的沙发,不妨搞一台智能电视,海量资源;你爱运动,好新鲜,可穿戴设备花样层出……不过话说可穿戴还未普及,可植入都已经被提出来了。
 
公司动向:利益是推动技术发展的巨动力,你看那眼花缭乱的新产品们,哪样不是市场竞争的成果,好在企业们的战斗给消费者带来的基本上都是好处。现在打得热火朝天的苹果谷歌微软、英特尔AMD、联想三星小米诺基亚,互联网公司更是数不胜数。谁说市场是没有硝烟的战场,我看是狼烟四起火光冲天啊。
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值