How I learned to program
danluu.com
danluu.com
Is having dedicated testers really not a best practice? I mean if I compare my experience between projects where we had testers and projects where we didn't, I felt we had better results when we did, if only because it'd free up lot of time from the developpers, who don't have to run a lot of tests and the testers usually think of edge case that we overlook. One downside of having testers is that it kinda slowed down the process of test automation, but in that particular case, it's not the only cause.
It is still a best practice. A lot of companies are doing crazy things that Joel would not agree with -- for example, adopting open office layouts, dropping their QA department, and constantly rewriting code. Joel is not wrong that these are bad ideas, regardless of whether they are widely used or not.
Rather, I think it's just more evidence of the growing power of monopolies, that firms can adopt inefficient practices because they are so entrenched.
I'll single out "dropping their QA department" as an example of exactly the sort of situation where expert consensus would quite possibly sit in opposition to a good business outcome.
If someone wants to argue there is a monopoly, the evidence should be of a "competition is illegal or physically impossible" nature. Not disagreeing with business practices. Business practices are important but not the be all and end all of success.
> Most of them were only slightly less manual than "testing" a phone by mashing buttons, but I did one not-totally-uninteresting task, which was to verify that a flash chip's controller behaved correctly. Unlike my other tasks, this was amenable to automation and I was able to write a Perl script to do the testing for me. ... they had me do verification on the logic they were writing. They had a relatively new tool called SixthSense, which you can think of as a souped-up quickcheck. The obvious skill I learned was how to write tests using a fancy testing framework, but the meta-thing I learned which has been even more useful is the fact that writing a test-case generator and a checker is often much more productive than the manual test-case writing that passes for automated testing in most places
At that time, for Windows and Office, Microsoft had testers who would write their own test plans (and then execute the tests themselves).
This is not the low-paid manual labor you're thinking of where a test manager writes a test plan and then delegates it to folks who are expected to just follow instructions.
The "manual labor" style of testing was/is typical of game dev companies, where it's easy to trick inexperienced kids into working for very cheap or even free, just to have early access to upcoming games and the (mostly illusory) opportunity to land a "real job" in the game industry.
If I remember correctly, JS very much cherished skilled testers and emphasized that they ought to be experienced, that they’re doing a very hard job.
I personally never worked with dedicated testers, but I appreciate both lower level automated tests for critical code, and higher level acceptance, even manual tests by domain experts. Some of the best feedback I got was from people who can’t program but are much closer to the real world problems.
> If your team doesn’t have dedicated testers, at least one for every two or three programmers, you are either shipping buggy products, or you’re wasting money by having $100/hour programmers do work that can be done by $30/hour testers. Skimping on testers is such an outrageous false economy that I’m simply blown away that more people don’t recognize it.
I still think jobs for people to "write their own plans and then execute the tests themselves" have mostly been automated out of existence, and they were still low-paid in Joel's mind.
Where I work, it's complicated to automate a lot of things, mostly because of the various installation configuration and how testing has to rely on external hardware like HSM and smartcards. And so the QA write the test plans and execute them, with automation testing non-regression on the most current use cases
> and they were still low-paid in Joel's mind.
Though I think the QA people at my current job at less paid than the equivalent on the dev side.
It's possible that's what he's driving at as I think the Joel test saw testers as an integrated part of the software delivery pipeline. Nowadays, in big tech, they are more there to drive high level tooling and testing culture - engineers are responsible for writing tests. At least that's my experience.
I was a bit jealous to see his first hire was at Centaur. There are very few teams that make microprocessors that aren't full of great people to work with.
Actually on that note, can anyone in hardware comment about whether or not hardware people tend to all be awesome, or is it just the hardware people that they let out of their caves to work with embedded software developers?
hop into the chrome dev console and set body width to 80ch and margin-left to somewhere around center of your screen.
The big revelation for me though was that you can learn anything yourself. You also don't need to be able to do exam questions to understand something, although you need some maturity to know whether you get it or not. I can almost pinpoint when it happened: I went to a tutorial with a grad student who nonchalantly explained that he was going to read the whole syllabus on biomedical engineering in the next few weeks, by himself.
Armed with that, I started my first job in finance. I read a lot of books those first few years, textbooks, biographies, histories, everything. The econ/mgt part of my course didn't really say anything about bonds and derivative pricing, but I found the relevant texts. It helped a lot to have done math heavy courses, but I still ran into new things like stochastic calculus.
Concurrently I discovered that a lot of things were getting automated, so I'd better learn how to actually code (my degree actually did go through DS&A, but I had no idea I'd need it). This was more gradual, as the prestige job in finance is trading, not coding. But as time went by it became increasingly clear that if you couldn't code, you narrowed your future opportunities by a lot. These days I'm coding every single day, and most of my issues are coding issues, not trading issues.
Lol, refreshingly honest.
"Most devs" today are busy producing megatons of JS code with gigatons of external dependencies on things like LTrim().
btw my wife consults for a company that does nothing but software testing for 800lb gorilla companies. The business is striving. I guess they did not know that they should get approval from "most devs" first.
Narrative or not, my experience talking with people transitioning from other careers via bootcamps has been that people who came from scientific backgrounds have a very large advantage over those who do not.
Math is the most transferable language and anyone in the sciences has a solid math background.
The biggest prerequisite, though, is a love for computers.
I’ve been trying to teach my 16 year old nephew to code. He’s an excellent student, great at math, and has made marvelous strides in music (should be very transferable), but his computer literacy is shockingly low. The kid barely knows how to install a program on his laptop. As a result he hasn’t engaged with it like he did when I started showing him stuff on the piano, and has made no progress at all.
Most people don't have that kind of discipline and drive, so interest is a good supplement, but I don't think you actually need it.
https://cycling74.com/products/extendmax
Even Max4Live has Node, so it's not exactly limited if you don't want to spend the extra money on Max.
then i do side projects constantly.
i still feel like an imposter.