Live data from Hacker News

Organizing complexity is the most important skill in software development

johndcook.com

201–210 of 286 posts

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

#201

Earlier quoted context omitted.

> 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…

I'm curious, how complex was the code. I would love to try this out at some point. Did it fit all in one page?

I think it was a class of 30-50 lines of Java code.

The problems were those you see daily in production code. Misleading names. Duplicated constants. Overly complex constructs. Off by one errors. Maybe a resource leak when exceptions are thrown. Etc.

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

#203

Earlier quoted context omitted.

Our main product was developed on a keyboard that was missing a "w". It's not a big deal, though - you can use a for(;;) loop instead of a while loop without hurting performance. And it's easy to just avoid "w" words in the view templates by being clever with word choice. Of course, that's not true at all. But giving someone a defective-but-not-entirely-broken tool can be a clever way of seeing how they work around p…

I'm sorry but I can't help to find this situation ridiculous. Unless you're from a very poor country there is no excuse for not having a working keyboard. I don't know if that was part of the test, but if it was, it's worse than the big blue chip corps asking about the number of piano tuners. Which actually can be valuable at understanding how one reasons about unknown problems/areas. About the server being slow, wel…

> Do you really want to work in a company that can't conduct a proper interview and has broken/slow hardware?

Slow is relative. The employee in question was trying to figure out why a remote server was experiencing extreme slowdown. He ssh-ed in, but he was able to type far faster than the beleaguered remote could echo his keystrokes. So he needed to just carefully type his commands, wait for them to appear, and then press enter. Instead, he typed angrily and too quickly, swore at the connection, and eventually started slamming his keyboard in a fit of pique.

It was a totally reasonable real-world slow machine problem, and a totally useful insight into the mindset of a potential new employee.

Not egregious at all. We're developers, sometimes we have to walk into an annoying situation and deal with it like adults.

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

#204
post #113

Earlier quoted context omitted.

Our main product was developed on a keyboard that was missing a "w". It's not a big deal, though - you can use a for(;;) loop instead of a while loop without hurting performance. And it's easy to just avoid "w" words in the view templates by being clever with word choice. Of course, that's not true at all. But giving someone a defective-but-not-entirely-broken tool can be a clever way of seeing how they work around p…

Maybe it's why I'm not a developer anymore, but my approach to a broken "w" key wouldn't be figuring out a workaround to using "while", but rather copying and pasting a "w" from somewhere else.

'twas meant to be a joke. but you're right, there are much better solutions, starting with "go to the closest store and buy a new keyboard".

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

#205

Earlier quoted context omitted.

I'm sorry but I can't help to find this situation ridiculous. Unless you're from a very poor country there is no excuse for not having a working keyboard. I don't know if that was part of the test, but if it was, it's worse than the big blue chip corps asking about the number of piano tuners. Which actually can be valuable at understanding how one reasons about unknown problems/areas. About the server being slow, wel…

> Do you really want to work in a company that can't conduct a proper interview and has broken/slow hardware? Slow is relative. The employee in question was trying to figure out why a remote server was experiencing extreme slowdown. He ssh-ed in, but he was able to type far faster than the beleaguered remote could echo his keystrokes. So he needed to just carefully type his commands, wait for them to appear, and then…

Yeah but poor guy - in an interview situation the pressure is different and public. He might have done fine at his own desk.

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

#206

Earlier quoted context omitted.

Yeah, personal projects could be sloppy, as it's mostly for learning new technology. And it may also be unfair to say that a good programmer always produce clean code, no matter the reason for development. But still, there must be one project that the candidate considers his best work, one he/she is proud of, one where he/she has motivation to do best. If the employer can just ask the candidate for that project, and…

>But still, there must be one project that the candidate considers his best work, one he/she is proud of, one where he has motivation to do best. For an experienced developer, that would be a workplace project, which you probably could not see. Indeed, it _should_ be a workplace project; would you hire a professional developer whose best work is their personal project? But if what you're saying is that the mark of an…

When I was writing this, I actually had only new grads in my mind. You got me there. But, I think this would especially helpful incase of recent graduates. What I am trying to say is that if a candidate can show the life-cycle of some academic/personal project in a public/private manner, it would help the employer make a better decision, which will inturn benefit the candidate.

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

#207

Earlier quoted context omitted.

How'd you do it if the keyboard wasn't working?

Our main product was developed on a keyboard that was missing a "w". It's not a big deal, though - you can use a for(;;) loop instead of a while loop without hurting performance. And it's easy to just avoid "w" words in the view templates by being clever with word choice. Of course, that's not true at all. But giving someone a defective-but-not-entirely-broken tool can be a clever way of seeing how they work around p…

Not at a company, but in Bulgaria every year there is a National Programming Olympiad - basically high-schoolers (but some time even mid-schoolers) would compete by solving 2 or 3 exercises in small amount of time. Their code would be ran, against tests, and it should finish in time, and with correct answers. Possibly code review might be done as well. Most used languages were Pascal, C, C++, Basic.

But then computers were not provided, each school had to travel with a computer for each student. So around 1993/94 a friend of mine, who also had some terrible medial situation at the time, and was quite weak decided to compete, and to make things worse for him - his spacebar wasn't working. I think he did a lot of presses of Alt+32 (or was it Alt+20 - I haven't used this combination of entering ASCII codes in a long time). He finish pretty good for the situation and keyboard problem he had, and next year when he was healthy and with good keyboard he did just awesome!

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

#208

Earlier quoted context omitted.

How'd you do it if the keyboard wasn't working?

Our main product was developed on a keyboard that was missing a "w". It's not a big deal, though - you can use a for(;;) loop instead of a while loop without hurting performance. And it's easy to just avoid "w" words in the view templates by being clever with word choice. Of course, that's not true at all. But giving someone a defective-but-not-entirely-broken tool can be a clever way of seeing how they work around p…

If the 'w' key is the only worn out key on a keyboard, I would suspect that it had seen heavy use attached to a gaming PC, as the "forward" key in the default WASD movement layout.

I have a keyboard with a broken 'w' key myself, and I know exactly why that key cap died young. It sure wasn't from typing out "while".

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

#209
post #146

Earlier quoted context omitted.

ascii 119, son on Win Alt-119. But seriously, stand up and ask for a working keyboard first. The test there is communication.

Exactly. If someone's approach to a broken keyboard is some workaround instead of just asking for another keyboard it is a sign they handle problems very, very poorly.

It's an insurance company, maybe they want to assure that they still work even if there is something exploding. ;)

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

#210
post #49

the number one most important skill is how to keep a tangle of features from collapsing under the weight of its own complexity Agreed. very rarely is there some tricky data structure or algorithm that casts a looming shadow over everything else Agreed, BUT... In order to organize, sooner or later, you will have to get clever (with tricky data structures or algorithms). How I have always built something big and/or com…

Still too many lines of code! Being organised has nothing to do with fewer lines of code. A 10 line script can be disorganised and a million LoC app can be well organised. What makes code organised is things not being tangled up together - having well encapsulated logical modules that do one thing (or a set of related things), with a well designed API to get each bit to work with the other bits. I've found that the m…

> I've found that the more I write testable code the better organised my code gets. Automated testing forces you to design maintainable, organised code - because your test suite really won't cope with disorganised code.

It can, but it will get out of hand really quickly. Worst case scenario the test suite becomes so tightly bound to the implementation that is becomes a part of it. This forces the test suite to be rewritten in the implementation changes, this is the worst case scenario and must be avoided at all costs.

Post reply on HN