Ask HN: How do I fast-track my software design skills?

9 points | by throwly 13 days ago

8 comments

  • mikewarot 12 days ago
    The key to taking better pictures is to take twice as many as you would otherwise take, and throw at least half of them away during review. Over time, you'll take more, and better photos.

    The key to writing better code is to write more of it, then refactor it once you've discovered what actually works to solve the problem. Spend time making sure you document it, and don't ever take pride in "clever" code. Pride go'eth before the fall.

    Always be willing to throw code away, and be willing to rewrite it, at least once.

    • gorg_dc 12 days ago
      To get the hacking feeling away: the only way is to learn more of the details of how certain things work on lower levels. That will give you more control and a better feeling that your solution is solid and better vs other solutions.

      For creating design, it helps to be mentored actually. Reading books about design patters and architecture helped me but nothing worked as much as a good mentor. You can always start with 'how would I desing a software that does X?' and think 'how would it change if I add Y' or 'how much can this scale?'. Find people around you or on the internet to discuss your ideas, that helps a lot,

      Look up system design software. Personally I like [aws this is my architecture series](https://www.youtube.com/watch?v=IP03SkGbP-U&list=PLhr1KZpdzu...). In general what you say it is true. It is very hard to do software design right, you need practice and there is very little material on it.

      Good luck!

      • high_byte 13 days ago
        I think the skill you need is time management. or rather yet, laziness. as Bill Gates once said, he will always get a lazy person because he will find an easy way to do it.

        think about it as a business (whether it is or not) every action has a price, in cash or in time or in both. aim for low hanging fruits. adapt to changes when they happen. experiment in small scale.

        no person in the world can come up with design in their head and that would be it. software is never ending cycle of improving, layering, adapting. more often than not, stillness means death. design evolves with the code, what makes good design is how easy it is to evolve, and that takes skills and experience. sounds like you have the skills ("hack together until they work") and 3 years experience is no joke. to sum it up, my advice to you is to look at case studies of success and failure, these lessons often reflect on more than just programming

        • LarryMade2 12 days ago
          As you get faster and more comfortable with getting things done, you have the time to improve your quality. I've found this blog post inspirational:

          https://blog.codinghorror.com/quantity-always-trumps-quality...

          • manx 13 days ago
            What really helped me, was learning Scala and get more into functional programming, especially immutability. Now I write better code with better architectures in other languages, e.g. Typescript, Java, Dart, Python.

            The change of thinking that is needed to deal with immutability transformed the way how I approach software design.

            • PaulHoule 13 days ago
              The designs that I'm proudest of and that took the most thinking all had an element of figuring out how to decompose a system into layers and resolve any "chicken and egg" problems that prevented a clean decomposition.
              • tyroh 12 days ago
                Maybe try mentoring someone who's building something, someone junior? I find that teaching helps me get organized with my ideas and you also get feedback on ideas from someone.
                • navd 12 days ago
                  Stop reading books and start making stuff