1.) Source control
I wish that I would have learned how to use source control
earlier. I truly can't believe that
something as fundamental as source control is missing out of the traditional
curriculum of a software developer. It
really doesn't matter which one you learn. This will help you immediately don't wait
until you graduate. Checking in stable
versions of code and documents is so valuable. There will be times where
you wish you could go back to the last point where your program was working the
way you wanted it to. Source control is a safety net. learn how to use it.
2.) Users groups & conferences
Networking is important, start doing it now. Users groups are a great way to introduce yourself to other people who are interested in learning and growing. I've met some of my favorite
software developers at users groups and conferences. It’s a wonderful thing to find people who are
passionate about their craft. Consider reading the
passionate programmer, run with the "A crowd", surrounding yourself with
people who are excellent at their job. It's only a matter of time before
their good habits will wear off on you.
Imagine the opposite.
Imagine that you accidentally found yourself at a really bad software
development shop. You are surrounded
with people who are there to punch a time clock and collect a paycheck. They may browse the internet more than they write software. This sometimes actually happens. There are some large corporations where bad
developers can slip between the cracks for multiple years. Don't their let bad habits rub off on
you. Users groups and conferences are a
great way of meeting people who really care about their craft. It's a good opportunity to keep your finger
on the pulse of where the talent in your area is working. Surround yourself with successful people and
you will be successful.
3.) Technologies learned
When I was an intern, I worked for a cable company that
provided the software that would be on your cable boxes. We wrote the software that would show you On
Demand content, pay per view, and allow you to record TV shows. The language they used is called VODScript
(Video on Demand script). Luckily, I had
the good sense not to get myself tied up with a proprietary language. Make sure that you don't get yourself mixed
up in a language like that. You don't
want to pigeon hole yourself at this point of your career.
4.) Empathy
I've read somewhere that more projects fail because of
people problems than technological problems.
A group of skilled engineers can typically solve most design and engineering
problems. Often times teams start to
struggle when people problems start to surface themselves. Someone once told me that they'd "rather
dig a ditch with friends, than work on a great project with a bunch of
assholes". Although I don't
necessarily enjoy digging ditches or physical labor, I do agree with what this
quote is trying to get at.
Respect your fellow engineer. People you work with are
only really willing to discuss things that are socially acceptable to talk
about. If you can have a safe
environment to state breaking down some of those barriers, your team will
grow. You will learn to understand each
other. It's important to feel close to
those that are on your team. Odds are
you will spend more time directly interacting with them than you will your
significant other. Love the people you
work with. Love what you do. Help people share those beliefs, and make
them feel safe in confiding in you and your team mates. You cannot be successful without your team
being successful.
5.) Being humble & maintaing healthy relationships
When I first started my career, I think that one of my
primary objectives was to show my boss how much of a rock star that I am. I later found that I prefer to have a coaching relationship that I have with my supervisor. No one is perfect. Be honest with your supervisor. Tell them where you'd like to grow. Ask them for their honest feedback. It's a much healthier relationship to have a
mentor/coach that you report to than trying to convince someone that
you are skilled.
6.) Tech is a tool & not necessarily the hard part
If you'd read this blog much, you've known that within the
last 6 months I made a semi-drastic career change. I left my very hardware centric, .NET
development shop to a Ruby/Go web shop.
I really envisioned that the technology would be the hardest part of
this transition. It's not. The hardest part of this transition is the
domain knowledge. You can google
"How do I do X in Rail" or "Best way to blah in .NET", but
you cannot google for product specific things.
When you start a new job, take time to understand the domain as
much as possible. Technology is the easy
part. Internal training is
expensive and time consuming. Don't make your co-workers repeat themselves.
7.) Being a software tester
Being a software tester (QA) is a great intro into the
software development career path. I
started my career as a QA. I interned as
a QA, and spend approximately 6 months as a QA in my first professional
job. The line between a software
developer and a technical skilled QA is blurring. I'm to believe
that the salaries are also similarly blurry.
If you more passionate about finding bugs in other people’s software and
general breaking stuff being a QA might be a good fit for you.
8.) Practice
One of best way to become a skilled software developer is by
practicing your craft. Have you heard of
Code Katas yet? If not, it's a great way
to independently improve your development skills with fun problems that are
just challenging enough to stretch your. Using katas is also a good way to learn a new language.
9.) Time management, staying focused and consuming information on demand
E-mail - Turn off e-mail notifications, they are distracting. E-mail is typically seen as an urgent, but not important activity. Turning off
chat/e-mail is a good way to help you stay focused when you need to be
productive. Also, consider managing your
e-mail with via Inbox Zero.
Blogs - Find some interesting software development blogs,
and subscribe to them in an RSS feed reader.
This is a good way to consume the media that you are interested "on
demand", and not necessarily whatever is trending on twitter or Facebook. Try to not have too many blogs in your feed. It can be intimidating when you open your
feed reader and you have 100+ things to read.
Timing management - I love using the pomodoro technique while coding or
performing any task that I need to stay focused on. Not only will it help you stay focused for a
small chunk of time, it's also a good way to step away from the problems that you
are trying to solve. It's surprising how
many times you will come back into a programming session with a different
perspective because you temporarily separated yourself from the problem.
10.) Money Management
You spend 4-ish years in college. There is a demand for developers out
there in the world. There is a
good chance that when you graduate from college, you will be able to find a
job. Assuming that you can land your
first job, you will also land your first professional paycheck. Now what are you supposed to do with it? What's the smart thing to do with it? Someone once told me that it's important to
spend at least 10% of the time that you do studying for your career, to spend
studying financial management. Don't
make dumb decisions with your money.
You've studied long and hard for this pay off.
You will work long hours for it.
Educate yourself on financial independence, investing, and debt
management. I guarantee it's worth it.