Ryan Tharp's developer advice
It's a short list of simple ideas that I fully endorse. I've added some ancedotes where I could.
I plan to categorized these into the following categories when I have a bit more time:
Planning/Negotiation/Knowledge/Artist/Assessment. Hopefully you find something useful here.
For beginning developers:
- Never stop learning, acknowledge you should never stop.
- Programming is an art-form, treated it as such.
- Every artist needs a patron, find one.
- Don't buy hype, everything has a pro and a con. As an solutions engineer it's your job to figure them out and match the solution to the project.
- When build a project figure out what the minimum amount of code is met it's goals and start with that. I.e. for game development, build one level that has a simple win/lose as quickly as possible. By getting a complete product done, you can show it and get feedback. This will help motivation, identify possibly new requirements, and confirm that the rest of the requirements.
- Don't be afraid to ask why 5 times, to get to the root of something. Only when you can truly understand the purpose or relationship between two events that you can make good decisions moving forward.
- It's not what you know, it's who you know. Most people get jobs through their friends and family. Network and meet people, you'll never know where or when the next opportunity is.
- Don't over think it, you need to allow for some chaos. Without chaos is there is no opportunity. Nothing happens according to plan any ways.
- When setting deadlines add as much buffer as you can negotiate.
- Get used to publicizing why what you built is amazing, no one will spend the time to figure it out or appreciate it
- Blog or podcast. It doesn't matter what, just do it.
- It doesn't matter that you suck, just keep doing it. There's a certain amount of failure that everyone has to get our their system, and the sooner you get yours out, the quicker you can be a success. Failures don't matter in hindsight, very few talk about Steve Jobs' blunders.
- Take time and reflect on life and your projects. A life unexamined is not worth living. Know who you are. (I highly suggest taking a Myers-Briggs test if you haven't, test: http://www.humanmetrics.com/cgi-win/jtypes2.asp analysis: http://www.personalitypage.com/html/info.html)
- Be critical of your work, it's hard to find constructive criticism out there in the real world. Learned to rely on your own.
- Nothing you ever build should be good enough.
- You professional happiness is usually tied to your boss - Find a good boss or get multiple (run your own business).
- If you're implementing a spec, and can't change or influence it, run for the hills.
- Realize each function has a cost, make sure there's a use-case before including it in a release.
- In multiple developer environments, use source control.
- Learn how to negotiate and how to say no.
- Read news articles (Hacker News, Slashdot, Semiaccurate) and non-fiction books.
- Broaden your experiences in areas you're uncomfortable with. I can't tell you the impact of my wife's college courses, that I've picked up through osmosis (dinner conversations, going on field trips with her, going to museums by ourselves) has had on my career. I would have never connected art with programming without her dragging me into things I would have never done on my own.
- Do one thing every day that scares you.
- Plan for the worse, expect the best.
- Your have responsibility in all your actions and reactions
- Dignity is defined by one's ability to provide for themselves
- No one likes a star fucker. Everyone's name is equally important. A person's name is one of the most important things you can remember about them, put the extra effort in to memorizing everyone's name.
- Add debugging to everything. Output variables for conditions before the loop or if statement. Commented it out when not needed. Being able to see the condition while the program is running will clear up all your assumptions and will highlight bugs.