Sunday, October 5, 2014

Decide for Yourself

http://www.quora.com/What-do-the-top-1-of-software-engineers-do-that-the-other-99-do-not

Computer science is a deep field, and to be good at it, you need at least a working understanding of everything. If you think assembly code or linear algebra or strong static typing is "scary" or "too deep" you'll never reach 2.0. That doesn't mean you need to be an expert in everything because you can't. You can't have "I won't go there" areas. You probably don't want to be hand-writing assembly code very often, but if you take the attitude that it's "black magic" or "grunt work" or "unclean", then it will hinder your learning. (You see some Java programmers take this attitude toward manual-memory languages like C.) I would probably use Haskell (a high-level language with strong static typing) given a clean slate; but I've exposed myself to Clojure, C, and even Python (data science libraries) because they cover important topics from computer science. You can't have the "Will this be on the test?" mentality. You have to be curious about everything CS-related. (Mathematical curiosity helps.) You also need to learn about the industry itself. Why do so many software projects fail? What mistakes (technical and nontechnical) lead to that and how might they be prevented? What makes a good startup CTO? What things are worth building, and what patterns betray a death march?