5

!rant
TL;DR: Can anyone recommend or point at any resources which deal with best practices and software design for non-beginners?

I started out as a self-taught programmer 7 years ago when I was 15, now I'm computer science student at a university.
I'd consider myself pretty experienced when it comes to designing software as I already made lots of projects, from small things which can be done in a week, to a project which i worked on for more than a year. I don't have any problems with coming up with concepts for complex things. To give you an example I recently wrote a cache system for an android app I'm working on in my free time which can cache everything from REST responses to images on persistent storage combined with a memcache for even faster access to often accessed stuff all in a heavily multithreaded environment. I'd consider the system as solid. It uses a request pattern where everthing which needs to be done is represented by a CacheTask object which can be commited and all responses are packed into CacheResponse objects.

Now that you know what i mean by "non-beginner" lets get on to the problem:

In the last weeks I developed the feeling that I need to learn more. I need to learn more about designing and creating solid systems. The design phase is the most important part during development and I want to get it right for a lot bigger systems.
I already read a lot how other big systems are designed (android activity system and other things with the same scope) but I feel like I need to read something which deals with these things in a more general way.

Do you guys have any recommended readings on software design and best practices?

Comments
  • 0
    Can you give me links or something that points to your android caching project? I will be needing it soon as I am about to start working on project in few days that needs to cache some news articles for offline access.

    I haven't done any caching so far (didn't had any need for it) in my projects.

    For the past few days I've been looking into as many suggestions and articles online about that topic. And the best solution I think in my case would be to use sqlite db.
  • 1
    I have not found such resource, the clean code book is probably a decent one.

    Most of these things you learn from past experience and working with older coders (who themselves learned from others).

    Imho, the general principles are:

    - build code in small components where each does one thing and one thing only.
    - each component should work encapsulate its functionality: I.e. it is a black box that solves one small easy to understand problem.
    - most such components should be unit testable.
    - find a standard way to wire your components. For this you frequently use common design patterns or an existing framework.

    This is the easy part. The harder part is judgement which does not have any recipes to follow.

    Do you library X or technology Y? How long do you maintain existing code if it is a pile of garbage, but a working pile of garbage? Does your solution match the capabilities/requirements of the organization, and if not how does that affect the organization?
  • 0
    @twinflyer You didn't mention about design patterns, so I guess you could at least go for it now, as I think it is a great way to improve one's skills in programming simple to complex systems : https://sourcemaking.com/design_pat...
    I just discovered this link so I don't really know the limits of the content, but it looks promising, with samples of code in several languages (I'm a PHP developer).

    Hope it'll help you a bit
Add Comment