Live data from Hacker News

Organizing complexity is the most important skill in software development

johndcook.com

231–240 of 286 posts

Re: Organizing complexity is the most important skill in software development

#231

Out of all the things I know how to do in programming, reducing complexity is probably the one I'm best at. So how do I get a job doing this? Or a series of lucrative consulting gigs? :-) I'm pretty sure I'm not as smart as I used to be, and I'm definitely not as smart or productive as some of the younger programmers I've worked with. (Sorry for the ageist remark!) This may be my secret advantage: I have to keep my c…

It's actually reasonable. Step 1, translate key push. Step 2, broadcast key message. What you're missing is that there's an alternate Step 1, translate joystick hat push (or mouse drag, or whatever). So Step 2 should be broadcast generic up/down/left/right input message. Step 3, translate message into movement. But what you're missing is that dependent on context, there's going to be other things besides movement that those keys do. Step 4, pan the map with N/S/E/W. Again here, you have the flexibility to work with a rotated map. Your code was probably overdesigned for the use case, but I've seen your solution many times, in books and in real life.

However, I've also solved this problem by passing around polar coordinates, it's elegant and very flexible but you have to munge some data at the beginning. You can also pass around a simple vector [{-1, 0, 1}, {-1, 0, 1}], which is basically what you describe.

Re: Organizing complexity is the most important skill in software development

#232

This is incredibly true. I once turned 60kLoC of classic ASP in VBScript into about 20kLoC of python/django including templates. And added a bunch of features that would have been impossible on the old code-base. It turned the job from hellish (features were impossible to add) to very nearly boring (there wasn't much to do anymore). So with this newfound freedom I built some machines to automate the data entry and on…

> Sadly there's (seemingly) no way to interview people for this ability I had one interview where the interviewer simply showed me a printed page of code, and asked me to talk about it. I spotted a few problems and debatable constructs, and we had a good 3 minutes discussion. Since at least I spend more time reading code than writing it, that felt like a truer test of my abilities than many of the coding tasks. PS. Y…

This is great. Reading (and maintaining, refactoring, improving, etc.) obtuse code is often much more difficult than a fresh slate. Its also a major real world requirement. Where is that statistic on number of engineers doing maintenance vs greenfield development?

Re: Organizing complexity is the most important skill in software development

#233
post #79

Earlier quoted context omitted.

Yeah, that is cool and lets you get a hand on the job and a feel for what you'd be working on, but it makes me a little wary. Doing work for some employer without getting paid is a red flag. It's not a total klaxon blaring, but it does raise eyebrows.

Well, to get to the point of being interviewed, you had to have some education (either formal or self taught, or both). This involved writing a lot of code (homework assignments, etc) that you didn't get paid for. And you had to write / polish up your resume, again without getting paid for it. And you had to drive to the site without compensation (unless the place is big enough to fly candidates across country for th…

A for profit company isn't benefiting from those activities, though. I can easily see a situation where a less than scrupulous company brings in a bunch of candidates to do this in order to get free labor.

Re: Organizing complexity is the most important skill in software development

#234

Out of all the things I know how to do in programming, reducing complexity is probably the one I'm best at. So how do I get a job doing this? Or a series of lucrative consulting gigs? :-) I'm pretty sure I'm not as smart as I used to be, and I'm definitely not as smart or productive as some of the younger programmers I've worked with. (Sorry for the ageist remark!) This may be my secret advantage: I have to keep my c…

Honestly it seems like the many layers of indirection would be a much bigger problem for complexity. It may not be bad in this situation, but it certainly takes more mental effort to comprehend than seeing a corresponding "right", "down" and "up" for every "left".

Re: Organizing complexity is the most important skill in software development

#236

“Here’s something simple I came up with. It may not look like much, but trust me, it was really hard to realize this was all I needed to do.” This reminds me of something Scott Shenker, my computer networking professor at Berkeley, drilled into us every chance he got: Don't manage complexity. Extract simplicity. Finding complex solutions to complex problems is comparatively easy. Finding simple solutions to complex p…

> Don't manage complexity. Extract simplicity.

I can't second this enough. This is why it's so important to throw away your prototype code, sometimes, instead of trying to fix it. It's also the big value-add of TDD: Well written tests make that extracted simplicity explicit.

Re: Organizing complexity is the most important skill in software development

#237
post #178

Earlier quoted context omitted.

It's too contrived though; not having a single working keyboard anywhere isn't a real business situation. A slow bottlenecked server, sure. If the "w" key weren't working I'd copy-paste "w" characters from elsewhere in the document, or bring up the on-screen keyboard. Writing bastardized code -- for (;;), really?! -- would be a huge negative against a candidate. And, of course, if a company really didn't have a worki…

Whenever you need a character your keyboard won't produce - either because it's broken or because it's in a different language and you can't figure out how to get it, just google the character and copy/paste it. i.e. Google "double u"

Or just use the mouse to open your whatever "Character Map" program comes with your OS... which works when you're missing the same letters you'd need to "sound them out", or even with no keyboard at all. (Assuming you managed to log in.)

Re: Organizing complexity is the most important skill in software development

#238

This is incredibly true. I once turned 60kLoC of classic ASP in VBScript into about 20kLoC of python/django including templates. And added a bunch of features that would have been impossible on the old code-base. It turned the job from hellish (features were impossible to add) to very nearly boring (there wasn't much to do anymore). So with this newfound freedom I built some machines to automate the data entry and on…

Back when I worked corporate I loved when I got time to make the apps I was responsible for better. Getting free time to refactor an outdated procedure written by four different developers who'd all left that just barely worked, albeit slowly, was something I enjoyed. As was getting a couple days for minor bug fixes and small feature adds. I happily had the freedom to sit with the users directly and ask them about ho…

That sounds really nice. At my current position, we never get time just to refactor, though supposedly that time is "just around the corner." We are always cranking against tight deadlines. Consequently, we end up with some pretty jacked up code, since as the saying goes "you never get it right the first time."

Re: Organizing complexity is the most important skill in software development

#239

This has been my experience too. I've been involved cleaning up a half dozen or so projects that got out of control. In each case, technical complexity was blamed as the reason. After digging in, I found that following commonalities: - Incomplete, conflicting and misunderstood requirements. - Lots of "We never thought we would need to do X". - Poor team communication. - Mistrust, frequently well earned. - Harmony val…

The advantage of the 10x-er is that he will be reporting directly to a Jr. Executive and therefore cutting ahead of the middle management echo-chamber. If you genuinely can write code 10x as fast as the average developer, and get feed requirements through a 10x faster channel, that would be the life! I suspect that's where the mythical 100x developer comes from.

I agree. There are actually two 10x things that can happen - sometimes in one person. One is choosing the right things to do the first time around. The other is doing them very efficiently. When you get a developer who intuitively understands the domain, and programs very quickly, the sky is the limit.

I certainly don't intend to diminish the impact of these 10x developers, just that projects generally get messed up independent of developer quality.

Re: Organizing complexity is the most important skill in software development

#240

Yeah this is so true. I worked on a system where we had to support imperial and metric units. It was done in a pretty bolted on fashion with if statements all over the place. And sometimes it isn't even clear if it could be done in any other way. Any HN'ers have suggestions on how to do it elegantly.

language?
Post reply on HN