Jobs in Programming

The geek forum. PHP, Perl, HTML, hardware questions etc.. it's all in here. Got a techie question? We'll sort you out. Ask your questions or post a link to your own site here!

Jobs in Programming

Postby Dante » Tue Jun 21, 2011 9:31 pm

So as I start to come out of the darkness that is depression, I'm considering the task of getting a job ^_^. While I could go out and try and grab a job working in the science industry doing lab work, I'm kind of leaning away from jumping back into science at this juncture.

Majority of my graduate career focused around programming, from graduate courses in numerical analysis, I designed code to solve abstract algebra problems, my final optics project involved optimization theory combined with code, I had courses in MatLAB and Labview (Graphical programming language), spent a year and a half developing code for spectral element method partial diff-eq solver for a 1-D quantum mechanics problem in Python and finally I was responsible for developing all the code responsible for analyzing the data from our ice lab (about 75-100 pages of code in 3 programming languages, IDL, C#.NET and MatLAB).

Over the last four years, I've gained experience with C#.NET (Favorite), Java, VB.NET, Python, IDL, HTML, CSS, MatLAB, Labview and dabbled in C++. As a consequence, I've come to have a fairly strong background in background in programming, particularly when it comes to solving problems that require a good deal of numerical or analytical ability. As a result, it's only natural that I am considering moving into a career in computer programming at one of the local firms in the valley (where I have free housing, family and friends).

Still while courses have taught me a great deal in how to program to solve particular problems, they haven't taught me the ins and outs of the industry. For that matter, I'm aware that my focus is strongly aimed towards computation and while my analytical skill will get me far in solving many problems, I also need to broaden my skills outside of this range to consider various general programming aspects (e.g. multi-core processing, databases access, internet applications).

So what I was wondering, is where do our programmers see this field heading in the near-term future. For that matter, if you've had a background somewhat similar to mine, where did you eventually choose to take your skills?
User avatar
Dante
 
Posts: 1323
Joined: Thu Mar 04, 2004 8:24 pm
Location: Where-ever it is, it sure is hot!

Postby blkmage » Wed Jun 22, 2011 7:37 am

I'd say you're in pretty good shape.

A lot of my understanding of the state of the tech industry is basically from years of looking for jobs for internships and talking with my friends who got internships all over the place, both in Canada and the US. I actually just finished my undergrad in CS and pure math and have done some programming in industry, doing database stuff, web development, and test automation. I've always wanted to try doing an internship that was more analytical than systems, but that never worked out. I'm actually going to be starting grad school in September, doing theoretical CS.

Obviously, you don't have the background to do crazy systems stuff yet, but I don't think that's a huge problem if you're willing to do that stuff. Most tech companies want to hire capable people, no matter what their background is, since they expect you to learn. Of course, that's not to say there aren't a ton of jobs already for your skillset, but they won't be listed under things like developer or engineer. Here's a few things that immediately come to mind.

With the rise of social media, there's more and more demand for programmers who can manipulate and extract information from large datasets. This is often called data science but I'm sure there are some variations of the name. But, there are plenty of companies that are looking for people who have the mathematical background and technical skill to do this sort of stuff. Places like Facebook have tons of these people, but other places like Amazon and Google also do this sort of stuff.

Outside of the Valley, there's that whole algorithmic trading and quantitative analysis stuff. The financial system is increasingly becoming dominated by algorithms that do trading, rather than people. These algorithms similarly rely on tons of data and are sensitive to trends that are invisible to people. NYC has huge demand for these people, but I figure that any city with a financial centre or tech industry will have at least some of these firms.

And then there's just straight up research, which is generally in CS, much of which will involve programming. At larger firms, research tends to run across the entire theory-systems continuum. While you might not have the technical background for some of this, but you probably have the research background to make you a plausible candidate. There are small and large (Google, Microsoft, IBM, etc.) firms that publish and some of them also have their research people do some engineering as well, so definitely look into that.
User avatar
blkmage
 
Posts: 4529
Joined: Mon May 03, 2004 5:40 pm

Postby Warrior4Christ » Fri Jun 24, 2011 8:40 am

I graduated after 5 years of university, and you still have much to learn when you start programming as a job. You look back on things you did 6 months ago and think it looks disgusting and inelegant. So you do learn a lot when you develop software for most of your waking hours on a job.

Know your data structures - get familiar with them so you know what's best in what situation. Get familiar with algorithmic complexity analysis (eg. O(NlogN) kind of thing), and get to know efficient ways to do things (similar to data structures point). Maybe it's just me, but I consider knowing what happens at the low-level important - become familiar with assembly language, get to know the performance costs of calls in higher-level languages, know what it's doing in the background... C#/Java are your lowest-level ones, so it might pay to get more familiar with C++ to be able to do this. (Scripting languages are irritatingly high-level for me...)

Read stuff. Read http://www.joelonsoftware.com/ (lots of high-quality articles), http://www.codinghorror.com/blog/ (broader unrelated interesting stuff as well, but also some good stuff), and books - http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read.

Where are we heading? Heterogeneous computing - http://channel9.msdn.com/posts/AFDS-Keynote-Herb-Sutter-Heterogeneous-Computing-and-C-AMP. Use the same code to run on CPU and GPU.. or data from the "cloud". Parallelise stuff.
Everywhere like such as, and MOES.

"Expect great things from God; attempt great things for God." - William Carey
User avatar
Warrior4Christ
 
Posts: 2045
Joined: Sat Aug 20, 2005 8:10 pm
Location: Carefully place an additional prawn on the barbecue

Postby Atria35 » Fri Jun 24, 2011 9:52 am

My mom is a computer programmer. She's been one for all her life, really, so she's going on about 40 years with her degree. Obviously, it's changed a lot since then (you no longer need punch cards to program, for instance). But even she doesn't really know the ins and outs of the industry.

The jobs she had keep going overseas, and there's no stopping it. It frustrates her to no end. Of course, her specialty is programming for insurance companies, always has been, so I'm not sure whether that's across the board or not. I suppose I could ask her to give you some insight if you'd care for it?
User avatar
Atria35
 
Posts: 6295
Joined: Sat Mar 20, 2010 7:30 am

Postby Mithrandir » Fri Jun 24, 2011 5:07 pm

Warrior4Christ (post: 1486864) wrote:I graduated after 5 years of university, and you still have much to learn when you start programming as a job. You look back on things you did 6 months ago and think it looks disgusting and inelegant. So you do learn a lot when you develop software for most of your waking hours on a job.

Know your data structures - get familiar with them so you know what's best in what situation. Get familiar with algorithmic complexity analysis (eg. O(NlogN) kind of thing), and get to know efficient ways to do things (similar to data structures point). Maybe it's just me, but I consider knowing what happens at the low-level important - become familiar with assembly language, get to know the performance costs of calls in higher-level languages, know what it's doing in the background... C#/Java are your lowest-level ones, so it might pay to get more familiar with C++ to be able to do this. (Scripting languages are irritatingly high-level for me...)

Read stuff. Read http://www.joelonsoftware.com/ (lots of high-quality articles), http://www.codinghorror.com/blog/ (broader unrelated interesting stuff as well, but also some good stuff), and books - http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read.

Where are we heading? Heterogeneous computing - http://channel9.msdn.com/posts/AFDS-Keynote-Herb-Sutter-Heterogeneous-Computing-and-C-AMP. Use the same code to run on CPU and GPU.. or data from the "cloud". Parallelise stuff.



I've been programming for about 25 years now (as a primary occupation for about 15 of that). I'd recommend you re-read what w4c posted, so I just quoted the entire thing. Seriously - read it again. XD
User avatar
Mithrandir
 
Posts: 11071
Joined: Fri Jun 27, 2003 12:00 pm
Location: You will be baked. And then there will be cake.

Postby Warrior4Christ » Fri Jun 24, 2011 7:20 pm

Mithrandir (post: 1486991) wrote:I've been programming for about 25 years now (as a primary occupation for about 15 of that). I'd recommend you re-read what w4c posted, so I just quoted the entire thing. Seriously - read it again. XD

Haha, thanks.

Atria35 (post: 1486883) wrote:The jobs she had keep going overseas, and there's no stopping it. It frustrates her to no end. Of course, her specialty is programming for insurance companies, always has been, so I'm not sure whether that's across the board or not. I suppose I could ask her to give you some insight if you'd care for it?

I would say in general, there's still a lot of demand for software developers, and there'll always be demand for good ones. Just a quick search...
http://stackoverflow.com/questions/3197932/what-kinds-of-software-development-are-in-high-demand
http://www.bcs.org/content/conWebDoc/39052
http://www.workandliveabroad.com/article_item.php?articleid=309
http://www.wikihow.com/Become-a-Software-Engineer
Everywhere like such as, and MOES.

"Expect great things from God; attempt great things for God." - William Carey
User avatar
Warrior4Christ
 
Posts: 2045
Joined: Sat Aug 20, 2005 8:10 pm
Location: Carefully place an additional prawn on the barbecue

Postby Atria35 » Fri Jun 24, 2011 7:52 pm

Maybe so, but not in her sector, and she's an expert on the older languages- not so much on the new ones. Again, she's been a programmer for about 40 years. But she's also facing age discrimination (she's really only a few years from being eligible for retirement) and there aren't jobs in our area specifically, so that does factor into things.
User avatar
Atria35
 
Posts: 6295
Joined: Sat Mar 20, 2010 7:30 am

Postby Mithrandir » Fri Jun 24, 2011 8:03 pm

Atria35 (post: 1487042) wrote:Maybe so, but not in her sector, and she's an expert on the older languages- not so much on the new ones. Again, she's been a programmer for about 40 years. But she's also facing age discrimination (she's really only a few years from being eligible for retirement) and there aren't jobs in our area specifically, so that does factor into things.


This is a major issue with the computing industry in general - keep your skills up or get left behind. I don't have kids, and it's all I can do to just TRY and keep up with the knowledge. I can't imagine how tough it would be if I didn't have the free time I have. Maybe if I worked some place where we could be on the cutting edge, but not so much where I am here.
User avatar
Mithrandir
 
Posts: 11071
Joined: Fri Jun 27, 2003 12:00 pm
Location: You will be baked. And then there will be cake.

Postby Atria35 » Sat Jun 25, 2011 5:14 am

^ Yes, I know that having my brother and I didn't help her being able to keep up her skills. However, she also had worked at the same company for almost 25 years, and even after my brother and I were grown she had literally no free time to do so- they had her working full days and then overtime a few days a week plus most weekends. When could she have gone out to study the new languages? It was a catch-22 for her in that regard.
User avatar
Atria35
 
Posts: 6295
Joined: Sat Mar 20, 2010 7:30 am

Postby blkmage » Sat Jun 25, 2011 7:35 am

I don't know if that's such a huge concern for people entering the industry at this point. Tech companies today are generally really good at cultivating an environment where people are encouraged to keep on learning and providing the time and resources to do so. And I'd say that demonstrated willingness and ability to learn is the thing that employers are looking for more than specific technical knowledge. Obviously, you should seek to have a strong foundation in the basics like W4C mentioned (and they will ask you about these things to make sure you know them), but I wouldn't worry too much if you don't know the ins and outs of some particular field yet.

On that note, you can afford to be a bit more selective with who your employer will be. Check out their corporate culture and see if you fit with the people there. Definitely make sure that they're the type of people that encourage learning more about the field. One of the most enjoyable things about being in this field is that you can always be surrounded by people who love what they're doing and that feeling can be infectious and motivating.

I'll offer a counterpoint too. While I agree it's important to know about low-level details, I think it's more important to have a general understanding of what's going on than drilling it in to your head in fine detail, unless you're going to be working on hardware or things where performance really matters. I also agree that learning C and C++ are probably important, but in the sense that you should know several languages, what they're good for, and when to use them.
User avatar
blkmage
 
Posts: 4529
Joined: Mon May 03, 2004 5:40 pm

Postby Dante » Sat Jun 25, 2011 12:52 pm

There is some really excellent stuff to digest here - and I'm glad that I have some more work cut out for me. Just to show where I'm going, while I'm considering the job market as a whole, my first choice at the current time would be Go Daddy. It's here in the valley, gains top ranks for employee treatment and it turns out that I may actually know some people inside.

I printed out the MSDN data sheets for some of the structures I'm less familiar with and I will be using these, along with a few good text-books on hand to get more acquainted with their use by studying and more importantly coding them. Given my objective I am basically hoping to focus on C#.NET and ASP.NET.

For the most part, the culture of my educational background has been along the following lines: "A faster program created with low-level language has value, but for most applications in the modern computing environment, development costs far outweigh computational ones. Therefore, software that's easier to code and maintain is more valuable then software that's faster but is difficult to code and maintain." Can't really say how well this applies in practice though on large scale problems.

At NAU, I was given more of a hybrid approach - where I was taught to use Python to code the computationally small problems and then use a call to a C-routine for those portions of the program that were computationally intense (like double while loops over massive arrays).

At the moment, outside of learning more about my weak-spots in the languages themselves, I have also been diving into Sotware Engineering by Sommerville. A lot of places are asking for an understanding of the "Agile Development Process" and this eventually leads into an understanding of this methodology (but is still chatting about iterative and waterfall methods at the current time). I've also made a habit of just coding what I think in the past, so I'm studying up UML so that I can better document and disseminate an understanding of my code to others. Also W4C may or may not be happy to know that I'm working through Introduction To Algorithms, by Cormen, Leiserson and Rivest. I'm considering just skimming chapters 1-4, with a deeper emphasis on 4 because I'm already familiar with the mathematics*. If there was a clearer text out there on the subject matter, I'd definitely be interested in learning about it.

Finally - although it seems un-related, I grabbed a small easy-read textbook on working with groups (did I mention I apparently love to read textbooks ^_^). Throughout college, everything was always about building single monolithic programs on your own. Even in the lab where I worked, I was the only programmer - I taught other future users about the programs but I was responsible for planning, building and testing EVERYTHING. However, I expect that things will be quite different in the work world and I would like to be prepared for it so that I can come in with a happy view of the change instead of a negative one.

All of this sounds like a lot, and I'm not planning on making the big jump for a few more months. By the time I go for it, I have to have myself getting out of bed on my own in the morning and putting in a programming day at home for a while. That way the change isn't so drastic to my life (I'll still be living a healthy life though). Doing this should also grant me a better understanding for any questions they might have. The only way I would change this is if talking with my friends on the inside led to the revelation that I was fully ready now for an entry-level position (possible but I prefer to feel a little more solid before jumping at it on my own).

Anyways, thanks for the advice everyone, I'll be adding some webpages to my bookmarks it seems!

-Pascal

*Graduate Numerical Analysis already went through O-Notation and the various methodologies to determining an algorithms order back at NAU. Admittedly though, I never felt too impressed by it ^_^, because most of the programs there filled up my doubles in about 17-30 iterations - which on a modern computer doesn't give much incentive to program the much much longer but slightly faster version that completes it in 5-12. Both programs will finish even the most obtuse problems I could give them before I could even blink my eyes. But if used as part of a much larger software project, where they were called over and over again, I could start to see where this would add up.
User avatar
Dante
 
Posts: 1323
Joined: Thu Mar 04, 2004 8:24 pm
Location: Where-ever it is, it sure is hot!

Postby blkmage » Sat Jun 25, 2011 1:44 pm

CLRS is fantastic. It was my go-to book for interview prep.
User avatar
blkmage
 
Posts: 4529
Joined: Mon May 03, 2004 5:40 pm

Postby Warrior4Christ » Sun Jun 26, 2011 6:34 am

Wait... just so I've got it right, "the Valley" = San Francisco?

IMHO, I've found Sommerville software processes to be somewhat less relevant to real software teams - they don't really use waterfall in a strict process type, but at my work, they kind of loosely follow the agile process, but not really by the book... it's the kind of thing they'll teach you on the job. It can't hurt to be familiar with them though. Also from what I understand, UML isn't used a whole lot either....

Pascal (post: 1487199) wrote:For the most part, the culture of my educational background has been along the following lines: "A faster program created with low-level language has value, but for most applications in the modern computing environment, development costs far outweigh computational ones. Therefore, software that's easier to code and maintain is more valuable then software that's faster but is difficult to code and maintain." Can't really say how well this applies in practice though on large scale problems.

At NAU, I was given more of a hybrid approach - where I was taught to use Python to code the computationally small problems and then use a call to a C-routine for those portions of the program that were computationally intense (like double while loops over massive arrays).

Yes, there is a high value put on maintainability in real-world software (though there may be an exception in the case of game studios...).
But knowing the low-level details while even programming in a higher-level language is definitely an advantage.
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Everywhere like such as, and MOES.

"Expect great things from God; attempt great things for God." - William Carey
User avatar
Warrior4Christ
 
Posts: 2045
Joined: Sat Aug 20, 2005 8:10 pm
Location: Carefully place an additional prawn on the barbecue

Postby mechana2015 » Sun Jun 26, 2011 9:46 am

There are actually a few 'valley' locations now, one being Washington, mostly near Redmond, and another being the area near San Francisco where companies like Apple and Oracle.
Image

My Deviantart
"MOES. I can has Sane Sig now?"
User avatar
mechana2015
 
Posts: 5025
Joined: Wed Oct 22, 2003 12:33 am
Location: Orange County

Postby Technomancer » Sun Jun 26, 2011 12:09 pm

For myself, like Mith said, the important thing is to stay current and be flexible in what you can do. To give you an idea, in the past year I've been (or am) responsible for projects ranging from the development of high-level theoretical concepts in signal processing and neuro-biology to writing middleware for a server application, to writing low-level assembly code for DSPs. So basically, I have to wear all kinds of hats in my current job. And I still really, really need to spend more time keeping up with both the technology as well as the relevant literature.

Overall, I think that the important skills to develop going forward for someone like yourself would involve first and foremost, software engineering / team development. A solid understanding of C++ would also be *extremely* valuable if you wish to stay within your particular specialty (Far too many grad students stick with using MATLAB for their projects, and forget to develop expertise in languages used for actual implementation). I also recommend enlarging your theoretical base to include data mining, machine learning, and if possible optimization theory.

On a more practical side, C++, Java (esp. for Android) as well as .NET will be most useful in terms of working as a software developer.
The scientific method," Thomas Henry Huxley once wrote, "is nothing but the normal working of the human mind." That is to say, when the mind is working; that is to say further, when it is engaged in corrrecting its mistakes. Taking this point of view, we may conclude that science is not physics, biology, or chemistry—is not even a "subject"—but a moral imperative drawn from a larger narrative whose purpose is to give perspective, balance, and humility to learning.

Neil Postman
(The End of Education)

Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that my ignorance is just as good as your knowledge

Isaac Aasimov
User avatar
Technomancer
 
Posts: 2379
Joined: Fri Jun 13, 2003 11:47 am
Location: Tralfamadore

Postby Dante » Sun Jun 26, 2011 11:54 pm

" wrote:Wait... just so I've got it right, "the Valley" = San Francisco?


*Smacks head* Doh! No, not San Francisco XD, that shows I've lived in Arizona too long. Whenever they talk about "The Valley" out here, they're reffering to the area around Phoenix. Because it's essentially shaped like a giant bowl surrounded by several mountains, it's referred to as the valley of the sun, or the valley for short. We can't call it Phoenix, because it contains several massive cities side by side. Suprise, Chandler, Glendale, Peoria, Phoenix, Scottsdale, Mesa... cities I don't even know the names of are all connected in one massive unit. Sorry, I can easily see where there could be a misunderstanding there.

Go Daddy for instance is in Scottsdale, or about a good 10 miles away at least of solid city.
User avatar
Dante
 
Posts: 1323
Joined: Thu Mar 04, 2004 8:24 pm
Location: Where-ever it is, it sure is hot!

Postby Technomancer » Mon Jun 27, 2011 6:22 am

blkmage (post: 1486394) wrote: I'm actually going to be starting grad school in September, doing theoretical CS.


Out of curiosity, what particular topic will you be studying?
The scientific method," Thomas Henry Huxley once wrote, "is nothing but the normal working of the human mind." That is to say, when the mind is working; that is to say further, when it is engaged in corrrecting its mistakes. Taking this point of view, we may conclude that science is not physics, biology, or chemistry—is not even a "subject"—but a moral imperative drawn from a larger narrative whose purpose is to give perspective, balance, and humility to learning.

Neil Postman
(The End of Education)

Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that my ignorance is just as good as your knowledge

Isaac Aasimov
User avatar
Technomancer
 
Posts: 2379
Joined: Fri Jun 13, 2003 11:47 am
Location: Tralfamadore

Postby blkmage » Mon Jun 27, 2011 8:31 am

Formal language and automata theory
User avatar
blkmage
 
Posts: 4529
Joined: Mon May 03, 2004 5:40 pm

Postby Technomancer » Mon Jun 27, 2011 10:38 am

Okay, so pretty hardcore on the theory side! Moreso than a great deal of potential CS or ECE master's topics for that matter. My own research was geared towards more immediately practical problems (which caused some clashes with my supervisor at the time).
The scientific method," Thomas Henry Huxley once wrote, "is nothing but the normal working of the human mind." That is to say, when the mind is working; that is to say further, when it is engaged in corrrecting its mistakes. Taking this point of view, we may conclude that science is not physics, biology, or chemistry—is not even a "subject"—but a moral imperative drawn from a larger narrative whose purpose is to give perspective, balance, and humility to learning.

Neil Postman
(The End of Education)

Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that my ignorance is just as good as your knowledge

Isaac Aasimov
User avatar
Technomancer
 
Posts: 2379
Joined: Fri Jun 13, 2003 11:47 am
Location: Tralfamadore

Postby Mithrandir » Thu Jun 30, 2011 3:31 pm

Wow... TM jumped in on the discussion - sweet! XD

I did a bit of FSA/TM stuff myself. That was fun, but it tends to be less practical than one might expect - unless you've got a sufficiently large problem. For simple things, I tend to just default to switch/case statements and let it go.
User avatar
Mithrandir
 
Posts: 11071
Joined: Fri Jun 27, 2003 12:00 pm
Location: You will be baked. And then there will be cake.


Return to Computing and Links

Who is online

Users browsing this forum: No registered users and 245 guests