Introduction
Several years ago, after graduating from high school, I had to decide on what I wanted to do with my life. Growing up, I enjoyed many things that exercised the creative side of my brain. I doodled here and there, I loved to write short stories or poetry, heck I even enjoyed an essay occasionally, depending upon the subject. But one thing that really made my creative juices flow was anything related to game development.
After being introduced to the Build Editor from Duke Nukem 3D, I knew I found something special. If you remember the game, then I’m sure you can relate to how fun it was and still is. However, those more inclined to create things probably took notice of Ken Silverman’s Build Engine from which Duke Nukem 3D was built upon not to mention many other games at the time. I ended up building my house in the engine at the time and then created a 1-vs-1 twin castles type of map, and much more. I would spend hours creating these levels and thinking of stories and how I can insert them into the levels. It was a wonderful experience, and I was very young at the time, 12 years old to be exact.
So when it came time to decide what I wanted to do with my life, I chose to study Fine Arts but more importantly, Computer Animation/3D Art. I felt this would satisfy my creative juices, and I was certainly right. However, for those of you who are considering making the switch to Software Engineering — or — just want to learn Software Engineering as a complementary skill — or — are too intimidated by computer programming, read on.
Two Years Later in 3D Land
Boom goes the dynamite, and by that, I mean I moved to Tampa, Florida and went to a school called The International Academy of Design and Technology. That’s a mouthful, but on the bright side, I had some great teachers and some of the best experiences of my life. It certainly helped shape me into the person I am today. I learned how to see and more importantly, capture that on paper. I certainly am not the best artist in the world, but kept practicing and made great progress. It’s a skill that takes time to master, like anything else.
But two years in, tons of play-time in Maya modeling and animating basic objects, reality hit me. What about all the debt, with 18% interest rate on most of my student loans? I was on a crash course, and I was the crash test dummy; the debt was still being piled on. I had to do something based upon the options unique to my situation.
The Shift From 3D Artist to Software Engineer
I had to decide where I wanted to continue my education, and that meant doing something that was more financially viable. But it had to be something that I could also be creative at. Before I chose Fine Arts, I considered software development as a potential choice for education; that meant studying Computer Science or Information Systems. But why didn’t I consider software engineering? It’s simple really. I was intimidated by it, since I didn’t understand much about it. I chose the path of least resistance, since I understood (or so I thought at the time) art. I learned later I didn’t understand art like I thought, but even so, I completely threw software development under the bus.
While in limbo regarding what I wanted to continue my education in, I spent the time exploring software engineering. It started with C++ console applications. At first, I was very discouraged, but I didn’t give up. Eventually, I was pleased with it and gained a lot of enjoyment, all because I was starting to understand it! I could speak the language, although at a basic level, but this was the only boost I needed to continue learning. Fast-forward and I started to expand into JavaScript, .NET, C#, etc. on top of C++. My interest only increased, but bear in mind my passion for Fine Arts, mainly 3D art, remained. I knew I couldn’t just abandon that altogether.
I continued playing with 3D art on the side but kept programming. I was satisfying two entirely different sides of my brain, and it really gave me a different perspective on life. But due to the cost of continuing my degree in Fine Arts, I decided to work toward a degree in Information Systems or BIS. Fast-forward to today and I obtained that degree. Moreover, I now work for a major company doing web application development, mainly in ASP.NET using MVC. Granted, I still play with 3D art on the side because I could never give that up.
In retrospect, it wasn’t easy to get here, so I am going to share some advice to help you transition to software engineering whether it is something you want to do full-time or on the side to complement your skill-set. There are many great reasons for wanting to obtain the knowledge of software engineering which is probably why you’re reading this. The good news is it isn’t out of your reach.
The Reality of Trying to Do Both
The reality is you will have to pick one or the other to do professionally. The only kind of job I can think of that involves both is a Technical Artist, and I’d say that’s about 30% Software Engineer, 70% 3D Artist, but that’s up for debate. Furthermore, keep in mind that a Technical Artist isn’t going to do web development or typical software engineering work and mainly will create programs or scripts to satisfy the needs of the development pipeline, be it for a movie, commercial advertisement, or a game.
Moreover, you can be a Software Engineer for a game development studio or even be one outside the gaming industry working for Google on a cool piece of web technology. But the point is most businesses separate roles, and you aren’t going to do both at the same time. You are going to have to choose unless you found a way to clone yourself. In that case, one of you can be a Software Engineer and the other a 3D Artist.
So if you are wanting to transition to software engineering as your primary career, then you will need to completely refocus. Those who want a professional career, to program strictly for fun, or to embellish your skills, then some things in this post will apply. However, keep in mind this post is not a one-size fits all approach and may not be applicable to your situation.
In truth, you can certainly do both at the same time, but in doing so, one of them should be a skill to augment your career or to satisfy your personal interests. Either way, this is critical to understand and will allow you to move on and refocus yourself, allocating the right amount of time for each area of interest.
Tips For Becoming a Professional Software Engineer
The first thing to understand is that at a quick glance, coming from the world of 3D art, software engineering or programming may seem daunting. My opinion, it’s only daunting if you make it. It’s all about attitude as you can teach yourself anything with the right mindset. The road to get there will be a long one, but you will be entering a career field full of opportunities and will have the chance to earn a decent living with a wide array of locations for employment. Moreover, remember you don’t have to give up 3D art if you enjoy it, but be reasonable on your focus and how much time you allocate to it.
I have established 5 simple steps to become a Software Engineer below. Each step is just as important as the other, and I am confident if you follow these and don’t give up, you’ll succeed. Moreover, keep in mind a college degree in Computer Science is highly desirable to potential employers, and the steps below are tailored more for the independent learner.
Set up a Training Plan
It’s always difficult to figure out where to begin. Many of you will be doing this on the side, so classroom-based learning is likely not an option. What made me successful was mixing video-based learning with book learning. Create a spreadsheet which outlines your training in order and plan for the future. Record how much time you spent on each learning item and whether you followed through and completed each one. Here is a sample Programming Training Plan to get you started.
Video Training
Pluralsight has a section titled Beginner Programming which has a ton of courses. I highly recommend Pluralsight and you will find a fantastic amount of content there on a wide variety of topics. It’s top-notch video training, and the entry price of roughly $30/month to access it is very reasonable for the type of education you’re getting in return. Alternatively, I found Lynda.com training to be helpful as well.
Ultimately, you will need to start somewhere, and that means choosing a programming language. In truth, knowing a programming language will not make you a good programmer, but rather understanding good programming concepts and the basics of Object-Oriented Programming will. Pick a good object-oriented language such as C++, C#, or Java as your beginning language, and you’ll be able to transition to one of the others rather easily. But start with one language and learn it rather well before tackling another, or you may end up getting too mixed up in language-specific nuances. If you decide upon wanting to learn game programming, then I highly recommend C++ be your starting point. It’s a harder language of the three I listed, but that didn’t stop me or nor should it stop you.
Book Training
Depending upon what language you choose, some great books exist on the market that can help in your learning journey. If you chose C++, then I recommend Beginning C++ Through Game Programming. This was one of the very first books I picked up for C++ and it helped me learn the basics very fast and through awesome examples pertaining to games. These were console-based games and nothing fancy but was still fun nonetheless.
If you chose C#, then I recommend Beginning C# Object-Oriented Programming. It goes through the basics of C# and you build an application throughout the book, so it allows you to practice and reinforce your learning.
In addition, if you decide to learn Java, then I suggest Java: A Beginner’s Guide. Remember, regardless of which language you pick, it doesn’t hurt to research the different books out there by reading reviews and browsing through the table of contents, but the ones I’ve listed here should get you started.
Finally, a book I recommend, regardless of which language you choose, is Code Complete, Second Edition. This book is quite wonderful and gives you the type of knowledge you would pick up over time through the workplace, such as tips from coworkers, trial and error, and industry best-practices. It helps you understand how to write software professionally and efficiently. Trust me when I say you’ll make many mistakes in how you organize your code, write your routines, and create your objects. This book will help you work out the kinks and become exceptional in the field of Software Engineering.
Beyond the Basics
After you get the basics down, you may want to focus more on a certain technology or type of application. This could be web applications, games, or desktop applications. There is definitely more beyond that, but picking an area of interest allows you to explore the different technologies applicable to it. For example, I create many web applications using ASP.NET MVC with C# and love working with those technologies. Some folks prefer Ruby on Rails instead, but this gives you an idea.
Keep Track and Plan For the Future
Your initial training plan may not have much on it, and I would suspect it’s because you have no idea beyond the basics what to add to your list. As you progress, you will know what to add. The goal is to always have something to learn and focus on. You need to keep the learning engine running. Often times I find myself learning one subject while practicing another. This industry moves at a rapid pace, and you must be willing to keep up. Remember to always keep track of the time spent learning and what items you’ve completed. The sample Programming Training Plan mentioned earlier in this post has a ton of training that may help further guide you as you consider your future learning goals.
Allocate the Right Amount of Time
So, now you have a training plan and know where to begin, but how much time do you set aside for learning? The answer to that question is going to depend upon you. The demands of life make finding time hard. Working a full-time job, having a wife and kids, etc. are a few examples of things biding for your time. You are going to have to figure out what matters to you the most or make compromises with the people you love. Ultimately, the goal is to find just the right balance and then stick with it.
If you can devote even an hour a day to learning something new for five days a week, you will make significant progress. But the more time you commit to learning, the more you will gain. Just remember the key is being consistent and sticking to a plan. It’s also important that you don’t devote too much time, or you may risk burning yourself out.
Build Your Portfolio (Practice What You Learned)
Many training videos and books have example projects that you can follow along to. I highly recommend doing this. However, I suggest making your project a little different or expanding upon it to have some original content. If the Office Ordering application you built from one of your books looks the same as the example shown, then how can you prove to a potential employer that you didn’t just copy/paste everything? Coming up with original content is critical as it shows you can think of an idea from scratch, plan and implement it yourself.
Why not take it a step further and create something that wasn’t based upon an example? Come up with a great idea for something you’d enjoy creating, and then plan for and build it. You will learn a great deal and have something tangible to show off later. The key is building your portfolio and giving a potential employer something to play with. I know many hiring managers who’d rather hire someone who can practice what they preach and have something to show for it. Talk is cheap, after all.
Nail Down Your Resume
This part probably isn’t on the top of everyone’s list of favorite things to do, but building a great resume can make a world of a difference. Now keep in mind many employers have resume searching tools which look for keywords, usually based upon the skills they are seeking. When seeking employment, I suggest reading the requirements and taking note of specific languages or technologies. If you know them and are confident you can deliver using them, ensure your resume has them down.
I suggest keeping your resume short, no more than 2 pages long, and keeping everything brief and to the point. When searching for a potential candidate, hiring managers really don’t have time to read your whole resume and usually skim through it. Make everything short but relevant, so the good bits pop out quickly. You’d be surprised how many competent people get passed over for jobs based on their resume alone. Remember, this is usually your ticket to an interview (let’s not forget about a good cover letter as well) so make it count.
Since it’s out of the scope of this post, I’m not going to go over each step in creating a great resume and cover letter. I suggest reading some of the links I’ve included at the bottom of this post. There are a ton of great articles out there on this subject.
Apply and Don’t Give Up
It’s showtime. After your resume and cover letter are good to go, then it’s time to start firing them off to potential employers. Keep in mind, sending an unoriginal cover letter is never a good idea. Make your resume and cover letter relevant to the job you are applying for. In other words, personalize it to what you’re going after.
Moreover, potential employers are going to ask why you want to work for them, so I suggest doing your research. Find out as much as you can about the company you are applying for and their culture. At this point, you may not be that picky because you just want to get your foot in the door, but I still suggest applying for companies that interest or excite you. It’s effortless to spot a person who isn’t motivated or enthusiastic about where they work or what they’re doing, so don’t become one of them. This usually puts you in the fast lane for a workforce reduction or layoff.
Finally, don’t give up! I’m serious about this. It may take time to find a job because of your lack of experience, but eventually, someone will take notice. Heck, they might even stumble upon your amazing website, which was an application you built that figures out how to solve all of your country’s financial problems. You just never know, and you should never give up. I recently heard a quote from Jim Carey as he was doing a commencement speech that went like this: “You can fail at what you don’t want, so you might as well do something you love.” You can find the full video of his speech here.
Continuing 3D Art on the Side
So perhaps you finally landed a job in Software Engineering or maybe a job as a Technical Artist doing a bit of programming. Either way, you may want to continue with 3D art on the side. This is perfectly obtainable but should be considered a hobby. If that isn’t good enough for you, I suggest practicing your skills and maybe considering freelance work. You could work on just about anything that utilizes 3D art. But I must say my passion is gaming and that’s where I spend a good chunk of time on the side. From traditional 2D concept art or texturing all the way to 3D modeling and animation. With Epic’s Unreal Engine, the sky is the limit, so make it count.
I seriously don’t believe that a person who has the brains to code cannot be an artist. It’s a matter of using both sides of the brain. Learning how to draw takes time and practice, and you must learn to see things differently. A good book which helped me see in a much different way (helping me avoid symbols from early childhood) is Drawing on the Right Side of the Brain. This is a wonderful place to get started, but I assume if you are already a 3D artist then this isn’t something that you need to do, but I still see anyone benefiting from the concepts taught in the book.
To continue scratching your 3D art/modeling/animation itch, it’s important to set up a schedule, just like it was suggested to do for learning to code. This allows you to remain in controlling your life and ensures you are the most successful. It helps to prioritize this way and block out external noise. Having a plan is better than no plan at all.
Helpful Tools For the Job
- Visual Studio — This is mostly the standard IDE for any Windows environment. The professional version can be obtained for free if you are a student via Microsoft’s DreamSpark program. You can also get different Express versions of this IDE from here. They aren’t as feature rich but should be perfect for getting started.
- Resharper — This is an outstanding Visual Studio plugin which makes everything much easier. You can easily refactor code and even fix coding mistakes. It has a dynamic code analyzer to check for coding mistakes on the fly. You can also navigate your code quickly. At the time of this writing, the tool doesn’t support C++, but an early access build does. Expect full C++ support coming in the near future.
- Visual Assist X — This is perfect for those using Visual Studio with C++/C# and want a quick way to refactor and work with code. This does most of what Resharper can but without dynamic code analysis.
- Code::Blocks — This is an alternate IDE to Visual Studio for C, C++, Fortran and is completely free and open source.
- Beyond Compare — If you are working with two text files trying to see where things have changed between them (comparing them) then this is the tool for the job.
- Eclipse IDE — Another IDE for Java, C, C++ developers. This is also of great quality and has many plugins. Best of all, it’s totally free.
- Notepad++ — This is a simple text editing program but on steroids. You can open multiple files within the same window using its tabbed interface, and it also has syntax highlighting.
- Microsoft Outlook — I use this program for setting up my training schedule using its awesome calendar and keep track of my tasks using its to-do list.
- TortoiseSVN — Having a version/source control system is invaluable in software development. This tool allows you to create a repository to keep track of all the various changes to your source code.
Update: Most people, including myself, are now using Git over SVN. I suggest moving in that direction for many reasons.
Conclusion
This post covered a lot and certainly isn’t a one-size fits all solution, but hopefully the perspectives I’ve given will make your decision easier when it comes to Software Development and 3D Art. You can do both if you choose, but being realistic is the key to success. You have to properly zone in on your goals and set up a plan to gain success. You can do it, and being positive and optimistic will only support you in your journey.