But yes, seek the minimum amount of complexity to materialize the inherent, necessary complexity. But don't allow a drop of complexity more than that. Architecture astronauts, pattern fashionistas, I'm looking at you. KISS. Spend your complexity dollars where it gives you something you truly need or want. Don't do things Just Because.
Organizing complexity is the most important skill in software development
241–250 of 286 posts
Re: Organizing complexity is the most important skill in software development
#242I 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…
Re: Organizing complexity is the most important skill in software development
#243In a recent job I ended up rewriting some of the codebase with this kind of stuff in mind... the results: - 10% of the LOC as previously - Code significantly more understandable - Jr. developer on the team suddenly became a rockstar b/c he could understand what was going on.
Re: Organizing complexity is the most important skill in software development
#244This 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…
Re: Organizing complexity is the most important skill in software development
#245Earlier 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…
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…
Re: Organizing complexity is the most important skill in software development
#246From my own experience programming here are some the most common and best ways to better organize complexity:
1) Create DSLs. The Sapir-Whorf hypothesis is the theory that an individual's thoughts and actions are determined by the language or languages that individual speaks. By creating DSLs we are able to reason about a problem domain with increased efficiency.
2) Reduce cognitive load by reducing state. By reducing the number of variables in a given section of code we can more easily reason about it. values.map (x) -> x * x is a lot more understandable than newArr = [] ; for (i=0; i3) Build tools to build tools. The history of computing is one of building tools on top of tools. From assembly language to C to high level languages. What is is the next step? I suspect it is some kind of polyglot environment that is a hodgepodge of languages all working together combined with automated code creation from AI.
Re: Organizing complexity is the most important skill in software development
#247Earlier quoted context omitted.
The promise of Design Patterns (tm) is that you can systematically learn to organize your code. The article argues that only experience does.
If it were that easy, you could write a compiler compiler that knows all the “design patterns” and generates perfect solutions for all problems. Remember the 239th Rule of Acquisition, “Never be afraid to mislabel a product.” That goes for methodologies, too. If they could get away with it, they would probably say it cures baldness, too.
Re: Organizing complexity is the most important skill in software development
#248In a recent job I ended up rewriting some of the codebase with this kind of stuff in mind... the results: - 10% of the LOC as previously - Code significantly more understandable - Jr. developer on the team suddenly became a rockstar b/c he could understand what was going on.
Reducing LOC is not always necessarily a good thing. I'd always favor a more readable codebase that takes some effort to explain its purpose than terse one that is vague and obscure that makes your head spin trying to figure out its raison d'etre
Re: Organizing complexity is the most important skill in software development
#249Earlier quoted context omitted.
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
#250Earlier 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…