As more and more of the computer programming can be done overseas in low cost cointries is there any future in programming in the western world?
Of course, there will always be some tasks which cannot be outscourced,but overall are we is this the way things are going?
If this is so, which alternative careers are there for people whith a natural ability for programming? There are of course several alternatives in different technical fileds, but which is the best? Many of these occupations can are prone to outscourcing as well.
Of course, this is the Big Question that everyone is wrestling with.
A) There is no future in programming. Please go into something else. </job protection>
B) Seriously though, I can’t predict the future, but I will tell you my experiences… I’ve spent the last six years doing C/UNIX and VB/Win programming. The trend in Windows is .NET programming - the common runtime with many language faces. Some of the *NIX people are sold on it also - the MONO/dotGNU people are True Believers. Since I don’t trust MS further than I can throw Ballmer, I’m leery of the chances of an successful Open Implementation not being quashed by lawyers/patents.
The two big schools of programming are OO and functional. Once you grok the underpinnings to these, the languages themselves don’t matter much. That being said, I think that Python is an excellent way to learn OO and if you can handle C, you’ll have functional down pat. Join an Free Open Source project as a way to learn and cement your skills.
Get a solid understanding of the concepts of programming (inheritence, encapsulation, the difference between functions and subroutines, etc) and you’ll be a good programmer. Develop your social and team skills, work hard, transparently, and flexibly, and you’ll be a fine employee.
Just got done writing an email to a friend up north where I said the exact same thing. Mono is cool but probably doomed if MS decides to launch a legal attack. Guess they’ll need to get done riding the SCO horse first though.
Outsourcing to India/China/“insert low wage country here” doesn’t work as well as some suggest. There are time zone issues and language issues (Indian English is different from American). Mostly, the really routine work that can be described in great detail, almost algorithmically, is what will go there but in the long run I feel that ultra-high level development tools that can be used by non-programmers wil probably take the human element out of that work altogether anyway. Programs work cheaper than any Indian even can.
Defense work is another area unlikely to go overseas for security reasons. And if our conquer-the-world program keeps up there will be plenty of that. Altogether, the field is depressing though. You will find, in the long run, a few private sector jobs for the very skilled and educated, lots of defense work for the less skilled/educated and nothing else. I would not recommend the field to anyone at this time. Smart kids should study biotech or nanotech (though there’s no program in nano yet that I’m aware of). In these fields they will learn programming anyway since being able to write simulation and machine control code is part of it. That might satisfy the CS bug in people who have it. Maybe a combination program in bio-sci/nano-sci and CS or something like that.
Im not too worried about outsourcing when it comes to programming; its only viable for certain apps and industries, or certain programming functions. Its going to be there and exist, but theres always going to be plusses involved with using people based around whereever you are. You get what you pay for.
I would second unixrat; get your head around OO. Im kind of torn as to whether to say start with something like Java or C# or start with C/C++. My preference is to say start with C/C++; from there most everything is more of an adaptation rather than a re-learning. Its a firm base, and youll understand where everythings coming from so to speak. But to really get immersed in OO I would say Java, C# or as he says, Python.
As an aside, Id like to say that C# (not necessarily .Net in general) is one of the best things to come out of MS in years. It took me awhile to admit it, buts its a good language. Its been good for Java as well, giving them a kick in the ass. I see some quality-functionality competition coming up, giving us developers even better and better OO languages to work with.
Before I delve into this, I want to say that while I was in college (for my Computer Science degree) I knew several very talented programmers who came from locations overseas. OTOH, I knew several (read “more”) who needed a bit of work.
That being said, I personally think that the overseas trend for some of these programming jobs will not last very long. The main reason for this, I believe, is related to documenting (and commenting) code that programmers write. While there are a lot of programmers in the US who do not document their code very well (at all sometimes), programmers overseas might have to deal with a language barrier, among other things, as well.
If a company can outsource some programming tasks overseas (and get them completed cheaply) but the documentation is very poor (or non-existent), the company would have to spend a lot more money in modifying existing code. If you show a programmer some code s/he wrote a year ago, and ask them to make some changes to it, they will have to do one of 2 things:
Make changes to the code, after reviewing some of the documentation they have in the code
Make changes to the code, after completely reviewing all of the code in front of them (probably more than once) in order to make sure they know what’s going on.
Ask anyone at Sun about how they feel towards code documentation. After a big fiasco they had with the development of Netscape (during the big Netscape v. IE wars), they found it easier to scrap all of the work they had done, and re-start from scratch (from the way some of the designs were structured, and hard-to-understand code modules). This is a very costly problem, especially when competing with another company for a “killer app.”
Being a dyed-in-the-wool .NET kiddie, I have to say that I really don’t believe in outsourcing being a major threat to the industry (in America, which is where I assume the OP is from), but that’s completely dependent upon the individual, and our industry as a nation. Here’s why:
A decade or so ago, programming was a high-tech, cutting-edge type of industry.
The reason outsourcing is becoming a larger issue is that a great number of the tasks that are being routinely completed now can be done cheaply by a foreign team trained specifically for that entry-level purpose. Nonetheless, it can often takes a significant amount of time to manage the development, and assemble final product state-side (of course, this differs for each project. Hey! There’s always a niche market there should I be wrong and outsourcing becomes the norm.)
Anyways, back to the real point. Programmers should take it upon themselves to move beyond entry-level and learn more advanced or specialized skills. Unfortunately, I sincerely doubt there’s any way to stop outsourcing for relatively minor or straightforward tasks, but in the interim, we can relegate outsourcing to just those tasks. It’s not cheap to train yourself (or a group of developers) in this way, but it’s necessary to our survival amongst the millions of competitors worldwide.
Coming from India, I can only concur. Though not in the IT industry, I understandably know a few people in it.
What I’ve gathered is that aside from a handful of projects, much of their work is not high-end stuff. Only a handfull of companies get that kind of work, and even then, only if they have offices Stateside.
What’s really picking up here is the outsourced services industry/
Programmers who know how to program and not much else will find it incredibly hard to get work in the future. There’s a movement away from “programmers” to “domain experts who program”, and I don’t see that going away any time soon.
The people that really got killed here were the high-priced but low-quality consultants. Big names like Accenture, Price Waterhouse, etc. They’d hire kids straight out of college with no experience, fly them back and forth across the country foisting them on their clients for outrageous amounts of money. I don’t have a lot of respect for that type of consultant, and after a while I guess businesses started to figure things out. I’ve seen a lot of this type of consulting job get outsourced to India.
Unfortunately (for me) a lot of high-skill but low-level (operating system, programming language, etc) development jobs are going overseas, too. These are things where language and culture isn’t such a barrier.
I’m not optimistic about the future of high paying jobs in software.
As for languages, C to start with, then Java/C#/Python. However, that probably won’t be the right choice 5 years from now. Languages change quickly. You need to know the underpinnings, how stuff works, so that you pick up whatever langauge happens to exist where you are working. In my 20 years or so as a programmer, I’ve programmed in Assembler (6809, i186), AWK, Basic, B, C, C++, COBOL, Fortran, Java, Lex, Pascal (various flavors), Prolog, Python, Rexx, SAIL, (k)sh, tcl, YACC, and probably more that I have forgotten. I’m not current on all of these languages, some of them I (happily) haven’t touched in 15 years. But you can’t go in thinking “I’ll learn Java and that will be fine”.
If I may be the heritic here for a moment, “Assembly is the one true language”.
Find a very good course or evaluation kit and learn to program in assembly. Not because assembly is a hot ne language, or because there are lots of jobs using it, but because it teaches you something about how computers work that is difficult to learn otherwise.
As unixrat suggested the specific language is less important than understanding the fundamental principles behind them. The fundamental principles behind assembly languages are the fundamental principles of computer science.
Also, you might try coming at it from another angle. The best programmers in my experience have not been programmers first. They have been Electrical Engineers, or physicists, or artists even. They began programming as a way to satisfy needs other than those typically satisfied by software. What I am saying, is that the most important job in a software project is understanding the problem that the program is intended to solve. After that the rest (well, not everything, but most of it) is just syntax. And my first two laws of programming apply.
Syntax is the least important aspect of programming.
Syntax is critical.
On review, ultrafilter seems to have made my point far more succintly.
After university 5 years ago I went directly into web programming.
After .com went .bomb I decided to stick with it, but instead of being a pure CGI programmer I’m now more “web everything”… DBA, sys admin, HTML, graphics, etc. I’ve only lost one client to Indian programmers… that client was just a website with no hardware or database considerations.
The main trouble for me is that the people pushed out of their jobs by low cost overseas jobs are squeezing into my field, bringing wages down for everyone.
I’m a single guy in Southern California (rent on a 600 sq ft apartment is $1150 a month and state taxes are 9%), so I’ll probably have to move somewhere else and do something else if I ever get married.
Exactly, that’s the only path to success in the long term. I do feel that the “pure programming” field is going to be stagnant or shrinking in spite of what I said earlier about outsourcing difficulties. If you’re in the field you might need to get an advanced degree but not in CS while keeping your programming skills. Now if I could only get off my ass and take my own advice…
There’s actually a little more to it than that. Consultants are not “programmers” in the same sense as an application developer at Microsoft. We use programming tools like Oracle, SQL Server or Access but we are not (or should not be) defined by our technical knowledge. Consultants are there to solve a business or operational problem, which may or may not involve creating a new system. In fact, if they outsourced 100% of the application development that would be fine by me since I hate that shit anyway. These positions are very dificult to outsource overseas since much of it is “hands on” at the client. If I didn’t need to be at the client site, they wouldn’t pay me to live out there for weeks at a time. What killed the Accentures , BearingPoints and EDSs was that in tough times, companies don’t want to initiate new projects at all and consulting services is an easy expense to cut. What killed the Sapients, MarchFirsts and Razorfishes is that they hired like mad because they thought they were going to be the next Accenture, BearingPoint and EDS.
There will probably always be a need for programmers at product companies like Microsoft or Cisco where computers is their core business. There will also always be a need for people who understand technology and it’s business application (ie Accenture). Where opportunities will shrink is in back-office IT support for companies where technology is not their core business.
If your company doesn’t make money by having you program stuff, expect that they will seek to outsource it.
Every programmer should have experience with a functional language as well as the standard imperative ones (that’s the more academic term for OO and procedural languages). It really forces you to think about why languages are put together the way they are, and what’s good and bad about each approach.
FWIW, I think that functional programming is far more elegant, but I wouldn’t want to write any kind of complex system that way.
While I agree that Assembly programming can be useful, for the most part its use is only marginal. I’d much rather see people learn about data structures, parsing theory, number theory, algebra, statistics, etc. These are far more useful to a programmer, as they give you some background in making abstractions, which is the essence of good programming. With that background, and a willingness to learn, they can use any language that is thrown at them.
The worst programmers in my experience are those without the mathematical background to figure out how things really work. There’s nothing wrong with training as an engineer, or physicist, or artist, but please take some mathematics and CS, too. I once worked for a company that was almost sunk because they let their engineers program. They dropped from 6,000 employees to 1,500 employees almost overnight. They made telephone switches; the electrical engineers were great at laying out circuit boards, but they had absolutely no clue about real-time programming. The switches worked fine when they were small (32 extensions), but when you scaled up beyond that, the software couldn’t keep up. Why? There was order n^2 (or worse) crap all over the place that could have easily been order (log n) if they had any clue about CS. Crappy slow code leads to dropped interrupts. Dropped interrupts means dropped calls. Tends to piss off customers really quickly.
We may be talking about 2 different things. I agree (and I think I pointed out originally) that not much programming is done these days with assembly language. And I was not talking about writing hello world programs on a PC in assembly. I was trying to say that proficient programming in assembly language on embedded type environments can be most conducive to understanding the operation of computers at the most basic level. It can give a very different perspective to how they work.
I’m not sure exactly what things you are refering to here. However, I agree that a detailed understanding of mathematics is very important. I had a bad experience at my High School many years ago. They decided to expand their computer program and needed new teachers to teach programming. They sent the mathematics teachers to a several week summer course and then threw them into classrooms with computers and students. Some of the students ended up teaching the classes.
In general, however, I agree that a good background in math (especially applied mathematics) is always useful to programmers.
I’m sorry if I left the impresion that math or CS cources were unnecessary. As I indicated with my first 2 laws of programming, many things are both not the highest priority and also critical. I did not mean to suggest that a degree in Electrical Engineering or Physics is sufficient to qualify someone to be a software engineer. I only meant to suggest that amongst people with similar CS credentials, the extra exposure to other diciplines is very valuable.
Had they ever programmed before? Or did they learn on the job in question. I’ve seen many people given programming jobs long before they were qualified. Both CS majors and others who had a smattering of knowledge. I suppose it was inevitable given the boom of the last decade.
I’m not trying to start a fight, or anything, I just wanted to clear some things up.