Your analogy is apt, yet its application is reversed. Your algorithm was not better because it was written by someone with knowledge of C++ or ASM. It was better because it used the available hardware more efficiently. A good programmer knows that an A* search will be more efficient dan BFS, what he knows about the used language is irrelevant. You can be an expert in C++ and ASM and code more efficiently than god, if you use BFS where a good heuristic is available your program will still be many times slower than my program using A* (or pretty much any good search algorithm).
Which is what you already stated, though in not so many words: what is important is an understanding of the algorithms you use, far more important than micro-optimalisations for a specific language. Whoop-tie-f*ckin'-doo, your program uses a BFS with 10% less memory useage than your classmates implementation. How usefull is that if my program uses 95% less memory because the algorithm I used is better?
An interesting read which pops up as one of the first hits on google for
You must be registered to see links
should clarify it better than I am willing to do here.
Long story short: ASM is a waste of time. What matters not is how memory is allocated, when it is freed, or even which particular type of string operation is faster. What really matters is the overal performance of your program which is directly related to the efficiency of your algorithm. The more you can focus on that instead of on silly little details the better, and yes that means the more abstract and higher level your language is the better. JAVA, Python, C# and PHP are excelent choices when it comes to learning how to program, anything lower level is interesting and will give you a better understanding of what you do, but it will not make you a more efficient programmer.