背景
2015年转眼间来到了最后一周。大四考研的周末,在宿舍阅读了知乎上一些关于编程学习的文章,深觉自己也应该写下这一年来自己学习上碰到的坑和经验教训,也列举自己看过的一些书,供以后回顾时参考。
絮絮叨叨的一些
一言蔽之,2015年是我自己在各方面都大胆探索尝试的一年。年初受知乎上萧大编程入门指南的启发,加上换上了新电脑的推动,开始了自己在编程学习上的系统探索,有人指路总比2014年“盲人摸象”般的窘迫境况好了不少。
编程语言
随着学习的深入,我逐渐觉得,活跃在很多程序员社区上的所谓编程语言的争论,所谓”***才是最好的语言”的言辞,纯属奇谈怪论。计算机领域门派众多,不同领域会有不同的开发需要,不同的语言配合不同的开发工具在不同的领域自有自己的独到之处。如果还没接触某个领域,对该领域的编程语言,是没有任何质疑的权力的。入门学习编程时,选择一门看上去最讨喜的,又能体现计算机程序开发的精要的语言,学下去变是了。经历过小白阶段之后,更应该先定下自己感兴趣的领域(诸如人工智能,ML,DM,游戏开发,前端,移动开发,嵌入式等等等等),再根据领域的需要学习相应的语言。
我自己2015年在编程语言上学习的收获,在于以下两门语言的深入学习:
- C#
作为一名自称的“软狗”,不学习微软技术大系.NET Framework是不行的。(逃
C#作为整个庞大的.NET技术平台的顶梁柱,再配合上自家VS2015的有力驱动,还有MSDN堪称逆天般完善的知识库的支持,自然是入门微软技术学习的首选。在2015年1月就订好了C#的学习计划之后,中间磕磕碰碰,到年末,终于可以说自己基本上是入门了。期间用C#完成了必修课大作业(在此特别感谢上学期教我程序设计实践课程的吴铭老师,让我有摆脱枯燥落后而无聊的MFC的束缚,选择自己喜欢的编程语言完成课程作业的机会),让我对图形界面应用程序的开发有了初步的认知和体会。
C#带给我的收获,不仅仅是那些语言语法逻辑,背后更是一大类带自动内存管理的”面向对象“语言所共有的知识体系。学习了C#语言之后,对待诸如值类型和引用类型,“引用”的概念,“代码托管”,“虚拟机”,“字节码”,”运行时“等等看起来庞杂的概念,有了基本的认识。这些知识,不仅仅对C#学习有极大的帮助,在其他类似语言诸如Python,哪怕是C#的“死对头”Java语言的学习中,也是会起到不可或缺的重要作用的。考虑到这门语言的学习难度,将其作为”面向对象”语言体系的入门语言来学习,是一个非常明智的选择。
- Python
从去年年底就嚷嚷着想学的语言,在今年年底,终于可以说自己有所进步了。
对于C++的学习者来说,Python以四空格划分代码区块的“诡异”语法,是初学者在学习上极大的雷区,一不小心就会带来诸多莫名其妙的报错,连”Hello World“都写不出来。在微软俱乐部里面,”学习Python语言需要游标卡尺“这个老梗,也时常成为大家的笑谈。然而,一旦找到一个好看耐“艹”(比如代码高亮,智能提示,自动缩进,PEP 8 代码规范提示…)的IDE辅助学习之后,无论从学习过程还是成就感上,都会有质的飞跃。经过种种的摸索踩坑,庆幸自己终于找到了这个工具——JetBrains-Pycharm
Python是一门很活,很活的语言,无论从语法形式上,还是运行调试上,都是如此。在学习Python过程中感触最深的一点,就是很多函数的用法,我都是在Python交互环境中“试”出来的。Python交互环境是我最喜欢Python的一个地方,在这里你可以像Linux Shell那样,输入一条Python指令,就可以获得输出,通过输出可以学习到很多函数的用法,查看某个变量的具体类型等等工作,为后续的编程开发,省了不少力。
Python最具魔力的地方,是那一堆堆用不完的第三方库。这堆库让Python语言在时下最火的领域——人工智能,机器学习,数据分析,数据挖掘,“你老婆”等有一展拳脚的机会。
领域方向
2015年我还是挺迷惘的,哪门编程语言都想学,,哪个方向都想尝试,但又怕学而无用,或者碰到了不适合自己的深坑,误了时光。总结下来,自己这一年好像在很多领域都有所接触,但都没深究,近乎一事无成罢了。开荒的领域,在这里还是要提一下的,希望在来年能从中找到一两个自己喜欢的领域深挖下去吧。
- UWP应用开发
UWP,微软在Win10平台上的通用应用,基于C#写后台逻辑,XAML写前台界面。XAML简单易懂的语法可以为初学者带来极大的满足感,然而真正想开发出精美绝伦的通用应用,还是需要深入学习和领悟的。WPF这个庞大、特性丰富的界面框架和C#丰富的高级语言特性的学习,是在这方面成为高手的必经之路。
- Python开发Web网页应用
在这里特指Flask和Django框架相关的开发。
- Android应用的开发
是的没错,一个软狗也有过考虑开发Android应用的时候,主要还是“揾食艰难”,想找一些来钱快的领域学学,找点外快什么的。然而到最后不了了之。
- 计算机视觉
缘起大二小学期时候的创新实验。当初用OpenCV库搞了个所谓之"人脸识别"的项目,开发过程也不可谓不艰辛,在配置开发环境的时候就走了不少“弯路”,也要摸索很多之前毫无概念的方法。回想起来那段时间其实是自己今年收获最丰富的其中一段时间了。迫使自己重拾了荒废半年的C++,重温了很多基本概念,学习了计算机图像处理的一下核心思想方法。另外,人脸识别也把我带进了模式识别、机器学习的坑。
- 机器学习
由“人脸识别”带来的坑,然而学的很皮毛,暂且不表。
- 魔法书
总的来说,这年开的坑确实有点多,但又学的很不深入。到年末才渐渐意识到自己之前的心态之浮躁,不禁为之惭愧不已。到年末想投个实习简历,却发现自己近乎空白的项目经历,甚为汗颜orz。
致那个一直想跳未跳的坑——Gawain Open Sources Project(GOSP)
从高三毕业开始就有想做一个属于自己的Android ROM给自己的手机用。然而前两年收到电脑硬件和移动设备的限制(大一是魅族MX2这个万年锁BL的混蛋,大二时信仰挚爱Lumia930)毫无进展。这年年末在电脑硬件和移动设备都能满足的时候,却在漫长坑多的下载源码和编译时间上打了个退堂鼓。或许真的能发布的时候,已经“猴年马月”之后了。
Achieve?
今年如果真的有什么建设的话,就是这个博客了。在这方面幸好没有太大的犹豫,Hexo+ GayHub的部署方式,50美刀五年买到了最喜欢的域名,部署过程还顺路入门了Gayhub和Markdown,之后开发过程上也开始积累写下自己的遇到的问题和解决方法。这里感谢微软MSP项目给予我的动力。微软大法好哦耶!
一些教训
在学习过程中永远不应该害怕走弯路。编程学习本身就是不断在碰坑中修正的过程。事实上,因为害怕走弯路而盲目模仿前人的所谓”经验",“捷径"的过程,才最弯的弯路。
切忌浮躁,切忌浮躁,切忌浮躁。重要的事情说三遍!
实践,永远是检验真理的唯一标准。
开发工具
这个必须提的。工欲善其事,必先利其器。 一个完整好用的工具链可以省去很多功夫。之前经历过一系列的摸索,从写C++时候的Dev C++,到后来学Python时碰过Vim,敲过Emacs,尝试Eclipse+DevPy,倒腾VS2015+Pytools,还折腾过Sublime,Atom,VSCode编辑器之流。现在总算得到一系列比较完善的开发工具体系。
操作系统上,一直对MacOS的华丽界面和好用到爆炸的终端心向往之,无奈受阻于高昂的价格。尝试过Ubuntu,却无论如何都未能称心如意。到最后躁动的心皈依Windows 10,用Cygwin + Cmder 打造了界面和灵活性不输水果的终端。也算满足了日常使用的基本需要。
现在将自己目前觉得最顺眼的工具链列举记录,供以后重装系统换电脑之后快速配置参考。
- 操作系统:Windows 10 TH2 Build 10586
- 终端:Cygwin+Cmder
- C#开发:宇宙第一IDE VS2015 Community
- Python开发IDE:Pycharm。强推
Monokai配色+Consolas字体 - Python交互窗口:使用Cygwin下基于GCC的独立Python环境并独立安装
pip。 - 编辑器SublimeText3。
- 博客写作Atom + MarkdownPad
今年看过的书
絮絮叨叨说了这么多,到最后应该是整理一下今年看过的几本让我“醍醐灌顶”的著作。
上学期学习数字电路与逻辑设计课程,一开始被一大堆的逻辑门电路弄的一头雾水,后来找到了这本“神作”,从最开始的电筒闪亮传输信息的情节开始,循序渐进,以汇编语言收尾,讲述了计算机硬件的编码逻辑的来龙去脉,扫清了学习的迷雾和烦恼。
日本人写的一本小书,补充了很多计算机的基础知识,讲解了诸如Windows分页文件等系统级别的“冷”知识,也涉及了CPU,内存等“硬”功夫。
吴军老师结合自己在项目研发上的实际经验撰写的一本讲述了目前最火的几个领域上用到的数学知识原理。言简意赅,毫不沉闷。
最后的最后
写在最后的也不算是对未来的展望了。2016年希望不要摔在同样的坑上。还有就是能成为正式MSP继续传教233333333