打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何自学计算机?

我想你说的计算机是指计算机科学吧,它包括线性代数,高等数学,逻辑学,概率学,组合学,编程语言,软件设计,数据库,计算机网络,操作系统,计算机硬件导论,理论计算机,图论,优化(线性优化,牛顿算法等等),人工智能,软件工程,算法和数据结构,图像处理和计算机图形学等等……

因为这些课一般都是要求自己按照自己的兴趣去选择某个方向去读一些文献, 或者是给乐高机器人编个程序, 让它去完成指定的任务, 例如在一个有上下坡和各种拐弯的轨道的开头抓一个球, 然后沿着轨道跑到终点把小球放到指定的位置, 当然这个乐高机器人还是要求自己组装的, 亚马逊上就有卖的, 不过好像还是挺贵的。

但是推荐你自己做两个实习, 练习一下. 你可以尝试用C#和XNA4.0写一个类似于魔兽争霸1的策略类游戏, 要求最少2个用户可以玩的, 可以在windows 7 上运行的, 如果感觉一个人做比较吃力, 最好找3-5个人一起, 明细化分工, 正好可以运用一下软件工程中学到的软件设计的方法和流程自己实践一下, 我这里就是组一个4人的队伍, 然后做好分工, 在上课期间自己找时间写, 每周定一个任务去完成, 持续3个月到期末必须得完成.

另一个就是按照自己的兴趣做一个自己感兴趣的课题. 我这学期在做本科的项目, 这边是要想毕业都要先做一个项目, 项目过了, 才能有机会申请毕业论文. 我现在已经做了2周了, 课题是比较搜索引擎内能用到的几个压缩算法(例如: Elias Gamma, Elias Delta, Golomb 和 variable byte)的优劣, 实现一个新的Simple-8b的压缩算法, 这个算法是以word为基础压缩的, 其他算法一般都是以bit 或者byte为基础的, 然后继续比较做test 用gnuplot画图, 最后还要想办法改进这个Simple-8b算法, 使得运行时间得到进一步缩短, 必须用C++写. 刚刚吧Simple8b这个算法实现完, 其实主要的工作是把我的superviser写的压缩和解压缩的代码进行优化, 让运行时间更短. 别小看优化, 这个其实比真正的实现一个算法更加难, 因为实现一个算法其实就是把既有的思想转化为代码就好了, 但是优化的话你需要用4-5种不同的方式, 不同的结构去实现这个算法, 然后在进行大量的数据的test去评价哪一种情况在什么环境下的运行时间更短, 然后再组合出一个在大部分环境下针对大部分情况, 运行时间最短的代码. 有时候只是简单的把一种赋值形式换成另一种形式可能就能提高33%的速度, 例如将一串数字压缩进一个64Bit的变量里, 如果你是选择每次压缩一个数字然后每次再压缩其他数字的时候用比特运算讲这个数字向左移动, 那么这样耗费的时间其实是比你一上来就把最前面的数字压缩到64bit的变量的最左端, 然后依次进行, 这样其实是最快的, 因为你一开始就将它保存到位, 后面处理器就没必要再去记着我还得继续把之前的移动一下才能继续压缩后面的. 目前来看, 我的项目已经是完成了, 做完之后自己再回头看一下, 其实发现变成也并没有那么困难, 而且通过类似这种项目, 能够很好的练习一下C++的指针, 对于个人的编程能力也是一个很好的提升, 最最重要的就是, 当你需要测试某个算法在好几十G的数据上的运算时间时, 你会尽可能的说服自己去写一些小程序来减少自己手工工作的时间, 我最后运行测试的时候都是运行一个程序然后就看一集美剧等着结果, 这样养成习惯, 你会有越来越多的机会锻炼自己的编程能力. 项目已经结束了1个月了, 今天才想起来更新一下. 如果有兴趣的可以去这个地址上看一下我做的这个项目的介绍以及相关的代码:

Bachelor Project://ad-publications.informatik.uni-freiburg.de/student-projects/efficient-code-for-de-compression

目前在做毕业论文, 软件实习已经顺利通过了. 软件实习就是和另外6个同学组一个小组, 然后用XNA或者MonoGame编写一个大型的即时策略类游戏, 当然有一系列的要求, 类似于实际工作中的客户的要求, 学校还给了Trac系统用于模拟实际工作环境, 每周都要上去登记. 实际工作量的话, 一个实习下来基本上需要编程150个小时最少. 目前来说软件实习已经做了大概80%了, 我已经写了13k代码了, 其实我觉得很多代码都挺简单的, 不过用来学习C#到是很不错的练习, 游戏中的各个方面能基本上让你接触到C#的各种基本数据类型以及函数, 这个游戏我是自己设计并写了所有Menu的结构和类, 顺便把储存和读取游戏, 以及游戏逻辑也做了, 我同学们主要是游戏的具体内容, 我负责帮助他们查bug以及排除, 有时候他们花很长时间都写不好的, 我只能自己来写, 例如最近在弄的path finding, 本来就是一个简单的A*算法实现之后改成双向A*就可以, 有个同学折腾了一个月结果也还是找不对路. 目前这个游戏已经写完了, 如果有人想看看代码, 我可以把我所写的代码放到Github上, 其他人写的码抱歉不能放出来, 因为我问过其他人, 他们不太想把代码放出来.

毕业论文我在做一个关于欧洲的长途客运的数据的GTFS, 同时尝试修复不完整的数据, 然后将GTFS用于TRAVIC - Transit Visualization Client://tracker.geops.ch/上, 可以供一些欧洲的客运公司模拟静态客运情况, 当然所有的都是免费的, 目前来说, 我刚刚处理了一些德国的OSM地图信息, 55G大, 处理起来真心麻烦, 一般的xml处理库都无法读取玩全部数据, 我试了很多例如tinyxml库, 都不行, 最后还是找到了xmlReader 和xmlWriter两个API, 非常好用, 而且对于大数据处理非常省时间, 当然用于大数据时还是免不了要用指针才行, 不然和其他的库一样, 也是没办法都读去完整数据. 里面的关于火车的信息, 我都提取出来了, 但是有一些信息是不完整的, 例如某一条铁路, 就有一段铁路缺少车站, 这个必须自己想办法补充完整, 我目前来说就只是用内部的完整的其他的火车的车站信息去填充或者是猜车站信息. 目前程序部分已经完成了, 基本上就是用lxml库去读osm文件, 用boost库里的rtree去填坑, 剩下的就是一些小算法和数据结构的应用, 寻路算法, 深度优先算法, 根据不同需要区分用哪一种list, 等毕业论文交上了, 我再把码放出来, 届时应该是可以从TRAVIC网站上看到欧洲部分的效果了, 我自己私下看了一下, 还可以.

你要是想自学,可以在网上搜一下MIT的书,如果MIT没有的,就搜书名+Springer,这是一个出版社,我上课用的参考书基本上都是这个出版社出的或者是MIT的教授写的,非常实用,如果你还想学html,css和javascript那就自己找书看,我推荐一本叫网页制作从入门到精通的书,写的很详细,学校里由于没有开设这门课,所以我都是自学的,稍微有点编程基础的再学网页制作,会觉得非常简单。会了网页这块再看PHP也会入门很快的。

编程语言的话我建议先学C++,再学java,最后学习C#。C++因为要用到指针,会帮助你养成良好的编程习惯,再学Java这些能让你更容易上手,C#纯粹是为了windows软件的开发,学了半天编程,用C#写个exe小程序会让你看到自己的学习成果,从而更加有动力继续学习。推荐你在学习C++的时候最后自己用C++写一个在命令行玩的扫雷, 并不是很复杂, 自己只需要整理好扫雷有哪些功能, 以及游戏规则, 然后用指针很好实现, 一般来说1天就差不多能写完, 初学者的话可以尝试在一周内写完. 我这里也有自己写的一个扫雷, 如果你写完之后运行不了或者是有什么问题, 可以联系我, 我把我的发给你.

计算机科学是一门和数学紧密联系的学科,不要抱着数学凑合看看,会编程就行的心态去学,不然到后面数学会成为限制你编程能力和软件设计能力的瓶颈,最好是先看数学类的书,多做练习,然后用matlab或者R软件验证下矩阵和概率的习题,matlab还能用来实现数学上的优化算法,simplex, newton算法等,很实用,甚至能用matlab把分辨率低的图片通过newton算法提高分辨率。

建议暂时就这么多,以后有什么新的建议我会再补充,然后你现在就可以开始看了,祝你学习愉快。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
计算机编程算法和数学有什么关系?
学妹:大学四年以算法为重还是技术为重?
程序员成才的关键
编程究竟是数学还是语言?
我才入门Python,你又让我出门——MIT正式发布编程语言Julia 1.0
玩游戏学编程第二期:官方免费巨作,目标是业余时间也能挣大钱!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服