Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

czeluff

macrumors 6502
Original poster
Oct 23, 2006
272
2
Hey guys,

I'm a C++ Windows dev by day, but my heart lies with OSX. Recently, I've become worried about losing my job (not because i'm a bad developer or anything, just because of the general economy).

I need to start branching out, and learning new languages. My resume does not cover enough languages out there, and to be honest, I NEVER see job postings for C++ in Utah, it's all C#.

So for the next year, I REALLY want to focus on new languages, and I'd like some help picking the four that I put under my belt. Here's what I have thus far:

Windows: C#
Mac: Objective-C
Web: Ruby on Rails
General-purpose scripting: Perl

I'd prefer to learn one for each of those categories stated above. (Learning Javascript, Ruby, AJAX, & WebObjects wouldn't be that great of an idea, since it limits my resume to being a "web guy").

Does that list above look good? Other languages up for consideration/swapping with the list above:

Python
Lisp
Javascript
Java
Django
OpenGL
PHP

Thanks everyone!
 

lee1210

macrumors 68040
Jan 10, 2005
3,182
3
Dallas, TX
Are there Mac or iPhone job postings in your area? If not, be prepared to set out on your own (which is possible). If you don't want to set out on your own, I don't know that Objective-C is worth investing time in just to get it on your resume. It's certainly interesting, but it doesn't sound like you're looking for a fun or academically fulfilling endeavor, but a profitable one. Plus, the syntax differences in Objective-C are fairly minor. The message pass ([x callThis]), object definition and fast enumeration are about the only non-C syntax i can think of. There is surely a few other things, but the libraries are where the action is.

The same goes for C#, the syntax will look pretty similar to C++. I can't speak as clearly to RoR, but ruby seems to be pretty clean and easy to learn syntactically. The rails piece is just configuration. Setting up the framework isn't really a developers job, though i think they should know how to use their own tools. As long as you can read docs it shouldn't be too bad. Perl... what you really need to learn is how to not write awful perl. The syntax is pretty straight forward. But learning what you can do syntactically is not sufficient, you need to learn what you shouldn't do (like large undocumented regexes). This is going to just require some experience. Maybe look around at some open source perl projects.

This is all fine and good, but my real question for you is why you think knowing the syntax for a few more languages will make you more desirable. If you are a talented developer, you should be able to pick any of these up very fast. Learning the architecture of the project in question should take much longer than language syntax. The libraries are all just reading documentation. I love to learn new languages, but just for fun, not for resume padding.

Study architecture and algorithms if you really want to make yourself a better developer. If you need to push outside of your comfort zone, and learn a new way to think about problems, functional programming would be a good way to go. LISP or Haskell would both serve this purpose. Learn to implement algorithms you think you know forward and backward functionally. Learn about tail-recursion. Learn the strengths and weaknesses this style embodies. The only language i was asked about when interviewing for this job that appeared on my resume was haskell. I am not good at haskell. I didn't say i was. But they wanted to know why i mentioned it. I explained that i felt like having FP experience was important because it helps you think about problems a different way.

Every language you list is interesting. Honestly, though, i'd rather be able to confidently state that I can learn whatever language they'd like me to use in short order than have superficial experience with what they are looking for.

Good luck!

-Lee
 

czeluff

macrumors 6502
Original poster
Oct 23, 2006
272
2
thanks

thanks for the awesome response, Lee.

I feel that learning these new languages will help flesh me into other areas of computer programming. For example, as a C++ dev, all i've done for the most part is write the import/export functions for the software we make (ie. reading/writing out to different file extensions: .ptx, .pts, .zfs, etc).

There are areas of programming where I feel I lack knowledge COMPLETELY: anything that interacts with the web, designing user-interfaces for Windows apps, etc. I feel like learning C# would give me further insight into making GUIs, Ruby for writing web-based apps, etc.

Does that make sense? I understand what you're saying, that learning languages just to learn languages isn't useful. However, not gonna lie, I feel that my college taught very little programing; everything was theoretical, and so whenever someone asks me, "Could you write a program that does X,Y, and Z", I think to myself, "I know i'm smart enough to do it, but I lack the fundamental building blocks for designing your app. I don't know how where to begin designing a UI, or how to enable the program to talk over a network."

Very frustrated by the skillset I have from leaving college...
 

lee1210

macrumors 68040
Jan 10, 2005
3,182
3
Dallas, TX
It sounds like what you're looking for is experience with different frameworks and APIs, and the languages are just a mean to that end. What you probably really want to learn, though, is design patterns, best practices, etc.

For web programming, you generally need to learn to write stateless code. I'm sure there are frameworks that will persist session data, etc. but doing that is a dangerous game.

For writing GUIs you probably really want to learn the MVC pattern of interface design. Gunning for GUIs for Windows apps specifically might not be the best approach. It will certainly give you latitude in a job search, but on any particular platform you're going to have to learn the API for whatever windowing/display system is in use. I.e. Java swing, QT, Windows Forms (for .NET), Cocoa/Interface Builder on OS X/iPhone/iPad, etc. So i feel like your real goal should be figuring out MVC, and knowing how to apply it in any of these systems. Then when you need to use another one, you just have to read the API documents to figure out how to, for example, display a button and respond when it's clicked. Knowing that by heart is not helpful. It is a waste of brain space. Knowing how to readily apply a design pattern is much more valuable, as it is reusable different places.

I guess I strive to be the guy that can program what you need, not the guy who "really knows .NET forms" or who can "debug fortran like nobody's business" (one of those is true, I am sad about which). That way if a new project gets started, you can dive right in and get comfortable the quickest, giving you a head start on those that are set in their ways. If someone needs a linux or OS X client, and someone says "I only write windows code. If i can't use Visual Studio, I won't do it", they look way worse than the person who says "I haven't done it before, but I'll see if we can have a prototype in a week or two to see if this is feasible".

I did not learn to program in college. Not at all. I have a CS degree. I wrote, perhaps, 2 large programs in school. No one showed me how to use a debugger. No one taught me to write reusable code. The professors assumed if you didn't know how to write Java, you'd learn when they gave you a project that had to be done in Java. There were projects where they said "Have at it, whatever language you want, check with a TA to make sure they have the tools to compile and run it before you turn it in". When i started working, i had to start learning from scratch. C, Fortran, JavaScript, HTML/CSS, Perl, shell, SQL, all from essentially ground zero. I had written a little C, but not good C. I just had to buckle down and learn them. But, again, I think most jobs expect there to be a break-in/training period. As long as you can get comfortable in a reasonable amount of time, you not knowing language X or API Y should not be an impediment to you getting a job. Yes, having something specific on your resume might get you in the door, but if you get an interview hopefully you can express your talents agnostic of knowledge of a particular language.

I'd say, learn to write some plain C and read it. Learn to write some Java or C# or other modern higher level language (Objective-C). Learn to write some functional code. You don't need to be a master, but exercise the parts of your brain you need to learn. That was what I took away from school more than anything else, was how to learn. The programming knowledge was inadequate, the theory was important but not always immediately pertinent, but problem solving and how to learn are what I value the most.

It sounds reasonable to want to have some experience in different areas, but don't spread yourself too thin. Don't put something on your resume that you don't want to answer questions about. Be honest about your experience. i think i broke languages down like:
Strong in: xxxx
Familiar with: yyyyy
Experience with: zzzz

If someone asked some hardcore question about something in the zzzz list, i would be able to honestly say that I haven't worked with that area, etc. and explain what the breadth of my experience with that technology was. I was prepared to answer/write/read/etc. things in the xxxx list, and could have done decently with things in the yyyyy list.

Again, good luck. Keep your expectations on an even keel, and persist through the frustration. In any serious endeavor there is sure to be incredibly frustrating problems, so best to prepare in advance.

-Lee
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.