打开APP
userphoto
未登录

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

开通VIP
蓦然回首:回望我的7年编程路(ZZ)
大学时代:
2005年刚读大学,就立下了好好写程序的目标。。所以大一从学习C语言开始,一有时间就望学校的机房跑,老老实实地调程序。。对着书本,一句一句code地调。。慢慢地,积累了一些经验。后来,又加入了学校的一个制作网站的学生团队,学习ASP.NET网站制作。这个团队对我影响比较大。。里面有我相当崇拜的人物。
人物A: 非科班出身,从asp做起,一直做到asp.net , 参与了很多网站开发。熟悉web的各种前端开发技术。曾经暑假的时候,一个星期没有出过门在家写程序,后来直到被老妈骂才停手。 快毕业时原在一家大型国企做web开发,后来觉得没有意思,就直接跑去北京,参加某个大型网站的初创开发。
人物B:也是非科班出身。大二暑假就跑去A所在的公司工作,直到大四才回来参加各种补考,最后拿到毕业证与否我倒不知道。后来,他刚毕业的时候,到百度做了前端开发,后来又到了360做web前端。。
诸如此种,在这种前人的影响下,我一度觉得能疯狂调试code是一件值得骄傲的事。。所以学习起来技术更加crazy。。大一下的以后,都没有好好上课了。。上课的时候,老师在上面讲,我在下面看自己的技术书。。那个时候,技术没有功底,很多高级的东西都是硬着头皮看的。像C#之类的,似懂非懂地看着。。刚读大一那会,自己没有电脑的。。所以asp.net的学习主要是看书了,调试的机会不多。。后来为了调试环境的方便,就跑去study了一下asp, php之类的,这两者在学校机房安装起来相对简单。安装包不大,装在U盘就好了。下次接着装。大一下的时候,果断买了电脑,而且把握着一个原则,坚决不玩游戏。。买了电脑,天天对着电脑调着asp.net code, 这玩意没有人教,主要是自己对着书,对着电脑一句一句地写。。慢慢有了一些了解,能照着书写一个简单的留言本了。。
大二上跟着学院的一个老师做一个MIS系统,是一个产品。这个产品让我学习相对大一些系统的开发。。我当时觉得一个系统能超过100张表的已经很大了。(平时做网站一般也就15张表左右),还会用到SQL Server2000, 学习了T-SQL存储过程编程。。写得多的时候,存储过程也写了上百行。这个产品,我跟着老师做了2年,一直到大三暑假我要考研了才停手。一个产品做2年其实也是蛮痛苦的,因为到后面不是技术的累积,纯粹是业务逻辑的分析了。每天copy修改差不多的代码,是件蛮无聊的事情。甚至可以说,有些痛苦。那时候,人比较单纯的啦,中途想撤出来学习其他有趣的技术,但碍于种种情面,一直拖到考研那会。其实想想确实是浪费了真正学习技术的时间。
跟老师做产品的同时,也兼职学生团队的网站。所以大学时候,也算是比较忙。有一种自我得意与满足感。。因为技术还算可以,在学校把自己看得太高了。对别人非技术人员多多少少地有些鄙视。。到现在看来,应该是鄙视的自己,而非他人。
有人也许会好奇,我天天不好好上课,考试咋办?一般考试我会把书仔细看一遍,把书上的例题做做,就直接去考试了。还好都过了。大学就挂了一门课,《计算机组成原理》。尼玛,考前几天一直在赶项目,没有时间复习。。最后只看了一天的书,就去考了。结果挂了。后来补考过了。
在技术这块,网上好多人觉得做web开发入门门槛太低了,因为开发工具太强大了。。一般的人员培训几个月就能干活了,技术含量不是太高。所以感觉做这个方向没有前途,所以打算转C/C++方向了。。学校没有开C++课程,所以自学了一下C++语言,然后研究了一下MFC, 会使用MFC控制写一些小程序了。基于MIS的经验,所以把MFC中的ADO数据库开发看了一下, 基本上能熟练使用ADO开发基于MFC的MIS软件了吧。后来觉得网络比较好玩,就又学习了一下MFC Socket通讯方面的东西。
大三暑假的时候,学院安排去一家公司实习,我去面试了一下。因为有C#方面的经验,所以主管希望我用C#帮他们写一些程序。。但是,我去实习的主要目的想接触C++方面的,所以拒绝了。当然了,C++部门的人也没有要我。所以考研的空隙,我还是自己看了一下C++方面的知识。
考研完了后,已经到了大四的下学期,成绩太差(平时不好好学习的结果)没有考上。不得不去找工作。2009年啊, 金融危机啊,工作对我们这种非重点高校来说,确实不太好找。一般跑招聘会都是去别人学校,排N久的队,给了简历,别人一般也很少看的。我简历虽写了C# web的开发经历,但期望从事C/C++方向的开发。。所以找到合适的不太容易。后来去一家做GIS的公司去面试,演示了一下MFC的开发程序,就留下了。不过,主管安排的任务都是asp.net 方向的开发,我不太满意。。中途去了一家日企面试C语言开发的工作,后来面试通过后,就果断辞了这家GIS公司的实习工作。
接着就是做毕业设计了。在GIS的公司的时候,看到一个伙计使用extJS Ajax框架做的一个CRM系统,觉着不错。所以做毕设的时候,我就使用extJS改写了我本已经写好的code了。
至此,我大学的技术之路差不多走完了。
小结一下:这期间主要是web方面的比较多, html, div/css, j*vascript, ajax, c#.net ,  webservice, 还有就是MFC方面的东东了。
  2. 第二家公司
2010.3 正式入职第二家公司。
去了,先是介绍了公司的产品,大概听了一些,但不懂。后来,主管有拿给我一块板卡,让我跟着说明做一些实验。我看了很新奇,这玩意能做实现什么功能呢。。看了一下板卡的用户手册,我X,全是英文的,没有中文的。。
从这家公司工作起,我以后基本上很少看见中文文档了。主要是公司的产品性质所决定的。公司的产品要卖向全球市场,所以平时要求大家写英文的说明。包括code的中comment也是如此。呵呵,不错,倒是应该能逼着好好学习一下英文了。以前除了看MSN中的英文,其他的基本上都是中文。
这是一块FPGA开发板,我也是弄了好久才知道FPGA是个什么东西。。毕竟我以前是全做上层应用软件了,对硬件接触比较少。。所以刚到这家公司的时候,对我来说,也是比较坚难的啦。我需要从头开始积累大量的硬件知识才地,最要命的是公司没有培训,什么玩意都要自己搞。所以平时也只有硬着头皮问一些懂硬件的同事了。。从基本的Clock学起,再到FPGA ,再到开发板上各个接口的特性。我花了好久,才慢慢熟悉了Quartus II + Nios II 这套 Altera FPGA 开发tool. 我的工作是使用SOPC 搭建硬件体系,然后再配合软件来编写板卡的驱动和验证板卡各种接口.
FPGA是个好东西,可以在上面放置一个CPU IP Core, 放置DDR, uart, Ethernet MAC, USB,等多种IP Corre, 你可以在上面实现自己的IP Core, 并挂到CPU的总线上去. 这对一个做软件的人来说,是开启是另外一个世界.. 你可以看到CPU的实现过程,你完全可以自己写仿写一个简单的CPU。你可以自己去实现一个DDR的控制器等。。
所有这些,在这个领域叫做IP Core, 相当于软件中的库。有公司专门写这种库,然后卖给需要这些库的公司。在FPGA中,开发语言是verilog/vhdl, 两个都是硬件描述语言。不过,在台湾大家用的比较多的是verilog, 一种类C的语言。写好code, 你下载到FPGA芯片中,就可以实现你想要的功能了。 一般我们写软件程序,是一步一步的执行的。。而FPGA芯片是并行执行的。。所以verilog的中代码中,可以写多个并行程序段,这些段是可以并行跑的,这就是FPGA强大的之处。
在类如分子运算这种需要耗时的运算,一般的PC机的CPU算的太慢。。业界一般需要使用FPGA并行运算的。FPGA上用verilog写得是硬件程序,跑得比一般的软件要快很多。 PC中所用的好多加速设备都是采用硬件加速的。比如显卡。上面也有verilog或VHDL硬件描述语言写得code,它们的核心件是ASIC芯片, 对PC机传过的数据(通过PCIe)进行运算,然后传递到显卡的VGA或HDMI接口给显示器显示。 日常消费类电子产品用到FPGA芯片的不多,主要还是ASIC芯片,比如,我们所用的手机的就有实现各种功能的ASIC 芯片。。ASIC芯片主要特点是量产,所以价格相对低廉。 而FPGA芯片实现的功能可以很灵活,你可以对芯片重编程实现你想要的功能,但是FPGA芯片比较贵。高阶的一颗芯片售价都是数万美金,普通的也需要几百RMB。
在这家公司学会了看电路图,能根据DataSheet芯片看编程配置芯片driver, 也知道常见芯片的接口。。也就是知道了一个板卡是怎么出来的了。其实类型的板卡应该也是差不多。拿PC主板为例, 应该是选一款CPU,然后研究CPU的接口特性,一般的CPU会支持DDR2或DDR3, SATA, PCIE, ,这些接口的IP Core控制器现在好象大都集成在了CPU内部,如果CPU内部没有的话,就可以集成在了北桥上了。。北桥也是一个IP Core的集成器,还有南桥之类的。。画好了电路图,再由PCB人员根据电路图步实体线和摆线,弄好后,把PCB图给PCB板厂生产出实际的基础板。。然后找打件厂,把CPU,Audio, 网口等各种组件打到基础板上去,再拿到工厂做主板测试,还有要烧录BIOS,为安装操作系统作准备。。
我是学计算机的,以前只是会装操作系统,并不会装电脑哈。。到了这家公司,有幸接触了硬件,就学会了自己装电脑了哈。。我一个同事曾经在网上买了电脑的各个部件,我们两个在家从CPU,风扇 到 硬盘,内存,电源,机箱,显示器全部自己组装起来了。。所以有时开玩笑说,哪天失业了,直接跑去电脑城给别人组装电脑得了。
我在公司也无聊地用画电路图的tool仿画了一个简单的电路图,更是无聊地拿着焊接工具焊接东西。。我曾照着网上的一个iphone充电路图的关键电路部分,把一个普通的手机充电器焊接改装成了可以给iphone充电的的充电器。。
当然,我上面所说的硬件玩意对于一个纯软件人员来说可能比较陌生,但对于学习过数字电路与模拟电路的相关课程的人来说,都是算基础知识啦。。
在这家公司,我的软件技能没有什么增长的。。平时开发也极少用到嵌入式操作系统的,更多的时候,是一种裸机的形式跑的。。类似于单片机。。比单片机有点好处就是可以自己实现要想的IP Core。。所以我有时会写一些verilog code,但仅是初级的水平而已。
说说台企的文化。。
首先,语言上台湾人是汉语夹杂着英语说,我在这家公司呆了2年多,所以这点对我影响还算比较深,从我的贴子偶尔带的英文单词可以看出来。我不排斥这个,觉得对学习英文不错。
另外,台湾人称呼人时,喜欢只叫名字,而不是带着姓的。。比如叫李开复的话,会直接叫开复,而不是像我们大陆这边习惯性叫李开复叫法的。。
另外,就是他们有自己的英文名字,平时大家称呼都是叫英文名的,即使是boss,你也可以大大方方地叫英文名字,不会显得不尊敬的。台湾人的在称呼上的叫法确实是显现出一种亲切感,显示没有那么强的等级差别。
另外,台湾地方小,所以行业竞争比较激烈,同事与同事之间也多有竞争的。。
另一方面的原因是,台湾仿日本的文化。。
小结:学习了FPGA, 硬件知识,软件裸机驱动写法, verilog, 软件技术未提高。。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
FPGA感悟
CPU、MCU、FPGA、SoC……这些芯片究竟是啥?涨尽姿势
一文带你认识FPGA~
CPLD初学者入门知识总结
FPGA基础知识简介
FPGA该怎么学啊?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服