Live data from Hacker News

Organizing complexity is the most important skill in software development

johndcook.com

151–160 of 286 posts

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

#151
post #2

Organization is the hardest part for me personally in getting better as a developer. How to build a structure that is easy to change and extend. Any tips where to find good books or online sources?

Structure and Interpretation of Computer Programs. This famous book emphasized controlling complexity and how to build a structure that is easy to extend.

The cost of complexity is exponential -Rob Pike

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

#152
post #135

Earlier quoted context omitted.

It would be actually interesting to look at the commits of a candidate's any online project repository from the very start and observe how the candidate made the progress with respect to the structure of code and improvement in coding practice. To check whether the candidate optimizes and refactors the code during the development of the project leading to a stable release.

that assumes the candidate has an online repo somewhere. I think this is quite a discriminating practice - what if i don't do public projects?

And that online repo is fully complex and developed. And has a stable release, isn't a work in progress. That code you hacked together in a couple hours to solve a quick problem isn't going to be an indication of how you handle a mature project with multiple developers.

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

#153

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…

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, well I don't know the magnitude of the slowness or the anger, but unless you're a ramen fueled startup there is no excuse for having slow machines. It's management failure. It's a waste of developer time. Instead of coding the dev is having to deal with stress inducing constant 5 second hiccups or similar things.

Put yourself in the interviewee's shoes. Do you really want to work in a company that can't conduct a proper interview and has broken/slow hardware?

And yes, I do use vim and I do like w very much.

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

#154
post #93

Earlier quoted context omitted.

Compilers aren't real-time, distributed, multi-user, ... basically anything that is hard from a software engineering perspective which includes deployment and testing. Compilers have reproducible test cases (if they don't, that is a bug in itself). You can catch regressions in a compiler with an automated test suite, and bisect their version history to see where it was introduced. Bug reports from the field tend to b…

If the point is looking for organizational skills, i think compilers are legitimate. They're big complicated beasts. Sure, some people in isolation can make amazing things with a few thousand lines of code - I think most people would be happy employing Fabrice Bellard. Writing a C compiler seems like one of those standard undergrad activities. If a programmer can make that work, they probably have sufficient organiza…

"Tell me about writing a compiler" seems mostly to be a question intended to restrict your hires to fresh grads who took a compiler course or if you're trying to poach compiler writers from another company. You're not likely to get a very useful response from someone who hasn't written one recently or at all. You could just as well ask "Tell me about writing a POSIX shell", or "Tell me about writing a browser", or basically any "Tell me about writing a ". It's not a useful question unless you're specifically hiring them to write a .

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

#155

Earlier quoted context omitted.

Why's that? I've been thinking about starting my own side company. It is a lot of work!

In my case, it's the "lot of work" issue that is the problem. It's really easy for me to ignore the work I don't understand very well (marketing) or don't enjoy very much (which is largely a function of not understanding very well) for raw programming. I have a couple of friends doing a startup in the same space in which I'm writing some software, and their software is nowhere near as far along as mine, yet I don't h…

Why don't you join forces with your friends? If your tech is as far advanced as their business development, it sounds like you could join as an equal founder.

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

#156
post #71

I agree that most complexity in software systems comes from managing state. So here is a simple solution - stop doing it. Stop managing state. Use the right tools for the job. Most mainstream programming languages are ridiculously inadequate for building any production software of any significant complexity without introducing more problems than you are trying to solve. Use a mature functional programming language th…

There's gotta be performance drawbacks to immutable state.

How so? You can optimize immutable state into mutable state in most cases where it would be a performance issue.

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

#157

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…

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 working keyboard to provide me with, I'd never work there in the first place, because if they can't even provide working peripherals there's no limit to what else they might skimp on.

I actually have three keyboards at my desk right now -- one with Cherry MX blues, one with Cherry MX browns, and a Model M. No way in hell would I ever write code without "w"s.

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

#158
post #85

There is a term for it. It's called managing scope. I'm surprised the article didn't mention this.

No, that's a totally different thing. The scope (requirements) of the software might be huge but the software could be designed and implemented cleanly and with maintainability in mind. Yet the scope might be tiny and the implementation a mess. This article discusses the skill of taking a mess and turning it into something clean.

I guess it depends your usage of scope. One is used in defining the problem, the other, the solution. I'm thinking of it's usage when describing the solution.

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

#159

Mirror since the site is currently down: The most important skill in software development Posted on 18 June 2015 by John Here’s an insightful paragraph from James Hague’s blog post Organization skills beat algorithmic wizardry: When it comes to writing code, the number one most important skill is how to keep a tangle of features from collapsing under the weight of its own complexity. I’ve worked on large telecommunic…

Here's an archive.org cache: https://web.archive.org/web/20150622134205/http://www.johndc...

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

#160
post #135

Earlier quoted context omitted.

It would be actually interesting to look at the commits of a candidate's any online project repository from the very start and observe how the candidate made the progress with respect to the structure of code and improvement in coding practice. To check whether the candidate optimizes and refactors the code during the development of the project leading to a stable release.

that assumes the candidate has an online repo somewhere. I think this is quite a discriminating practice - what if i don't do public projects?

Generally speaking, I preferentially hire developers with public projects--though I do not just pick one at random and ask for one they're particularly proud of. I think open source development is virtuous and is something that I want to promote and encourage; in the process, I get what I think is a better view into how somebody works.

If you don't do public projects, then you start a few steps behind the other candidates. This isn't insurmountable, but the error bars are wider, making you a somewhat greater risk.

Post reply on HN