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

ArtOfWarfare

macrumors G3
Original poster
Nov 26, 2007
9,704
6,296
I've been learning C and Obj-C and Cocoa and Cocoa Touch for about half a decade now, while and a little before I was in high school.

I'm now looking to get an internship at any programming company (I've applied to about a dozen.) I've been rejected from 2 jobs now, each for not knowing enough about other languages.

So, my question is, what languages should I start learning to get a job, and how should I start learning them? I figure I should learn them one at a time, so what order should I learn them in? Just a sample list of languages/technologies it seems companies want me to know:
- C++
- Python
- Java
- JavaScript
- Shell
- Bash
- Ruby
- SQL

I feel really over my head here with such a long list... Any suggestions on where to start, how to start, and how long to spend on each one?
 
There's actually another issue at play here. If you start another lang at this point, you may NEVER make it. As a lang becomes older, they want more years in it.

Example: Look at the ads for ObjC/iPhone dev... most want 1~2 years ... next year they'll want 2~3 years... and so on... after a while they'll want 5~7 years.

Look at the ads for older langs, C++, .Net ... The number of years they want it usually 1 or 2 less than the age of the lang.

If you start any 'older' lang at this time, you will never have the number of years needed.

I interviewed for a job for a lang that wasn't released yet, I was part of the beta test team for CA. During the job interview, they pointed out they wanted a few years exp in the lang... I didn't say anything, but NOBODY had that... the product did exist yet!

Recruiters just look at numbers and keywords, nothing more, you either have the numbers or you don't.

You should base your answer on how old the product is and if you think it will be here in a few years. Are they updating the product, does it have a vital position and huge support? It may be hot today and cold next year. Remember, Visual FoxPro was red hot once... It's been ice cold for years...
 
OP sometimes companies have training programs that will take people, sometimes without computer science backgrounds but only a degree and train you to develop on their systems. I just recently interviewed for such a position.

This could be a great way of getting your first programming job.

I too ran in to the same issue of not getting hired anywhere. I recently graduated from college and had a few sample games, a few sample OpenGL projects and a Maya plugin I wrote in my portfolio but I was unable to pass programming tests because they asked things I simply didn't have experience in, or haven't used in years.
 
Find a company that values your current skill set. Mobile app companies rarely care about how many server side languages you know. And vice versa.
 
These are student positions I'm applying for. They understand that I haven't been using the languages for 10+ years.

Example, I interviewed for an internship at Nokia. They said "the languages you know don't really match what we're looking for... But you know an Object Oriented Language and C so we'll give you a shot with C++ questions..."

I tried. Some I got. Many I didn't. Ultimately I got an email back that said something like, "we like your attitude. Your knowledge is a bit too weak, though. Apply for this position again soon, when you can answer more of our questions."

The questions were on things like memory management in C++. I don't really know C++ as an OO language (all I know is how to make procedural things... And even then only sort of. I have a single .mm file in a game I'm working on because the best MIDI features seem to all seem to require C++ to access.)

The other interview I tried for was similar. They're looking for basic knowledge of languages I don't know about. And it's programming guys interviewing me. Not general hiring people.

So, back on topic, what order should I try learning these languages in? I've still got 10 copies of my resumes out there and I'd like to be better prepared for my next interview on the basics of a language I haven't used (yet.)
 
These are student positions I'm applying for. They understand that I haven't been using the languages for 10+ years.

Example, I interviewed for an internship at Nokia. They said "the languages you know don't really match what we're looking for... But you know an Object Oriented Language and C so we'll give you a shot with C++ questions..."

I tried. Some I got. Many I didn't. Ultimately I got an email back that said something like, "we like your attitude. Your knowledge is a bit too weak, though. Apply for this position again soon, when you can answer more of our questions."

The questions were on things like memory management in C++. I don't really know C++ as an OO language (all I know is how to make procedural things... And even then only sort of. I have a single .mm file in a game I'm working on because the best MIDI features seem to all seem to require C++ to access.)

The other interview I tried for was similar. They're looking for basic knowledge of languages I don't know about. And it's programming guys interviewing me. Not general hiring people.

So, back on topic, what order should I try learning these languages in? I've still got 10 copies of my resumes out there and I'd like to be better prepared for my next interview on the basics of a language I haven't used (yet.)

Honestly I'd suggest sticking with C++ to learn more about its object oriented concepts. Its super important.

For example the interview I had was for a Java position, the company knew I didn't know Java but they asked a lot of object oriented questions, like explain inheritance, what are the different types of access modifiers, describe an object, describe the difference between class methods and instance methods, as well as the difference between class variables and instance variables.

Even though I don't know Java, I knew the answers to every question except a Java specific one where they asked, "In Java, what does everything inherit from?" I used Objective-C as an example that everything inherits from NSObject which was perfectly acceptable to them.

Have you ever created classes? If so you are beginning to use OOP concepts when you instantiate that class.
 
It is very common for coding jobs to be based on a checklist of skills. If you don't have the list of skills they simply don't hire you. It's very short-sighted but is often the case.

If you want a particular job then you need to have what they're looking for.

OTOH, I often see job ads that are ridiculous or impossible. 5 -7 yrs iOS development required. Junk like that. Other times it's such a laundry list of requirements that either there's no one in the known universe who has all the requirements or if there were such a person the company couldn't afford them.

Among the languages you list Java and C++ are the only "real" programming languages. The others are scripting languages or database languages. Assuming that there's some company interested in it I would prefer learning Java over C++. I think Java is easier and maybe more widely used. C++ is certainly a professional language and you'll probably learn it eventually but it will take you months or really years to become competent. (actually no one is really competent in C++) Having learned C++ myself, I'd rather learn Java.

OTOH, if your goal is to learn enough C++ to pass an oral test on the subject you might be able to learn that much in a few weeks.
 
I'd opt for C++ if you want into getting some Game programming eventually going on, or maybe Java, which OTOH gets you set for Android too..
I got lucky myself, and found 2ce a company that purely bases itself on iOS programming and only that, so I didn't need any other skillsets, since I never had an higher education, but they appreciate my knowledge about iOS, and that's why I got these jobs.
Maybe you should go for that?
We have 4 interns starting next week for iOS purely, bigger companies are mostly not worth it, their HR management is sadly enough to low to see the potential.
 
Depends a bit on where you are based. Here in Europe it is all about Java these days. So I would rather learn Java and then C++ if you just want to get into the industry.

After you learnt Java I would check out C++.
but it all depends on your wants and needs.

If you manage to learn both you will be set for life.
 
The general consensus seems to be that C++ should be the next language I learn, followed by Java?

How should I go about learning either of these languages?
 
In my opinion, if you know Objective-C, you shouldn't go learning C++ or Java. Talk about re-learning what you already know. Just learn the advanced OO concepts in Objective-C where you are familiar with the language already :

- Virtual classes
- polymorphism
- inheritance

You should definately broaden your horizons though. There is more to programming then OO. I suggest you do learn a database query/trigger language. Look into Postgres, they support PL/SQL and SQL. Those are both going to come in very handy in enterprise and web application development shops.

Then there's scripting, which is usually just procedural/OO languages interpreted at a high level. There are however a few tricks to scripting that you don't find in compiled languages, debugging them is different, running them is different (some script languages will just run fine until they encounter a condition where there's a bug, since they don't actually pre-compile the code, they just execute the instructions in place).

With a Mac, you have the best scripting environnements available to you. You should definately give Perl a spin. It's quite easy to pick up, impossible to master. It can do OO, procedural, has tons of modules you need to figure out (using CPAN and not using CPAN), etc..
 
Yeah I guess the "check me I make iPhone apps" line does not go down so well at Nokia or Google :D It does work at smaller, older software houses where they are struggling to port some dreadful Visual Basic/Access DB beast over to .NET/SQL.

I would plan your pitch differently for each post you apply for. It does take more time but it usually pays off. Read up on what they are asking for and try to find out what projects you would be working on beforehand.

Job hunting is a nightmare so just try and learn from each encounter and accept that you have to put some down to experience.

Example, I interviewed for an internship at Nokia. They said "the languages you know don't really match what we're looking for...
 
You don't say what types of jobs these are. Corporate IT, gaming, mobile, web, etc. What you are targeting will direct your next move.

In the corporate world Microsoft rules, so I'd look into C#, .Net, and SQL Server. Mono on your Mac may be a good substitute along with Postgres or MYSql to learn SQL and database concepts.

Gaming is a bit of mystery to me, but I'd look at the open source gaming libraries and build something simple with them to start, probably basing my code on C++. Unity 3D looks very interesting, but that would be considered a niche.

For mobile there are really only two hot choices. iOS and Android. You have the first one covered. :)

Web stuff is all over the map. The hot languages were Perl and PHP, but the Ruby on Rails kit has gained momentum. Also, knowing 3rd party libraries such as JQuery is ofter asked for.

Knowing an OS scripting language can be handy. As I recall, OS X defaults to bash. I found it difference from using csh. I've also used Perl for that level of interaction, mainly due to its text handling capabilities.

C++ has a strong foothold in many areas, so it wouldn't be terrible to know it. Personally I didn't like it when was learning it and I never ended up using in my corporate jobs.

I would figure out the direction I want my career to go and base my learning on that domain.

If you don't know what career direction you want, keep in mind that most programmers are doing corporate IT work. They are writing text screens that allow for data entry & editing of such things as customers and their orders, financial transactions, tracking, and writing reports. Lots and lots of reports. The job ads for that area are also usually unrealistic too.
 
Last edited:
From the sound of it, I guess your in Europe somewhere? I'd watch what the current demand is. Right now in bay area of California, there's a pretty strong demand for iOS/ObjC .Net / C++ / C#.

I see jobs for iOS/ObjC every day.
 
The general consensus seems to be that C++ should be the next language I learn, followed by Java?

I disagree. I think you should learn basicSQL. If you don't know it, then it's a sufficiently different language and skill-set, it'll give you a very different perspective. Java and C++ are both sorta like Objective-C (within limits).

Also, a lot of big-data (and even small-data) databases are frequently accessed using SQL, often with different dialects (and a lot of the grief of SQL is related to the dialectical differences).

The actual mechanism of database access can vary, and the exposure of SQL can vary. It can be sorta hidden, like in Core Data. It can be mostly visible, like in JDBC. And all things in between.

Furthermore, you can play around with SQL using nothing but the 'sqlite3' command and the Terminal command-line. Who knows, you might even invent something useful, and you can somehow meld sqlite3 at the command-line with some shell scripting (another useful and orthogonal-to-C-like skill-set).

Oh, and a moderately skillful reading knowledge of SQL in general is useful. Like in this thread.
 
To answer some questions some of you had, I applied mostly to jobs with "Software Engineer" somewhere in the description. Actual jobs that fit that description ranged from game designer to IT to app programmer to software engineer.

I'm in Boston (Nokia has a place where they do development work just outside of the city,) but I applied to any job that:
1 - my school had a history of sending interns to
2 - the position involved "software engineering"
and 3 - the job was in the US

While plenty of people are offering suggestions on what to learn, I don't see much in the way of suggestions on how to learn (or how deep I should learn... should I make a "Hello World"? Or do I need to do more to know the basics? Do I need to make a calculator? What do you even make with SQL? I've used core data before... Some... I don't really know how SQL even works without the aid of some other language... I don't really know how to explain what I mean by that.)
 
From what you say, you are looking for "Software Engineer".

Someone step in and correct me if I'm wrong, but isn't that more 'writing to the chip' Asm/C type stuff? More in line with developing tools.

Whereas "Programmer / computer programmer" is more in line with developing apps, software, etc...

In other words Java, C#, VB... level of languages are a higher level than "Software Engineer"

I see Engineer, and I think programmable chips in .asm

Last I studied Java, it was an JIT, non-compiled script read language.


So to answer your question, _IF_ you are looking for a lower level of programing, you really need to not only know the language, but understanding whatever machine your going to work on, which probably involves convoluted API's ... I'm thinking more in line with writing an OS for a smart phone or security system, or some other device.
 
To answer some questions some of you had, I applied mostly to jobs with "Software Engineer" somewhere in the description. Actual jobs that fit that description ranged from game designer to IT to app programmer to software engineer.

I suggest you find an actual field you're interested in and stick to that. Just sending a resume everywhere that says software engineering could land you in quite the boring job you don't like, which is not to say you won't like software engineering.

The field is quite diverse. There's quite the difference between a game designer (do those even write code ?) to IT (scripting/systems administration is not programming) to all other fields a programmer might fit in (web application developement != enterprise level J2EE application development != commercial retail software developer != custom form/report software development (think SAP/Remedy/Oracle data entry/querying solutions here like CRMs)).

While plenty of people are offering suggestions on what to learn, I don't see much in the way of suggestions on how to learn (or how deep I should learn... should I make a "Hello World"? Or do I need to do more to know the basics? Do I need to make a calculator? What do you even make with SQL? I've used core data before... Some... I don't really know how SQL even works without the aid of some other language... I don't really know how to explain what I mean by that.)

Grab a book and so some exercises. SQL is complex, going off the top of my mind for the acronyms here there's DML (INSERT, UPDATE, DELETE), DDL (CREATE, ALTER statements), etc..

Then there's PL/SQL (Procedural Language/Structured Query Language) for things like triggers. Triggers are simply called in the RDBMS when a specific event occurs. Things like "On Insert", "On Update", "On Delete". They can be used to create audit trails, manipulate data inserted by an app into a specific format suited for the underlying database (switching RDBMS without having to modify the app would be a good scenario for this).

Then there's types. All RDBMS have different types.

What do you make with SQL ? A data model. If you've never done proper database modelling, you should take this time you're learning SQL to learn how to properly do it. Avoiding the pitfalls of data normalization, learning what domain keys are, relations (single-to-single, single-to-multiple, multiple-to-multiple) and how to break them down in a queryable state, but also an updateable state where you suffer no data loss when manipulating records, primary keys...

Heck, once you've got a proper data model set up, just the query part should take you quite a while to master. Just break down say a Bill into a proper relation model, it will require quite a few tables of data in order to avoid the following pitfalls :

- Modifying your user's billing or shipping address should not impact older bills by this user
- Modifying tax percentages to reflect new laws in place should not affect older bills
- Make sure you can bill unlimited items on a single bill, with the limit being set by the application, not the RDBMS (not columns like item1, item2, item3, that's just stupid...).
- Modifying an item in your database should not change older bills for such items (pricing, name, description changes should not be reflected on bills that have the older item)

Right there is tons of fun. (not). If you manage to set this up, you'll be set to have tons of fun with just SELECT (inner/outer joins..) just to get all data for 1 bill ready to push to a view (you can write out a simple Perl script with DBI to display it using print statements if you don't want to mess around, or a simple webapp using PHP to produce a HTML version of the bill).

----------

From what you say, you are looking for "Software Engineer".

Someone step in and correct me if I'm wrong, but isn't that more 'writing to the chip' Asm/C type stuff? More in line with developing tools.

Consider yourself corrected. Software engineering is just that : Engineering software. There's all kind of software out there and it all requires design/analysis/implementation/q&a/deployment. Software engineering is the global umbrella that covers all of this.
 
You should learn a different type of language than those you already know. Such as the following:

  • Erlang
  • Haskell
  • Scheme
  • Prolog

if you manage to become proficient in one of the above you'll have a great head start on your competitors. Erlang will probably be the easiest to pick up out of the four (at least it was for me).

Since you know Objective-C so well learning languages like Java, Python or Ruby should be a easy to pick up in a couple of weeks. Just run through these two (free) books and you'll understand Python and Ruby in no time.

Learn Ruby the Hard Way
Learn Python the Hard Way

A good free book on Erlang is the following:
Learn You Some Erlang for Great Good

A good free book on Haskell is the following:
Learn You a Haskell for Great Good
 
I suggest you find an actual field you're interested in and stick to that. Just sending a resume everywhere that says software engineering could land you in quite the boring job you don't like, which is not to say you won't like software engineering.

I'm not too concerned about this. At my school everyone is expected to do 3 six month long internships. We're supposed to try to get as diverse jobs within the field of our interest as possible for two reasons:

1 - It allows one to explore many of their possible job options before actually committing to one.
2 - It fattens ones resume, so that at the end of school rather than just being able to say, "I have a BS in Computer Engineering", you can say, "I have a BS in Computer Engineering, and I worked for six months at Nokia, and six months at Nest, and six months at ngmoco". (Relatively random jobs I just listed... kind of odd that they all started with n's... although I have actually sent my resume to both Nokia and Nest... I don't even know if ngmoco exists anymore.)

We've been told to expect surprising revelations about ourselves and the field while at these various jobs, things to the extent of "Wow, this job sucks a lot more than anticipated, thank goodness in under six months I'll be back in school and I'll never have to deal with this job again." or "Hey, this job is a lot cooler than I expected. I think I should look into getting a network set up while I'm here so I can easily get hired after I graduate."

90% or so of students get the internship they'll be having from July-December sometime in April or May (few students actually manage to nail their first interview and get a job offering in February or March... I've now had two interviews, and discovered it's harder than expected, thus why I'm here.)

So, in the next month or two, I need to learn as much helpful stuff as possible so I can be ready for my next interview.

Back on topic now...

Since you know Objective-C so well learning languages like Java, Python or Ruby should be a easy to pick up in a couple of weeks. Just run through these two (free) books and you'll understand Python and Ruby in no time.

Learn Ruby the Hard Way
Learn Python the Hard Way

Those look like they'll be helpful for learning quickly, thank you.

Edit: Quick question... how much of the content of those two links are free? I looked through the first 3 sections and... it appears to be everything? There doesn't seem to be any "Pay $3 now to see the rest of this section". Am I correct in thinking it's all free?
 
Edit: Quick question... how much of the content of those two links are free? I looked through the first 3 sections and... it appears to be everything? There doesn't seem to be any "Pay $3 now to see the rest of this section". Am I correct in thinking it's all free?

The HTML version of both books is completely free but if you want a PDF or eBook version of the book you'll need to pay for that.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.