Daniel Eagle 是一位修读了纯艺术和信息系统学位的TA，他分享了自己的学习历程和职业发展路线，以便帮助感兴趣的新人入行。其中一章名为The Reality of Trying to Do Both （两全其美的真相），翻译如下：
Pluralsight has a section titled Beginner Programming which has a ton of courses. I highly recommend Pluralsight and you will find an amazing 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.
Depending upon what language you chose, 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, no matter 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 no matter which language you choose is Code Complete, Second Edition. This book is quite amazing and gives you the type of knowledge you would pick up over time through the work place 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 of 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 will allow you to explore the different technologies applicable to it. For example, I create a lot of 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 bit different or expanding upon it to have some original content. If the Office Ordering application you built from one of your books looks the exact 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 extremely important 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 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 looking for a job I suggest reading the requirements and take 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 keep everything brief and to the point. When looking 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 a cover letter that isn’t unique and one that could be used as a template 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 your going after.
Also, 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 really easy 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 little 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 an amazing 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.
In order to continue scratching your 3D art/modeling/animation itch, it’s important to setup a schedule just like it was suggested to do for learning to code. This will allow you to remain in control of 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 pretty much 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 amazing 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 will allow 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.
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 setup a plan to gain success. You can do it and being positive and optimistic will only support you in your journey.