A more philosophical answer:
Unix (in all flavors) is built on a single big idea:
Difficult problems can be solved by solving easy problems first.
You might recognize this as the Bottom-Up approach. But Unix takes this philosophy to an extreme. It's like living in a foreign country: you need to enculturate.
For instance, suppose you are working on a system that requires three separate servers. Every morning, you type in three different commands to start them up. At some point (hopefully on day two), you decide it's silly to type those same three commands each time you want to start work. You might be tempted to write an application that controls those servers, but that's not the Unix way. Instead, you should put those three commands in a script and move on.
Later, when you are ready to go into production, you want to show the startup process to your customer. It's a bit embarrassing to show off the startup script, so you write a little GUI that has a startup button for the customer to press. That button simply calls the script you wrote back on day two. Problem solved!
If that scenario strikes you as odd or horrifying, you are still thinking like a Windows programmer. And in some ways it is horrifying: a little helper script has become part of production code almost by accident. But this sort of thing happens all the time on Unix systems and it mostly works.
There's not much point in listing commands that you need. If you use the command line long enough, you'll figure out what you need fairly quickly. Instead, I'd focus on trying to do everything in the shell for a while. (I use ksh exclusively for writing scripts and bash for my interactive shell. They're similar, but geared toward slightly different uses.)
I don't believe anyone who does not understand pipelines can be said to be a Unix programmer. A fairly common idiom that I found helpful to grokking pipelines was the output of find piped into xargs. Right now, for instance, I need to remove a bunch of files that I own. First I find the files:
$ find . -user jericson
Then I pipe the results to xargs to remove them:
$ find . -user jericson | xargs rm
Be sure to look at the -i option for xargs as well.
Note that I broke the problem into two smaller problems and solved each one separately. I actually ran the find command by itself to be sure I was looking at correct files. Then I piped the results to the second command as input. Using the pipeline avoids an intermediary file.