In my experience top-down involves architecture of a design, which is a more advanced skill, whereas bottom-up design works form a much smaller view of things trying to design a sub-block that does a small part of something bigger. The end result will usually mean that the top-down my have optimizations that cross block boundaries that weren't apparent in the bottom-up approach or may even take completely different approach to the problem that would be very difficult to see from a bottom up approach.
This is why schools teach things like gates AND/OR/XOR/etc and then using those you make a full adder, using the full adder you make a 32-bit adder and then using the 32-bit adder make a 32x32 multiplier. Instead of starting with lets make a 32x32 multiplier, which we will try out designs for radix-2, radix-4, etc.
Personally I use a top-down approach to come up with an overall architecture of a design and for any large sub-blocks of the design, smaller blocks I create using a bottom-up approach.