How to get more involved in programming that benefits science and the advancement of the human race [closed] - projects

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.
Closed 12 years ago.
My day job is a good one, but there are times I long to pour my programming efforts into something that benefits science at large.
Something more than simply letting BOINC fold proteins and munge SETI data during my spare cycles.
Is anyone doing this now? Are there any projects on which I could get involved?

One of the most satisfying feelings I ever had was to learn that the lead scientist on a project I had once worked won a Nobel Prize for his work on that project. (The Nobel being what it is, this was over fifteen years after I had moved on and also several years after that science had been done. Mind you, there were literally hundreds of programmers involved and any competent programmer could have done what I did, but it was nice to know I had contributed.) So, I can certainly understand where you're coming from.
You don't say where you're working now, but if you're not currently working on a science project, why don't you get a job on one? You may have to brush up your science background, but if it's what you're interested in, go for it!
You don't say where you live. In the U.S., at least, there are plenty of opportunities to get science related programming jobs:
In the Washington, D.C. area there are a lot of federal government agencies which do scientific research in a variety of fields. A few of these are: the National Institutes of Health (NIH), the National Oceanic and Atmospheric Administration (NOAA), the National Institute for Standards and Technology (NIST), the U.S. Department of Agriculture (USDA), and the National Aeronautics and Space Administration (NASA). In my experience, it's fairly difficult to actually get a government position; however, there are lots of companies with contracts to these agencies to provide support, including programming and other IT work.
In other areas of the U.S. there are still opportunities in at least some of the above (and other) federal agencies as many of them have operations centers in other areas of the country. Perhaps best known is that NASA has 11 major centers in 9 different states (and D.C.) and operations at smaller facilities in other states as well.
As has been mentioned in other answers, universities are a resource for science-related programming jobs also. Many of these have grants of some sort which fund the research.
I'm not familiar with the situation in other countries, but I'd expect the situation to be at least somewhat similar in other "major industrialized nations".

You might also ask around a local university for graduate students who need software tooling for research projects. Many physicists end up rolling their own tools (simulators, etc.) and I'd imagine they'd be ecstatic to have a quality programmer at their disposal. Maybe you'll end up getting connected with higher-profile projects; or maybe you'll write the software that some kid uses to change our view of reality.
Good luck with whatever you find.

This is likely not what you are looking for, but if you are looking to help society and those in need, the following organization does a lot of good: givecamp: Coding for Charity.
For a different type of challenge, there are a lot of open source projects that could always use another helping hand. How to get involved in an open source project.
I was not aware of this, but there is an open source science software if you want to stay ultra-mathematical at The OpenScience Project.

There's an app for that.
Ok, it's a web site, not an app:
http://www.volunteermatch.org

Do a quick google for "socially relevant computing" it's a movement my old professor started here at SUNY Buffalo. Microsoft and many other universities have started to pick it up. It's a great idea and really makes you feel good when you get a working product out the door.
In general, like Superstringcheese said, ask at a local university.

I know that everyone knows exactly what you're talking about when you say, "science at large," but I do not. To categorize crudely, there are two types of programming gigs:
The kind in which you're working for the evil empire, making their mutual funds invest better, or figuring out how to sell to companies better, etc. etc.
The kind in which you are working somewhere in the evil empire, but your project has a "pure" technology focus (or may get one). This includes open source (and open source with pay-for-support agreements :) ).
Just think about how the Apache project has benefitted science (or MySql, or even Java). The closer you can get to a pure technology focus, the more chance you have of helping. This is my answer, however...
If you want to get your geek on and have an immediate link with "science," meaning dudes (and dudettes) in white lab coats doing pure research for no personal gain... those people usually work in universities and use the research assistant or teaching assistant who "knows the most about coding" (I should know, I was there once). If you really want to help out, walk over to your local university, and head directly to the department that strikes your fancy. Ask the administrative assistants who their boss is. When you find the main administrative assistant who runs the show, they will be able to tell you which professors you can talk to, what you should wear to talk to them, and what kind of stuff you should say so they'll be interested in talking to you. Surely when you offer your services as a coder, you'll get a taker or two.
If you do this, don't forget to think about when you'll start charging money. That way you can quit your day job and just do "science at large" full time.

Something more than simply letting BOINC fold proteins and munge SETI data during my spare cycles.
Both BOINC and SETI would welcome new volunteer programmers too.

Related

Why there isn’t any open source alternative to big commercial games out there? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 12 years ago.
Improve this question
I’m thinking of all type of game categories. My experience is that there aren’t any open source games that really challenge the commercial ones, considered game value, graphics, sounds etc.
Apart from the obvious answer of law-suits (remember the Aliens mod that received cease-and-desist letters), the other answer is cost. It takes hundreds of people to create a game like Civ 5 (artists, managers, programmers) and the cost is immense. These people are working on it for 5 days a week, 7.4 hours per day (more towards milestones) and open source alternatives are done in spare time around real jobs (not that game coding isn't a real job).
For a good open source game take a look at FreeCiv.
Several reasons come to mind:
It takes dozens if not hundreds of contributors over several years to create a major game title. An open source project of this magnitude would need lots of followers who are prepared to stick with it for a very long time. It would also require some people who are willing to coordinate the other developers (producers).
The replay value of a game is limited. Most people just play it through once and then move on to the next title. This differs it from an open source application or library which is always useful as long as you depend on it. This probably makes it much more difficult to find long-term commited developers.
I can't think of any business model related to open source games. Nobody would pay for support or much needed changes in the source code. Nor is there any agenda that bigger companies might be able to fulfill by funding an open source game project.
Contrary to popular belief, making games is not per se more fun than making applications (At least not for me, I've tried both).
It takes about eighty people working more than full time for two years to make a major game. (Some take more -- Assassin's Creed 2 was about 130, I think -- some take less.) These people must be real experts at what they do, and you need a lot of diverse skills: programmers, artists, writers, actors, sound designers, level designers, producers, QA.
Let's say you want to make a world-class game that competes with the chart-toppers on graphics, art, sound, design, the whole deal. You need world-class people doing this work: for example, animators who would otherwise be working full-time at Pixar or Weta. To get someone to work for you full-time instead of going to Pixar, you're going to need to pay them, a lot.
A game isn't the sort of thing where you can take what would be 40 hours of work for one person and spread it across one hour of work for forty people. It takes a lot of arduous, unfun work. It's not just programming the graphics engine -- it's testing the same broken thing over and over and over again, fixing a bug that appears only on a Windows Vista machine running a particular ATI card, painting bumpmaps onto fifty slightly different kinds of crate. Volunteer hobbyists tend to "scratch their own itch", do the thing that's interesting to them and leave it to someone else to polish.
It takes a lot of capital to make a game. You need a high-end workstation for each dev, sometimes two. Big screens. Fancy tablets for the artists. Maya licenses (there's no open source tool even remotely comparable). Are you making a console game? The development kits are $10k apiece. Doing motion capture? $500 an hour to rent the studio. Hiring voice actors? SAG scale starts at $800 per day. Having Some Guy From The Forums perform the roles just won't get a professional result. Plus electricity for all this, a building to put it in.
It's expensive, and it takes a lot of very specialized expertise, working for a long time even when they're tired and stressed and don't really agree with the Creative Vision, but need to finish the job anyway. You're going to have a hard time convincing really talented people to do that for free.
In addition to the other answers, a vital factor might be the requirement of expertise. Open source contains people mostly from developer/programmer/sysadmin realm. But only developer is not sufficient to build a game. You also need artist, sound engineer etc. For example, as a developer you can spend your free time to code game, but you can not create 3D models, as that is not your part of expertise.
Some possible reasons
The market is to fast. Graphics which is now good is in 2 years old and boring. So you have to finish a game very fast.
Its easier to make a mod to a game and there is already a community, so people do that more often (and its way easier to do).
The costs are huge. Its hard to find qualified people. Good game engines license costs a lot.
The organization is very hard.
There are a lot of project which are from people who don't know how to do it. So its hard to find a good project which could have success.
There are some, but they are rare: OpenTTD and early ID games come to mind.
But, seeing as the biggest investment is in the content and tools there's no reason the code couldn't be open source without affecting revenue. In fact, as OpenTTD has shown, it can extend the life of product with patches and improvements created by the community. Of course, you need a good game to start with.
While I generally agree with the sentiment, which is basically until you see open source movies, you are unlikely to see open source games with that production quality comparable to some of the major ones.
However, that said, there are some beautiful open source games. OpenTTD and Simutrans are mentioned - which are quite retro. For some more modern gameplay, check out stuff like Tremulous and Nexiuz.
Now that EA are cannibalizing and dumbing down the Simcity franchise, I'd love an open source offering to mop up and dominate the genre. SC4 was brilliant and unique, but needs some modernization in graphics, stability fixes, and easier community interaction for updating/extending the building types or city ordinances. LinCity does not yet have anything on SC4, and sadly SC5 plays more like the bad bits of LinCity than SC4.

Transitioning from "Web" into "Application" Development

I realize this comes at an enormous risk of being branded "subjective" and "discussion-based", but you don't have to argue with anyone, or me. I'd just like honest answers to the question. So first, the question:
In your experience, is it feasible to say I could find a job as a java or other "non-web" language/system developer without a CS degree?
A little background : I am a LAMP(PP) Developer, and have been working with the web world for the past two years or so, and am about 90% self-taught. [edit] I have been working part-time/freelance in html/css/javascript for about 7 years, and full-time salary doing php/perl for the past 2 years, for clarification. [/edit] A friend of mine who does a lot of Java has convinced me to start learning it, and I'm starting to be curious about my potential employability in a "non-web" environment. So far I've worked for marketing firms and doing application development for a web-based system, so having a Bachelor's degree in a non-related field (music) hasn't held me back yet.
Acceptable format for non-subjective answers :
"Our company does not require a specific degree, if you have a few years of employment history and can prove you know programming you can get a job"
-or-
"With the economy being the way it is, the only way to ensure you'll get past the first level of screening is to have an extensive relevant education"
Yes you can (otherwise I would not have a job). If you can show that you know the stuff, many companies will not bother too much about formal degrees. After all, they (should) hire people because they have certain skills, not because they acquired those skills in a specific manner. Studying at a university is one way, working with programming in practice is another.
Now, I think (guessing here, given my background) that you would learn things in the university that you will not typically pickup from being an autodidact, and that might still be useful when working as a programmer, but I would believe that the more time you have spent working on actual software that has been delivered to (hopefully happy) customers, the less the lack of formal degrees will matter.
In my experience, it pretty much depends on where you want to work, and in some cases, how far up the management ladder you want to go.
Some places I've worked don't really care if you have a degree or not. In fact, in one place I worked it was almost a detriment to have a degree, since much of management didn't have degrees.
Other places I've worked have required a "related" degree. In at least one case I was personally involved with, that was to their detriment, because a friend of mine was much better and more knowledgeable than any of the developers there, and looking for a new job, but they wouldn't even talk to her since she didn't have a degree.
Finally, for some employers, it's just whether you have a degree or not, and your major is not important. I know one guy doing Java development, and his degree is in history. Also, I work in a science facility, and lots of people here have degrees in a relevant science, and have little or no formal software development education.
It's a mindshift for sure, but I don't see any reason why you can't make the transition. A good programmer is a good programmer regardless of the language they're using. I've known guys that write excellent java code and easily make the transition to javascript or ruby. Where you might come unstuck is the fundamentals of computer science which is what you really get from the formal education. Things like pointers, memory management, threading etc are things that I tend to find "self taught" developers are usually not so strong in, but there's no reason you can't learn these things and if you're able to prove to prospective employers that you have a good grasp of the concepts and can prove you know how to use them then I don't think you'll have too much trouble.
In your case you should use your music degree as an advantage and look to land your first application programming job in a company doing music-related application development. Your music degree coupled with programming experience of any kind will certainly open some doors.
You may need to take an initial cut in pay to make the transition, though.
Speaking for my own experience and my country Switzerland: I started with an internal education in a big company and do not have a degree in CS up to now, some 23 years later. I had difficulties finding a job in the 2 years following the burst of the internet bubble, which I was able to breach being self-employed and with some unemployment money from the government.
Most big companies here do not care about degrees, unless you want to pursue a carrier. But then you need an MBA, not CS.
There is one exception, though, which are the consulting companies. They sell their services proportionally to the numbers of Doctors they have in the team, so no chance - unless you have connections.
Small companies here know that they have to invest for somebody to know the tools and languages they use - so if they are in need, they will hire you even with little experience in the exact field.
It might not harm to get some stuff done with the tools you would prefer to work with, but
good employers know that learning yet another language is not the hard part
work experience outweighs private experience
Go for it. Don't quit your dayjob and start looking around. After a few years experience will for sure outweigh education on the job market.
If you have the chance to visit some classes on the side, you can only benefit though. Personally.
My experience has always led me to evaluate past evidence. This means what is there to show what you have achieved. If you are entering a new technology, it will be a while before you will achieve this which means you may have to re-start at the bottom. Do you want to do that? If you are prepared to offer all your skills to a new job (including learning new languages), that would be better. In this way you become incrementally more valuable, irrespective of whether you have a degree or not.
I'm mostly self-taught, and in my career, I have transitioned from VB to C++/MFC to "classic" ASP to Java, and that doesn't even scratch the surface of all the ancillary technologies I had to learn to get my job done. I think all developers should expect to pick up new skills. It just comes with the job.
I think you're making an odd distinction between "Web" and "Application" development. Practically all of my Java work has involved building web sites, and the same is probably true for C#/.NET developers as well. As a LAMP guy, you already have a few key employable skills -- you know Linux, you understand (or should understand) the TCP/IP stack, how HTTP works, etc. And you know how to put together an attractive-looking interface, which is a rarer skill than you might think. You can leverage all these skills as you make the transition to Java/.NET/Whatever.
As for the music degree, don't sweat it. Some of the best programmers I've ever worked with have been musicians. I don't have a CS degree, and it hasn't slowed me down much. A certification might help get you in the door at some companies, but before that try a pet project or two in Java and see where it takes you.

Entry level computing text books [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I am looking for some good text books in the public domain, which could be used to teach computing to school kids aged (10-15). I couldn't get any googling for it. Can somebody out there point me to good links. If text books are not available any information on what is taught commonly to this age group as part of computing curriculum will be helpful.
"Computing" is an awfully broad topic. Do you mean teaching them how a computer works (like on the inside), or how to use computer applications (word processing/spreadsheet/internet), or how to program them? I think all three would be good topics for 10-15 year olds.
My dad, a computer engineer, taught me much of the above on my own around that age (of course, it depends upon how motivated your students are). Mostly it was through experimentation, and asking questions. I'll point out a few good resources that I went through when I was that age. While these books aren't public domain, they're not that expensive (you can purchase all the books I mention below for under $100US at the time of this answer, cheaper than a single college textbook; the movies you could try finding at your local library). Note some of these are from MS-DOS 3.x era of 10-12 years ago, but honestly, the basic concepts haven't changed that much. The IBM PC platform still has the same architechture, it's just been upgraded. Applications have changed though.
How a computer works
You might want to teach about all of the different parts in a modern computer tower by opening one up and explaining to them what each part is and does, and how they hook together. It doesn't even need to work, you just need to be able to show them stuff. A good, simple book that explains the parts of a computer is How Computers Work by Ron White. I believe there is also a Magic School Bus episode on this ("The Magic School Bus Gets Programmed", Episode 50 From Season 4).
After that you may want to explain about the startup process, and how the computer first turns on, and doesn't know anything. Then you could explain about how the BIOS chip finds all the various things hooked to the motherboard, and then uses the hard-drive to start the Operating System (Windows/OS X).
There are some interactive programs that describe how all of these things work, although I can't think of any off the top of my head. There was an old learning program called "What's in that Box" that I used, but it's so outdated now its useless.
If you have really motivated students, you may want to introduce them to the electronic foundations of the computer, and binary numbers and gates. A good (teacher level) introduction to these things is Charles Petzold's Code. You try explaining how computers talk about things using 1s and 0s. Also, there is a Bill Nye the Science Guy episode on this (Season 4, Episode 78).
How to use applications
Honestly, I'm really not sure what to tell you here, but I imagine you can find lots of tutorials on this if you google. Explaining Word, Excel, etc. to students is beneficial and I imagine widespread.
NB: Teach students how to touch-type at that age. I didn't learn how to touch-type until I was in middle of HS, and it was hard. By that time, I had already learned how to do stuff on computers and play games on the keyboard, and so had my fingers memorized to go to all the wrong spots. If you catch them early, they'll do well.
How to program
The way I learned how to program at
age 10 was this way using a language called BASIC (BTW, that
link gives lots of other ideas for
learning how to program at a young
age). I'm certain others will have
good answers on this too. A book that I used to learn from after that was QBasic by Example, that a computer bookstore owner gave to me when I was 12 from his throw-away pile. That was my programming bible, and I read it cover-to-cover.
Note, though, that some students will want to do "cool" things when learning how to program; admittedly, how I learned would not be classified as cool. My old computer science prof from undergrad is involved in a program with inner-city kids that teaches them how to program robots using a language called LOGO, Sun's SunSPOTS, and LEGO Mindstorms NXT (depending upon the class focus). You basically give commands to the robot and it does them, and you can watch the robot do what you told it to do. Very cool, and interactive. It can get them thinking about programming, and how its about telling the computer/robot what to do, and how you can be a "robot commander" or "computer commander." This is, essentially, what computer programmers do everyday.
The new children's show Cyberchase teaches critical thinking skills that are a foundation to programming skills.
Just some thoughts to get you started. I think many kids would appreciate a hands-on approach; most of those in the industry got started because of hands-on exposure and not rote book-learning. The above early education, along with some books, worked for me, most of that stuff I rattled off from memory.
Also check out Woz.org; Steve Wozniak (programmer/hardware engineer, designer of the Apple ][) now teaches grade school children computers.
Try How to Design Programs: An Introduction to Programming and Computing, by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi. The book uses a language called Scheme, which is freely available and designed to be used by students. The book is available online at www.htdp.org.
The book was designed to be used by high school and university introductory programming classes and is intentionally written to teach how to design a program, not just how to use the syntax of a particular programming language. It stresses things like how to design readable programs, thinking about the structure of your program before typing anything, and general programming concepts such as recursion and encapsulation.
Think Python would be my first choice for teaching programming. The book is free, python is free, and some really good IDE's are free - Stani's Python editor or Wing IDE 101. This provides a really good environment and set of resources for teaching programming to kids in that age range. If programming is a bit much for the younger kids, PyGame can be used to get simple graphics on the screen fast - and that is a great way to hold onto attention span.
EDIT: I just ran across a great book for introducing computer programming to kids (and other beginners): Hello World! Computer Programming for Kids and Other Beginners. This book uses Python as the programming language, and the projects are all simple games. Overall, this is a great book for introducing kids to computer programming.
In the UK schools tend to have some affiliation with Microsoft so:
Word
Excel
What is a network
Dinner-time Java class (if lucky)
What areas are you trying to focus? MIT open course ware offers a few good open texts on different programming languages - but doubtlessly intended for an older audience. I think that finding books specific to this age group on general computing will be a challenging task, but there are always good websites that the kids can explore addressing a variety of different topics.
As mentioned, unless you know the kids to be at a more advanced level (which many that age are now days) I'd focus on word processing, web use (searching & responsible surfing) and things of that nature. Googling "introduction to for kids" will often yield useful websites on things of such nature.
Check out Squeakland. It's specifically about computers & teaching.
Not a book, but could looks like a pretty good resource.
KidsDomain.com
The C# Yellow book by Rob Miles is a good and free resource to teach students C#. It is used by the Department of Computer Science in the University of Hull as the basis of the First Year programming course
For younger kids especially ToonTalk is an awesomely cool introduction to programming. It even does concurrent programming from the very beginning. ToonTalk teaches foundational principles while being extremely engaging with a 3D interface, animals to carry out computations and so on. I recommend it very highly!

Traveling Contracting

I am fresh out of College (graduated in December with BS in Comp Sci). I have been working for a very large (40,000+ employee) company for over two years. My job is as stable as anyone could hope for. However, I am always bored, they cannot keep us (developers) busy. I am thinking about apply at some local contracting companies and try out contracting. I have been told that I could make a lot more money as a contractor and even more if I was willing to travel. I have been told that as a contractor I would basically be constantly coding, no BS meetings about project charters and stage gates, and that I would learn more in a year than I would in 10 years at my current job (this I believe since we're using java 1.4 and our brand new laptops have windows 2000 on them... lol). I just want to know what to expect if I decided to go the contracting route, and if traveling is worth it. Since I don't have any kids and this seems like the best time to do something like this.
What have been your experiences with contracting? How do the mechanics of travel as a contractor work (what is paid for, do you work 4 10 hour days... etc)? Will I really be mostly coding? Will I really gain valuable insight and knowledge of the IT world?
I can't speak for your situation in particular, but my company recently terminated all of our contractors as part of our cutbacks, and many other companies did the same. Most companies have hiring freezes, where they will not take on new employees at all, contractors or not. My friends that were working as contractors all lost their jobs, and are generally having a difficult time finding new positions.
If you are already in a steady job, I would say that now is not the best time to drop it and try switching to the life of a contractor.
You expressed an interest in learning new technologies, so if your company doesn't keep you busy, and you're "always bored", why aren't you using that time to read up on the things you're interested in?
I've been migrant IT labor for 30+ years.
"I have been told that as a contractor I would basically be constantly coding"
False. You might wind up doing a lot of new development or a lot of maintenance. Depends on the contract firm's relationships.
"no BS meetings about project charters and stage gates"
False. The contract firm has to land the gig. As a contractor, you write a LOT of proposals that get shot down in flames. In-house initiatives are quietly morphed into something else. Out-of-house initiatives turn ugly -- the contracts are fired -- there are lawsuits.
"and that I would learn more in a year than I would in 10 years at my current job"
True. If you pay close attention and take careful notes. More importantly, if you've done your homework outside the workplace. I've been to a fair amount of training, but I think that 75% of the skills I use regularly (Java, Python, DB Design, Architecture, Apache config, HTML) I had to learn on my own.
"what to expect if I decided to go the contracting route"
Parts of it are bad. Parts are good. It's a job -- that's why they have to pay you to do it.
"if traveling is worth it."
Let me list the benefits -- Skiing in Anchorage, Skiing in Utah, Diving in the Florida Keys, flying the entire family first-class to San Diego, using Hilton Honors points to stay at the Waldorf=Astoria.
Let me list the problems -- kids who got into serious trouble at school. Missing family time because of travel. The unending stress of air travel, including the TSA security theater setups everywhere.
Nearly everywhere I've been, we've hired contractors to work on the old, legacy stuff that our employees have forgotten or otherwise don't want to work on. Nobody is going to hire you in order to teach you things - you won;t be around long enough, so they will only hire you for your current skills. Quite a few contractors complain about having to keep their skills up to date, at their own expense.
You'll also get less time spent in meetings (well... maybe not, you'll be there to be told what they expect of you), but you'll also have to manage your own accounts, and invoice the client, and then chase up payment.
So, don;t think contracting is a magic route to fun coding with the latest technologies. Its probably the opposite of that. What you want is a different job.
The grass is always greener on the other side of the fence.
You're stuck in a large company with all the large company management bureaucracy and strict job roles that goes with it. If you contract for a large company guess what you get? However you can choose who you contract for (if they're happy contracting to someone with two years experience). To me it sounds like you actually want to work for a small company developing software in a more agile fashion, and that's a more risky move!
Note that with contracting you'll go from project to project, and having to pick up the client's systems (code, models, databases, workflows, etc) from new each time, often with very little assistance. If the systems are in any way mature, then there will be lots of cruft to sift out - if you're lucky it will be documented! So every time you have a problem, you will have to get on the phone to them or find them (a difficult task on its own) to get the knowledge you need.
I've been contracting/consulting for just over a year and am really enjoying it. A few of the perks:
money is good.
changing projects fairly often keeps the boredom levels down.
working from home rules.
because you are an expensive resource relative to other employees, the amount of administrative fluff and pointless meetings is minimal. The client wants you to spend as much time as possible working on whatever it is you've been contracted to do.
I'm picking up new knowledge much faster than when I was a normal employee. I suppose its related to changing projects often and working with a range of people.
I strongly disagree with the sentiment that contractors get boxed in and have to teach themselves new skills in their own time. Perhaps this is true for some domains but my experience has been the absolute opposite. One thing I have noticed is that if you do a good job with a project, you'll be asked to look at other projects even if you have no experience with the technology in question. Being trusted as competent and honest is far more important to most employers than a '5 years experience with J2EE' line on your resume.
That said, its not all rainbows and butterflies. Some of the downsides:
getting a mortgage is going to be really hard because of the lack of permanent employment.
whenever there is a downturn, you'll be the first against the wall.
if you are working on a fixed cost basis, you'll have to get really good at project estimation or risk lots of unpaid overtime.
taking on multiple clients at the same time can be a horrible mess unless you have excellent time management skills.
Overall, I'm really enjoying it and for me the pros far outweigh the cons. I think I'd only go back to being a normal employee if I had a family and couldnt warrant the risk of being out of work for an extended period of time.
As a contractor you do tend to be less involved in meetings, in my experience. But you spend a lot of time teasing requirements out of clients and waiting for responses on things. As you're not in the day-to-day flow of the organization, you have to work a lot harder to understand what's going on.

Transition from business to game programming [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Does anyone have any idea how it would be possible to transition from business to game programming? How would anyone get a start in game programming? It seems much more exciting and rewarding (better paying too?). But it seems like most of the jobs out of school are for business programming. Any advice or insight on how to do it or if it can be done?
This is not a direct answer to your question, "How can I transition?" But instead I'd like to recommend you not go down that road or at least be realistic about what it is like. To back that up I'll quote some stats from the 2004 igda survey on quality of life for game developers:
34.3% of developers expect to leave the industry within 5 years, and
51.2% within 10 years.
Only 3.4% said that their coworkers averaged 10 or
more years of experience.
Crunch time
is omnipresent, during which
respondents work 65 to 80 hours a
week (35.2%). The average crunch work
week exceeds 80 hours (13%). Overtime
is often uncompensated (46.8%).
44%
of developers claim they could use
more people or special skills on
their projects.
Spouses are likely to
respond that "You work too much..."
(61.5%); "You are always stressed
out." (43.5%); "You don't make enough
money." (35.6%).
Contrary to
expectations, more people said that
games were only one of many career
options for them (34%) than said
games were their only choice (32%).
Many years ago I created a couple of game development websites on my own and then was one of the founders of GameDev.net. One of the reasons I did it was to make contacts and get into game development professionally. It definitely worked, a couple of the people who were co-founders have gone on to work in the industry and I'm sure I could have gone that way too but everything I learned about the industry taught me the following things:
There is an endless supply of developers out there who believe game development would be really cool. The people hiring for the industry know this and aren't going to pay you nearly as well because they rely on this basically inexhaustible pool of people.
Many of the developers within the industry may be good with 3D or sound or many other topics but often they are inexperienced with basic software practices that you or I might consider essential. In that category I would put things like source control, test first design, design patterns, etc. Even when they know better the time crunch to get stuff out the door often makes them toss good software practices in a foolish attempt to save time.
Working on a game for two years can quickly become no different than working on any other program for two years. That is, when you have to dig around in the guts of the program day after day and deal with its bugs and only with that one game it's not going to seem all that fun anymore. In fact, you may find yourself playing other games just to get away from it for a while.
What says you are going to be working on Half-Life X or one of the few dozen cool games that come out every year anyway? Remember, somebody is out there building the game that goes with the next Will Farrell movie and it's probably going to be you. Look around at most of the dreck that comes out. That stuff doesn't develop itself.
It's quite a transition! The biggest difference in mindset is moving away from the business world's reliance on abstraction to one where you're focused much more on the particular hardware you're targeting and getting things to run within strict budgets of time and memory. Game programming is a lot more like embedded programming than it is like web programming -- you have to think about the exact memory footprint of everything and CPU time is at a huge premium.
This is even true of being an MMO server programmer, because a) the server has to answer to each client command within 80 milliseconds to feel responsive, and b) the bigger the footprint of the game on the server, the more hardware you have to buy, and that costs real money.
First up you should learn C++ if you haven't already. Almost every game is written in C or C++ these days. Game consoles have strictly limited memory, and if you allocate one byte past 512mb it doesn't slow down, it crashes; at the same time, each trip through the main app loop has to complete in 33ms or less, so we can't rely on garbage collection and smart pointers. The game-development world is one of those special applications where you really need to do all those optimizations that people here say you never need to do any more.
Also, bone up on your math. Games are built out of linear algebra and kinematics -- not just the graphics, but the state of the world and the behavior of every character and object. I like Eric Lengyel's book for game math; it's been my bible for years (though there are many other good ones).
You could try to learn some graphics math and programming as well, but this is sort of a subspecialty now and typically only a couple of people on a game team are really working at the level of DirectX calls. I suspect you're more interested in game logic and server backend, which is less specialized.
Make games. There are many frameworks to help you get started. XNA has the advantage of being a real-world product that actual games are shipped with, unlike PyGame or SDL which are quick to get up and running but have vanishingly little commercial support.
A common route people take transitioning into the game industry is starting as a game development team's Tools Developer.
These tools are often written in higher level languages like C# and are used to aid in the development of the games. For example, you might help maintain or modify the teams in-house map level editor or help develop the tools that convert one media file format into their propriatary file format.
After you have spent some time as a tools developer you can start picking up domain knowledge on the side and naturally transition into one of the many types of game programmers:
Game physics programmer
Artificial intelligence programmer
Graphics programmer
Sound programmer
Gameplay programmer
Scripter
UI programmer
Input programmer
Network programmer
Game tools programmer
Porting programmer
Technology programmer
Lead game programmer
Modern games are often made by huge and highly fractionated teams in terms of roles. So, it might be worth it to pick one of the above specialities and begin studying right away as you attempt to get your foot in the door. It almost goes without saying that you should be proficient in C++ and one of the major graphics libraries (OpenGL, DirectX, etc). Don't stress about learning both, just pick one and learn it. Generally people who know one very well can transition to the other if they need to.
If you're a good programmer you can do it, game programming requires much better understanding of the platforms and tools you use to develop the games.
I think it's much harder to get into the game programming industry than just the regular industry.
The best alternative is to create your own games, get exposure, if you're good enough you'll find your way.
There are many really good competitors though, just check out the many sites that offer free flash games, you can start posting your work to those sites.
The general story is that the way to get into game programming is to start doing it. There's no point in even showing up on a game company's doorstep without a demo of whatever you want them to pay you to do.
If you're coming out of business programming, that'll count against you and be a culture shock besides. The game industry runs on single 20-something males who can be taught that 120-hour work weeks are just how things are done.
I'd recommend keeping your current job for a while and finding a mod team or open source game that could use help. Try to find one that looks likely to create a playable game rather than vanish, at a guess I'd say it will look better on your resume than some test demos both because you'll probably be working on something more advanced than you would at home and it shows you can work in a games team.
I was wondering the same thing!
I've noticed there are a number of good game-programming books at Barnes & Nobles, probably not a bad place to start.
In general though, I'd start looking at books, maybe coding some prototypes, and start looking at what companies are in your area, what tools they use, how you could basically make yourself valuable to them!
By the way, does anyone happen to know if there are particular engines similar to what WOW / Guild Wars are using for MMORPG game development in particular (my main interest)?
I think it is not an easy switch. Game programming is not something you can learn overnight. I suspect an entry level will be quite high if you want more than a graduate salary.
A long time ago I worked in a company that worked in the online gambling field. I then decided I wanted to be engaged in more serious activities.
You really need to answer one question - is that what you want because you like it or just because it seems to be rewarding right now. In the latter case you'll need to understand you'll be plating catch-up and noone can promise the salaries will be as high as you wish by the time you get your skills high.
Maybe consider some certifications/training so that you can step-up your current career position in business programming?
If however it is what you really want then just follow you heart. Show your interest and commitment, potential employers will notice it and hopefully prefer you over a guy who has applied just because the salary was looking attractive.
On the other hand, businees developers/consultants (for example in SAP world) earn quite a generous ransom.