【问题重定义】
回答你的问题“大一新生如何搞把计算机、编程搞好?”前,我先翻译一下你的问题:
- 搞定学校课程是必须的,
- 更重要的是毕业后,有资本做更多的选择:读研、读博、出国、找好工作、甚至创业,
- 技能上至少要精通编程,如果有什么类似的重要技能我还没听过,我也想掌握和精通,
- 做一个优秀的工程师(程序员、研发人员)让我感觉很好!如果自己能成为大神,感觉也很好!
【回答字面的问题】
0. 计算机是个非常广泛的领域,人不可能掌握所有的知识,但花足够的精力,能够了解计算机的知识体系,掌握学习方法。
1. 搞好编程:简单理解就是提高编码能力(一般叫coding能力),秘诀是:读高质量的代码,亲手默写代码(可以少一些复制粘贴),读写的代码量到了一定级别,coding能力就上去了。ACM中刷题,尤其是水题,可以快速提高coding能力。
【编程只是手段,要解决的问题才是关键】
实际上,编程是要解决问题的,一定得依托一个实际项目或工程(大作业、毕设、商业项目都算),就会具体到某个很细的范围。
比如:前端开发(HTML/CSS,Javascript)、前台开发(偏向:业务流程实现、逻辑的部分)、后台开发(偏向:技术框架、引擎、数据库建模)、技术研发、手机客户端开发(IOS、Android)、服务器运维的开发,桌面客户端开发、操作系统开发、驱动开发(windows、Linux、Mac都有)、系统软件开发(比如:数据库)、网络开发(路由)、嵌入式开发(单片机、FPGA、ARM)、算法优化(广告系统、推荐系统、路径规划)、GIS开发(地图、导航)、模式识别开发(图像、语言识别等)、ERP系统开发(比如银行)、API开发(面向开发者的、面向第三方的接口等)……
怎么分类?
所处阶段:理论研究阶段,实验室研究阶段,商业应用阶段
按行业分类:通用产品、行业应用、互联网、外包
按用户分类:面向用户、面向开发者
按劳动性质分类:科学家-科研、架构师-设计、码农-堆代码、实施人员-点鼠标做配置
按是否需要算法分类:基本不需要,需要,非常需要
还有很多其他维度
【语言推荐,课程推荐】
半天我也没有说编程语言,语言很重要吗?引用lqs的一句话:只有一流程序员,没有一流PHP程序员。(意味着:一流人才是problem solver,语言不会是限制,有能力即学即用)
学了C等于学了一半C++,学了C++,基本上也就会了PHP、Java
学了C等于学了Python,学了Python,基本等于学了Ruby
学了任何一个优秀的Web框架,基本也相当于都学了
推荐顺序:先学C、学C++和Java,学PHP和Python,学一个开源的web框架(并把每个部件都搞清楚)、QT、桌面应用框架、objective-c。基本就到头了。
必须学好的基础课程:数据库、基本的数据结构、常见的普通算法(其他了解即可,不搞ACM可以暂不深究)
集大成的课:操作系统、计算机组成原理、网络
引你走向硬件开发的课程:编译原理、嵌入式开发
ACM课:算法、高级数据结构
引你走向商业的课:市场营销,经管,各类创业咖啡,36kr,参加冯如杯的创业竞赛
教你写文档的课:软件工程,各个大作业
实践课:C#、Java
引你走向科研的课:离散数学等
【特别推荐1:The Zen Of Python】
1. 内容自行google,自行探索。
2. yuki见解:Zen的理念,不仅适用于python,同样可以用于编程本身,甚至很多研发工作。工程师的核心能力之一是分析问题、解决问题,只有正确的问题前提,才会引向正确的结论。如果前提错了,一切努力就是在“买彩票”,“撞大运”,有时候中奖了,反而很沮丧。真正幸运的是,Zen的理念会让你尽可能拥有一个正确的前提和清醒的头脑。之后还有很多经验需要积累,大多是对问题的分类与分解、判断与定性(此时基础理论、知识范围就显得格外重要了)。有了这两样法宝,你可以战胜无数工程困难,如果你恰巧攻克了一个前人没有解决的难题,那么恭喜你,你创新了!
【特别推荐2:职业规划】
多找老师、学长面聊,收获会很多!