Live data from Hacker News

Organizing complexity is the most important skill in software development

johndcook.com

261–270 of 286 posts

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

#261
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?

>I think this is quite a discriminating practice - what if i don't do public projects?

Then either start one or resign yourself to not getting the best possible tech jobs out there?

As a discriminatory practice it's probably one of the most benign. There's a low bar to putting open source code out there. You can write a simple project and put it out there in a couple of weekends. That alone puts you ahead of about 80% of candidates.

It's a way better discriminatory practice than the current default assumption that the best developers out there are white, male twenty-somethings.

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

#262

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.

This assumes that developers' off-work behavior is similar enough to their work behavior that it's a reliable indicator of their workplace performance. Or that developers should comport themselves on their off time to a workplace-level standard. The problem with this is that it doesn't let my personal projects be Play. If I'm writing something for myself, it's not going to be as clean and documented to the level it w…

>This assumes that developers' off-work behavior is similar enough to their work behavior that it's a reliable indicator of their workplace performance. Or that developers should comport themselves on their off time to a workplace-level standard.

Actually I hold myself to a higher standard when writing open source - A) because I know everything is open to the world, and B) because I'm not under tight time constraints.

Nonetheless, there's no perfect project, and any employer that looked at a github project and was needlessly, ridiculously picky or made a presumption that there shouldn't ever be mistakes would end up just not hiring anybody at all.

>And if I'm learning a new technology, I'm going to be sloppy. I'm going to make mistakes. That's the very nature of learning-by-doing.

Only idiots expect a perfectionist. Thus if you try to make every commit an exercise in perfection you're only selecting out the idiots.

I'd actually far rather see incremental improvement (in code quality, documentation clarity & commit messages) than sheer perfectionism.

Also bear in mind that no matter how interested the employer is in you, the chances of them taking anything but the most cursory glance at anything beyond HEAD is very small.

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

#263

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…

I actually like "for (;;) {}" as an idiom for an infinite loop (or at least, the terminating conditions are in the body rather than the loop construct itself.) It maybe stands out more than "while(true)", so readers can easily see what's going on. But maybe that's just a justification, and the real reason is that it looks clever because not everybody knows you can do that with a C-style for loop.

    #define ever (;;)

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

#264
post #113

Earlier quoted context omitted.

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.

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

^^^this is the correct answer. as a manager I want to know if my team is experiencing an obstacle that should be simple for me to fix for them. A managers job is to remove these kind of obstacles. I don't want them wasting time with poor workarounds.

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

#266
Interesting. Most comments seem focused on code complexity. In real life situations the complexity is blend of human interactions (attitude, consistency,team,leads, peers, family, emotions) business, market, competition, budget, time, attrition, unexpected events, and more.

Life is complex. Business and workplace dynamics can be complex. People are complex with their own strengths, quirks and situations. Having a broad outlook, developing patience and skills to deal with life and work is part of becoming mature.

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

#267
> Do the difficult things while they are easy and do the great things while they are small. A journey of a thousand miles must begin with a single step. (source: http://www.brainyquote.com/quotes/quotes/l/laotzu398196.html...)

This applies to systems as much as any thing else it possibly could.

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

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

There are two kinds of cleverness, and both require balance in their application.

The first is the more obvious kind: exploiting various conditions that occur in your code, in order to come up with a nonstandard solution. E.g. using if (x mod 15 == 0) in fizzbuzz. The problem with this kind of cleverness is that it's hard to understand the code, and it breaks whenever the conditions it relies on stop holding.

The second kind of more subtle. It is where you organize code to properly express the nature of the problem, but this organization is itself conceptually complex. A typical example is using C++ templates where they make logical sense, but they make the code that much harder to read.

The second kind is where balance is needed most. If you use too little cleverness (or maybe too much humility), you end up with spaghetti code, or code where all the organization is done via convention instead of enforced by the compiler. If you use too much cleverness, you end up with code that is hard to read, and brittle, since so many assumptions are embedded in the code.

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

#269

I'd say it's not really about "organizing complexity" - because that tends to just push it around somewhere else - but reducing complexity which is most important. In my experience it has been that designs which look "locally simple" because they have such a high level of abstraction are actually the most complex overall. Such simplicity is deceptive. I think it's this deceptive simplicity which causes people to writ…

This can be hard sometimes. If the business is a mess then your code will be a mess seeing as your code is just a representation of your business.

I work for such a business right now and it's killing me. No amount of high quality code will fix this.

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

#270
post #29

Organisational skill is actually an entrepreneurial skill. I'm learning the hard way that there are two diametrically opposing skills you need to master for both running a business and programming effectively: 1. Skills in Creating 2. Skills in Organising those creations The thing is, the Creating part is always exciting but it's disruptive in nature. The Organising part is boring because it's about taming or temperi…

So true. If your business is a mess your code will be a mess.
Post reply on HN