文章目录
这个问题关注有一段时间了,想找一个比较长的空闲的时间好好的回答一下。
首先我是一名硬件工程师,工作6年,从事过物联网、车载、智能硬件、手机平板等产品的硬件研发工作,我觉得我还是有一些发言权的。
不同行业的硬件工程师差别也是蛮大的,但也不是无迹可寻,很多东西也是相通的。
核心思想都是一样的,硬件工程师都是围绕电路设计和PCB设计展开的工作。
在整个产品的研发过程中,可以说电路设计和PCB设计只能占到很小的一部分,更多的是,前期的准备工作,以及后期的调试及维护。
作为一个过来人,下面这些内容,建议好好看看,相信你会有很大的收获。
硬件的入门需要先看基本的书籍,和工程实践结合紧密的课程有:电路分析、数字电路、模拟电路、高频电子等。

对于基础较差的,先看电路分析,再看模电和数电。
之前也单独写过一篇文章,推荐了一些很好的书籍。
如开关电源设计,推荐下面这本书。

如高速电路设计,推荐下面这本书。

完整地文章链接如下:学硬件设计,需要看哪些书籍?
除了日常的书籍,我们还会上网查一些资料,因为网络资源很复杂,筛选优质的信息很费时间,可能找了半天,找到的还是很劣质误导人的信息。
网站推荐站,也单独写过一篇文章:学习电子,有什么网站可以推荐?
对于一些学生,购买高昂的教学视频,会有很大的经济压力,而且还不一定适合小白观看。
下面的视频都是大厂出品的,课程质量非常高,更重要的是免费!免费!免费!重要的事情说三遍。
点击阅读:这些视频课程,直接吹爆
知道要看什么书,上什么网站学习,并配有不错的教学视频,接下来就是搭建自己的知识体系,并不断完善它。
因为硬件工程师要学的内容很多,我整理了一份思维导图。
电子产品是由一个个电子元器件组成的,了解其特性、原理、学会选型,是基本功。
无源器件,像电阻、电容、电感,用的是最多的器件,一个高端的手机中需要用到上千个电容,电阻稍少一些。

晶体管,如二极管、三极管、MOS 管,应用也很多,仅次于电阻电容。

电源芯片,如 DC-DC、LDO、充电芯片。
其他的,如晶振、磁珠、存储器、继电器、传感器、RTC、ESD 保护器件等等,都是需要掌握的。
如果你不知道要学哪些电子元器件,没关系,我已经整理好了:硬件设计-知识体系思维导图
电脑端软件,如原理图&PCB绘制工具,常用的有三个:Altium Designer、PADS、Cadence,对于入门的同学,推荐使用Altium Designer,上手会比较快一些。
如果你不知道如何使用,没关系,我整理了一下教学视频:AD软件视频教程
PADS一些芯片原厂用的很多,通信厂、手机厂,用PADS的也多。Cadence功能非常强大,入门难一点,上手之后,用起来很丝滑,很多大公司都在用。
然后就是原理图仿真工具,在研发前期,对于一些新的电路方案,我们可以选择仿真,来确定电路参数和电路的正确性。
在这里推荐TI的Tina,工具非常小巧,功能也非常强大。
之前也写过一篇文章,感兴趣的可以看看:Tina-TI——小巧好用又高效的原理图仿真软件
很多新手走完线之后,并不检查,也不会检查,不清楚PCB的检查规则,导致打板后出现很多问题,明明想设计通孔,结果打板回来是焊盘,过孔不对,走线不对,间距不对等等问题。
如何有效的避免这些错误,推荐这个PCB DFM工具:用了这个工具,我设计的PCB再也没出过问题
测量工具,如万用表、示波器、电源、电子负载等,都是硬件工程师必须会的仪器,会帮助我们更多的分析问题解决问题。
可以参考下面这张图。

在学习了工具及电子元器件知识后,接下来就是进行电路设计和PCB设计。
小白会说了,那么多电路,怎么学的过来了。当然了,这里说的是一些常见的并且常用的电路,通过学习这些电路,来提高自己分析电路、读懂电路的能力,会看了,会模仿了,然后才能设计电路。

写了一个硬件设计的专栏,登上了热销专栏榜第89名,感兴趣的可以看看。

接下来就是接口协议的学习。
为啥要学这些东西,接口就像两个汽车之间的桥梁,如果你连桥梁都没建好,那汽车肯定无法行驶,协议则像交通规则,双方都遵守了规则,才不会出问题,这里的汽车就是电子里面的芯片。

硬件工程师是一个理论与实践结合非常紧密的工作,两则缺一不可。
所有的技能都是为产品而服务的,下面这些进阶内容,也非常重要。

像英语能力,因为大部分电子元器件的规格书都是全英文的,如果英语不过关,连基本的电子元器件选型都很困难。
像EMC电磁兼容,现在电子产品的要求越来越高,对环境的影响,对人的影响,包括出口的产品,很多是需要过各种各样的认证,这个时候产品的EMC设计就显得异常的重要。
海阔凭鱼跃,天高任鸟飞。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解