Monday, July 15, 2013

Advice From a Lead Engineer

Recently, a lead engineer I work with was randomly poked on LinkedIn by someone looking for advice about how to advance their programming knowledge at the college level.  I thought the feedback was very good so I would like to share it with you in this post:

"
I think the best advice I can give you is to start doing projects that interest you, whether it's games, utilities, research projects or whatever; the important thing is to see them through until you can consider them "finished". Start building a portfolio of code - it'll be good for your learning and good for you to show off to potential employers.

Some more advice (I'm just going to go into stream-of-consciousness mode here)...

If you want to get into games, learn C++. It's still the lingua franca of the games industry and it will teach you a lot about how the machine works. Understand how the compiler/linker works and how to read the machine code/assembly language it produces.

Learn as many different-paradigm/feature languages as you can. Each one will teach you something and allow you to think in new ways, making you a better programmer and giving you more tools in your toolbox. eg. C++, Lisp, Haskell, Erlang, Smalltalk, Javascript.

For data structures, arrays and hash tables get you a long way. Graph algorithms are absurdly applicable to many problems (not least their obvious strength in this era of social everything).

Learn at least one scripting language well (eg Python), as a go-to language for whatever small task you need to do. Learn to use a unix shell. Learn a version control system (eg git). Learn to really use a decent programming editor (eg. emacs, vim, sublime). These are the non-programming things you don't really hear about much in academia; but they will multiply your productivity. Learn to be productive.

Find the area of programming that fires you up. In games, strategic areas that are always in demand are networking and graphics. Other possibilities are AI, physics, animation, gameplay, tools, audio, the list goes on. Try to develop breadth, real expertise in one area, and depth in a couple of areas.

Perhaps most important: learn to work in a team, get along with others, communicate well and conduct yourself professionally (eg. how to commit to things, and how to say no). People get hired for their technical ability. They usually get fired or plateau in a company because of their poorer soft skills.
"

No comments:

Post a Comment