Hacker News new | past | comments | ask | show | jobs | submit login

Most experienced programmers also have a good feel for how much harder it is to write a solid, tested, scalable module yourself than integrate a open source solution, even if it's not perfect.



>Most experienced programmers also have a good feel for how much harder it is to write a solid, tested, scalable module yourself than integrate a open source solution, even if it's not perfect.

Funny story, when I was just starting out in this field, my client wanted his chip to communicate with a sensor that was already on his board. This was at the time, a brand new, unreleased product. Because our hardware engineering department didn't like to communicate with the software engineering department the CPU they chose for the project didn't support i2c, but they sensor they chose (out of many thousands of different sensors from different manufacturers) only communicated over i2c.

At the time I was obviously very frustrated with the hardware engineers so I did a simple search for other sensors in the same category. Most of them would communicate over a handful of different protocols, it just so happens that the one they picked only supported i2c.

So, since I was just starting out and my client was breathing down my neck for access to the sensor that he paid for, I figured I didn't have enough time to write my own bit-bang software driver for i2c. Instead, I would just find one on google... So the driver I picked had a really tricky bug in it where it was bit-shifting the address of the device it was supposed to be communicating with. A logic analyzer came in really handy here. So my "solution" was, instead of fixing the bug properly, I just manually bit-shifted the address the opposite direction, and then the driver bit-shifted it back. At first I used the "<<" operator, right before the address went out on the wire. That didn't work, since the compiler optimizations ripped out my bit-shift command. So I manually did the shift and just put the "fixed" address in the define.

I estimate, that had hardware and software engineering communicated better, and worked together better, we could have shaved half the development time off of that project. Such a waste.


Yet all I remember is the times that third party code has failed me. It is a strange quirk of human memory.

It's not just me, either - one example was a failure in STL map that was as old as the product. It was a known defect but nobody had the heart to face it. When I showed them the defect, people got rather angry with me.


I find having a requirements.txt file really helps with this. When you struggle with a plugin and new to replace or rewrite it, removing the entry in the requirements reminds you of all the plugins you are happily using right now.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: