时间:2018.7.1-2019.7.1
1、第一件事是帮导师注册一个自己的公司,方便所做项目的推广和介绍,另外和外面合作项目可以少交点税。
在湖南,现在注册公司很简单,公司有一个办公地点(可以租房子也可以是自己的家),然后在网上申请,在领营业执照之前都不需要去工商局的。
湖南这边注册公司的网站是:湖南省工商网上应用平台(一开始不熟练,来来回回改了三次,用了两周时间,人家那边服务态度挺好,就是周末不上班)
2、第二件事是学Altim Designer,画原理图,进而画PCB图,然后板子发出去(当时用的深圳嘉立创公司,单层双面板没问题,焊盘不会轻易掉,拼板也很方便),大概两三天板子回来,然后焊接,焊接完通过JTAG下载程序进去软硬件联调。
其中我们用的MCU是STM32F103VET6,内部资源我们的项目够用。
一年时间就是重复这个过程,做了几个项目,分别是负离子检测仪、直流励磁控制板、无功补偿控制板,飞机操纵杆中用到的双极性正弦波发生器等。前面是师兄做的,如图:
原理就是从左边进入要检测的信号,经过高精度AD转换,进入处理器,在MCU运算过后,控制右上角继电器闭合,投切电容器进线路,对无功功率进行补偿。
下面如图,这本900页的书,看了其中700页,看完就可以进行简单的STM32的编程。学会利用它里面的资源就行了,比如普通的输入输出(GPIO)控制开关量,宏定义,中断,UART串口,DMA,ADC,定时器TIM1-TIM8,这些就够了。另外:学习时候用的是野火霸道的开发板,正点原子的也可以。
3、第三件事是,其中一个项目,想做一个手机APP,接收来自PCB控制板的数据。
板子通过 串口转WiFi模块,使用WiFi传输,TCP/IP协议。
用单片机接wifi模块(TXD和RXD两条线),配置WiFi模块工作在AP模式,手机连上wifi,手机中的app发送或者接受单片机的数据。
我自学了一个月Java,用Android Studio做了一个界面出来,这种可视化编程很简单,拖动控件过来就好了,然后在控件背后注册监听,即可实现功能。(后来还在里面加了一个音乐播放的功能)。但是因为TCP通信没搞通,加了手机联网声明以后手机还是没反应,所以后面也没做。
4、第四件事是,受到同学的影响,想去学python,买了500元的书,如图:
左边基础,右边进阶。
学了一个多月,因为前面有过学习Java的基础,都是面向对象编程,所以学python语言本身比较快,和C语言的面向过程编程区别就是类、多态、继承这些。然后就是机器学习(包含深度学习),神经网络的这些理论,比如学习神经网络中的CNN卷积神经网络,RNN循环神经网络等。但是学到后面发现其实这只是一个工具,不太能就业。
举例说明:用python做网页做运维,并不是AI,python的可视化编程做的不好,还没发现好用的IDE软件。可是,那些深度学习模型需要结合opencv做视觉或者结合LSTM做语音识别,才好找工作,或者你纯做算法,做算法工程师。(AI行业工资不低,硕士毕业大佬们高的有3-6万一个月,如下图)
因为了解到python的深度学习只是一个工具,想就业必须和opencv视觉识别结合,或者和语音识别的东西结合,或者和机器人运动结合,所以就需要去学另外的东西,长路漫漫,我就暂时搁置了。主要没人带,学理论还是很勤奋的。但我认为,没有白学,这些东西能打开你的全局观,与你的其他知识合成体系。
另外,这个方向确实是未来的趋势,但是门槛确实不低。(意思就是说,如果做AI,你先学python语言本身,然后,学习机器学习深度学习里面的算法,经典的算法要会推导,然后用python将这些算法实现,然后将其应用,应用的话就需要结合opencv视觉或者其他等等,万物皆可AI)(其实tensorflow、pytorch这类库为你实现了很多算法,直接调用就好,但是你灵活运用要很久)
提醒一下,如果学python搞AI,就业一般要求硕士及以上,因为你学过那些理论你就知道,它要求你数学好,要求你静得下心。本科阶段,其实你并没有那么多时间,也不一定有那个兴趣天天搞数学推导(高数、线性代数、概率论、统计学),天天搞模型,调参数,梯度优化。
智能机器人、计算机视觉、智能金融、自然语言处理的公司是现在较为成熟的、数量较多的,计算机专业、数学专业毕业的可以考虑向这个方法发展,毕竟第一届人工智能专业的学生还没毕业哈哈哈哈,我们学校才刚成立人工智能学院。(温馨提醒:学AI方向,就业要去沿海大城市,内地不好找工作,没有这个岗位,有也很少)
AI本不是易事,在计算机行业已属TOP领域,需潜心钻研方可入行。
分享一些数据竞赛平台:可以在这里参加一些比赛,检验自己的学习成果
Kaggle:https://www.kaggle.com
天池:https://tianchi.aliyun.com/home
DataCastle:http://www.pkbigdata.com
Datafountain:https://www.datafountain.cn
Biendata:https://www.biendata.com
AI Challenger:https://challenger.ai
Kesci:https://www.kesci.com
FlyAI:https://www.flyai.com
5、第五件事
给导师的公司建立一个公司网站,我花了10天搞定了(上学主要就是锻炼你的学习能力,公司需要你面对新东西的时候快速上手)
开发软件用的是Adobe Dreamweaver CS6,上手很快,这个IDE做的很好。我并没有系统去学HTML和CSS语言,用了一个网页模板,看懂框架,在里面把东西改成自己公司的内容就好了。
然后在买一个功能的域名,在自己电脑上,打开windows的IIS服务,把网站发布,关键点是在把公网的域名和自己电脑的IP地址与端口号映射一下,就连接到一起了,公网顺利访问!
6、第六件事是,学了一年的硬件,暂且算初级硬件工程师。
外面做硬件的同学说硬件工资低,软件工资高。这没办法,做硬件你研发阶段要浪费公司多少钱,一版一版的改进,浪费很多电子元器件。软件的话,给你一台电脑你就一直编一直改就行。不过反正最后都是搬砖喽(重复劳动)。
搞硬件的属于重资产行业,钱都花到设备,物料,生产,测试,加工上面去了,注定工资低,搞软件的属于轻资产行业,人力成本是最主要的,所以工资会高,也部分解释了,为什么搞应用软件工资高。
分析了自己的处境,另外考虑到沉没成本,发现还是需要编程才能真的提高自己。但是只学单片机里面的编程,比如只编写STM32的程序,做一个单片机工程师,做出来的东西有限。比如用keil写程序,点击编译,你不知道点击这个按钮以后系统做了什么事,另外,下载到板子上的程序,其实不是从main函数开始执行的,是从bootloader开始执行的。要做嵌入式才能真正把握整个系统,所以打算用半年时间学习linux。嵌入式的知识体系比单片机的知识体系大很多,个人感觉嵌入式包含了单片机。
举例说明:如果一个机器人在你面前,他的某个关节可能是单片机做的,单片机控制电机运动。但是他的大脑肯定是运行有操作系统的,才能完成如此大量复杂的处理,跑大模型,也就是嵌入式。所以单片机和嵌入式大概是这样一个关系。
所以现在的路径是这样: 本科电路、模电、数电基础 →→ 纯硬件 →→ 单片机(STM32F1系列) → →linux入门(Ubuntu环境) → →linux裸板→ →linux驱动 → →linux内核,当然linux应用(安卓)也可以接触一下,如果按照这个路径,自己以前学的东西是不会白学,而且嵌入式的工资也比纯硬件的工资要高,与此同时,知识框架也是越来越大的,个人认为学嵌入式属于单片机的进阶。但在工作中两个都要懂,毕竟产品里面单片机便宜,各有各的优势。
做好规划后,学之前,我先复习了一遍C语言,linux看了本《鸟哥的linux私房菜》,然后开始学板子。
买个嵌入式开发板,学裸板,类似于学STM32的板子那样学会控制内部资源。再写uboot,shell脚本,交叉编译,然后开始学习linux系统编程,学一下文件IO,进程间通信(IPC),多进程线程,再看一下网络编程。然后学驱动。也就是韦东山老师的那套流程吧,如图:
第一期如下图:(一共4期,所以学习周期比较长,半年差不多):
第一期与第二期衔接:
第二期视频:
我买的板子:
7、第七件事当然是写论文,没有论文不能硕士毕业呀,满打满算两年半时间,要花一年时间写论文,所以搞实践的时间也就只有一年半,加油。(补充:2020.04.15发了自己的第一篇小论文)
8、第八小事,很多我做的东西,遇到解决不了的问题,都在百度或者CSDN网站找解决方法,CSDN(Chinese Software Developer Network)真的给好评,感谢无私的程序猿们,写技术博客很累的。
但如果系统的做某件事,当然是有规划的看书,书才是框架,事无巨细。
我一般不在技术交流群里问,因为:
还有这种:
哈哈最后开个玩笑,群里还是有热心水友的,关键你进的什么群。
另外感觉很多付费群的群文件还是有很多好资源的,而且都是按目录整理好的,包括学习路径规划、软件安装包、视频链接、电子书等等。加油!
9、推荐几个程序员常逛的论坛:CSDN和博客园我以前常用。
刷题网站总结:
10、后记:
在计算机方面当了一年门外汉以后,意识到一个比较严重的问题:就是非计算机专业科班的,想转计算机行业,不能被表象蒙蔽了。
具体讲,不要认为计算机专业就是程序员,就是coder,计算机专业更应该是计算机科学与技术,一开始是数学的一个分支。
不能被那些培训班眼花缭乱的广告骗了,比如三个月成为python精英,三个月Java速成,都是假的,想要在计算机行业长足发展,必须要注重基础,例如:《数据结构》《计算机组成原理》《计算机操作系统》《计算机网络》这四大计算机核心课程等等。
《数据结构》是讲数据的基本组成方式,如:队列、栈、二叉树、链表、图等,以及基本的算法。
《计算机操作系统》是站在软件的角度看计算机的运行原理,《计算机组成原理》则是站在硬件的角度来看计算机的运行原理。因此这两门课对于学习计算机的学生来说非常重要。
《计算机网络》第六版,谢希仁,445页,全书讲的就是OSI(TCP/IP)通信协议栈各层协议的原理和具体实现方式。如图
因为我们应该知道程序本质上是数学模型的表达,数学算法的表达,所以数学基础非常重要,进而就是算法。表象的技术一直在变,但底层一直没有变,不懂本质,永远只是技术的熟手而已。简单讲,就是我们不能只是语法的编程,而是数学的编程,语法是基础,不可以只会了语法就以为自己是计算机大神了。用了个好的IDE就以为自己是大神,这是完全错误的思想。
就是如下的计算机四大专业基础(也是计算机考研必考):
https://blog.csdn.net/qq_41231926/article/details/85595981