Mother. Fucking. Tar.
Extracting a tarball:
tar -xzf theTarBall.tar.gzThe way I remember it is by saying in my head "extract zee file".
Create a tarball:
tar -czf nameOfTarFile.tar.gz directoryOrFileToCompressI remember this one with "compress zee file".
Remember that the 'f' goes at the end because it's always followed by the name of the tarball to be extracted or created.
Helpful Books
Release It! -- Michael T. NygardThis book is incredible for understanding how to build solid, scalable systems with sensible interactions. It references some dated technology, but has excellent real world examples of how to build flexible APIs and rebust services.
Clean Code -- Robert C. MartinWhile not everything in this book is useful, I've found a majority of it suggests some helpful practices for writing good code. At best you'll love it, and at worst you'll spend a lot of time thinking about how you want the code to read.
Head First Design Patterns -- Eric Freeman, Elisabeth Robson, Bert Bates, Kathy SierraHonestly, I really hated this book. However, of everyone I've met who has read other design pattern books, they say this is the best. Other books worth looking at are Patterns of Enterprise Application Architecture by Martin Fowler, and the 'Gang of Four' book.
Machine Learning -- Kevin P. MurphyThis is more tangentially related to programming, and nevertheless is an excellent intro to machine learning. It details the theory as well as the practice.
Helpful Blogs/Websites
Call Me Maybe? -- https://aphyr.com/tags/jepsenI wasn't able to grasp how eventually consistent systems work until I found this blog. 'Aphyr' (Kyle Kingsbury) does an excellent job of explaining why commonly used distributed systems fail and how they should actually work.
Eloquent Javascript -- http://eloquentjavascript.netThis is one of the best 'Intro to Programming' resources I've found. It's simple, detailed, and interactive. It's one I almost always recommend to folks who want to learn the how/what/why of coding.
The Twelve Factor Application -- https://12factor.net/Awesome resource detailing some best practices for developing modern applications.
New Hotness Technology
This is likely dated, but here are is some tech that's hot right now and that I've found pretty useful:
- AngularJS (Javascript framework)
- Bootstrap (CSS framework)
- Docker
- Kubernetes
- Drone
- Go Lang
- Riak
- Ratpack (https://ratpack.io)
- Reactive (http://reactivex.io/)
- Spring 5*
*Caution: Not really done yet... and not really hot. Spring is something that's nice to know but can be a mega pain in the ass.
Also do some googling on 'DevOps'.
Other Misc. Thoughts
Test Test Test
Get good at writing tests. I didn't link any resources because I haven't found any that do an awesome. Here are some things to think about when testing:
- How will my program respond to unexpected inputs?
- What is the best way to structure a program so that I'm only ever testing small amounts of code?
- Will my tests fail if I change the way my code works?
Get comfortable in a linux/unix shell
Knowing how to operate in only a terminal is imperative. When remote connecting to a server to debug something broken, there isn't a GUI. Learn how to use:
- less
- cat
- grep
- ssh
- ssh-keygen
- scp
- vim (or emacs)
- cd
- ls
- rm
- mkdir
And a shitton of others. Spend time in a terminal, and it will make everything easier in the long run.
Learn a few languages
I've found that, while knowing multiple programming languages isn't necessary, it's incredibly useful. Having multiple languages means there are more tools available to solve a problem. More importantly, it help reveal why one language is used over another. Also, as a former coworker and brilliant person Nate Ashford said, "Solving a problem in one language often reveals the easiest solution in another". Using another language can often force a developer to look at the problem in a different, and better, way.
Build something
Find a problem that's simple in your life that's interesting, and appears to be simple. For example, my new puppy gets homesick when we're gone, and so every day we play her radio. I quickly got sick of manually doing this, and hacked together a crap program called 'autoCaster'. Now everyday at 7 am, my script casts the radio to my chromecast audio, and at 6 turns it off. I recommend doing something hacky, and simple like this -- try using some of the new hotness tech to do it!
Remember that no one really knows how to code
In terms of a discipline, software development is still new. There isn't a right way to solve every problem, and years of development don't always make someone a better developer. It's hard to know that, though, because many developers assert opinions as facts. For example, you'll probably here things like this:
- "The only way to do this is..."
- "That's one way to do it, but the right way is to..."
- "I can't believe anyone would ever right the code in this way..."
They may be correct, but it's important to remember that it might be a load of shit.
Most importantly, it's best to be open to input, to critique others both honestly and kindly, and most importantly to listen, listen, listen.