Thread: My Lba 1 remake
View Single Post
  #387  
Old 2018-02-07, 11:41
Lupin's Avatar
Lupin Lupin is offline
Previously Link
 
Join Date: Dec 2001
Location: Paris
Posts: 2,763
Quote:
Originally Posted by Angelus View Post
Thanks, it taking some time :/ generally I don't want to count how bit part of my life I spend on this project.

I also think that this is really interesting problem and I don't know if you will agree with me but we are really not prepare for.

In theory universities should be place where we should learn how to work with projects. But most of projects are like half year and most of the time they started from scratch and are relatively small. Then you end in company where you work on stuff that are developed for the years by multiple people. Most of the time each project have it own variation of ways how to dealing with this complexity. They may exist better but we use stuff we know and that is why I think we should discuss not only achievements but problems so we could share/find solutions that works better.

When you work on project longer I don't think you can avoid complexity. I can even claim that complexity is not something bad and it is needed if you want to do more advance stuff. Problem is that we expand code and then worrying about it negative effects somewhere in future. Then it is really sometimes hard fix stuff that are already broken.

That is why I try all kind of improvement to my workflow: More modularised code, easy to use stuff that often hide complex problems beneath that you don't necessarily need to know about when you use it, testing and generally designing everything. This is not only because I wanted this way, I doing it because I don't have choice. I wouldn't be able to get so far without it.
Oh, I agree that people are usually not well prepared to deal with the kind of complexity that comes with large scale projects. I think it’s even worse than that, most programmers never actually ever learn to deal with it efficiently.

People learn to mitigate things, and postpone the moment where it becomes overwhelming, but OOP modularization and design patterns only take you this far until hidden exponential complexity catches you up and burns you out.

I think most large software project actually either fail or end up being big piles of unmanageable code full of bugs and incapable of growing any larger/better after a certain point.

My recipe for dealing with it in the past few years (both in my day job and on our LBA2 reimplementation project) has been to look at alternative programming paradigms, functional programming in particular, instead of the dominant OOP / imperative religion. It’s proven quite efficient in reducing tight-coupling and unfathomable program state interdependencies. I’m not saying it’s a silver bullet, but it’s been a great help in thinking about things differently and avoid many headaches.

I’m pretty happy with the code on the LBA2 remake project, the complexity is pretty much kept local and doesn’t compound into an unworkable mess.

Refactoring early and often helps a lot too. Initial designs are inevitably proven wrong by confrontation with reality (assuming you actually have a design, some programmers don’t even go through that phase). So it’s a healthy habit to redesign as soon as you notice there’s a mismatch between intended design and actual code.

I suggest you take a look at what John Carmack has to say regarding functional programming.
Also, I’ve been quite influenced by Rich Hickey’s talk (Simple made Easy, The Value of Values),
and Joel Spolsky’s articles (The Law of Leaky Abstractions, The Perils of JavaSchools).
These guys among others make a good job of pinpointing the issue and showing solutions.

Last edited by Lupin; 2018-02-07 at 11:52.
Reply With Quote