College didn't teach me what i needed to know. It taught me how to learn what i needed to know.

I read this quote on a pamphlet in RIT's Software Engineering office one day. I didn't understand it at the time, but it has turned out to be the most accurate description of a software engineering degree i know.

Well since i have graduated, i have learned many of those things i needed to know. Here are the ones i wish i knew earlier.

Pick an editor and learn it completely

If there is one thing i tell all engineers, even senior ones, it is to pick and editor and learn it from top to bottom. Coder's who operate with only a basic understanding of their editor's features do themselves a disservice: they code slower than they should. We want to do is minimize the lag time between thinking of a line of code and writing it, or navigating to it. Knowing your editor goes a long way.

Any editor these days has a lot of features you may not use regularly: multiple cursors, bookmarks, macros, snippets and jumping to symbols. If some of those sound unfamiliar, or you aren't sure what they do, you are not alone. Take some time and learn these features. The return will be noticeable.

Learn a couple of languages deeply

There is great value in learning the gritty details of a couple of languages. This knowledge is always sought after by companies. When you are on a team, knowing things like which ruby functions have ! versions or why, in Javascript, {} == {} returns false is a great way to get people to come to you with questions. This is a very good thing.

When you are the person with the answers, not only do you code faster, but you become a resource for your team. That means your team codes faster. It also means you will be answering questions that further your understanding of the language. The growth is cyclical. Perfect.

Learn the basics to many other languages

Few companies want a Jack of all trades, master of none. That said, every company wants a Jack of most trades, master of some. By continuously trying new languages you expand your horizons and gain proficiency in languages you don't use every day.

Try languages of all types. Learn a compiled language and a scripting language. Learn a functional language. Learn Swift if you don't. Swift happens to be the next language on my list. Objective-C is just too ugly for me to handle. I am a staunch objector to Lisp-style syntaxes. Yep, i said it.

Learn server infrastructure at your leisure

The last thing you want to do is learn server infrastructure when you have to: late some Friday night because something went wrong on production. Long before that, you should start managing a server yourself. Learn how to configure a web server. I don't care if no one goes to it. Use it as your playground. Host your sites on it. Learn how to configure https. It will take time and, i will be quite honest, it will be miserable at first. When i first started working on a server i routinely had 20 stackoverflow tabs open to do even the most basic things. You want those moments to be when you are struggling to make Nginx run as anything but root. Not when you need to know it some time in the future.

Keep a pulse on tech shifts

Technology moves fast. When you are out of college and working at a company, your day-to-day focuses on a few languages and technologies that rarely change. This develops a sort of technology tunnel-vision. It takes effort to maintain a basic understanding of the tech shifts. Spending time looking at these changes will also help you identify what technologies are signal vs noise. There is a great deal of noise, so it is best to view things openly but consider them critically.

Stay passionate

Software engineering is creative craft. When it comes craftsmanship, the best have always had one thing in common: passion. It is no accident that Japan produced such beautiful swords and Italy created glorious cathedrals. There was a cultural obsession over the crafts. This trait is shared by the best engineers i know. They are passionate about building solutions and creating stuff.

With any craft, we learn from those around us and who have been there before. We adopt their teachings and mold them to our own style.

We are the artisans of our generation. Develop your style early. Share it often.

tl;dr: There are countless things to learn about software development. This list is a good place to start.