Having been away from digital circuit design for two years, I recently started writing Verilog code again because of a research project. This reminded me once again how different writing hardware is from writing software, though hardware engineers and software engineers are loosely attributed as “coders” in layman’s eyes.
1. Hardware design CAD tools are hard to obtain. If you are not affiliated with an academia institute or relevant business entity, you almost have nothing to start with. However, for software developers, almost everything in need (OS, compilers, runtime, IDE) is free and can be downloaded easily.
2. Hardware design community is much more closed than the software community. IP cores, even those simple ones, are mostly not free. Even if you find an IP core free of charge, you would not risk pulling it into your own design because of potential bugs. Linux OS to software industry is like Intel CPU to hardware industry, however the former is open sourced and the latter is heavily guarded (you cannot even obtain a datasheet without being a close partner of Intel).
3. When you encounter a software problem, 99% of time your solution is a Google search away. However for hardware design issues, it is always better to consult an experienced guru. But if you are a self-taught engineer, where to look for this guru?
4. It is easier to gain a sense of achievement doing software than doing hardware. Writing some software code and hit the run button, you see feedback instantly; however in hardware design, the only thing you can do is simulation (and you have been reminded 1000 times that simulation lies). Even if your design turns into silicon (after months?), it is always clumsy to demo, but your software engineer peer have been demo-ing her fancy website to people for a long time.